diff --git a/BUILD_DATE b/BUILD_DATE index 3823105d..7196e740 100644 --- a/BUILD_DATE +++ b/BUILD_DATE @@ -1 +1 @@ -2026-03-12T21:44:42Z +2026-03-13T07:54:39Z diff --git a/CHANGELOG.md b/CHANGELOG.md index d219efcb..b962b302 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,63 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 +## v0.126.0 (2026-03-13) + +### Documentation + +- **changelog**: Update changelog [skip ci] + ([`fd4ea5c`](https://github.com/christianlouis/DocuElevate/commit/fd4ea5c71b4ac3204bb9cf21b115333c0db24927)) + +- **changelog**: Update changelog [skip ci] + ([`95af9ff`](https://github.com/christianlouis/DocuElevate/commit/95af9ffe5e493470caaf09dc784ba12f5d19a8e7)) + +- **changelog**: Update changelog [skip ci] + ([`ca88d7d`](https://github.com/christianlouis/DocuElevate/commit/ca88d7d4250b3b9ee384d05b53d854056c5eccb4)) + +- **routing**: Add routing rules documentation to API.md and UserGuide.md + ([`e95693d`](https://github.com/christianlouis/DocuElevate/commit/e95693d684076ef87c436840caf2c5aa4581456d)) + +### Features + +- **routing**: Add conditional routing rules for document-to-pipeline assignment + ([`40d56f0`](https://github.com/christianlouis/DocuElevate/commit/40d56f0396b42754954cea03e4efa2e442121313)) + +### Refactoring + +- **routing**: Address code review feedback - simplify list filter, fix docs example + ([`1e5e35a`](https://github.com/christianlouis/DocuElevate/commit/1e5e35a26af47db925f77514a3bfdbccf417c0f5)) + + +## Unreleased + +### Documentation + +- **changelog**: Update changelog [skip ci] + ([`95af9ff`](https://github.com/christianlouis/DocuElevate/commit/95af9ffe5e493470caaf09dc784ba12f5d19a8e7)) + +- **changelog**: Update changelog [skip ci] + ([`ca88d7d`](https://github.com/christianlouis/DocuElevate/commit/ca88d7d4250b3b9ee384d05b53d854056c5eccb4)) + + +## Unreleased + +### Documentation + +- **changelog**: Update changelog [skip ci] + ([`ca88d7d`](https://github.com/christianlouis/DocuElevate/commit/ca88d7d4250b3b9ee384d05b53d854056c5eccb4)) + + +## Unreleased + + +## v0.125.1 (2026-03-12) + +### Bug Fixes + +- **i18n**: Sync de.json keys with en.json — add 26 missing keys to en.json and all language files + ([`d3349e6`](https://github.com/christianlouis/DocuElevate/commit/d3349e649ea1ef01d8afc62d9a92d00ba4aac3f8)) + + ## v0.125.0 (2026-03-12) ### Bug Fixes diff --git a/GIT_SHA b/GIT_SHA index a8f8fefa..17bf353e 100644 --- a/GIT_SHA +++ b/GIT_SHA @@ -1 +1 @@ -4345d51 +603bcaa diff --git a/RUNTIME_INFO b/RUNTIME_INFO index cfb8a4a7..48337976 100644 --- a/RUNTIME_INFO +++ b/RUNTIME_INFO @@ -1,10 +1,10 @@ DocuElevate Build Information ============================== -Version: 0.125.0 -Build Date: 2026-03-12T21:44:42Z -Git Commit: 4345d5128fe1d33f1342d05138f3d01c903bac0b -Git Short SHA: 4345d51 +Version: 0.126.0 +Build Date: 2026-03-13T07:54:39Z +Git Commit: 603bcaad6a06371ad4cb929672fd653c4d4e6cf0 +Git Short SHA: 603bcaa Git Branch: main -Commit Date: 2026-03-12T22:44:13+01:00 -Build Timestamp: 2026-03-12T21:44:42Z +Commit Date: 2026-03-13T08:54:20+01:00 +Build Timestamp: 2026-03-13T07:54:39Z ============================== diff --git a/VERSION b/VERSION index b1fa68e5..bcc9c284 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.125.0 +0.126.0 diff --git a/app/api/__init__.py b/app/api/__init__.py index 9936d7f4..25344332 100644 --- a/app/api/__init__.py +++ b/app/api/__init__.py @@ -34,6 +34,7 @@ from app.api.plans import router as plans_router from app.api.process import router as process_router from app.api.profile import router as profile_router from app.api.queue import router as queue_router +from app.api.routing_rules import router as routing_rules_router from app.api.saved_searches import router as saved_searches_router from app.api.scheduled_jobs import router as scheduled_jobs_router from app.api.search import router as search_router @@ -85,6 +86,7 @@ router.include_router(onboarding_router) router.include_router(billing_router) router.include_router(pipelines_router) router.include_router(profile_router) +router.include_router(routing_rules_router) router.include_router(imap_accounts_router) router.include_router(imap_profiles_router) router.include_router(integrations_router) diff --git a/app/api/routing_rules.py b/app/api/routing_rules.py new file mode 100644 index 00000000..98162c09 --- /dev/null +++ b/app/api/routing_rules.py @@ -0,0 +1,468 @@ +"""Routing rules API endpoints. + +Provides full CRUD for pipeline routing rules that conditionally assign +documents to pipelines based on document properties (file type, category, +metadata fields, size, etc.). + +Rules are evaluated in ascending ``position`` order. The first rule whose +condition matches wins and routes the document to the specified target +pipeline. If no rule matches, the caller falls back to the owner's (or +system) default pipeline. +""" + +import logging +from typing import Annotated, Any + +from fastapi import APIRouter, Body, Depends, HTTPException, Request, status +from pydantic import BaseModel, Field +from sqlalchemy.orm import Session + +from app.auth import require_login +from app.database import get_db +from app.models import Pipeline, PipelineRoutingRule +from app.utils.routing_engine import ( + BUILTIN_FIELDS, + VALID_OPERATORS, + _evaluate_condition, + _resolve_field, +) + +logger = logging.getLogger(__name__) + +router = APIRouter(prefix="/routing-rules", tags=["routing-rules"]) + +DbSession = Annotated[Session, Depends(get_db)] + +MAX_RULES_PER_OWNER = 100 +MAX_NAME_LENGTH = 255 + + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + + +def _get_user_id(request: Request) -> str: + """Return the authenticated user identifier.""" + user = getattr(request.state, "user", None) + if user: + if isinstance(user, dict): + return user.get("sub", user.get("email", "anonymous")) + return getattr(user, "sub", getattr(user, "email", "anonymous")) + return "anonymous" + + +def _is_admin(request: Request) -> bool: + """Return ``True`` when the current user has admin privileges.""" + user = getattr(request.state, "user", None) + if not user: + return False + groups = user.get("groups", []) if isinstance(user, dict) else getattr(user, "groups", []) + return "admin" in groups + + +def _can_access_rule(rule: PipelineRoutingRule, user_id: str, admin: bool) -> bool: + """Check whether the user is allowed to read this rule.""" + if admin: + return True + return rule.owner_id == user_id + + +def _can_write_rule(rule: PipelineRoutingRule, user_id: str, admin: bool) -> bool: + """Check whether the user is allowed to modify this rule.""" + if rule.owner_id is None: + return admin + return rule.owner_id == user_id + + +def _validate_field(field: str) -> None: + """Raise 422 if the field name is invalid.""" + if field in BUILTIN_FIELDS: + return + if field.startswith("metadata.") and len(field) > len("metadata."): + return + raise HTTPException( + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + detail=( + f"Invalid field '{field}'. " + f"Valid built-in fields: {sorted(BUILTIN_FIELDS)}. " + "For AI metadata, use 'metadata.'." + ), + ) + + +def _validate_operator(operator: str) -> None: + """Raise 422 if the operator is not recognised.""" + if operator not in VALID_OPERATORS: + raise HTTPException( + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + detail=f"Invalid operator '{operator}'. Valid operators: {sorted(VALID_OPERATORS)}", + ) + + +def _serialize_rule(rule: PipelineRoutingRule) -> dict[str, Any]: + """Serialize a routing rule to a JSON-compatible dict.""" + return { + "id": rule.id, + "owner_id": rule.owner_id, + "name": rule.name, + "position": rule.position, + "field": rule.field, + "operator": rule.operator, + "value": rule.value, + "target_pipeline_id": rule.target_pipeline_id, + "is_active": rule.is_active, + "created_at": rule.created_at.isoformat() if rule.created_at else None, + "updated_at": rule.updated_at.isoformat() if rule.updated_at else None, + } + + +# --------------------------------------------------------------------------- +# Pydantic request models +# --------------------------------------------------------------------------- + + +class RoutingRuleCreate(BaseModel): + """Request body for creating a routing rule.""" + + name: str = Field(..., min_length=1, max_length=MAX_NAME_LENGTH) + field: str = Field(..., min_length=1, max_length=255) + operator: str = Field(..., min_length=1, max_length=50) + value: str = Field(..., max_length=1024) + target_pipeline_id: int + position: int | None = None + is_active: bool = True + + +class RoutingRuleUpdate(BaseModel): + """Request body for updating a routing rule.""" + + name: str | None = Field(None, min_length=1, max_length=MAX_NAME_LENGTH) + field: str | None = Field(None, min_length=1, max_length=255) + operator: str | None = Field(None, min_length=1, max_length=50) + value: str | None = Field(None, max_length=1024) + target_pipeline_id: int | None = None + position: int | None = None + is_active: bool | None = None + + +class RoutingRuleEvaluateRequest(BaseModel): + """Request body for dry-run rule evaluation.""" + + file_type: str | None = None + filename: str | None = None + size: int | None = None + document_type: str | None = None + metadata: dict[str, Any] | None = None + + +# --------------------------------------------------------------------------- +# Endpoints +# --------------------------------------------------------------------------- + + +@router.get("") +@require_login +def list_routing_rules(request: Request, db: DbSession) -> list[dict[str, Any]]: + """List all routing rules accessible by the current user. + + Returns the user's own rules plus any system-wide rules (``owner_id=NULL``). + Rules are sorted by position. + """ + user_id = _get_user_id(request) + + rules = ( + db.query(PipelineRoutingRule) + .filter((PipelineRoutingRule.owner_id == user_id) | (PipelineRoutingRule.owner_id.is_(None))) + .order_by( + PipelineRoutingRule.owner_id.is_(None).asc(), + PipelineRoutingRule.position.asc(), + ) + .all() + ) + + return [_serialize_rule(r) for r in rules] + + +@router.post("", status_code=status.HTTP_201_CREATED) +@require_login +def create_routing_rule(request: Request, db: DbSession, body: RoutingRuleCreate) -> dict[str, Any]: + """Create a new routing rule for the current user. + + Returns: + The created routing rule. + + Raises: + HTTPException 422: If the field or operator is invalid. + HTTPException 404: If the target pipeline does not exist. + HTTPException 409: If the maximum number of rules is reached. + """ + user_id = _get_user_id(request) + + _validate_field(body.field) + _validate_operator(body.operator) + + # Verify target pipeline exists and is accessible. + pipeline = db.query(Pipeline).filter(Pipeline.id == body.target_pipeline_id).first() + if not pipeline: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail=f"Target pipeline {body.target_pipeline_id} not found", + ) + + # Enforce per-owner limit. + count = db.query(PipelineRoutingRule).filter(PipelineRoutingRule.owner_id == user_id).count() + if count >= MAX_RULES_PER_OWNER: + raise HTTPException( + status_code=status.HTTP_409_CONFLICT, + detail=f"Maximum of {MAX_RULES_PER_OWNER} routing rules per user reached", + ) + + # Auto-assign position if not specified. + position = body.position + if position is None: + max_pos = ( + db.query(PipelineRoutingRule.position) + .filter(PipelineRoutingRule.owner_id == user_id) + .order_by(PipelineRoutingRule.position.desc()) + .first() + ) + position = (max_pos[0] + 1) if max_pos else 0 + + rule = PipelineRoutingRule( + owner_id=user_id, + name=body.name.strip(), + position=position, + field=body.field, + operator=body.operator, + value=body.value, + target_pipeline_id=body.target_pipeline_id, + is_active=body.is_active, + ) + + try: + db.add(rule) + db.commit() + db.refresh(rule) + except Exception: + db.rollback() + logger.exception("Failed to create routing rule for user=%s", user_id) + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail="Failed to create routing rule", + ) + + logger.info("Routing rule created: id=%s, user=%s", rule.id, user_id) + return _serialize_rule(rule) + + +@router.get("/operators") +def list_operators() -> dict[str, Any]: + """Return the list of supported operators and fields. + + This is a public endpoint (no auth required) so that UIs can populate + dropdowns without hard-coding the catalogue. + """ + return { + "operators": sorted(VALID_OPERATORS), + "builtin_fields": sorted(BUILTIN_FIELDS), + "metadata_prefix": "metadata.", + } + + +@router.post("/evaluate") +@require_login +def evaluate_rules(request: Request, db: DbSession, body: RoutingRuleEvaluateRequest) -> dict[str, Any]: + """Dry-run rule evaluation against the provided document properties. + + Returns the first matching rule and target pipeline (if any), or + indicates that no rule matched (default pipeline will be used). + """ + user_id = _get_user_id(request) + + doc_props: dict[str, Any] = { + "file_type": body.file_type, + "filename": body.filename, + "size": body.size, + "document_type": body.document_type, + "metadata": body.metadata or {}, + } + + rules = ( + db.query(PipelineRoutingRule) + .filter( + PipelineRoutingRule.is_active.is_(True), + (PipelineRoutingRule.owner_id == user_id) | (PipelineRoutingRule.owner_id.is_(None)), + ) + .order_by( + PipelineRoutingRule.owner_id.is_(None).asc(), + PipelineRoutingRule.position.asc(), + ) + .all() + ) + + for rule in rules: + actual = _resolve_field(rule.field, doc_props) + if _evaluate_condition(actual, rule.operator, rule.value): + pipeline = db.query(Pipeline).filter(Pipeline.id == rule.target_pipeline_id).first() + return { + "matched": True, + "rule": _serialize_rule(rule), + "target_pipeline": { + "id": pipeline.id, + "name": pipeline.name, + "is_active": pipeline.is_active, + } + if pipeline + else None, + } + + return {"matched": False, "rule": None, "target_pipeline": None} + + +@router.put("/reorder") +@require_login +def reorder_routing_rules( + request: Request, + db: DbSession, + rule_ids: list[int] = Body(..., embed=True), +) -> list[dict[str, Any]]: + """Reorder the caller's routing rules. + + Expects a JSON body ``{"rule_ids": [3, 1, 2]}`` where the list + contains the IDs of the caller's rules in the desired order. + """ + user_id = _get_user_id(request) + + rules = ( + db.query(PipelineRoutingRule) + .filter(PipelineRoutingRule.owner_id == user_id, PipelineRoutingRule.id.in_(rule_ids)) + .all() + ) + + rule_map = {r.id: r for r in rules} + + if len(rule_map) != len(rule_ids) or set(rule_map.keys()) != set(rule_ids): + raise HTTPException( + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + detail="rule_ids must contain exactly the IDs of your routing rules", + ) + + for pos, rid in enumerate(rule_ids): + rule_map[rid].position = pos + + try: + db.commit() + except Exception: + db.rollback() + logger.exception("Failed to reorder routing rules for user=%s", user_id) + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail="Failed to reorder routing rules", + ) + + ordered = sorted(rules, key=lambda r: r.position) + return [_serialize_rule(r) for r in ordered] + + +@router.get("/{rule_id}") +@require_login +def get_routing_rule(rule_id: int, request: Request, db: DbSession) -> dict[str, Any]: + """Return a single routing rule by ID.""" + user_id = _get_user_id(request) + admin = _is_admin(request) + + rule = db.query(PipelineRoutingRule).filter(PipelineRoutingRule.id == rule_id).first() + if not rule or not _can_access_rule(rule, user_id, admin): + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Routing rule not found") + + return _serialize_rule(rule) + + +@router.put("/{rule_id}") +@require_login +def update_routing_rule(rule_id: int, request: Request, db: DbSession, body: RoutingRuleUpdate) -> dict[str, Any]: + """Update a routing rule. + + Only the fields present in the request body are updated. + """ + user_id = _get_user_id(request) + admin = _is_admin(request) + + rule = db.query(PipelineRoutingRule).filter(PipelineRoutingRule.id == rule_id).first() + if not rule or not _can_access_rule(rule, user_id, admin): + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Routing rule not found") + + if not _can_write_rule(rule, user_id, admin): + raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail="Cannot modify this rule") + + if body.field is not None: + _validate_field(body.field) + rule.field = body.field + + if body.operator is not None: + _validate_operator(body.operator) + rule.operator = body.operator + + if body.value is not None: + rule.value = body.value + + if body.name is not None: + rule.name = body.name.strip() + + if body.target_pipeline_id is not None: + pipeline = db.query(Pipeline).filter(Pipeline.id == body.target_pipeline_id).first() + if not pipeline: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail=f"Target pipeline {body.target_pipeline_id} not found", + ) + rule.target_pipeline_id = body.target_pipeline_id + + if body.position is not None: + rule.position = body.position + + if body.is_active is not None: + rule.is_active = body.is_active + + try: + db.commit() + db.refresh(rule) + except Exception: + db.rollback() + logger.exception("Failed to update routing rule id=%s", rule_id) + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail="Failed to update routing rule", + ) + + logger.info("Routing rule updated: id=%s, user=%s", rule_id, user_id) + return _serialize_rule(rule) + + +@router.delete("/{rule_id}", status_code=status.HTTP_204_NO_CONTENT) +@require_login +def delete_routing_rule(rule_id: int, request: Request, db: DbSession) -> None: + """Delete a routing rule.""" + user_id = _get_user_id(request) + admin = _is_admin(request) + + rule = db.query(PipelineRoutingRule).filter(PipelineRoutingRule.id == rule_id).first() + if not rule or not _can_access_rule(rule, user_id, admin): + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Routing rule not found") + + if not _can_write_rule(rule, user_id, admin): + raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail="Cannot modify this rule") + + try: + db.delete(rule) + db.commit() + except Exception: + db.rollback() + logger.exception("Failed to delete routing rule id=%s", rule_id) + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail="Failed to delete routing rule", + ) + + logger.info("Routing rule deleted: id=%s, user=%s", rule_id, user_id) diff --git a/app/models.py b/app/models.py index bb1ee985..b752fdb6 100644 --- a/app/models.py +++ b/app/models.py @@ -7,6 +7,7 @@ from app.database import Base # Foreign key constants _FILES_ID_FK = "files.id" _PIPELINES_ID_FK = "pipelines.id" +_ROUTING_RULES_TABLE = "pipeline_routing_rules" class DocumentMetadata(Base): @@ -970,3 +971,53 @@ class ComplianceTemplate(Base): applied_by = Column(String(255), nullable=True) created_at = Column(DateTime(timezone=True), server_default=func.now()) updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now()) + + +class PipelineRoutingRule(Base): + """Conditional routing rule that assigns documents to pipelines. + + Rules are evaluated in ascending ``position`` order for a given owner. + The first rule whose condition matches the document properties wins and + the document is routed to ``target_pipeline_id``. If no rule matches, + the caller falls back to the owner's (or system) default pipeline. + + Supported fields: + file_type, document_type, category, filename, size, and any key + inside the AI-extracted metadata JSON (prefixed ``metadata.``). + + Supported operators: + equals, not_equals, contains, not_contains, regex, gt, lt, gte, lte. + """ + + __tablename__ = _ROUTING_RULES_TABLE + + id = Column(Integer, primary_key=True, index=True) + + # Owner of this rule. NULL = system-wide rule (admin only). + owner_id = Column(String, nullable=True, index=True) + + # Human-readable label for the rule. + name = Column(String(255), nullable=False) + + # Evaluation order (lower = earlier). First matching rule wins. + position = Column(Integer, nullable=False, default=0) + + # The document property to evaluate. + # Built-in: file_type, document_type, category, filename, size. + # For AI metadata fields, use the "metadata." prefix. + field = Column(String(255), nullable=False) + + # Comparison operator. + operator = Column(String(50), nullable=False) + + # Value to compare against (always stored as text; cast as needed). + value = Column(String(1024), nullable=False) + + # Target pipeline when the condition matches. + target_pipeline_id = Column(Integer, ForeignKey(_PIPELINES_ID_FK), nullable=False, index=True) + + # Soft-disable without deleting. + is_active = Column(Boolean, nullable=False, default=True) + + created_at = Column(DateTime(timezone=True), server_default=func.now()) + updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now()) diff --git a/app/utils/routing_engine.py b/app/utils/routing_engine.py new file mode 100644 index 00000000..b65c3696 --- /dev/null +++ b/app/utils/routing_engine.py @@ -0,0 +1,223 @@ +"""Routing engine for conditional document-to-pipeline assignment. + +Evaluates a set of :class:`PipelineRoutingRule` rows against document +properties and returns the first matching target pipeline (if any). + +Supported document fields +------------------------- +* ``file_type`` – MIME type of the file (e.g. ``application/pdf``) +* ``filename`` – original filename +* ``size`` – file size in bytes (numeric comparison) +* ``document_type`` – AI-classified document type (e.g. ``Invoice``) +* ``category`` – alias for ``document_type`` +* ``metadata.`` – arbitrary key inside the AI-extracted JSON metadata + +Supported comparison operators +------------------------------ +* ``equals`` / ``not_equals`` +* ``contains`` / ``not_contains`` (substring match, case-insensitive) +* ``regex`` (Python ``re`` full-match, case-insensitive) +* ``gt`` / ``lt`` / ``gte`` / ``lte`` (numeric comparison) +""" + +import json +import logging +import re +from typing import Any + +from sqlalchemy.orm import Session + +from app.models import Pipeline, PipelineRoutingRule + +logger = logging.getLogger(__name__) + +# Operators recognised by the engine. +VALID_OPERATORS: frozenset[str] = frozenset( + { + "equals", + "not_equals", + "contains", + "not_contains", + "regex", + "gt", + "lt", + "gte", + "lte", + } +) + +# Fields that are resolved directly from the FileRecord. +BUILTIN_FIELDS: frozenset[str] = frozenset( + { + "file_type", + "filename", + "size", + "document_type", + "category", + } +) + + +def _resolve_field(field: str, doc_props: dict[str, Any]) -> Any: + """Resolve a *field* name to its actual value from *doc_props*. + + ``doc_props`` is expected to contain top-level keys that mirror the + built-in field names **plus** a ``metadata`` dict with the parsed + AI metadata JSON. + """ + if field == "category": + # ``category`` is an alias for ``document_type``. + field = "document_type" + + if field.startswith("metadata."): + meta_key = field[len("metadata.") :] + metadata = doc_props.get("metadata") or {} + return metadata.get(meta_key) + + return doc_props.get(field) + + +def _to_float(value: Any) -> float | None: + """Try to convert *value* to a float for numeric comparison.""" + if value is None: + return None + try: + return float(value) + except (TypeError, ValueError): + return None + + +def _evaluate_condition(actual: Any, operator: str, expected: str) -> bool: + """Return ``True`` when *actual* satisfies *operator* against *expected*. + + All string comparisons are case-insensitive. Numeric operators (``gt``, + ``lt``, ``gte``, ``lte``) attempt to cast both sides to ``float``. + """ + if actual is None: + # If the document property is missing, the rule cannot match + # (except for ``not_equals`` / ``not_contains`` which should match). + if operator == "not_equals": + return True + if operator == "not_contains": + return True + return False + + actual_str = str(actual).lower() + expected_lower = expected.lower() + + if operator == "equals": + return actual_str == expected_lower + if operator == "not_equals": + return actual_str != expected_lower + if operator == "contains": + return expected_lower in actual_str + if operator == "not_contains": + return expected_lower not in actual_str + if operator == "regex": + try: + return bool(re.fullmatch(expected, str(actual), flags=re.IGNORECASE)) + except re.error: + logger.warning("Invalid regex in routing rule: %s", expected) + return False + + # Numeric operators + actual_num = _to_float(actual) + expected_num = _to_float(expected) + if actual_num is None or expected_num is None: + return False + + if operator == "gt": + return actual_num > expected_num + if operator == "lt": + return actual_num < expected_num + if operator == "gte": + return actual_num >= expected_num + if operator == "lte": + return actual_num <= expected_num + + return False + + +def build_document_properties(file_record: Any) -> dict[str, Any]: + """Build the property dict that the engine evaluates against. + + Args: + file_record: A :class:`FileRecord` instance (or any object with the + same attributes). + + Returns: + A dict with ``file_type``, ``filename``, ``size``, ``document_type``, + and ``metadata`` keys. + """ + metadata: dict[str, Any] = {} + raw_meta = getattr(file_record, "ai_metadata", None) + if raw_meta: + try: + metadata = json.loads(raw_meta) if isinstance(raw_meta, str) else raw_meta + except (json.JSONDecodeError, TypeError): + metadata = {} + + return { + "file_type": getattr(file_record, "mime_type", None), + "filename": getattr(file_record, "original_filename", None), + "size": getattr(file_record, "file_size", None), + "document_type": metadata.get("document_type"), + "metadata": metadata, + } + + +def evaluate_routing_rules( + db: Session, + owner_id: str | None, + doc_props: dict[str, Any], +) -> Pipeline | None: + """Evaluate routing rules and return the first matching pipeline. + + Rules are fetched for the given *owner_id* **plus** any system-wide rules + (``owner_id IS NULL``). Owner rules are evaluated first (by position), + then system rules. + + Args: + db: Active database session. + owner_id: The document owner's identifier (may be ``None``). + doc_props: Document property dict as produced by + :func:`build_document_properties`. + + Returns: + The first matching :class:`Pipeline`, or ``None`` when no rule + matches (caller should fall back to the default pipeline). + """ + # Fetch active rules for the owner + system rules, ordered by position. + rules = ( + db.query(PipelineRoutingRule) + .filter( + PipelineRoutingRule.is_active.is_(True), + (PipelineRoutingRule.owner_id == owner_id) | (PipelineRoutingRule.owner_id.is_(None)), + ) + .order_by( + # Owner-specific rules take priority over system rules. + PipelineRoutingRule.owner_id.is_(None).asc(), + PipelineRoutingRule.position.asc(), + ) + .all() + ) + + for rule in rules: + actual = _resolve_field(rule.field, doc_props) + if _evaluate_condition(actual, rule.operator, rule.value): + pipeline = db.query(Pipeline).filter(Pipeline.id == rule.target_pipeline_id).first() + if pipeline and pipeline.is_active: + logger.info( + "Routing rule matched: rule_id=%s, name=%s, target_pipeline=%s", + rule.id, + rule.name, + rule.target_pipeline_id, + ) + return pipeline + logger.warning( + "Routing rule %s matched but target pipeline %s is inactive or missing", + rule.id, + rule.target_pipeline_id, + ) + + return None diff --git a/crowdin.yml b/crowdin.yml new file mode 100644 index 00000000..fb3bedb6 --- /dev/null +++ b/crowdin.yml @@ -0,0 +1,11 @@ +"project_id_env": "CROWDIN_PROJECT_ID" +"api_token_env": "CROWDIN_PERSONAL_TOKEN" +"base_path": "." +"base_url": "https://api.crowdin.com" + +"preserve_hierarchy": true + +files: + - source: /frontend/translations/en.json + translation: /frontend/translations/%two_letters_code%.json + type: json diff --git a/docs/API.md b/docs/API.md index 9515df4c..3d4c7842 100644 --- a/docs/API.md +++ b/docs/API.md @@ -1960,6 +1960,160 @@ Pass no `pipeline_id` query parameter (or omit it) to clear the assignment. ``` +## Routing Rules + +Routing rules let you conditionally assign documents to different pipelines +based on file properties such as type, size, filename, or AI-extracted +metadata. Rules are evaluated in **position order** (lowest first); the first +rule that matches wins. If no rule matches, the system falls back to the +owner's (or global) default pipeline. + +### Supported operators and fields + +```bash +GET /api/routing-rules/operators +``` + +Returns the catalogue of valid operators and built-in fields so UIs can +populate dropdowns without hard-coding values. + +**Response (200):** +```json +{ + "operators": ["contains", "equals", "gt", "gte", "lt", "lte", "not_contains", "not_equals", "regex"], + "builtin_fields": ["category", "document_type", "file_type", "filename", "size"], + "metadata_prefix": "metadata." +} +``` + +> **Tip:** For AI metadata fields use the `metadata.` prefix, e.g. +> `metadata.sender`, `metadata.amount`. + +### List routing rules + +```bash +GET /api/routing-rules +``` + +Returns the current user's rules **plus** any system-wide rules +(`owner_id = null`), ordered by position. + +**Response (200):** +```json +[ + { + "id": 1, + "owner_id": "alice", + "name": "Route invoices", + "position": 0, + "field": "document_type", + "operator": "equals", + "value": "Invoice", + "target_pipeline_id": 3, + "is_active": true, + "created_at": "2026-03-09T12:00:00+00:00", + "updated_at": "2026-03-09T12:00:00+00:00" + } +] +``` + +### Create routing rule + +```bash +POST /api/routing-rules +Content-Type: application/json + +{ + "name": "Route invoices", + "field": "document_type", + "operator": "equals", + "value": "Invoice", + "target_pipeline_id": 3 +} +``` + +Optional fields: `position` (auto-assigned if omitted), `is_active` (default `true`). + +**Response (201 Created):** The created rule object. + +### Get routing rule + +```bash +GET /api/routing-rules/{rule_id} +``` + +**Response (200):** A single rule object. + +### Update routing rule + +```bash +PUT /api/routing-rules/{rule_id} +Content-Type: application/json + +{ "name": "Renamed rule", "operator": "contains", "is_active": false } +``` + +Only the supplied fields are updated. + +**Response (200):** The updated rule object. + +### Delete routing rule + +```bash +DELETE /api/routing-rules/{rule_id} +``` + +Returns **204 No Content**. + +### Reorder routing rules + +```bash +PUT /api/routing-rules/reorder +Content-Type: application/json + +{ "rule_ids": [3, 1, 2] } +``` + +Provide the complete ordered list of your rule IDs. Positions are reassigned +0, 1, 2, … in the given order. + +### Evaluate rules (dry run) + +```bash +POST /api/routing-rules/evaluate +Content-Type: application/json + +{ + "file_type": "application/pdf", + "filename": "invoice_2024.pdf", + "size": 204800, + "document_type": "Invoice", + "metadata": { "sender": "Acme Corp" } +} +``` + +Tests which rule (if any) would match the given properties **without** +actually routing a document. + +**Response (200) – match found:** +```json +{ + "matched": true, + "rule": { "id": 1, "name": "Route invoices", "..." : "..." }, + "target_pipeline": { "id": 3, "name": "Invoice Pipeline", "is_active": true } +} +``` + +**Response (200) – no match:** +```json +{ + "matched": false, + "rule": null, + "target_pipeline": null +} +``` + + ## API Tokens Personal API tokens allow programmatic access to the DocuElevate API without diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 9906a89c..957d005d 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -626,6 +626,58 @@ Pass no `pipeline_id` to clear the assignment and fall back to the system defaul Admins can create **system pipelines** that appear in every user's pipeline list. These can be set as the global default so all users benefit from a consistent processing baseline. Navigate to **Pipelines** and check the **System pipeline** box when creating a new one (admin only). +### Conditional routing rules + +Routing rules automatically assign incoming documents to the right pipeline +based on their properties — no manual pipeline selection required. + +**How it works:** + +1. Define one or more routing rules via the API + (`POST /api/routing-rules`). +2. Each rule specifies a **field** to inspect, an **operator** (condition), + a **value** to compare against, and a **target pipeline**. +3. When a document is processed, rules are evaluated **in position order** + (lowest first). The first matching rule wins and the document is routed + to that pipeline. +4. If no rule matches, the document is processed by the default pipeline. + +**Available fields:** + +| Field | Description | +|-------|-------------| +| `file_type` | MIME type, e.g. `application/pdf` | +| `filename` | Original filename | +| `size` | File size in bytes | +| `document_type` | AI-classified type (Invoice, Contract, …) | +| `category` | Alias for `document_type` | +| `metadata.` | Any key from the AI-extracted metadata JSON | + +**Available operators:** + +| Operator | Description | +|----------|-------------| +| `equals` / `not_equals` | Exact match (case-insensitive) | +| `contains` / `not_contains` | Substring match (case-insensitive) | +| `regex` | Full Python regex match (case-insensitive) | +| `gt` / `lt` / `gte` / `lte` | Numeric comparison (greater/less than) | + +**Example:** Route invoices to one pipeline and large files to another: + +``` +Rule 1: field=document_type, operator=equals, value=Invoice, target_pipeline=3 +Rule 2: field=size, operator=gt, value=1048576, target_pipeline=5 +``` + +With first-match-wins logic, an invoice of any size matches Rule 1 and is +routed to pipeline 3. A non-invoice file larger than 1 MB matches Rule 2 +and is routed to pipeline 5. Everything else falls back to the default +pipeline. + +You can test your rules without actually routing a document using the +**evaluate** endpoint (`POST /api/routing-rules/evaluate`). For the full +API reference, see [API Documentation](API.md#routing-rules). + ## API Access For programmatic access, DocuElevate provides a comprehensive REST API: diff --git a/frontend/translations/af.json b/frontend/translations/af.json new file mode 100644 index 00000000..d36160ed --- /dev/null +++ b/frontend/translations/af.json @@ -0,0 +1,929 @@ +{ + "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", + "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.create_account": "Create account", + "auth.display_name_label": "Display Name", + "auth.email_label": "Email", + "auth.forgot_password": "Forgot Password?", + "auth.forgot_username": "Forgot username?", + "auth.login": "Log In", + "auth.login_title": "Log In", + "auth.logo_alt": "DocuElevate Logo", + "auth.logout": "Log Out", + "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.profile": "Profile", + "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_title": "Sign Up", + "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.active": "Active", + "common.all": "All", + "common.back": "Back", + "common.cancel": "Cancel", + "common.close": "Close", + "common.col_pending": "Pending", + "common.completed": "Completed", + "common.confirm": "Confirm", + "common.copied": "Copied!", + "common.copy": "Copy", + "common.create": "Create", + "common.created": "Created", + "common.date": "Date", + "common.delete": "Delete", + "common.description": "Description", + "common.details": "Details", + "common.disabled": "Disabled", + "common.download": "Download", + "common.duplicate": "Duplicate", + "common.edit": "Edit", + "common.enabled": "Enabled", + "common.error": "Error", + "common.failed": "Failed", + "common.filter": "Filter", + "common.inactive": "Inactive", + "common.info": "Info", + "common.loading": "Loading...", + "common.name": "Name", + "common.next": "Next", + "common.next_page": "Next page", + "common.no": "No", + "common.none": "None", + "common.page": "Page", + "common.pending": "Pending", + "common.prev_page": "Previous page", + "common.previous": "Previous", + "common.processing": "Processing", + "common.refresh": "Refresh", + "common.reset": "Reset", + "common.retry": "Retry", + "common.save": "Save", + "common.search": "Search", + "common.select": "Select", + "common.select_placeholder": "— select —", + "common.size": "Size", + "common.status": "Status", + "common.submit": "Submit", + "common.success": "Success", + "common.tags": "Tags", + "common.type": "Type", + "common.updated": "Updated", + "common.upload": "Upload", + "common.view": "View", + "common.warning": "Warning", + "common.yes": "Yes", + "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", + "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", + "cookie.notice_label": "Cookie notice", + "cookie.policy_link": "Cookie Policy", + "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.files_this_month": "Files This Month", + "dashboard.files_today": "Files Today", + "dashboard.ocr_processed": "OCR Processed", + "dashboard.quick_actions": "Quick Actions", + "dashboard.recent_activity": "Recent Activity", + "dashboard.storage_targets": "Storage Targets", + "dashboard.title": "Dashboard", + "dashboard.total_files": "Total Files", + "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_heading": "Oops, we couldn’t find that page!", + "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_title": "404 - Not Found", + "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_heading": "Oops! Something Went Wrong.", + "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_message": "You do not have permission to access this page.", + "error.not_found": "Page not found", + "error.not_found_message": "The page you are looking for does not exist.", + "error.server_error": "Internal Server Error", + "error.server_error_message": "Something went wrong. Please try again later.", + "error.unauthorized": "Unauthorized", + "error.unauthorized_message": "You need to log in to access this page.", + "files.action_delete": "Delete file", + "files.action_details": "View details", + "files.action_preview": "Quick preview", + "files.bulk_clear_selection": "Clear Selection", + "files.bulk_cloud_ocr": "Re-run Cloud OCR", + "files.bulk_delete": "Delete Selected", + "files.bulk_download": "Download as ZIP", + "files.bulk_reprocess": "Reprocess Selected", + "files.delete_modal_cancel": "Cancel", + "files.delete_modal_confirm": "Delete", + "files.delete_modal_message": "Are you sure you want to delete this file?", + "files.delete_modal_title": "Confirm Deletion", + "files.document_title": "Document Title", + "files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more – folders are processed recursively", + "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.filename": "Filename", + "files.files_selected": "files selected", + "files.filter_all_providers": "All Providers", + "files.filter_all_statuses": "All Statuses", + "files.filter_all_types": "All Types", + "files.filter_apply": "Apply Filters", + "files.filter_clear": "Clear", + "files.filter_date_from": "Date From", + "files.filter_date_from_aria": "Filter from date", + "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_ocr_all": "All Files", + "files.filter_ocr_good": "Good quality", + "files.filter_ocr_poor": "Poor 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_search_label": "Search Filename", + "files.filter_search_placeholder": "Enter filename...", + "files.filter_storage_provider": "Storage Provider", + "files.filter_tags_aria": "Filter by tags (comma-separated)", + "files.filter_tags_placeholder": "e.g. invoice,amazon", + "files.fulltext_search_label": "Full-Text Search (OCR text, metadata, tags)", + "files.fulltext_search_placeholder": "Search document content, sender, tags, type...", + "files.no_files": "No files found", + "files.ocr_status": "OCR Status", + "files.page_title": "File Records", + "files.pagination_files": "files", + "files.pagination_first": "First", + "files.pagination_last": "Last", + "files.pagination_nav_aria": "File list pagination", + "files.pagination_next": "Next", + "files.pagination_of": "of", + "files.pagination_previous": "Previous", + "files.pagination_showing": "Showing", + "files.preview_modal_close": "Close 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.saved_searches_empty": "No saved searches yet", + "files.saved_searches_error": "Could not load saved searches", + "files.saved_searches_label": "Saved Searches", + "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_title": "Search Results", + "files.status_duplicate": "Duplicate", + "files.table_actions": "Actions", + "files.table_aria": "File records", + "files.table_created_at": "Created At", + "files.table_empty": "No files found", + "files.table_id": "ID", + "files.table_mime_type": "MIME Type", + "files.table_original_filename": "Original Filename", + "files.table_select_all": "Select all files on this page", + "files.tags": "Tags", + "files.title": "Files", + "files.upload_modal_aria": "Upload progress", + "files.upload_modal_close": "Close upload progress", + "files.upload_modal_header": "Uploading Files", + "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", + "footer.attributions": "Attributions", + "footer.cookies": "Cookies", + "footer.copyright": "DocuElevate {year}", + "footer.imprint": "Imprint", + "footer.license": "License", + "footer.navigation": "Footer navigation", + "footer.privacy": "Privacy", + "footer.terms": "Terms", + "footer.version": "Version {version}", + "help.destinations_dropbox": "Dropbox", + "help.destinations_dropbox_desc": "OAuth-linked. Files land in your chosen folder.", + "help.destinations_email": "Email Forwarding", + "help.destinations_email_desc": "Processed files sent as SMTP attachments.", + "help.destinations_google_drive": "Google Drive", + "help.destinations_google_drive_desc": "Service account or OAuth. Supports shared drives.", + "help.destinations_heading": "Destinations – Where Documents Go", + "help.destinations_nextcloud": "Nextcloud / WebDAV", + "help.destinations_nextcloud_desc": "Self-hosted cloud storage via WebDAV.", + "help.destinations_onedrive": "OneDrive", + "help.destinations_onedrive_desc": "Microsoft Graph API integration.", + "help.destinations_paperless": "Paperless-ngx", + "help.destinations_paperless_desc": "Push documents straight into Paperless for archival.", + "help.destinations_s3": "Amazon S3", + "help.destinations_s3_desc": "Any S3-compatible bucket (AWS, MinIO, Wasabi).", + "help.destinations_sftp": "SFTP / FTP", + "help.destinations_sftp_desc": "Secure file transfer to any server.", + "help.destinations_webhook": "Webhook", + "help.destinations_webhook_desc": "POST metadata to any external endpoint.", + "help.documentation": "Documentation", + "help.faq": "Frequently Asked Questions", + "help.faq_1_a": "Navigate to the Upload page, drag-and-drop your files or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.faq_1_q": "How do I upload documents?", + "help.faq_2_a": "PDF, JPEG, PNG, TIFF, BMP, GIF, DOCX, XLSX, PPTX, ODT, ODS, TXT, RTF, and HTML. Non-PDF files are automatically converted to PDF before processing.", + "help.faq_2_q": "Which file formats are supported?", + "help.faq_3_a": "Yes. Go to Email Ingestion, add an IMAP account, and DocuElevate will poll for new messages and process attachments automatically.", + "help.faq_3_q": "Can I ingest documents from email?", + "help.faq_4_a": "Pipelines let you chain processing steps – OCR, AI extraction, format conversion – and route the result to one or more destinations. Create and manage them from the Pipelines page.", + "help.faq_4_q": "How do processing pipelines work?", + "help.faq_5_a": "DocuElevate encrypts credentials at rest, communicates over TLS, and never stores your documents longer than necessary. See the Privacy Notice for full details.", + "help.faq_5_q": "Is my data secure?", + "help.faq_heading": "Frequently Asked Questions", + "help.getting_started": "Getting Started", + "help.heading": "Help Center", + "help.page_title": "Help Center", + "help.privacy_notice": "Privacy Notice", + "help.quickstart_heading": "Quick Start", + "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_upload": "Upload Documents", + "help.quickstart_upload_desc": "Drag & drop files onto the Upload page or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.quickstart_workflows": "Automate Workflows", + "help.quickstart_workflows_desc": "Create Pipelines to define multi-step processing and routing rules. Combine OCR, AI extraction, format conversion, and delivery in a single flow.", + "help.sources_email_ingestion": "Email Ingestion (IMAP)", + "help.sources_email_ingestion_desc": "Forward documents to a dedicated mailbox. Under Email Ingestion, add one or more IMAP accounts. DocuElevate polls for new messages and processes attachments automatically.", + "help.sources_heading": "Sources – Getting Documents In", + "help.sources_rest_api": "REST API", + "help.sources_rest_api_desc": "Integrate programmatically by POST-ing files to /api/upload. Ideal for scripts, watched folders, scanners, or third-party tools like Zapier and n8n.", + "help.sources_scanner": "Scanner & Mobile", + "help.sources_scanner_desc": "Point network scanners at DocuElevate's upload endpoint or use any mobile scanning app that supports custom HTTP destinations.", + "help.sources_web_upload": "Web Upload", + "help.sources_web_upload_desc": "The fastest way to get started. Open the Upload page, drop one or more files, and DocuElevate takes care of the rest. Supported formats include PDF, JPEG, PNG, TIFF, DOCX, XLSX, and more.", + "help.subheading": "Everything you need to get the most out of DocuElevate. Browse topics below or search for what you need.", + "help.support": "Support", + "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_heading": "Contact Support", + "help.support_ticket_button": "Submit a Ticket", + "help.support_ticket_heading": "Open a Support Ticket", + "help.title": "Help Center", + "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_heading": "Workflows & Pipelines", + "help.workflows_step_1": "Convert to PDF", + "help.workflows_step_1_create": "Go to Pipelines in the main menu.", + "help.workflows_step_2": "OCR – extract text", + "help.workflows_step_2_create": "Click New Pipeline and give it a name.", + "help.workflows_step_3": "AI metadata extraction", + "help.workflows_step_3_create": "Add the processing steps you need.", + "help.workflows_step_4": "Deliver to one or more destinations", + "help.workflows_step_4_create": "Choose one or more delivery destinations.", + "help.workflows_step_5_create": "Save – new documents will be processed through this pipeline automatically.", + "help.workflows_typical_steps": "Typical Steps", + "help.workflows_what_is": "What is a Pipeline?", + "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_ingestion": "Email & URL-based document ingestion", + "index.capabilities_ocr": "OCR & metadata extraction with AI", + "index.capabilities_paperless": "Paperless-ngx integration for document management", + "index.capabilities_title": "Capabilities", + "index.capabilities_workflows": "Automated classification & routing workflows", + "index.cta_description": "Join teams already automating their document processing with DocuElevate.", + "index.cta_heading": "Ready to elevate your document workflow?", + "index.cta_pricing": "See pricing", + "index.cta_signup": "Create a free account", + "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_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_desc": "Route processed files to Dropbox, Google Drive, OneDrive, Amazon S3, Nextcloud, Paperless NGX, WebDAV, FTP/SFTP, and more.", + "index.feature_email": "Email & IMAP Ingestion", + "index.feature_email_desc": "Automatically pull documents from Gmail or any IMAP mailbox — no manual uploads needed.", + "index.feature_ocr": "OCR & Text Extraction", + "index.feature_ocr_desc": "Azure Document Intelligence converts scanned PDFs and images into fully searchable text automatically.", + "index.feature_pipelines": "Custom Pipelines", + "index.feature_pipelines_desc": "Build processing pipelines with configurable steps — OCR, AI extraction, format conversion, and storage routing in any order.", + "index.feature_search": "Full-Text Search", + "index.feature_search_desc": "Instantly find any document by content, metadata, or tags across your entire archive.", + "index.feature_section_title": "Everything you need for smart document workflows", + "index.getting_started": "Getting Started", + "index.getting_started_1": "Configure integrations via System Status", + "index.getting_started_2": "Upload your first document", + "index.getting_started_3": "Review results in Files", + "index.getting_started_learn": "Learn more about DocuElevate", + "index.hero_description": "DocuElevate ingests your documents, runs OCR, extracts metadata with AI, and routes files to Dropbox, Google Drive, OneDrive, S3, Nextcloud, and more — all in one seamless pipeline.", + "index.hero_heading": "From upload to insight — automatically.", + "index.hero_login": "Log In", + "index.hero_pricing": "View Plans & Pricing", + "index.hero_signup": "Get Started — it’s free", + "index.integrations_active": "Active integrations", + "index.integrations_storage": "Storage targets", + "index.integrations_title": "Integrations", + "index.integrations_view_status": "View system status", + "index.page_title_dashboard": "Dashboard", + "index.page_title_public": "Intelligent Document Processing", + "index.platform_overview": "Platform overview", + "index.quick_actions": "Quick Actions", + "index.quick_documents": "My Documents", + "index.quick_documents_desc": "Browse your processed files", + "index.quick_search": "Search", + "index.quick_search_desc": "Full-text search across documents", + "index.quick_subscription": "My Subscription", + "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_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_subtitle": "Intelligent document processing & management", + "index.stat_active_integrations": "Active Integrations", + "index.stat_active_users": "Active users", + "index.stat_files_month": "Files this month", + "index.stat_files_today": "Files today", + "index.stat_storage_targets": "Storage Targets", + "index.stat_total_files": "Total files", + "index.tier_plan": "Plan", + "index.tier_upgrade": "Upgrade", + "index.tier_view_details": "View full details", + "index.upgrade_daily_limits": "Higher daily & monthly limits", + "index.upgrade_description": "Unlock more documents, more destinations and priority support.", + "index.upgrade_destinations": "More storage destinations", + "index.upgrade_ocr_pages": "More OCR pages", + "index.upgrade_plan": "Upgrade your plan", + "index.upgrade_view_pricing": "View plans & pricing", + "index.usage_lifetime": "Lifetime files", + "index.usage_month": "Files this month", + "index.usage_my_usage": "My usage", + "index.usage_today": "Files today", + "index.usage_unlimited": "Unlimited", + "integrations.configure": "Configure", + "integrations.connect": "Connect", + "integrations.connected": "Connected", + "integrations.disconnect": "Disconnect", + "integrations.empty_state": "No integrations configured", + "integrations.folder_label": "Folder", + "integrations.host_label": "Host", + "integrations.imap_settings": "IMAP Settings", + "integrations.not_connected": "Not Connected", + "integrations.page_title": "Integrations", + "integrations.password_label": "Password", + "integrations.port_label": "Port", + "integrations.title": "Integrations", + "integrations.username_label": "Username", + "language.bg": "Български", + "language.ca": "Català", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", + "language.cs": "Čeština", + "language.da": "Dansk", + "language.de": "Deutsch", + "language.el": "Ελληνικά", + "language.en": "English", + "language.es": "Español", + "language.et": "Eesti", + "language.fi": "Suomi", + "language.fr": "Français", + "language.ga": "Gaeilge", + "language.hr": "Hrvatski", + "language.hu": "Magyar", + "language.is": "Íslenska", + "language.it": "Italiano", + "language.lb": "Lëtzebuergesch", + "language.lt": "Lietuvių", + "language.lv": "Latviešu", + "language.nb": "Norsk", + "language.nl": "Nederlands", + "language.pl": "Polski", + "language.pt": "Português", + "language.ro": "Română", + "language.ru": "Русский", + "language.selector": "Language", + "language.selector_label": "Select language", + "language.sk": "Slovenčina", + "language.sl": "Slovenščina", + "language.sv": "Svenska", + "language.tr": "Türkçe", + "language.uk": "Українська", + "language.zh": "中文", + "nav.about": "About", + "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", + "nav.admin_actions": "Admin actions", + "nav.admin_menu": "Admin menu", + "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", + "nav.backup_restore": "Backup & Restore", + "nav.credentials": "Credentials", + "nav.dark_mode": "Dark Mode", + "nav.dashboard": "Dashboard", + "nav.developer_docs": "Developer Docs", + "nav.duplicates": "Duplicates", + "nav.file_manager": "File Manager", + "nav.files": "Files", + "nav.help": "Help", + "nav.help_center": "Help Center", + "nav.imap": "Email Import", + "nav.integrations": "Integrations", + "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", + "nav.main_navigation": "Main navigation", + "nav.notifications": "Notifications", + "nav.open_main_menu": "Open main menu", + "nav.pipelines": "Pipelines", + "nav.plan_designer": "Plan Designer", + "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", + "nav.queue_monitor": "Queue Monitor", + "nav.scheduled_jobs": "Scheduled Jobs", + "nav.search": "Search", + "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", + "nav.similarity": "Similarity", + "nav.skip_to_content": "Skip to main content", + "nav.status": "Status", + "nav.subscription": "Subscription", + "nav.toggle_dark_mode": "Toggle dark mode", + "nav.toggle_nav": "Toggle navigation menu", + "nav.upload": "Upload", + "nav.users": "Users", + "nav.version": "Version Info", + "notifications.filter_all": "All", + "notifications.filter_read": "Read only", + "notifications.filter_unread": "Unread only", + "notifications.manage_desc": "Manage your notification inbox, targets, and event preferences", + "notifications.mark_all_read": "Mark All as Read", + "notifications.mark_all_read_btn": "Mark all read", + "notifications.mark_read": "Mark as Read", + "notifications.no_notifications": "No notifications", + "notifications.page_title": "Notifications", + "notifications.tab_inbox": "Inbox", + "notifications.tab_settings": "Settings", + "notifications.title": "Notifications", + "notifications.unread_count": "{count} unread notifications", + "pipelines.active_label": "Active", + "pipelines.add_step_btn": "Add Step", + "pipelines.create": "Create Pipeline", + "pipelines.custom_label_label": "Custom Label", + "pipelines.default_label": "Default", + "pipelines.description_label": "Description", + "pipelines.description_placeholder": "Optional description", + "pipelines.disabled_label": "Disabled", + "pipelines.edit": "Edit Pipeline", + "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.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)", + "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.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_pipeline_label": "System pipeline (visible to all users)", + "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.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_date_from": "Date From", + "search.filter_date_to": "Date To", + "search.filter_document_type": "Document Type", + "search.filter_document_type_placeholder": "e.g. Invoice", + "search.filter_language": "Language", + "search.filter_language_placeholder": "e.g. de", + "search.filter_sender": "Sender", + "search.filter_sender_placeholder": "e.g. ACME Corp", + "search.filter_tags": "Tags", + "search.filter_tags_placeholder": "e.g. amazon", + "search.filter_text_quality": "Text Quality", + "search.filter_text_quality_all": "All", + "search.filter_text_quality_high": "High", + "search.filter_text_quality_low": "Low", + "search.filter_text_quality_medium": "Medium", + "search.filter_text_quality_no_text": "No text", + "search.heading": "Document Search", + "search.input_aria_label": "Search documents", + "search.input_placeholder": "Search documents by content, sender, tags, type...", + "search.loading_indicator": "Searching…", + "search.no_results": "No results found", + "search.page_title": "Search Documents", + "search.placeholder": "Search by filename, content, tags...", + "search.result_empty": "No documents found matching your query.", + "search.results_count": "{count} results found", + "search.saved_aria_save": "Save current search", + "search.saved_button": "Save Current", + "search.saved_empty": "No saved searches yet", + "search.saved_error": "Could not load saved searches", + "search.saved_label": "Saved Searches", + "search.saved_loading": "Loading...", + "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.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_setting_title": "Save this setting", + "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.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.build_date": "Build Date", + "status.container_id": "Container ID", + "status.git_commit": "Git Commit", + "status.last_check": "Last Check", + "status.page_title": "System Status", + "status.setting_label": "Setting", + "status.value_label": "Value", + "upload.browse_button": "Browse Files", + "upload.button_processing": "Processing...", + "upload.camera_button": "Take Photo / Scan Document", + "upload.download_button": "Download and Process", + "upload.downloading": "Downloading file from URL...", + "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_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_invalid_url": "Invalid URL format", + "upload.error_url_required": "Please enter a URL", + "upload.file_size_hint": "Maximum size: 500 MB per file", + "upload.file_types": "Allowed types: PDF, Office documents (Word, Excel, PowerPoint, etc.), Images", + "upload.filename_description": "Leave empty to use filename from URL", + "upload.filename_label": "Filename (optional)", + "upload.filename_placeholder": "my-document.pdf", + "upload.max_size": "Maximum file size: {size}", + "upload.page_title": "Upload Files", + "upload.section_device": "Upload from Device", + "upload.section_url": "Upload from URL", + "upload.select_file": "Select File", + "upload.success": "File uploaded successfully", + "upload.title": "Upload Document", + "upload.uploading": "Uploading...", + "upload.url_description": "Enter a direct link to a file (PDF, Office documents, or images)", + "upload.url_label": "File URL", + "upload.url_placeholder": "https://example.com/document.pdf" +} diff --git a/frontend/translations/ar.json b/frontend/translations/ar.json new file mode 100644 index 00000000..d36160ed --- /dev/null +++ b/frontend/translations/ar.json @@ -0,0 +1,929 @@ +{ + "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", + "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.create_account": "Create account", + "auth.display_name_label": "Display Name", + "auth.email_label": "Email", + "auth.forgot_password": "Forgot Password?", + "auth.forgot_username": "Forgot username?", + "auth.login": "Log In", + "auth.login_title": "Log In", + "auth.logo_alt": "DocuElevate Logo", + "auth.logout": "Log Out", + "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.profile": "Profile", + "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_title": "Sign Up", + "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.active": "Active", + "common.all": "All", + "common.back": "Back", + "common.cancel": "Cancel", + "common.close": "Close", + "common.col_pending": "Pending", + "common.completed": "Completed", + "common.confirm": "Confirm", + "common.copied": "Copied!", + "common.copy": "Copy", + "common.create": "Create", + "common.created": "Created", + "common.date": "Date", + "common.delete": "Delete", + "common.description": "Description", + "common.details": "Details", + "common.disabled": "Disabled", + "common.download": "Download", + "common.duplicate": "Duplicate", + "common.edit": "Edit", + "common.enabled": "Enabled", + "common.error": "Error", + "common.failed": "Failed", + "common.filter": "Filter", + "common.inactive": "Inactive", + "common.info": "Info", + "common.loading": "Loading...", + "common.name": "Name", + "common.next": "Next", + "common.next_page": "Next page", + "common.no": "No", + "common.none": "None", + "common.page": "Page", + "common.pending": "Pending", + "common.prev_page": "Previous page", + "common.previous": "Previous", + "common.processing": "Processing", + "common.refresh": "Refresh", + "common.reset": "Reset", + "common.retry": "Retry", + "common.save": "Save", + "common.search": "Search", + "common.select": "Select", + "common.select_placeholder": "— select —", + "common.size": "Size", + "common.status": "Status", + "common.submit": "Submit", + "common.success": "Success", + "common.tags": "Tags", + "common.type": "Type", + "common.updated": "Updated", + "common.upload": "Upload", + "common.view": "View", + "common.warning": "Warning", + "common.yes": "Yes", + "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", + "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", + "cookie.notice_label": "Cookie notice", + "cookie.policy_link": "Cookie Policy", + "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.files_this_month": "Files This Month", + "dashboard.files_today": "Files Today", + "dashboard.ocr_processed": "OCR Processed", + "dashboard.quick_actions": "Quick Actions", + "dashboard.recent_activity": "Recent Activity", + "dashboard.storage_targets": "Storage Targets", + "dashboard.title": "Dashboard", + "dashboard.total_files": "Total Files", + "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_heading": "Oops, we couldn’t find that page!", + "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_title": "404 - Not Found", + "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_heading": "Oops! Something Went Wrong.", + "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_message": "You do not have permission to access this page.", + "error.not_found": "Page not found", + "error.not_found_message": "The page you are looking for does not exist.", + "error.server_error": "Internal Server Error", + "error.server_error_message": "Something went wrong. Please try again later.", + "error.unauthorized": "Unauthorized", + "error.unauthorized_message": "You need to log in to access this page.", + "files.action_delete": "Delete file", + "files.action_details": "View details", + "files.action_preview": "Quick preview", + "files.bulk_clear_selection": "Clear Selection", + "files.bulk_cloud_ocr": "Re-run Cloud OCR", + "files.bulk_delete": "Delete Selected", + "files.bulk_download": "Download as ZIP", + "files.bulk_reprocess": "Reprocess Selected", + "files.delete_modal_cancel": "Cancel", + "files.delete_modal_confirm": "Delete", + "files.delete_modal_message": "Are you sure you want to delete this file?", + "files.delete_modal_title": "Confirm Deletion", + "files.document_title": "Document Title", + "files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more – folders are processed recursively", + "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.filename": "Filename", + "files.files_selected": "files selected", + "files.filter_all_providers": "All Providers", + "files.filter_all_statuses": "All Statuses", + "files.filter_all_types": "All Types", + "files.filter_apply": "Apply Filters", + "files.filter_clear": "Clear", + "files.filter_date_from": "Date From", + "files.filter_date_from_aria": "Filter from date", + "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_ocr_all": "All Files", + "files.filter_ocr_good": "Good quality", + "files.filter_ocr_poor": "Poor 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_search_label": "Search Filename", + "files.filter_search_placeholder": "Enter filename...", + "files.filter_storage_provider": "Storage Provider", + "files.filter_tags_aria": "Filter by tags (comma-separated)", + "files.filter_tags_placeholder": "e.g. invoice,amazon", + "files.fulltext_search_label": "Full-Text Search (OCR text, metadata, tags)", + "files.fulltext_search_placeholder": "Search document content, sender, tags, type...", + "files.no_files": "No files found", + "files.ocr_status": "OCR Status", + "files.page_title": "File Records", + "files.pagination_files": "files", + "files.pagination_first": "First", + "files.pagination_last": "Last", + "files.pagination_nav_aria": "File list pagination", + "files.pagination_next": "Next", + "files.pagination_of": "of", + "files.pagination_previous": "Previous", + "files.pagination_showing": "Showing", + "files.preview_modal_close": "Close 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.saved_searches_empty": "No saved searches yet", + "files.saved_searches_error": "Could not load saved searches", + "files.saved_searches_label": "Saved Searches", + "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_title": "Search Results", + "files.status_duplicate": "Duplicate", + "files.table_actions": "Actions", + "files.table_aria": "File records", + "files.table_created_at": "Created At", + "files.table_empty": "No files found", + "files.table_id": "ID", + "files.table_mime_type": "MIME Type", + "files.table_original_filename": "Original Filename", + "files.table_select_all": "Select all files on this page", + "files.tags": "Tags", + "files.title": "Files", + "files.upload_modal_aria": "Upload progress", + "files.upload_modal_close": "Close upload progress", + "files.upload_modal_header": "Uploading Files", + "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", + "footer.attributions": "Attributions", + "footer.cookies": "Cookies", + "footer.copyright": "DocuElevate {year}", + "footer.imprint": "Imprint", + "footer.license": "License", + "footer.navigation": "Footer navigation", + "footer.privacy": "Privacy", + "footer.terms": "Terms", + "footer.version": "Version {version}", + "help.destinations_dropbox": "Dropbox", + "help.destinations_dropbox_desc": "OAuth-linked. Files land in your chosen folder.", + "help.destinations_email": "Email Forwarding", + "help.destinations_email_desc": "Processed files sent as SMTP attachments.", + "help.destinations_google_drive": "Google Drive", + "help.destinations_google_drive_desc": "Service account or OAuth. Supports shared drives.", + "help.destinations_heading": "Destinations – Where Documents Go", + "help.destinations_nextcloud": "Nextcloud / WebDAV", + "help.destinations_nextcloud_desc": "Self-hosted cloud storage via WebDAV.", + "help.destinations_onedrive": "OneDrive", + "help.destinations_onedrive_desc": "Microsoft Graph API integration.", + "help.destinations_paperless": "Paperless-ngx", + "help.destinations_paperless_desc": "Push documents straight into Paperless for archival.", + "help.destinations_s3": "Amazon S3", + "help.destinations_s3_desc": "Any S3-compatible bucket (AWS, MinIO, Wasabi).", + "help.destinations_sftp": "SFTP / FTP", + "help.destinations_sftp_desc": "Secure file transfer to any server.", + "help.destinations_webhook": "Webhook", + "help.destinations_webhook_desc": "POST metadata to any external endpoint.", + "help.documentation": "Documentation", + "help.faq": "Frequently Asked Questions", + "help.faq_1_a": "Navigate to the Upload page, drag-and-drop your files or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.faq_1_q": "How do I upload documents?", + "help.faq_2_a": "PDF, JPEG, PNG, TIFF, BMP, GIF, DOCX, XLSX, PPTX, ODT, ODS, TXT, RTF, and HTML. Non-PDF files are automatically converted to PDF before processing.", + "help.faq_2_q": "Which file formats are supported?", + "help.faq_3_a": "Yes. Go to Email Ingestion, add an IMAP account, and DocuElevate will poll for new messages and process attachments automatically.", + "help.faq_3_q": "Can I ingest documents from email?", + "help.faq_4_a": "Pipelines let you chain processing steps – OCR, AI extraction, format conversion – and route the result to one or more destinations. Create and manage them from the Pipelines page.", + "help.faq_4_q": "How do processing pipelines work?", + "help.faq_5_a": "DocuElevate encrypts credentials at rest, communicates over TLS, and never stores your documents longer than necessary. See the Privacy Notice for full details.", + "help.faq_5_q": "Is my data secure?", + "help.faq_heading": "Frequently Asked Questions", + "help.getting_started": "Getting Started", + "help.heading": "Help Center", + "help.page_title": "Help Center", + "help.privacy_notice": "Privacy Notice", + "help.quickstart_heading": "Quick Start", + "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_upload": "Upload Documents", + "help.quickstart_upload_desc": "Drag & drop files onto the Upload page or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.quickstart_workflows": "Automate Workflows", + "help.quickstart_workflows_desc": "Create Pipelines to define multi-step processing and routing rules. Combine OCR, AI extraction, format conversion, and delivery in a single flow.", + "help.sources_email_ingestion": "Email Ingestion (IMAP)", + "help.sources_email_ingestion_desc": "Forward documents to a dedicated mailbox. Under Email Ingestion, add one or more IMAP accounts. DocuElevate polls for new messages and processes attachments automatically.", + "help.sources_heading": "Sources – Getting Documents In", + "help.sources_rest_api": "REST API", + "help.sources_rest_api_desc": "Integrate programmatically by POST-ing files to /api/upload. Ideal for scripts, watched folders, scanners, or third-party tools like Zapier and n8n.", + "help.sources_scanner": "Scanner & Mobile", + "help.sources_scanner_desc": "Point network scanners at DocuElevate's upload endpoint or use any mobile scanning app that supports custom HTTP destinations.", + "help.sources_web_upload": "Web Upload", + "help.sources_web_upload_desc": "The fastest way to get started. Open the Upload page, drop one or more files, and DocuElevate takes care of the rest. Supported formats include PDF, JPEG, PNG, TIFF, DOCX, XLSX, and more.", + "help.subheading": "Everything you need to get the most out of DocuElevate. Browse topics below or search for what you need.", + "help.support": "Support", + "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_heading": "Contact Support", + "help.support_ticket_button": "Submit a Ticket", + "help.support_ticket_heading": "Open a Support Ticket", + "help.title": "Help Center", + "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_heading": "Workflows & Pipelines", + "help.workflows_step_1": "Convert to PDF", + "help.workflows_step_1_create": "Go to Pipelines in the main menu.", + "help.workflows_step_2": "OCR – extract text", + "help.workflows_step_2_create": "Click New Pipeline and give it a name.", + "help.workflows_step_3": "AI metadata extraction", + "help.workflows_step_3_create": "Add the processing steps you need.", + "help.workflows_step_4": "Deliver to one or more destinations", + "help.workflows_step_4_create": "Choose one or more delivery destinations.", + "help.workflows_step_5_create": "Save – new documents will be processed through this pipeline automatically.", + "help.workflows_typical_steps": "Typical Steps", + "help.workflows_what_is": "What is a Pipeline?", + "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_ingestion": "Email & URL-based document ingestion", + "index.capabilities_ocr": "OCR & metadata extraction with AI", + "index.capabilities_paperless": "Paperless-ngx integration for document management", + "index.capabilities_title": "Capabilities", + "index.capabilities_workflows": "Automated classification & routing workflows", + "index.cta_description": "Join teams already automating their document processing with DocuElevate.", + "index.cta_heading": "Ready to elevate your document workflow?", + "index.cta_pricing": "See pricing", + "index.cta_signup": "Create a free account", + "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_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_desc": "Route processed files to Dropbox, Google Drive, OneDrive, Amazon S3, Nextcloud, Paperless NGX, WebDAV, FTP/SFTP, and more.", + "index.feature_email": "Email & IMAP Ingestion", + "index.feature_email_desc": "Automatically pull documents from Gmail or any IMAP mailbox — no manual uploads needed.", + "index.feature_ocr": "OCR & Text Extraction", + "index.feature_ocr_desc": "Azure Document Intelligence converts scanned PDFs and images into fully searchable text automatically.", + "index.feature_pipelines": "Custom Pipelines", + "index.feature_pipelines_desc": "Build processing pipelines with configurable steps — OCR, AI extraction, format conversion, and storage routing in any order.", + "index.feature_search": "Full-Text Search", + "index.feature_search_desc": "Instantly find any document by content, metadata, or tags across your entire archive.", + "index.feature_section_title": "Everything you need for smart document workflows", + "index.getting_started": "Getting Started", + "index.getting_started_1": "Configure integrations via System Status", + "index.getting_started_2": "Upload your first document", + "index.getting_started_3": "Review results in Files", + "index.getting_started_learn": "Learn more about DocuElevate", + "index.hero_description": "DocuElevate ingests your documents, runs OCR, extracts metadata with AI, and routes files to Dropbox, Google Drive, OneDrive, S3, Nextcloud, and more — all in one seamless pipeline.", + "index.hero_heading": "From upload to insight — automatically.", + "index.hero_login": "Log In", + "index.hero_pricing": "View Plans & Pricing", + "index.hero_signup": "Get Started — it’s free", + "index.integrations_active": "Active integrations", + "index.integrations_storage": "Storage targets", + "index.integrations_title": "Integrations", + "index.integrations_view_status": "View system status", + "index.page_title_dashboard": "Dashboard", + "index.page_title_public": "Intelligent Document Processing", + "index.platform_overview": "Platform overview", + "index.quick_actions": "Quick Actions", + "index.quick_documents": "My Documents", + "index.quick_documents_desc": "Browse your processed files", + "index.quick_search": "Search", + "index.quick_search_desc": "Full-text search across documents", + "index.quick_subscription": "My Subscription", + "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_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_subtitle": "Intelligent document processing & management", + "index.stat_active_integrations": "Active Integrations", + "index.stat_active_users": "Active users", + "index.stat_files_month": "Files this month", + "index.stat_files_today": "Files today", + "index.stat_storage_targets": "Storage Targets", + "index.stat_total_files": "Total files", + "index.tier_plan": "Plan", + "index.tier_upgrade": "Upgrade", + "index.tier_view_details": "View full details", + "index.upgrade_daily_limits": "Higher daily & monthly limits", + "index.upgrade_description": "Unlock more documents, more destinations and priority support.", + "index.upgrade_destinations": "More storage destinations", + "index.upgrade_ocr_pages": "More OCR pages", + "index.upgrade_plan": "Upgrade your plan", + "index.upgrade_view_pricing": "View plans & pricing", + "index.usage_lifetime": "Lifetime files", + "index.usage_month": "Files this month", + "index.usage_my_usage": "My usage", + "index.usage_today": "Files today", + "index.usage_unlimited": "Unlimited", + "integrations.configure": "Configure", + "integrations.connect": "Connect", + "integrations.connected": "Connected", + "integrations.disconnect": "Disconnect", + "integrations.empty_state": "No integrations configured", + "integrations.folder_label": "Folder", + "integrations.host_label": "Host", + "integrations.imap_settings": "IMAP Settings", + "integrations.not_connected": "Not Connected", + "integrations.page_title": "Integrations", + "integrations.password_label": "Password", + "integrations.port_label": "Port", + "integrations.title": "Integrations", + "integrations.username_label": "Username", + "language.bg": "Български", + "language.ca": "Català", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", + "language.cs": "Čeština", + "language.da": "Dansk", + "language.de": "Deutsch", + "language.el": "Ελληνικά", + "language.en": "English", + "language.es": "Español", + "language.et": "Eesti", + "language.fi": "Suomi", + "language.fr": "Français", + "language.ga": "Gaeilge", + "language.hr": "Hrvatski", + "language.hu": "Magyar", + "language.is": "Íslenska", + "language.it": "Italiano", + "language.lb": "Lëtzebuergesch", + "language.lt": "Lietuvių", + "language.lv": "Latviešu", + "language.nb": "Norsk", + "language.nl": "Nederlands", + "language.pl": "Polski", + "language.pt": "Português", + "language.ro": "Română", + "language.ru": "Русский", + "language.selector": "Language", + "language.selector_label": "Select language", + "language.sk": "Slovenčina", + "language.sl": "Slovenščina", + "language.sv": "Svenska", + "language.tr": "Türkçe", + "language.uk": "Українська", + "language.zh": "中文", + "nav.about": "About", + "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", + "nav.admin_actions": "Admin actions", + "nav.admin_menu": "Admin menu", + "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", + "nav.backup_restore": "Backup & Restore", + "nav.credentials": "Credentials", + "nav.dark_mode": "Dark Mode", + "nav.dashboard": "Dashboard", + "nav.developer_docs": "Developer Docs", + "nav.duplicates": "Duplicates", + "nav.file_manager": "File Manager", + "nav.files": "Files", + "nav.help": "Help", + "nav.help_center": "Help Center", + "nav.imap": "Email Import", + "nav.integrations": "Integrations", + "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", + "nav.main_navigation": "Main navigation", + "nav.notifications": "Notifications", + "nav.open_main_menu": "Open main menu", + "nav.pipelines": "Pipelines", + "nav.plan_designer": "Plan Designer", + "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", + "nav.queue_monitor": "Queue Monitor", + "nav.scheduled_jobs": "Scheduled Jobs", + "nav.search": "Search", + "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", + "nav.similarity": "Similarity", + "nav.skip_to_content": "Skip to main content", + "nav.status": "Status", + "nav.subscription": "Subscription", + "nav.toggle_dark_mode": "Toggle dark mode", + "nav.toggle_nav": "Toggle navigation menu", + "nav.upload": "Upload", + "nav.users": "Users", + "nav.version": "Version Info", + "notifications.filter_all": "All", + "notifications.filter_read": "Read only", + "notifications.filter_unread": "Unread only", + "notifications.manage_desc": "Manage your notification inbox, targets, and event preferences", + "notifications.mark_all_read": "Mark All as Read", + "notifications.mark_all_read_btn": "Mark all read", + "notifications.mark_read": "Mark as Read", + "notifications.no_notifications": "No notifications", + "notifications.page_title": "Notifications", + "notifications.tab_inbox": "Inbox", + "notifications.tab_settings": "Settings", + "notifications.title": "Notifications", + "notifications.unread_count": "{count} unread notifications", + "pipelines.active_label": "Active", + "pipelines.add_step_btn": "Add Step", + "pipelines.create": "Create Pipeline", + "pipelines.custom_label_label": "Custom Label", + "pipelines.default_label": "Default", + "pipelines.description_label": "Description", + "pipelines.description_placeholder": "Optional description", + "pipelines.disabled_label": "Disabled", + "pipelines.edit": "Edit Pipeline", + "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.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)", + "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.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_pipeline_label": "System pipeline (visible to all users)", + "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.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_date_from": "Date From", + "search.filter_date_to": "Date To", + "search.filter_document_type": "Document Type", + "search.filter_document_type_placeholder": "e.g. Invoice", + "search.filter_language": "Language", + "search.filter_language_placeholder": "e.g. de", + "search.filter_sender": "Sender", + "search.filter_sender_placeholder": "e.g. ACME Corp", + "search.filter_tags": "Tags", + "search.filter_tags_placeholder": "e.g. amazon", + "search.filter_text_quality": "Text Quality", + "search.filter_text_quality_all": "All", + "search.filter_text_quality_high": "High", + "search.filter_text_quality_low": "Low", + "search.filter_text_quality_medium": "Medium", + "search.filter_text_quality_no_text": "No text", + "search.heading": "Document Search", + "search.input_aria_label": "Search documents", + "search.input_placeholder": "Search documents by content, sender, tags, type...", + "search.loading_indicator": "Searching…", + "search.no_results": "No results found", + "search.page_title": "Search Documents", + "search.placeholder": "Search by filename, content, tags...", + "search.result_empty": "No documents found matching your query.", + "search.results_count": "{count} results found", + "search.saved_aria_save": "Save current search", + "search.saved_button": "Save Current", + "search.saved_empty": "No saved searches yet", + "search.saved_error": "Could not load saved searches", + "search.saved_label": "Saved Searches", + "search.saved_loading": "Loading...", + "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.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_setting_title": "Save this setting", + "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.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.build_date": "Build Date", + "status.container_id": "Container ID", + "status.git_commit": "Git Commit", + "status.last_check": "Last Check", + "status.page_title": "System Status", + "status.setting_label": "Setting", + "status.value_label": "Value", + "upload.browse_button": "Browse Files", + "upload.button_processing": "Processing...", + "upload.camera_button": "Take Photo / Scan Document", + "upload.download_button": "Download and Process", + "upload.downloading": "Downloading file from URL...", + "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_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_invalid_url": "Invalid URL format", + "upload.error_url_required": "Please enter a URL", + "upload.file_size_hint": "Maximum size: 500 MB per file", + "upload.file_types": "Allowed types: PDF, Office documents (Word, Excel, PowerPoint, etc.), Images", + "upload.filename_description": "Leave empty to use filename from URL", + "upload.filename_label": "Filename (optional)", + "upload.filename_placeholder": "my-document.pdf", + "upload.max_size": "Maximum file size: {size}", + "upload.page_title": "Upload Files", + "upload.section_device": "Upload from Device", + "upload.section_url": "Upload from URL", + "upload.select_file": "Select File", + "upload.success": "File uploaded successfully", + "upload.title": "Upload Document", + "upload.uploading": "Uploading...", + "upload.url_description": "Enter a direct link to a file (PDF, Office documents, or images)", + "upload.url_label": "File URL", + "upload.url_placeholder": "https://example.com/document.pdf" +} diff --git a/frontend/translations/bg.json b/frontend/translations/bg.json index 00c383d7..bf6d22cc 100644 --- a/frontend/translations/bg.json +++ b/frontend/translations/bg.json @@ -195,6 +195,7 @@ "common.confirm": "Confirm", "common.copied": "Copied!", "common.copy": "Copy", + "common.create": "Create", "common.created": "Created", "common.date": "Date", "common.delete": "Delete", @@ -202,6 +203,7 @@ "common.details": "Details", "common.disabled": "Disabled", "common.download": "Download", + "common.duplicate": "Duplicate", "common.edit": "Edit", "common.enabled": "Enabled", "common.error": "Error", @@ -218,6 +220,7 @@ "common.page": "Page", "common.pending": "Pending", "common.prev_page": "Previous page", + "common.previous": "Previous", "common.processing": "Processing", "common.refresh": "Refresh", "common.reset": "Reset", @@ -228,7 +231,9 @@ "common.select_placeholder": "— select —", "common.size": "Size", "common.status": "Status", + "common.submit": "Submit", "common.success": "Success", + "common.tags": "Tags", "common.type": "Type", "common.updated": "Updated", "common.upload": "Upload", @@ -236,6 +241,8 @@ "common.warning": "Warning", "common.yes": "Yes", "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", "cookie.notice_label": "Cookie notice", "cookie.policy_link": "Cookie Policy", @@ -398,6 +405,8 @@ "files.upload_modal_close": "Close upload progress", "files.upload_modal_header": "Uploading Files", "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", "footer.attributions": "Attributions", "footer.cookies": "Cookies", "footer.copyright": "DocuElevate {year}", @@ -577,6 +586,7 @@ "integrations.username_label": "Username", "language.bg": "Български", "language.ca": "Català", + "language.change_success": "Language changed to {language}", "language.changed": "Езикът беше променен на {language}", "language.cs": "Čeština", "language.da": "Dansk", @@ -602,6 +612,7 @@ "language.ro": "Română", "language.ru": "Русский", "language.selector": "Български", + "language.selector_label": "Select language", "language.sk": "Slovenčina", "language.sl": "Slovenščina", "language.sv": "Svenska", @@ -610,9 +621,15 @@ "language.zh": "中文", "nav.about": "About", "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", "nav.admin_actions": "Admin actions", "nav.admin_menu": "Admin menu", "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", "nav.backup_restore": "Backup & Restore", "nav.credentials": "Credentials", "nav.dark_mode": "Dark Mode", @@ -623,25 +640,34 @@ "nav.files": "Files", "nav.help": "Help", "nav.help_center": "Help Center", + "nav.imap": "Email Import", "nav.integrations": "Integrations", "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", "nav.main_navigation": "Main navigation", "nav.notifications": "Notifications", "nav.open_main_menu": "Open main menu", "nav.pipelines": "Pipelines", "nav.plan_designer": "Plan Designer", "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", "nav.queue_monitor": "Queue Monitor", "nav.scheduled_jobs": "Scheduled Jobs", "nav.search": "Search", "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", "nav.similarity": "Similarity", "nav.skip_to_content": "Skip to main content", "nav.status": "Status", + "nav.subscription": "Subscription", "nav.toggle_dark_mode": "Toggle dark mode", "nav.toggle_nav": "Toggle navigation menu", "nav.upload": "Upload", "nav.users": "Users", + "nav.version": "Version Info", "notifications.filter_all": "All", "notifications.filter_read": "Read only", "notifications.filter_unread": "Unread only", diff --git a/frontend/translations/ca.json b/frontend/translations/ca.json index b7a2727e..d36160ed 100644 --- a/frontend/translations/ca.json +++ b/frontend/translations/ca.json @@ -195,6 +195,7 @@ "common.confirm": "Confirm", "common.copied": "Copied!", "common.copy": "Copy", + "common.create": "Create", "common.created": "Created", "common.date": "Date", "common.delete": "Delete", @@ -202,6 +203,7 @@ "common.details": "Details", "common.disabled": "Disabled", "common.download": "Download", + "common.duplicate": "Duplicate", "common.edit": "Edit", "common.enabled": "Enabled", "common.error": "Error", @@ -218,6 +220,7 @@ "common.page": "Page", "common.pending": "Pending", "common.prev_page": "Previous page", + "common.previous": "Previous", "common.processing": "Processing", "common.refresh": "Refresh", "common.reset": "Reset", @@ -228,7 +231,9 @@ "common.select_placeholder": "— select —", "common.size": "Size", "common.status": "Status", + "common.submit": "Submit", "common.success": "Success", + "common.tags": "Tags", "common.type": "Type", "common.updated": "Updated", "common.upload": "Upload", @@ -236,6 +241,8 @@ "common.warning": "Warning", "common.yes": "Yes", "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", "cookie.notice_label": "Cookie notice", "cookie.policy_link": "Cookie Policy", @@ -331,7 +338,7 @@ "files.delete_modal_message": "Are you sure you want to delete this file?", "files.delete_modal_title": "Confirm Deletion", "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 – folders are processed recursively", "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", @@ -359,7 +366,7 @@ "files.filter_storage_provider": "Storage Provider", "files.filter_tags_aria": "Filter by tags (comma-separated)", "files.filter_tags_placeholder": "e.g. invoice,amazon", - "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.no_files": "No files found", "files.ocr_status": "OCR Status", @@ -398,6 +405,8 @@ "files.upload_modal_close": "Close upload progress", "files.upload_modal_header": "Uploading Files", "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", "footer.attributions": "Attributions", "footer.cookies": "Cookies", "footer.copyright": "DocuElevate {year}", @@ -577,7 +586,8 @@ "integrations.username_label": "Username", "language.bg": "Български", "language.ca": "Català", - "language.changed": "L'idioma s'ha canviat a {language}", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", "language.cs": "Čeština", "language.da": "Dansk", "language.de": "Deutsch", @@ -601,7 +611,8 @@ "language.pt": "Português", "language.ro": "Română", "language.ru": "Русский", - "language.selector": "Català", + "language.selector": "Language", + "language.selector_label": "Select language", "language.sk": "Slovenčina", "language.sl": "Slovenščina", "language.sv": "Svenska", @@ -610,9 +621,15 @@ "language.zh": "中文", "nav.about": "About", "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", "nav.admin_actions": "Admin actions", "nav.admin_menu": "Admin menu", "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", "nav.backup_restore": "Backup & Restore", "nav.credentials": "Credentials", "nav.dark_mode": "Dark Mode", @@ -623,25 +640,34 @@ "nav.files": "Files", "nav.help": "Help", "nav.help_center": "Help Center", + "nav.imap": "Email Import", "nav.integrations": "Integrations", "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", "nav.main_navigation": "Main navigation", "nav.notifications": "Notifications", "nav.open_main_menu": "Open main menu", "nav.pipelines": "Pipelines", "nav.plan_designer": "Plan Designer", "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", "nav.queue_monitor": "Queue Monitor", "nav.scheduled_jobs": "Scheduled Jobs", "nav.search": "Search", "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", "nav.similarity": "Similarity", "nav.skip_to_content": "Skip to main content", "nav.status": "Status", + "nav.subscription": "Subscription", "nav.toggle_dark_mode": "Toggle dark mode", "nav.toggle_nav": "Toggle navigation menu", "nav.upload": "Upload", "nav.users": "Users", + "nav.version": "Version Info", "notifications.filter_all": "All", "notifications.filter_read": "Read only", "notifications.filter_unread": "Unread only", diff --git a/frontend/translations/cs.json b/frontend/translations/cs.json index dd0609b7..6af65b34 100644 --- a/frontend/translations/cs.json +++ b/frontend/translations/cs.json @@ -195,6 +195,7 @@ "common.confirm": "Confirm", "common.copied": "Copied!", "common.copy": "Copy", + "common.create": "Create", "common.created": "Created", "common.date": "Date", "common.delete": "Delete", @@ -202,6 +203,7 @@ "common.details": "Details", "common.disabled": "Disabled", "common.download": "Download", + "common.duplicate": "Duplicate", "common.edit": "Edit", "common.enabled": "Enabled", "common.error": "Error", @@ -218,6 +220,7 @@ "common.page": "Page", "common.pending": "Pending", "common.prev_page": "Previous page", + "common.previous": "Previous", "common.processing": "Processing", "common.refresh": "Refresh", "common.reset": "Reset", @@ -228,7 +231,9 @@ "common.select_placeholder": "— select —", "common.size": "Size", "common.status": "Status", + "common.submit": "Submit", "common.success": "Success", + "common.tags": "Tags", "common.type": "Type", "common.updated": "Updated", "common.upload": "Upload", @@ -236,6 +241,8 @@ "common.warning": "Warning", "common.yes": "Yes", "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", "cookie.notice_label": "Cookie notice", "cookie.policy_link": "Cookie Policy", @@ -398,6 +405,8 @@ "files.upload_modal_close": "Close upload progress", "files.upload_modal_header": "Uploading Files", "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", "footer.attributions": "Attributions", "footer.cookies": "Cookies", "footer.copyright": "DocuElevate {year}", @@ -577,6 +586,7 @@ "integrations.username_label": "Username", "language.bg": "Български", "language.ca": "Català", + "language.change_success": "Language changed to {language}", "language.changed": "Jazyk byl změněn na {language}", "language.cs": "Čeština", "language.da": "Dansk", @@ -602,6 +612,7 @@ "language.ro": "Română", "language.ru": "Русский", "language.selector": "Čeština", + "language.selector_label": "Select language", "language.sk": "Slovenčina", "language.sl": "Slovenščina", "language.sv": "Svenska", @@ -610,9 +621,15 @@ "language.zh": "中文", "nav.about": "About", "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", "nav.admin_actions": "Admin actions", "nav.admin_menu": "Admin menu", "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", "nav.backup_restore": "Backup & Restore", "nav.credentials": "Credentials", "nav.dark_mode": "Dark Mode", @@ -623,25 +640,34 @@ "nav.files": "Files", "nav.help": "Help", "nav.help_center": "Help Center", + "nav.imap": "Email Import", "nav.integrations": "Integrations", "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", "nav.main_navigation": "Main navigation", "nav.notifications": "Notifications", "nav.open_main_menu": "Open main menu", "nav.pipelines": "Pipelines", "nav.plan_designer": "Plan Designer", "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", "nav.queue_monitor": "Queue Monitor", "nav.scheduled_jobs": "Scheduled Jobs", "nav.search": "Search", "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", "nav.similarity": "Similarity", "nav.skip_to_content": "Skip to main content", "nav.status": "Status", + "nav.subscription": "Subscription", "nav.toggle_dark_mode": "Toggle dark mode", "nav.toggle_nav": "Toggle navigation menu", "nav.upload": "Upload", "nav.users": "Users", + "nav.version": "Version Info", "notifications.filter_all": "All", "notifications.filter_read": "Read only", "notifications.filter_unread": "Unread only", diff --git a/frontend/translations/cy.json b/frontend/translations/cy.json new file mode 100644 index 00000000..d36160ed --- /dev/null +++ b/frontend/translations/cy.json @@ -0,0 +1,929 @@ +{ + "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", + "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.create_account": "Create account", + "auth.display_name_label": "Display Name", + "auth.email_label": "Email", + "auth.forgot_password": "Forgot Password?", + "auth.forgot_username": "Forgot username?", + "auth.login": "Log In", + "auth.login_title": "Log In", + "auth.logo_alt": "DocuElevate Logo", + "auth.logout": "Log Out", + "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.profile": "Profile", + "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_title": "Sign Up", + "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.active": "Active", + "common.all": "All", + "common.back": "Back", + "common.cancel": "Cancel", + "common.close": "Close", + "common.col_pending": "Pending", + "common.completed": "Completed", + "common.confirm": "Confirm", + "common.copied": "Copied!", + "common.copy": "Copy", + "common.create": "Create", + "common.created": "Created", + "common.date": "Date", + "common.delete": "Delete", + "common.description": "Description", + "common.details": "Details", + "common.disabled": "Disabled", + "common.download": "Download", + "common.duplicate": "Duplicate", + "common.edit": "Edit", + "common.enabled": "Enabled", + "common.error": "Error", + "common.failed": "Failed", + "common.filter": "Filter", + "common.inactive": "Inactive", + "common.info": "Info", + "common.loading": "Loading...", + "common.name": "Name", + "common.next": "Next", + "common.next_page": "Next page", + "common.no": "No", + "common.none": "None", + "common.page": "Page", + "common.pending": "Pending", + "common.prev_page": "Previous page", + "common.previous": "Previous", + "common.processing": "Processing", + "common.refresh": "Refresh", + "common.reset": "Reset", + "common.retry": "Retry", + "common.save": "Save", + "common.search": "Search", + "common.select": "Select", + "common.select_placeholder": "— select —", + "common.size": "Size", + "common.status": "Status", + "common.submit": "Submit", + "common.success": "Success", + "common.tags": "Tags", + "common.type": "Type", + "common.updated": "Updated", + "common.upload": "Upload", + "common.view": "View", + "common.warning": "Warning", + "common.yes": "Yes", + "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", + "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", + "cookie.notice_label": "Cookie notice", + "cookie.policy_link": "Cookie Policy", + "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.files_this_month": "Files This Month", + "dashboard.files_today": "Files Today", + "dashboard.ocr_processed": "OCR Processed", + "dashboard.quick_actions": "Quick Actions", + "dashboard.recent_activity": "Recent Activity", + "dashboard.storage_targets": "Storage Targets", + "dashboard.title": "Dashboard", + "dashboard.total_files": "Total Files", + "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_heading": "Oops, we couldn’t find that page!", + "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_title": "404 - Not Found", + "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_heading": "Oops! Something Went Wrong.", + "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_message": "You do not have permission to access this page.", + "error.not_found": "Page not found", + "error.not_found_message": "The page you are looking for does not exist.", + "error.server_error": "Internal Server Error", + "error.server_error_message": "Something went wrong. Please try again later.", + "error.unauthorized": "Unauthorized", + "error.unauthorized_message": "You need to log in to access this page.", + "files.action_delete": "Delete file", + "files.action_details": "View details", + "files.action_preview": "Quick preview", + "files.bulk_clear_selection": "Clear Selection", + "files.bulk_cloud_ocr": "Re-run Cloud OCR", + "files.bulk_delete": "Delete Selected", + "files.bulk_download": "Download as ZIP", + "files.bulk_reprocess": "Reprocess Selected", + "files.delete_modal_cancel": "Cancel", + "files.delete_modal_confirm": "Delete", + "files.delete_modal_message": "Are you sure you want to delete this file?", + "files.delete_modal_title": "Confirm Deletion", + "files.document_title": "Document Title", + "files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more – folders are processed recursively", + "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.filename": "Filename", + "files.files_selected": "files selected", + "files.filter_all_providers": "All Providers", + "files.filter_all_statuses": "All Statuses", + "files.filter_all_types": "All Types", + "files.filter_apply": "Apply Filters", + "files.filter_clear": "Clear", + "files.filter_date_from": "Date From", + "files.filter_date_from_aria": "Filter from date", + "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_ocr_all": "All Files", + "files.filter_ocr_good": "Good quality", + "files.filter_ocr_poor": "Poor 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_search_label": "Search Filename", + "files.filter_search_placeholder": "Enter filename...", + "files.filter_storage_provider": "Storage Provider", + "files.filter_tags_aria": "Filter by tags (comma-separated)", + "files.filter_tags_placeholder": "e.g. invoice,amazon", + "files.fulltext_search_label": "Full-Text Search (OCR text, metadata, tags)", + "files.fulltext_search_placeholder": "Search document content, sender, tags, type...", + "files.no_files": "No files found", + "files.ocr_status": "OCR Status", + "files.page_title": "File Records", + "files.pagination_files": "files", + "files.pagination_first": "First", + "files.pagination_last": "Last", + "files.pagination_nav_aria": "File list pagination", + "files.pagination_next": "Next", + "files.pagination_of": "of", + "files.pagination_previous": "Previous", + "files.pagination_showing": "Showing", + "files.preview_modal_close": "Close 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.saved_searches_empty": "No saved searches yet", + "files.saved_searches_error": "Could not load saved searches", + "files.saved_searches_label": "Saved Searches", + "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_title": "Search Results", + "files.status_duplicate": "Duplicate", + "files.table_actions": "Actions", + "files.table_aria": "File records", + "files.table_created_at": "Created At", + "files.table_empty": "No files found", + "files.table_id": "ID", + "files.table_mime_type": "MIME Type", + "files.table_original_filename": "Original Filename", + "files.table_select_all": "Select all files on this page", + "files.tags": "Tags", + "files.title": "Files", + "files.upload_modal_aria": "Upload progress", + "files.upload_modal_close": "Close upload progress", + "files.upload_modal_header": "Uploading Files", + "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", + "footer.attributions": "Attributions", + "footer.cookies": "Cookies", + "footer.copyright": "DocuElevate {year}", + "footer.imprint": "Imprint", + "footer.license": "License", + "footer.navigation": "Footer navigation", + "footer.privacy": "Privacy", + "footer.terms": "Terms", + "footer.version": "Version {version}", + "help.destinations_dropbox": "Dropbox", + "help.destinations_dropbox_desc": "OAuth-linked. Files land in your chosen folder.", + "help.destinations_email": "Email Forwarding", + "help.destinations_email_desc": "Processed files sent as SMTP attachments.", + "help.destinations_google_drive": "Google Drive", + "help.destinations_google_drive_desc": "Service account or OAuth. Supports shared drives.", + "help.destinations_heading": "Destinations – Where Documents Go", + "help.destinations_nextcloud": "Nextcloud / WebDAV", + "help.destinations_nextcloud_desc": "Self-hosted cloud storage via WebDAV.", + "help.destinations_onedrive": "OneDrive", + "help.destinations_onedrive_desc": "Microsoft Graph API integration.", + "help.destinations_paperless": "Paperless-ngx", + "help.destinations_paperless_desc": "Push documents straight into Paperless for archival.", + "help.destinations_s3": "Amazon S3", + "help.destinations_s3_desc": "Any S3-compatible bucket (AWS, MinIO, Wasabi).", + "help.destinations_sftp": "SFTP / FTP", + "help.destinations_sftp_desc": "Secure file transfer to any server.", + "help.destinations_webhook": "Webhook", + "help.destinations_webhook_desc": "POST metadata to any external endpoint.", + "help.documentation": "Documentation", + "help.faq": "Frequently Asked Questions", + "help.faq_1_a": "Navigate to the Upload page, drag-and-drop your files or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.faq_1_q": "How do I upload documents?", + "help.faq_2_a": "PDF, JPEG, PNG, TIFF, BMP, GIF, DOCX, XLSX, PPTX, ODT, ODS, TXT, RTF, and HTML. Non-PDF files are automatically converted to PDF before processing.", + "help.faq_2_q": "Which file formats are supported?", + "help.faq_3_a": "Yes. Go to Email Ingestion, add an IMAP account, and DocuElevate will poll for new messages and process attachments automatically.", + "help.faq_3_q": "Can I ingest documents from email?", + "help.faq_4_a": "Pipelines let you chain processing steps – OCR, AI extraction, format conversion – and route the result to one or more destinations. Create and manage them from the Pipelines page.", + "help.faq_4_q": "How do processing pipelines work?", + "help.faq_5_a": "DocuElevate encrypts credentials at rest, communicates over TLS, and never stores your documents longer than necessary. See the Privacy Notice for full details.", + "help.faq_5_q": "Is my data secure?", + "help.faq_heading": "Frequently Asked Questions", + "help.getting_started": "Getting Started", + "help.heading": "Help Center", + "help.page_title": "Help Center", + "help.privacy_notice": "Privacy Notice", + "help.quickstart_heading": "Quick Start", + "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_upload": "Upload Documents", + "help.quickstart_upload_desc": "Drag & drop files onto the Upload page or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.quickstart_workflows": "Automate Workflows", + "help.quickstart_workflows_desc": "Create Pipelines to define multi-step processing and routing rules. Combine OCR, AI extraction, format conversion, and delivery in a single flow.", + "help.sources_email_ingestion": "Email Ingestion (IMAP)", + "help.sources_email_ingestion_desc": "Forward documents to a dedicated mailbox. Under Email Ingestion, add one or more IMAP accounts. DocuElevate polls for new messages and processes attachments automatically.", + "help.sources_heading": "Sources – Getting Documents In", + "help.sources_rest_api": "REST API", + "help.sources_rest_api_desc": "Integrate programmatically by POST-ing files to /api/upload. Ideal for scripts, watched folders, scanners, or third-party tools like Zapier and n8n.", + "help.sources_scanner": "Scanner & Mobile", + "help.sources_scanner_desc": "Point network scanners at DocuElevate's upload endpoint or use any mobile scanning app that supports custom HTTP destinations.", + "help.sources_web_upload": "Web Upload", + "help.sources_web_upload_desc": "The fastest way to get started. Open the Upload page, drop one or more files, and DocuElevate takes care of the rest. Supported formats include PDF, JPEG, PNG, TIFF, DOCX, XLSX, and more.", + "help.subheading": "Everything you need to get the most out of DocuElevate. Browse topics below or search for what you need.", + "help.support": "Support", + "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_heading": "Contact Support", + "help.support_ticket_button": "Submit a Ticket", + "help.support_ticket_heading": "Open a Support Ticket", + "help.title": "Help Center", + "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_heading": "Workflows & Pipelines", + "help.workflows_step_1": "Convert to PDF", + "help.workflows_step_1_create": "Go to Pipelines in the main menu.", + "help.workflows_step_2": "OCR – extract text", + "help.workflows_step_2_create": "Click New Pipeline and give it a name.", + "help.workflows_step_3": "AI metadata extraction", + "help.workflows_step_3_create": "Add the processing steps you need.", + "help.workflows_step_4": "Deliver to one or more destinations", + "help.workflows_step_4_create": "Choose one or more delivery destinations.", + "help.workflows_step_5_create": "Save – new documents will be processed through this pipeline automatically.", + "help.workflows_typical_steps": "Typical Steps", + "help.workflows_what_is": "What is a Pipeline?", + "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_ingestion": "Email & URL-based document ingestion", + "index.capabilities_ocr": "OCR & metadata extraction with AI", + "index.capabilities_paperless": "Paperless-ngx integration for document management", + "index.capabilities_title": "Capabilities", + "index.capabilities_workflows": "Automated classification & routing workflows", + "index.cta_description": "Join teams already automating their document processing with DocuElevate.", + "index.cta_heading": "Ready to elevate your document workflow?", + "index.cta_pricing": "See pricing", + "index.cta_signup": "Create a free account", + "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_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_desc": "Route processed files to Dropbox, Google Drive, OneDrive, Amazon S3, Nextcloud, Paperless NGX, WebDAV, FTP/SFTP, and more.", + "index.feature_email": "Email & IMAP Ingestion", + "index.feature_email_desc": "Automatically pull documents from Gmail or any IMAP mailbox — no manual uploads needed.", + "index.feature_ocr": "OCR & Text Extraction", + "index.feature_ocr_desc": "Azure Document Intelligence converts scanned PDFs and images into fully searchable text automatically.", + "index.feature_pipelines": "Custom Pipelines", + "index.feature_pipelines_desc": "Build processing pipelines with configurable steps — OCR, AI extraction, format conversion, and storage routing in any order.", + "index.feature_search": "Full-Text Search", + "index.feature_search_desc": "Instantly find any document by content, metadata, or tags across your entire archive.", + "index.feature_section_title": "Everything you need for smart document workflows", + "index.getting_started": "Getting Started", + "index.getting_started_1": "Configure integrations via System Status", + "index.getting_started_2": "Upload your first document", + "index.getting_started_3": "Review results in Files", + "index.getting_started_learn": "Learn more about DocuElevate", + "index.hero_description": "DocuElevate ingests your documents, runs OCR, extracts metadata with AI, and routes files to Dropbox, Google Drive, OneDrive, S3, Nextcloud, and more — all in one seamless pipeline.", + "index.hero_heading": "From upload to insight — automatically.", + "index.hero_login": "Log In", + "index.hero_pricing": "View Plans & Pricing", + "index.hero_signup": "Get Started — it’s free", + "index.integrations_active": "Active integrations", + "index.integrations_storage": "Storage targets", + "index.integrations_title": "Integrations", + "index.integrations_view_status": "View system status", + "index.page_title_dashboard": "Dashboard", + "index.page_title_public": "Intelligent Document Processing", + "index.platform_overview": "Platform overview", + "index.quick_actions": "Quick Actions", + "index.quick_documents": "My Documents", + "index.quick_documents_desc": "Browse your processed files", + "index.quick_search": "Search", + "index.quick_search_desc": "Full-text search across documents", + "index.quick_subscription": "My Subscription", + "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_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_subtitle": "Intelligent document processing & management", + "index.stat_active_integrations": "Active Integrations", + "index.stat_active_users": "Active users", + "index.stat_files_month": "Files this month", + "index.stat_files_today": "Files today", + "index.stat_storage_targets": "Storage Targets", + "index.stat_total_files": "Total files", + "index.tier_plan": "Plan", + "index.tier_upgrade": "Upgrade", + "index.tier_view_details": "View full details", + "index.upgrade_daily_limits": "Higher daily & monthly limits", + "index.upgrade_description": "Unlock more documents, more destinations and priority support.", + "index.upgrade_destinations": "More storage destinations", + "index.upgrade_ocr_pages": "More OCR pages", + "index.upgrade_plan": "Upgrade your plan", + "index.upgrade_view_pricing": "View plans & pricing", + "index.usage_lifetime": "Lifetime files", + "index.usage_month": "Files this month", + "index.usage_my_usage": "My usage", + "index.usage_today": "Files today", + "index.usage_unlimited": "Unlimited", + "integrations.configure": "Configure", + "integrations.connect": "Connect", + "integrations.connected": "Connected", + "integrations.disconnect": "Disconnect", + "integrations.empty_state": "No integrations configured", + "integrations.folder_label": "Folder", + "integrations.host_label": "Host", + "integrations.imap_settings": "IMAP Settings", + "integrations.not_connected": "Not Connected", + "integrations.page_title": "Integrations", + "integrations.password_label": "Password", + "integrations.port_label": "Port", + "integrations.title": "Integrations", + "integrations.username_label": "Username", + "language.bg": "Български", + "language.ca": "Català", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", + "language.cs": "Čeština", + "language.da": "Dansk", + "language.de": "Deutsch", + "language.el": "Ελληνικά", + "language.en": "English", + "language.es": "Español", + "language.et": "Eesti", + "language.fi": "Suomi", + "language.fr": "Français", + "language.ga": "Gaeilge", + "language.hr": "Hrvatski", + "language.hu": "Magyar", + "language.is": "Íslenska", + "language.it": "Italiano", + "language.lb": "Lëtzebuergesch", + "language.lt": "Lietuvių", + "language.lv": "Latviešu", + "language.nb": "Norsk", + "language.nl": "Nederlands", + "language.pl": "Polski", + "language.pt": "Português", + "language.ro": "Română", + "language.ru": "Русский", + "language.selector": "Language", + "language.selector_label": "Select language", + "language.sk": "Slovenčina", + "language.sl": "Slovenščina", + "language.sv": "Svenska", + "language.tr": "Türkçe", + "language.uk": "Українська", + "language.zh": "中文", + "nav.about": "About", + "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", + "nav.admin_actions": "Admin actions", + "nav.admin_menu": "Admin menu", + "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", + "nav.backup_restore": "Backup & Restore", + "nav.credentials": "Credentials", + "nav.dark_mode": "Dark Mode", + "nav.dashboard": "Dashboard", + "nav.developer_docs": "Developer Docs", + "nav.duplicates": "Duplicates", + "nav.file_manager": "File Manager", + "nav.files": "Files", + "nav.help": "Help", + "nav.help_center": "Help Center", + "nav.imap": "Email Import", + "nav.integrations": "Integrations", + "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", + "nav.main_navigation": "Main navigation", + "nav.notifications": "Notifications", + "nav.open_main_menu": "Open main menu", + "nav.pipelines": "Pipelines", + "nav.plan_designer": "Plan Designer", + "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", + "nav.queue_monitor": "Queue Monitor", + "nav.scheduled_jobs": "Scheduled Jobs", + "nav.search": "Search", + "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", + "nav.similarity": "Similarity", + "nav.skip_to_content": "Skip to main content", + "nav.status": "Status", + "nav.subscription": "Subscription", + "nav.toggle_dark_mode": "Toggle dark mode", + "nav.toggle_nav": "Toggle navigation menu", + "nav.upload": "Upload", + "nav.users": "Users", + "nav.version": "Version Info", + "notifications.filter_all": "All", + "notifications.filter_read": "Read only", + "notifications.filter_unread": "Unread only", + "notifications.manage_desc": "Manage your notification inbox, targets, and event preferences", + "notifications.mark_all_read": "Mark All as Read", + "notifications.mark_all_read_btn": "Mark all read", + "notifications.mark_read": "Mark as Read", + "notifications.no_notifications": "No notifications", + "notifications.page_title": "Notifications", + "notifications.tab_inbox": "Inbox", + "notifications.tab_settings": "Settings", + "notifications.title": "Notifications", + "notifications.unread_count": "{count} unread notifications", + "pipelines.active_label": "Active", + "pipelines.add_step_btn": "Add Step", + "pipelines.create": "Create Pipeline", + "pipelines.custom_label_label": "Custom Label", + "pipelines.default_label": "Default", + "pipelines.description_label": "Description", + "pipelines.description_placeholder": "Optional description", + "pipelines.disabled_label": "Disabled", + "pipelines.edit": "Edit Pipeline", + "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.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)", + "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.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_pipeline_label": "System pipeline (visible to all users)", + "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.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_date_from": "Date From", + "search.filter_date_to": "Date To", + "search.filter_document_type": "Document Type", + "search.filter_document_type_placeholder": "e.g. Invoice", + "search.filter_language": "Language", + "search.filter_language_placeholder": "e.g. de", + "search.filter_sender": "Sender", + "search.filter_sender_placeholder": "e.g. ACME Corp", + "search.filter_tags": "Tags", + "search.filter_tags_placeholder": "e.g. amazon", + "search.filter_text_quality": "Text Quality", + "search.filter_text_quality_all": "All", + "search.filter_text_quality_high": "High", + "search.filter_text_quality_low": "Low", + "search.filter_text_quality_medium": "Medium", + "search.filter_text_quality_no_text": "No text", + "search.heading": "Document Search", + "search.input_aria_label": "Search documents", + "search.input_placeholder": "Search documents by content, sender, tags, type...", + "search.loading_indicator": "Searching…", + "search.no_results": "No results found", + "search.page_title": "Search Documents", + "search.placeholder": "Search by filename, content, tags...", + "search.result_empty": "No documents found matching your query.", + "search.results_count": "{count} results found", + "search.saved_aria_save": "Save current search", + "search.saved_button": "Save Current", + "search.saved_empty": "No saved searches yet", + "search.saved_error": "Could not load saved searches", + "search.saved_label": "Saved Searches", + "search.saved_loading": "Loading...", + "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.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_setting_title": "Save this setting", + "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.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.build_date": "Build Date", + "status.container_id": "Container ID", + "status.git_commit": "Git Commit", + "status.last_check": "Last Check", + "status.page_title": "System Status", + "status.setting_label": "Setting", + "status.value_label": "Value", + "upload.browse_button": "Browse Files", + "upload.button_processing": "Processing...", + "upload.camera_button": "Take Photo / Scan Document", + "upload.download_button": "Download and Process", + "upload.downloading": "Downloading file from URL...", + "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_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_invalid_url": "Invalid URL format", + "upload.error_url_required": "Please enter a URL", + "upload.file_size_hint": "Maximum size: 500 MB per file", + "upload.file_types": "Allowed types: PDF, Office documents (Word, Excel, PowerPoint, etc.), Images", + "upload.filename_description": "Leave empty to use filename from URL", + "upload.filename_label": "Filename (optional)", + "upload.filename_placeholder": "my-document.pdf", + "upload.max_size": "Maximum file size: {size}", + "upload.page_title": "Upload Files", + "upload.section_device": "Upload from Device", + "upload.section_url": "Upload from URL", + "upload.select_file": "Select File", + "upload.success": "File uploaded successfully", + "upload.title": "Upload Document", + "upload.uploading": "Uploading...", + "upload.url_description": "Enter a direct link to a file (PDF, Office documents, or images)", + "upload.url_label": "File URL", + "upload.url_placeholder": "https://example.com/document.pdf" +} diff --git a/frontend/translations/da.json b/frontend/translations/da.json index bcca435e..0dfc33f5 100644 --- a/frontend/translations/da.json +++ b/frontend/translations/da.json @@ -195,6 +195,7 @@ "common.confirm": "Confirm", "common.copied": "Copied!", "common.copy": "Copy", + "common.create": "Create", "common.created": "Created", "common.date": "Date", "common.delete": "Delete", @@ -202,6 +203,7 @@ "common.details": "Details", "common.disabled": "Disabled", "common.download": "Download", + "common.duplicate": "Duplicate", "common.edit": "Edit", "common.enabled": "Enabled", "common.error": "Error", @@ -218,6 +220,7 @@ "common.page": "Page", "common.pending": "Pending", "common.prev_page": "Previous page", + "common.previous": "Previous", "common.processing": "Processing", "common.refresh": "Refresh", "common.reset": "Reset", @@ -228,7 +231,9 @@ "common.select_placeholder": "— select —", "common.size": "Size", "common.status": "Status", + "common.submit": "Submit", "common.success": "Success", + "common.tags": "Tags", "common.type": "Type", "common.updated": "Updated", "common.upload": "Upload", @@ -236,6 +241,8 @@ "common.warning": "Warning", "common.yes": "Yes", "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", "cookie.notice_label": "Cookie notice", "cookie.policy_link": "Cookie Policy", @@ -398,6 +405,8 @@ "files.upload_modal_close": "Close upload progress", "files.upload_modal_header": "Uploading Files", "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", "footer.attributions": "Attributions", "footer.cookies": "Cookies", "footer.copyright": "DocuElevate {year}", @@ -577,6 +586,7 @@ "integrations.username_label": "Username", "language.bg": "Български", "language.ca": "Català", + "language.change_success": "Language changed to {language}", "language.changed": "Sproget blev ændret til {language}", "language.cs": "Čeština", "language.da": "Dansk", @@ -602,6 +612,7 @@ "language.ro": "Română", "language.ru": "Русский", "language.selector": "Dansk", + "language.selector_label": "Select language", "language.sk": "Slovenčina", "language.sl": "Slovenščina", "language.sv": "Svenska", @@ -610,9 +621,15 @@ "language.zh": "中文", "nav.about": "About", "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", "nav.admin_actions": "Admin actions", "nav.admin_menu": "Admin menu", "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", "nav.backup_restore": "Backup & Restore", "nav.credentials": "Credentials", "nav.dark_mode": "Dark Mode", @@ -623,25 +640,34 @@ "nav.files": "Files", "nav.help": "Help", "nav.help_center": "Help Center", + "nav.imap": "Email Import", "nav.integrations": "Integrations", "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", "nav.main_navigation": "Main navigation", "nav.notifications": "Notifications", "nav.open_main_menu": "Open main menu", "nav.pipelines": "Pipelines", "nav.plan_designer": "Plan Designer", "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", "nav.queue_monitor": "Queue Monitor", "nav.scheduled_jobs": "Scheduled Jobs", "nav.search": "Search", "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", "nav.similarity": "Similarity", "nav.skip_to_content": "Skip to main content", "nav.status": "Status", + "nav.subscription": "Subscription", "nav.toggle_dark_mode": "Toggle dark mode", "nav.toggle_nav": "Toggle navigation menu", "nav.upload": "Upload", "nav.users": "Users", + "nav.version": "Version Info", "notifications.filter_all": "All", "notifications.filter_read": "Read only", "notifications.filter_unread": "Unread only", diff --git a/frontend/translations/el.json b/frontend/translations/el.json index bef8586b..d36160ed 100644 --- a/frontend/translations/el.json +++ b/frontend/translations/el.json @@ -195,6 +195,7 @@ "common.confirm": "Confirm", "common.copied": "Copied!", "common.copy": "Copy", + "common.create": "Create", "common.created": "Created", "common.date": "Date", "common.delete": "Delete", @@ -202,6 +203,7 @@ "common.details": "Details", "common.disabled": "Disabled", "common.download": "Download", + "common.duplicate": "Duplicate", "common.edit": "Edit", "common.enabled": "Enabled", "common.error": "Error", @@ -218,6 +220,7 @@ "common.page": "Page", "common.pending": "Pending", "common.prev_page": "Previous page", + "common.previous": "Previous", "common.processing": "Processing", "common.refresh": "Refresh", "common.reset": "Reset", @@ -228,7 +231,9 @@ "common.select_placeholder": "— select —", "common.size": "Size", "common.status": "Status", + "common.submit": "Submit", "common.success": "Success", + "common.tags": "Tags", "common.type": "Type", "common.updated": "Updated", "common.upload": "Upload", @@ -236,6 +241,8 @@ "common.warning": "Warning", "common.yes": "Yes", "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", "cookie.notice_label": "Cookie notice", "cookie.policy_link": "Cookie Policy", @@ -331,7 +338,7 @@ "files.delete_modal_message": "Are you sure you want to delete this file?", "files.delete_modal_title": "Confirm Deletion", "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 – folders are processed recursively", "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", @@ -359,7 +366,7 @@ "files.filter_storage_provider": "Storage Provider", "files.filter_tags_aria": "Filter by tags (comma-separated)", "files.filter_tags_placeholder": "e.g. invoice,amazon", - "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.no_files": "No files found", "files.ocr_status": "OCR Status", @@ -398,6 +405,8 @@ "files.upload_modal_close": "Close upload progress", "files.upload_modal_header": "Uploading Files", "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", "footer.attributions": "Attributions", "footer.cookies": "Cookies", "footer.copyright": "DocuElevate {year}", @@ -577,7 +586,8 @@ "integrations.username_label": "Username", "language.bg": "Български", "language.ca": "Català", - "language.changed": "Η γλώσσα άλλαξε σε {language}", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", "language.cs": "Čeština", "language.da": "Dansk", "language.de": "Deutsch", @@ -601,7 +611,8 @@ "language.pt": "Português", "language.ro": "Română", "language.ru": "Русский", - "language.selector": "Ελληνικά", + "language.selector": "Language", + "language.selector_label": "Select language", "language.sk": "Slovenčina", "language.sl": "Slovenščina", "language.sv": "Svenska", @@ -610,9 +621,15 @@ "language.zh": "中文", "nav.about": "About", "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", "nav.admin_actions": "Admin actions", "nav.admin_menu": "Admin menu", "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", "nav.backup_restore": "Backup & Restore", "nav.credentials": "Credentials", "nav.dark_mode": "Dark Mode", @@ -623,25 +640,34 @@ "nav.files": "Files", "nav.help": "Help", "nav.help_center": "Help Center", + "nav.imap": "Email Import", "nav.integrations": "Integrations", "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", "nav.main_navigation": "Main navigation", "nav.notifications": "Notifications", "nav.open_main_menu": "Open main menu", "nav.pipelines": "Pipelines", "nav.plan_designer": "Plan Designer", "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", "nav.queue_monitor": "Queue Monitor", "nav.scheduled_jobs": "Scheduled Jobs", "nav.search": "Search", "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", "nav.similarity": "Similarity", "nav.skip_to_content": "Skip to main content", "nav.status": "Status", + "nav.subscription": "Subscription", "nav.toggle_dark_mode": "Toggle dark mode", "nav.toggle_nav": "Toggle navigation menu", "nav.upload": "Upload", "nav.users": "Users", + "nav.version": "Version Info", "notifications.filter_all": "All", "notifications.filter_read": "Read only", "notifications.filter_unread": "Unread only", diff --git a/frontend/translations/en.json b/frontend/translations/en.json index 59fdcb1a..d36160ed 100644 --- a/frontend/translations/en.json +++ b/frontend/translations/en.json @@ -1,903 +1,929 @@ { + "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", - "nav.dashboard": "Dashboard", - "nav.upload": "Upload", - "nav.files": "Files", - "nav.search": "Search", - "nav.pipelines": "Pipelines", - "nav.integrations": "Integrations", - "nav.help": "Help", - "nav.notifications": "Notifications", - "nav.pricing": "Pricing", - "nav.about": "About", - "nav.admin": "Admin", - "nav.settings": "Settings", - "nav.users": "Users", - "nav.plan_designer": "Plan Designer", - "nav.credentials": "Credentials", - "nav.file_manager": "File Manager", - "nav.duplicates": "Duplicates", - "nav.similarity": "Similarity", - "nav.queue_monitor": "Queue Monitor", - "nav.scheduled_jobs": "Scheduled Jobs", - "nav.backup_restore": "Backup & Restore", - "nav.status": "Status", - "nav.api_docs": "API Docs", - "nav.developer_docs": "Developer Docs", - "nav.dark_mode": "Dark Mode", - "nav.light_mode": "Light Mode", - "nav.toggle_dark_mode": "Toggle dark mode", - "nav.toggle_nav": "Toggle navigation menu", - "nav.open_main_menu": "Open main menu", - "nav.skip_to_content": "Skip to main content", - "nav.main_navigation": "Main navigation", - "nav.admin_menu": "Admin menu", - "nav.admin_actions": "Admin actions", - "nav.help_center": "Help Center", + "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.create_account": "Create account", + "auth.display_name_label": "Display Name", + "auth.email_label": "Email", + "auth.forgot_password": "Forgot Password?", + "auth.forgot_username": "Forgot username?", "auth.login": "Log In", + "auth.login_title": "Log In", + "auth.logo_alt": "DocuElevate Logo", "auth.logout": "Log Out", - "auth.signup": "Sign Up", "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.profile": "Profile", - "footer.copyright": "DocuElevate {year}", - "footer.privacy": "Privacy", - "footer.imprint": "Imprint", - "footer.terms": "Terms", - "footer.cookies": "Cookies", - "footer.license": "License", - "footer.attributions": "Attributions", - "footer.version": "Version {version}", - "footer.navigation": "Footer navigation", + "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_title": "Sign Up", + "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.active": "Active", + "common.all": "All", + "common.back": "Back", + "common.cancel": "Cancel", + "common.close": "Close", + "common.col_pending": "Pending", + "common.completed": "Completed", + "common.confirm": "Confirm", + "common.copied": "Copied!", + "common.copy": "Copy", + "common.create": "Create", + "common.created": "Created", + "common.date": "Date", + "common.delete": "Delete", + "common.description": "Description", + "common.details": "Details", + "common.disabled": "Disabled", + "common.download": "Download", + "common.duplicate": "Duplicate", + "common.edit": "Edit", + "common.enabled": "Enabled", + "common.error": "Error", + "common.failed": "Failed", + "common.filter": "Filter", + "common.inactive": "Inactive", + "common.info": "Info", + "common.loading": "Loading...", + "common.name": "Name", + "common.next": "Next", + "common.next_page": "Next page", + "common.no": "No", + "common.none": "None", + "common.page": "Page", + "common.pending": "Pending", + "common.prev_page": "Previous page", + "common.previous": "Previous", + "common.processing": "Processing", + "common.refresh": "Refresh", + "common.reset": "Reset", + "common.retry": "Retry", + "common.save": "Save", + "common.search": "Search", + "common.select": "Select", + "common.select_placeholder": "— select —", + "common.size": "Size", + "common.status": "Status", + "common.submit": "Submit", + "common.success": "Success", + "common.tags": "Tags", + "common.type": "Type", + "common.updated": "Updated", + "common.upload": "Upload", + "common.view": "View", + "common.warning": "Warning", + "common.yes": "Yes", + "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", + "cookie.notice_label": "Cookie notice", "cookie.policy_link": "Cookie Policy", "cookie.privacy_link": "Privacy Notice", - "cookie.accept": "Got it", - "cookie.notice_label": "Cookie notice", - "common.save": "Save", - "common.cancel": "Cancel", - "common.delete": "Delete", - "common.edit": "Edit", - "common.close": "Close", - "common.confirm": "Confirm", - "common.back": "Back", - "common.next": "Next", - "common.loading": "Loading...", - "common.error": "Error", - "common.success": "Success", - "common.warning": "Warning", - "common.info": "Info", - "common.yes": "Yes", - "common.no": "No", - "common.search": "Search", - "common.filter": "Filter", - "common.reset": "Reset", - "common.refresh": "Refresh", - "common.download": "Download", - "common.actions": "Actions", - "common.details": "Details", - "common.name": "Name", - "common.description": "Description", - "common.type": "Type", - "common.status": "Status", - "common.date": "Date", - "common.size": "Size", - "common.created": "Created", - "common.updated": "Updated", - "common.enabled": "Enabled", - "common.disabled": "Disabled", - "common.active": "Active", - "common.inactive": "Inactive", - "common.all": "All", - "common.none": "None", - "common.select": "Select", - "common.upload": "Upload", - "common.processing": "Processing", - "common.completed": "Completed", - "common.failed": "Failed", - "common.pending": "Pending", - "common.retry": "Retry", - "common.view": "View", - "common.copy": "Copy", - "common.copied": "Copied!", - "language.selector": "Language", - "language.en": "English", - "language.de": "Deutsch", - "language.fr": "Français", - "language.es": "Español", - "language.it": "Italiano", - "language.pt": "Português", - "language.nl": "Nederlands", - "language.pl": "Polski", - "language.zh": "中文", - "language.ru": "Русский", - "language.changed": "Language changed to {language}", + "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.files_this_month": "Files This Month", + "dashboard.files_today": "Files Today", + "dashboard.ocr_processed": "OCR Processed", + "dashboard.quick_actions": "Quick Actions", + "dashboard.recent_activity": "Recent Activity", + "dashboard.storage_targets": "Storage Targets", "dashboard.title": "Dashboard", "dashboard.total_files": "Total Files", - "dashboard.files_today": "Files Today", - "dashboard.files_this_month": "Files This Month", - "dashboard.ocr_processed": "OCR Processed", - "dashboard.active_integrations": "Active Integrations", - "dashboard.storage_targets": "Storage Targets", - "dashboard.recent_activity": "Recent Activity", - "dashboard.quick_actions": "Quick Actions", "dashboard.welcome": "Welcome to DocuElevate", - "upload.title": "Upload Document", - "upload.drag_drop": "Drag & drop files here or click to browse", - "upload.select_file": "Select File", - "upload.uploading": "Uploading...", - "upload.success": "File uploaded successfully", - "upload.error": "Upload failed", - "upload.max_size": "Maximum file size: {size}", - "files.title": "Files", - "files.no_files": "No files found", - "files.filename": "Filename", - "files.document_title": "Document Title", - "files.uploaded": "Uploaded", - "files.file_size": "File Size", - "files.ocr_status": "OCR Status", - "files.tags": "Tags", - "search.title": "Search Documents", - "search.placeholder": "Search by filename, content, tags...", - "search.no_results": "No results found", - "search.results_count": "{count} results found", - "settings.title": "Settings", - "settings.save_success": "Setting saved successfully", - "settings.save_error": "Failed to save setting", - "settings.reset_confirm": "Are you sure you want to reset this setting?", - "integrations.title": "Integrations", - "integrations.connect": "Connect", - "integrations.disconnect": "Disconnect", - "integrations.connected": "Connected", - "integrations.not_connected": "Not Connected", - "integrations.configure": "Configure", - "pipelines.title": "Processing Pipelines", - "pipelines.create": "Create Pipeline", - "pipelines.edit": "Edit Pipeline", - "help.title": "Help Center", - "help.getting_started": "Getting Started", - "help.faq": "Frequently Asked Questions", - "help.documentation": "Documentation", - "help.support": "Support", + "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_heading": "Oops, we couldn’t find that page!", + "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_title": "404 - Not Found", + "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_heading": "Oops! Something Went Wrong.", + "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_message": "You do not have permission to access this page.", "error.not_found": "Page not found", "error.not_found_message": "The page you are looking for does not exist.", "error.server_error": "Internal Server Error", "error.server_error_message": "Something went wrong. Please try again later.", "error.unauthorized": "Unauthorized", "error.unauthorized_message": "You need to log in to access this page.", - "error.forbidden": "Forbidden", - "error.forbidden_message": "You do not have permission to access this page.", - "notifications.title": "Notifications", - "notifications.mark_read": "Mark as Read", - "notifications.mark_all_read": "Mark All as Read", - "notifications.no_notifications": "No notifications", - "notifications.unread_count": "{count} unread notifications", - "upload.page_title": "Upload Files", - "upload.section_device": "Upload from Device", - "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.browse_button": "Browse Files", - "upload.file_types": "Allowed types: PDF, Office documents (Word, Excel, PowerPoint, etc.), Images", - "upload.file_size_hint": "Maximum size: 500 MB per file", - "upload.camera_button": "Take Photo / Scan Document", - "upload.section_url": "Upload from URL", - "upload.url_label": "File URL", - "upload.url_placeholder": "https://example.com/document.pdf", - "upload.url_description": "Enter a direct link to a file (PDF, Office documents, or images)", - "upload.filename_label": "Filename (optional)", - "upload.filename_placeholder": "my-document.pdf", - "upload.filename_description": "Leave empty to use filename from URL", - "upload.download_button": "Download and Process", - "upload.error_url_required": "Please enter a URL", - "upload.error_invalid_url": "Invalid URL format", - "upload.downloading": "Downloading file from URL...", - "upload.button_processing": "Processing...", - "files.page_title": "File Records", - "files.drop_overlay_title": "Drop files or folders anywhere to upload", - "files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more – folders are processed recursively", - "files.upload_modal_header": "Uploading Files", - "files.queue_banner_link": "View Queue", - "files.filter_search_placeholder": "Enter filename...", - "files.filter_mime_type": "MIME Type", - "files.filter_all_types": "All Types", - "files.filter_all_statuses": "All Statuses", - "files.filter_date_from": "Date From", - "files.filter_date_to": "Date To", - "files.filter_storage_provider": "Storage Provider", - "files.filter_all_providers": "All Providers", - "files.filter_tags_placeholder": "e.g. invoice,amazon", - "files.filter_ocr_quality": "OCR Quality", - "files.filter_ocr_all": "All Files", - "files.filter_ocr_poor": "Poor quality", - "files.filter_ocr_good": "Good quality", - "files.filter_ocr_unchecked": "Not yet assessed", - "files.filter_apply": "Apply Filters", - "files.filter_clear": "Clear", - "files.saved_searches_label": "Saved Searches", - "files.saved_searches_empty": "No saved searches yet", - "files.saved_searches_save": "Save Current", - "files.saved_searches_error": "Could not load saved searches", - "files.fulltext_search_label": "Full-Text Search (OCR text, metadata, tags)", - "files.fulltext_search_placeholder": "Search document content, sender, tags, type...", - "files.search_results_title": "Search Results", - "files.search_results_empty": "No results found.", - "files.bulk_reprocess": "Reprocess Selected", - "files.bulk_cloud_ocr": "Re-run Cloud OCR", - "files.bulk_download": "Download as ZIP", - "files.bulk_delete": "Delete Selected", - "files.bulk_clear_selection": "Clear Selection", - "files.table_select_all": "Select all files on this page", - "files.table_id": "ID", - "files.table_original_filename": "Original Filename", - "files.table_mime_type": "MIME Type", - "files.table_created_at": "Created At", - "files.table_actions": "Actions", - "files.table_empty": "No files found", - "files.action_preview": "Quick preview", - "files.action_details": "View details", "files.action_delete": "Delete file", - "files.pagination_first": "First", - "files.pagination_previous": "Previous", - "files.pagination_next": "Next", - "files.pagination_last": "Last", - "files.delete_modal_title": "Confirm Deletion", - "files.delete_modal_message": "Are you sure you want to delete this file?", + "files.action_details": "View details", + "files.action_preview": "Quick preview", + "files.bulk_clear_selection": "Clear Selection", + "files.bulk_cloud_ocr": "Re-run Cloud OCR", + "files.bulk_delete": "Delete Selected", + "files.bulk_download": "Download as ZIP", + "files.bulk_reprocess": "Reprocess Selected", "files.delete_modal_cancel": "Cancel", "files.delete_modal_confirm": "Delete", - "files.preview_modal_title": "Preview", + "files.delete_modal_message": "Are you sure you want to delete this file?", + "files.delete_modal_title": "Confirm Deletion", + "files.document_title": "Document Title", + "files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more – folders are processed recursively", + "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.filename": "Filename", + "files.files_selected": "files selected", + "files.filter_all_providers": "All Providers", + "files.filter_all_statuses": "All Statuses", + "files.filter_all_types": "All Types", + "files.filter_apply": "Apply Filters", + "files.filter_clear": "Clear", + "files.filter_date_from": "Date From", + "files.filter_date_from_aria": "Filter from date", + "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_ocr_all": "All Files", + "files.filter_ocr_good": "Good quality", + "files.filter_ocr_poor": "Poor 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_search_label": "Search Filename", + "files.filter_search_placeholder": "Enter filename...", + "files.filter_storage_provider": "Storage Provider", + "files.filter_tags_aria": "Filter by tags (comma-separated)", + "files.filter_tags_placeholder": "e.g. invoice,amazon", + "files.fulltext_search_label": "Full-Text Search (OCR text, metadata, tags)", + "files.fulltext_search_placeholder": "Search document content, sender, tags, type...", + "files.no_files": "No files found", + "files.ocr_status": "OCR Status", + "files.page_title": "File Records", + "files.pagination_files": "files", + "files.pagination_first": "First", + "files.pagination_last": "Last", + "files.pagination_nav_aria": "File list pagination", + "files.pagination_next": "Next", + "files.pagination_of": "of", + "files.pagination_previous": "Previous", + "files.pagination_showing": "Showing", "files.preview_modal_close": "Close preview", - "search.page_title": "Search Documents", - "search.heading": "Document Search", - "search.input_placeholder": "Search documents by content, sender, tags, type...", - "search.button": "Search", - "search.filter_document_type": "Document Type", - "search.filter_document_type_placeholder": "e.g. Invoice", - "search.filter_tags_placeholder": "e.g. amazon", - "search.filter_sender": "Sender", - "search.filter_sender_placeholder": "e.g. ACME Corp", - "search.filter_language": "Language", - "search.filter_language_placeholder": "e.g. de", - "search.filter_text_quality": "Text Quality", - "search.filter_text_quality_all": "All", - "search.filter_text_quality_high": "High", - "search.filter_text_quality_medium": "Medium", - "search.filter_text_quality_low": "Low", - "search.filter_text_quality_no_text": "No text", - "search.filter_date_from": "Date From", - "search.filter_date_to": "Date To", - "search.filter_clear_button": "Clear Filters", - "search.saved_label": "Saved Searches", - "search.saved_loading": "Loading...", - "search.saved_empty": "No saved searches yet", - "search.saved_error": "Could not load saved searches", - "search.saved_button": "Save Current", - "search.result_empty": "No documents found matching your query.", - "search.loading_indicator": "Searching…", - "search.error_message": "Search is temporarily unavailable. Please try again in a moment.", - "help.page_title": "Help Center", + "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.saved_searches_empty": "No saved searches yet", + "files.saved_searches_error": "Could not load saved searches", + "files.saved_searches_label": "Saved Searches", + "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_title": "Search Results", + "files.status_duplicate": "Duplicate", + "files.table_actions": "Actions", + "files.table_aria": "File records", + "files.table_created_at": "Created At", + "files.table_empty": "No files found", + "files.table_id": "ID", + "files.table_mime_type": "MIME Type", + "files.table_original_filename": "Original Filename", + "files.table_select_all": "Select all files on this page", + "files.tags": "Tags", + "files.title": "Files", + "files.upload_modal_aria": "Upload progress", + "files.upload_modal_close": "Close upload progress", + "files.upload_modal_header": "Uploading Files", + "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", + "footer.attributions": "Attributions", + "footer.cookies": "Cookies", + "footer.copyright": "DocuElevate {year}", + "footer.imprint": "Imprint", + "footer.license": "License", + "footer.navigation": "Footer navigation", + "footer.privacy": "Privacy", + "footer.terms": "Terms", + "footer.version": "Version {version}", + "help.destinations_dropbox": "Dropbox", + "help.destinations_dropbox_desc": "OAuth-linked. Files land in your chosen folder.", + "help.destinations_email": "Email Forwarding", + "help.destinations_email_desc": "Processed files sent as SMTP attachments.", + "help.destinations_google_drive": "Google Drive", + "help.destinations_google_drive_desc": "Service account or OAuth. Supports shared drives.", + "help.destinations_heading": "Destinations – Where Documents Go", + "help.destinations_nextcloud": "Nextcloud / WebDAV", + "help.destinations_nextcloud_desc": "Self-hosted cloud storage via WebDAV.", + "help.destinations_onedrive": "OneDrive", + "help.destinations_onedrive_desc": "Microsoft Graph API integration.", + "help.destinations_paperless": "Paperless-ngx", + "help.destinations_paperless_desc": "Push documents straight into Paperless for archival.", + "help.destinations_s3": "Amazon S3", + "help.destinations_s3_desc": "Any S3-compatible bucket (AWS, MinIO, Wasabi).", + "help.destinations_sftp": "SFTP / FTP", + "help.destinations_sftp_desc": "Secure file transfer to any server.", + "help.destinations_webhook": "Webhook", + "help.destinations_webhook_desc": "POST metadata to any external endpoint.", + "help.documentation": "Documentation", + "help.faq": "Frequently Asked Questions", + "help.faq_1_a": "Navigate to the Upload page, drag-and-drop your files or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.faq_1_q": "How do I upload documents?", + "help.faq_2_a": "PDF, JPEG, PNG, TIFF, BMP, GIF, DOCX, XLSX, PPTX, ODT, ODS, TXT, RTF, and HTML. Non-PDF files are automatically converted to PDF before processing.", + "help.faq_2_q": "Which file formats are supported?", + "help.faq_3_a": "Yes. Go to Email Ingestion, add an IMAP account, and DocuElevate will poll for new messages and process attachments automatically.", + "help.faq_3_q": "Can I ingest documents from email?", + "help.faq_4_a": "Pipelines let you chain processing steps – OCR, AI extraction, format conversion – and route the result to one or more destinations. Create and manage them from the Pipelines page.", + "help.faq_4_q": "How do processing pipelines work?", + "help.faq_5_a": "DocuElevate encrypts credentials at rest, communicates over TLS, and never stores your documents longer than necessary. See the Privacy Notice for full details.", + "help.faq_5_q": "Is my data secure?", + "help.faq_heading": "Frequently Asked Questions", + "help.getting_started": "Getting Started", "help.heading": "Help Center", - "help.subheading": "Everything you need to get the most out of DocuElevate. Browse topics below or search for what you need.", + "help.page_title": "Help Center", + "help.privacy_notice": "Privacy Notice", "help.quickstart_heading": "Quick Start", - "help.quickstart_upload": "Upload Documents", - "help.quickstart_upload_desc": "Drag & drop files onto the Upload page or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", "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_upload": "Upload Documents", + "help.quickstart_upload_desc": "Drag & drop files onto the Upload page or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", "help.quickstart_workflows": "Automate Workflows", "help.quickstart_workflows_desc": "Create Pipelines to define multi-step processing and routing rules. Combine OCR, AI extraction, format conversion, and delivery in a single flow.", - "help.sources_heading": "Sources – Getting Documents In", - "help.sources_web_upload": "Web Upload", - "help.sources_web_upload_desc": "The fastest way to get started. Open the Upload page, drop one or more files, and DocuElevate takes care of the rest. Supported formats include PDF, JPEG, PNG, TIFF, DOCX, XLSX, and more.", "help.sources_email_ingestion": "Email Ingestion (IMAP)", "help.sources_email_ingestion_desc": "Forward documents to a dedicated mailbox. Under Email Ingestion, add one or more IMAP accounts. DocuElevate polls for new messages and processes attachments automatically.", + "help.sources_heading": "Sources – Getting Documents In", "help.sources_rest_api": "REST API", "help.sources_rest_api_desc": "Integrate programmatically by POST-ing files to /api/upload. Ideal for scripts, watched folders, scanners, or third-party tools like Zapier and n8n.", "help.sources_scanner": "Scanner & Mobile", "help.sources_scanner_desc": "Point network scanners at DocuElevate's upload endpoint or use any mobile scanning app that supports custom HTTP destinations.", - "help.destinations_heading": "Destinations – Where Documents Go", - "help.destinations_dropbox": "Dropbox", - "help.destinations_dropbox_desc": "OAuth-linked. Files land in your chosen folder.", - "help.destinations_google_drive": "Google Drive", - "help.destinations_google_drive_desc": "Service account or OAuth. Supports shared drives.", - "help.destinations_onedrive": "OneDrive", - "help.destinations_onedrive_desc": "Microsoft Graph API integration.", - "help.destinations_s3": "Amazon S3", - "help.destinations_s3_desc": "Any S3-compatible bucket (AWS, MinIO, Wasabi).", - "help.destinations_nextcloud": "Nextcloud / WebDAV", - "help.destinations_nextcloud_desc": "Self-hosted cloud storage via WebDAV.", - "help.destinations_paperless": "Paperless-ngx", - "help.destinations_paperless_desc": "Push documents straight into Paperless for archival.", - "help.destinations_sftp": "SFTP / FTP", - "help.destinations_sftp_desc": "Secure file transfer to any server.", - "help.destinations_email": "Email Forwarding", - "help.destinations_email_desc": "Processed files sent as SMTP attachments.", - "help.destinations_webhook": "Webhook", - "help.destinations_webhook_desc": "POST metadata to any external endpoint.", - "help.workflows_heading": "Workflows & Pipelines", - "help.workflows_what_is": "What is 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_typical_steps": "Typical Steps", - "help.workflows_step_1": "Convert to PDF", - "help.workflows_step_2": "OCR – extract text", - "help.workflows_step_3": "AI metadata extraction", - "help.workflows_step_4": "Deliver to one or more destinations", + "help.sources_web_upload": "Web Upload", + "help.sources_web_upload_desc": "The fastest way to get started. Open the Upload page, drop one or more files, and DocuElevate takes care of the rest. Supported formats include PDF, JPEG, PNG, TIFF, DOCX, XLSX, and more.", + "help.subheading": "Everything you need to get the most out of DocuElevate. Browse topics below or search for what you need.", + "help.support": "Support", + "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_heading": "Contact Support", + "help.support_ticket_button": "Submit a Ticket", + "help.support_ticket_heading": "Open a Support Ticket", + "help.title": "Help Center", "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_heading": "Workflows & Pipelines", + "help.workflows_step_1": "Convert to PDF", "help.workflows_step_1_create": "Go to Pipelines in the main menu.", + "help.workflows_step_2": "OCR – extract text", "help.workflows_step_2_create": "Click New Pipeline and give it a name.", + "help.workflows_step_3": "AI metadata extraction", "help.workflows_step_3_create": "Add the processing steps you need.", + "help.workflows_step_4": "Deliver to one or more destinations", "help.workflows_step_4_create": "Choose one or more delivery destinations.", "help.workflows_step_5_create": "Save – new documents will be processed through this pipeline automatically.", - "help.faq_heading": "Frequently Asked Questions", - "help.faq_1_q": "How do I upload documents?", - "help.faq_1_a": "Navigate to the Upload page, drag-and-drop your files or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", - "help.faq_2_q": "Which file formats are supported?", - "help.faq_2_a": "PDF, JPEG, PNG, TIFF, BMP, GIF, DOCX, XLSX, PPTX, ODT, ODS, TXT, RTF, and HTML. Non-PDF files are automatically converted to PDF before processing.", - "help.faq_3_q": "Can I ingest documents from email?", - "help.faq_3_a": "Yes. Go to Email Ingestion, add an IMAP account, and DocuElevate will poll for new messages and process attachments automatically.", - "help.faq_4_q": "How do processing pipelines work?", - "help.faq_4_a": "Pipelines let you chain processing steps – OCR, AI extraction, format conversion – and route the result to one or more destinations. Create and manage them from the Pipelines page.", - "help.faq_5_q": "Is my data secure?", - "help.faq_5_a": "DocuElevate encrypts credentials at rest, communicates over TLS, and never stores your documents longer than necessary. See the Privacy Notice for full details.", - "help.support_heading": "Contact Support", - "help.support_description": "Can’t find what you’re looking for? Our support team is here to help.", - "help.support_admin_message": "Contact your administrator for support information.", - "index.page_title_public": "Intelligent Document Processing", - "index.page_title_dashboard": "Dashboard", + "help.workflows_typical_steps": "Typical Steps", + "help.workflows_what_is": "What is a Pipeline?", "index.badge_intelligent": "Intelligent Document Processing", - "index.hero_heading": "From upload to insight — automatically.", - "index.hero_description": "DocuElevate ingests your documents, runs OCR, extracts metadata with AI, and routes files to Dropbox, Google Drive, OneDrive, S3, Nextcloud, and more — all in one seamless pipeline.", - "index.hero_signup": "Get Started — it’s free", - "index.hero_login": "Log In", - "index.hero_pricing": "View Plans & Pricing", - "index.feature_section_title": "Everything you need for smart document workflows", - "index.feature_ocr": "OCR & Text Extraction", - "index.feature_ocr_desc": "Azure Document Intelligence converts scanned PDFs and images into fully searchable text automatically.", + "index.button_browse_files": "Browse Files", + "index.button_upload": "Upload", + "index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud", + "index.capabilities_ingestion": "Email & URL-based document ingestion", + "index.capabilities_ocr": "OCR & metadata extraction with AI", + "index.capabilities_paperless": "Paperless-ngx integration for document management", + "index.capabilities_title": "Capabilities", + "index.capabilities_workflows": "Automated classification & routing workflows", + "index.cta_description": "Join teams already automating their document processing with DocuElevate.", + "index.cta_heading": "Ready to elevate your document workflow?", + "index.cta_pricing": "See pricing", + "index.cta_signup": "Create a free account", + "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_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_desc": "Route processed files to Dropbox, Google Drive, OneDrive, Amazon S3, Nextcloud, Paperless NGX, WebDAV, FTP/SFTP, and more.", "index.feature_email": "Email & IMAP Ingestion", "index.feature_email_desc": "Automatically pull documents from Gmail or any IMAP mailbox — no manual uploads needed.", - "index.feature_search": "Full-Text Search", - "index.feature_search_desc": "Instantly find any document by content, metadata, or tags across your entire archive.", + "index.feature_ocr": "OCR & Text Extraction", + "index.feature_ocr_desc": "Azure Document Intelligence converts scanned PDFs and images into fully searchable text automatically.", "index.feature_pipelines": "Custom Pipelines", "index.feature_pipelines_desc": "Build processing pipelines with configurable steps — OCR, AI extraction, format conversion, and storage routing in any order.", - "index.cta_heading": "Ready to elevate your document workflow?", - "index.cta_description": "Join teams already automating their document processing with DocuElevate.", - "index.cta_signup": "Create a free account", - "index.cta_pricing": "See pricing", - "index.dashboard_subtitle": "Intelligent document processing & management", - "index.platform_overview": "Platform overview", - "index.stat_total_files": "Total files", - "index.stat_files_today": "Files today", - "index.stat_files_month": "Files this month", - "index.stat_active_users": "Active users", - "index.usage_my_usage": "My usage", - "index.usage_lifetime": "Lifetime files", - "index.usage_today": "Files today", - "index.usage_month": "Files this month", - "index.usage_unlimited": "Unlimited", - "index.tier_plan": "Plan", - "index.tier_upgrade": "Upgrade", - "index.tier_view_details": "View full details", - "index.quick_actions": "Quick Actions", - "index.quick_upload": "Upload Document", - "index.quick_upload_desc": "Process a new file", - "index.quick_documents": "My Documents", - "index.quick_documents_desc": "Browse your processed files", - "index.quick_subscription": "My Subscription", - "index.quick_subscription_desc": "View plan & usage details", - "index.quick_search": "Search", - "index.quick_search_desc": "Full-text search across documents", - "index.upgrade_plan": "Upgrade your plan", - "index.upgrade_description": "Unlock more documents, more destinations and priority support.", - "index.upgrade_daily_limits": "Higher daily & monthly limits", - "index.upgrade_destinations": "More storage destinations", - "index.upgrade_ocr_pages": "More OCR pages", - "index.upgrade_view_pricing": "View plans & pricing", - "index.integrations_title": "Integrations", - "index.integrations_active": "Active integrations", - "index.integrations_storage": "Storage targets", - "index.integrations_view_status": "View system status", - "index.single_user_heading": "DocuElevate Dashboard", - "index.single_user_subtitle": "Intelligent document processing & management", - "index.capabilities_title": "Capabilities", - "index.capabilities_ocr": "OCR & metadata extraction with AI", - "index.capabilities_cloud": "Cloud storage: Dropbox, OneDrive, Google Drive, NextCloud", - "index.capabilities_paperless": "Paperless-ngx integration for document management", - "index.capabilities_ingestion": "Email & URL-based document ingestion", - "index.capabilities_workflows": "Automated classification & routing workflows", + "index.feature_search": "Full-Text Search", + "index.feature_search_desc": "Instantly find any document by content, metadata, or tags across your entire archive.", + "index.feature_section_title": "Everything you need for smart document workflows", "index.getting_started": "Getting Started", "index.getting_started_1": "Configure integrations via System Status", "index.getting_started_2": "Upload your first document", "index.getting_started_3": "Review results in Files", "index.getting_started_learn": "Learn more about DocuElevate", - "error.404_code": "404", - "error.404_heading": "Oops, we couldn’t find that page!", - "error.404_message": "It seems DocuElevate has misplaced the document you were looking for. Don’t worry – we’ve got your back.", - "error.404_home": "Return Home", - "error.500_code": "500", - "error.500_heading": "Oops! Something Went Wrong.", - "error.500_description": "Our servers encountered a mishap and need a moment.", - "error.500_home": "Go Home", - "pipelines.page_title": "Processing Pipelines", - "pipelines.system_label": "System", - "pipelines.default_label": "Default", - "pipelines.inactive_label": "Inactive", - "pipelines.disabled_label": "Disabled", - "pipelines.enabled_label": "Enabled", - "pipelines.empty_state": "No pipelines yet", - "pipelines.set_default": "Set as my default pipeline", - "pipelines.description_label": "Description", - "pipelines.active_label": "Active", - "integrations.page_title": "Integrations", - "integrations.imap_settings": "IMAP Settings", - "integrations.host_label": "Host", - "integrations.port_label": "Port", - "integrations.username_label": "Username", - "integrations.password_label": "Password", - "integrations.folder_label": "Folder", - "integrations.empty_state": "No integrations configured", - "status.page_title": "System Status", - "status.app_version": "App Version", - "status.build_date": "Build Date", - "status.last_check": "Last Check", - "status.container_id": "Container ID", - "status.git_commit": "Git Commit", - "status.setting_label": "Setting", - "status.value_label": "Value", - "notifications.page_title": "Notifications", - "notifications.manage_desc": "Manage your notification inbox, targets, and event preferences", - "notifications.tab_inbox": "Inbox", - "notifications.tab_settings": "Settings", - "notifications.filter_all": "All", - "notifications.filter_unread": "Unread only", - "notifications.filter_read": "Read only", - "notifications.mark_all_read_btn": "Mark all read", - "auth.login_title": "Log In", - "auth.signup_title": "Sign Up", - "auth.forgot_password": "Forgot Password?", - "auth.remember_me": "Remember me", - "auth.email_label": "Email", - "auth.password_label": "Password", - "auth.confirm_password": "Confirm Password", - "auth.username_label": "Username", - "auth.display_name_label": "Display Name", - "language.nb": "Norsk", - "language.da": "Dansk", - "language.sv": "Svenska", - "language.fi": "Suomi", - "language.is": "Íslenska", - "language.ga": "Gaeilge", - "language.hu": "Magyar", - "language.cs": "Čeština", - "language.sk": "Slovenčina", - "language.sl": "Slovenščina", - "language.hr": "Hrvatski", - "language.ro": "Română", - "language.bg": "Български", - "language.uk": "Українська", - "language.tr": "Türkçe", - "language.el": "Ελληνικά", - "language.et": "Eesti", - "language.lv": "Latviešu", - "language.lt": "Lietuvių", - "language.lb": "Lëtzebuergesch", - "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.hero_description": "DocuElevate ingests your documents, runs OCR, extracts metadata with AI, and routes files to Dropbox, Google Drive, OneDrive, S3, Nextcloud, and more — all in one seamless pipeline.", + "index.hero_heading": "From upload to insight — automatically.", + "index.hero_login": "Log In", + "index.hero_pricing": "View Plans & Pricing", + "index.hero_signup": "Get Started — it’s free", + "index.integrations_active": "Active integrations", + "index.integrations_storage": "Storage targets", + "index.integrations_title": "Integrations", + "index.integrations_view_status": "View system status", + "index.page_title_dashboard": "Dashboard", + "index.page_title_public": "Intelligent Document Processing", + "index.platform_overview": "Platform overview", + "index.quick_actions": "Quick Actions", + "index.quick_documents": "My Documents", + "index.quick_documents_desc": "Browse your processed files", + "index.quick_search": "Search", + "index.quick_search_desc": "Full-text search across documents", + "index.quick_subscription": "My Subscription", + "index.quick_subscription_desc": "View plan & usage details", "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", + "index.quick_upload": "Upload Document", + "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_subtitle": "Intelligent document processing & management", + "index.stat_active_integrations": "Active Integrations", + "index.stat_active_users": "Active users", + "index.stat_files_month": "Files this month", + "index.stat_files_today": "Files today", + "index.stat_storage_targets": "Storage Targets", + "index.stat_total_files": "Total files", + "index.tier_plan": "Plan", + "index.tier_upgrade": "Upgrade", + "index.tier_view_details": "View full details", + "index.upgrade_daily_limits": "Higher daily & monthly limits", + "index.upgrade_description": "Unlock more documents, more destinations and priority support.", + "index.upgrade_destinations": "More storage destinations", + "index.upgrade_ocr_pages": "More OCR pages", + "index.upgrade_plan": "Upgrade your plan", + "index.upgrade_view_pricing": "View plans & pricing", + "index.usage_lifetime": "Lifetime files", + "index.usage_month": "Files this month", + "index.usage_my_usage": "My usage", + "index.usage_today": "Files today", + "index.usage_unlimited": "Unlimited", + "integrations.configure": "Configure", + "integrations.connect": "Connect", + "integrations.connected": "Connected", + "integrations.disconnect": "Disconnect", + "integrations.empty_state": "No integrations configured", + "integrations.folder_label": "Folder", + "integrations.host_label": "Host", + "integrations.imap_settings": "IMAP Settings", + "integrations.not_connected": "Not Connected", + "integrations.page_title": "Integrations", + "integrations.password_label": "Password", + "integrations.port_label": "Port", + "integrations.title": "Integrations", + "integrations.username_label": "Username", + "language.bg": "Български", + "language.ca": "Català", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", + "language.cs": "Čeština", + "language.da": "Dansk", + "language.de": "Deutsch", + "language.el": "Ελληνικά", + "language.en": "English", + "language.es": "Español", + "language.et": "Eesti", + "language.fi": "Suomi", + "language.fr": "Français", + "language.ga": "Gaeilge", + "language.hr": "Hrvatski", + "language.hu": "Magyar", + "language.is": "Íslenska", + "language.it": "Italiano", + "language.lb": "Lëtzebuergesch", + "language.lt": "Lietuvių", + "language.lv": "Latviešu", + "language.nb": "Norsk", + "language.nl": "Nederlands", + "language.pl": "Polski", + "language.pt": "Português", + "language.ro": "Română", + "language.ru": "Русский", + "language.selector": "Language", + "language.selector_label": "Select language", + "language.sk": "Slovenčina", + "language.sl": "Slovenščina", + "language.sv": "Svenska", + "language.tr": "Türkçe", + "language.uk": "Українська", + "language.zh": "中文", + "nav.about": "About", + "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", + "nav.admin_actions": "Admin actions", + "nav.admin_menu": "Admin menu", + "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", + "nav.backup_restore": "Backup & Restore", + "nav.credentials": "Credentials", + "nav.dark_mode": "Dark Mode", + "nav.dashboard": "Dashboard", + "nav.developer_docs": "Developer Docs", + "nav.duplicates": "Duplicates", + "nav.file_manager": "File Manager", + "nav.files": "Files", + "nav.help": "Help", + "nav.help_center": "Help Center", + "nav.imap": "Email Import", + "nav.integrations": "Integrations", + "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", + "nav.main_navigation": "Main navigation", + "nav.notifications": "Notifications", + "nav.open_main_menu": "Open main menu", + "nav.pipelines": "Pipelines", + "nav.plan_designer": "Plan Designer", + "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", + "nav.queue_monitor": "Queue Monitor", + "nav.scheduled_jobs": "Scheduled Jobs", + "nav.search": "Search", + "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", + "nav.similarity": "Similarity", + "nav.skip_to_content": "Skip to main content", + "nav.status": "Status", + "nav.subscription": "Subscription", + "nav.toggle_dark_mode": "Toggle dark mode", + "nav.toggle_nav": "Toggle navigation menu", + "nav.upload": "Upload", + "nav.users": "Users", + "nav.version": "Version Info", + "notifications.filter_all": "All", + "notifications.filter_read": "Read only", + "notifications.filter_unread": "Unread only", + "notifications.manage_desc": "Manage your notification inbox, targets, and event preferences", + "notifications.mark_all_read": "Mark All as Read", + "notifications.mark_all_read_btn": "Mark all read", + "notifications.mark_read": "Mark as Read", + "notifications.no_notifications": "No notifications", + "notifications.page_title": "Notifications", + "notifications.tab_inbox": "Inbox", + "notifications.tab_settings": "Settings", + "notifications.title": "Notifications", + "notifications.unread_count": "{count} unread notifications", + "pipelines.active_label": "Active", + "pipelines.add_step_btn": "Add Step", + "pipelines.create": "Create Pipeline", + "pipelines.custom_label_label": "Custom Label", + "pipelines.default_label": "Default", + "pipelines.description_label": "Description", + "pipelines.description_placeholder": "Optional description", + "pipelines.disabled_label": "Disabled", + "pipelines.edit": "Edit Pipeline", + "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.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)", + "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.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_pipeline_label": "System pipeline (visible to all users)", + "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.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_date_from": "Date From", + "search.filter_date_to": "Date To", + "search.filter_document_type": "Document Type", + "search.filter_document_type_placeholder": "e.g. Invoice", + "search.filter_language": "Language", + "search.filter_language_placeholder": "e.g. de", + "search.filter_sender": "Sender", + "search.filter_sender_placeholder": "e.g. ACME Corp", + "search.filter_tags": "Tags", + "search.filter_tags_placeholder": "e.g. amazon", + "search.filter_text_quality": "Text Quality", + "search.filter_text_quality_all": "All", + "search.filter_text_quality_high": "High", + "search.filter_text_quality_low": "Low", + "search.filter_text_quality_medium": "Medium", + "search.filter_text_quality_no_text": "No text", + "search.heading": "Document Search", + "search.input_aria_label": "Search documents", + "search.input_placeholder": "Search documents by content, sender, tags, type...", + "search.loading_indicator": "Searching…", + "search.no_results": "No results found", + "search.page_title": "Search Documents", + "search.placeholder": "Search by filename, content, tags...", + "search.result_empty": "No documents found matching your query.", + "search.results_count": "{count} results found", + "search.saved_aria_save": "Save current search", + "search.saved_button": "Save Current", + "search.saved_empty": "No saved searches yet", + "search.saved_error": "Could not load saved searches", + "search.saved_label": "Saved Searches", + "search.saved_loading": "Loading...", + "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.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.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.no_results_clear": "clear the search", - "settings.settings_count_suffix": "settings", + "settings.page_heading": "Application Settings", "settings.required_label": "(required)", - "settings.boolean_enable_prefix": "Enable", - "settings.effective_value_label": "Effective value:", + "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_setting_title": "Save this setting", + "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.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.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" + "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.build_date": "Build Date", + "status.container_id": "Container ID", + "status.git_commit": "Git Commit", + "status.last_check": "Last Check", + "status.page_title": "System Status", + "status.setting_label": "Setting", + "status.value_label": "Value", + "upload.browse_button": "Browse Files", + "upload.button_processing": "Processing...", + "upload.camera_button": "Take Photo / Scan Document", + "upload.download_button": "Download and Process", + "upload.downloading": "Downloading file from URL...", + "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_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_invalid_url": "Invalid URL format", + "upload.error_url_required": "Please enter a URL", + "upload.file_size_hint": "Maximum size: 500 MB per file", + "upload.file_types": "Allowed types: PDF, Office documents (Word, Excel, PowerPoint, etc.), Images", + "upload.filename_description": "Leave empty to use filename from URL", + "upload.filename_label": "Filename (optional)", + "upload.filename_placeholder": "my-document.pdf", + "upload.max_size": "Maximum file size: {size}", + "upload.page_title": "Upload Files", + "upload.section_device": "Upload from Device", + "upload.section_url": "Upload from URL", + "upload.select_file": "Select File", + "upload.success": "File uploaded successfully", + "upload.title": "Upload Document", + "upload.uploading": "Uploading...", + "upload.url_description": "Enter a direct link to a file (PDF, Office documents, or images)", + "upload.url_label": "File URL", + "upload.url_placeholder": "https://example.com/document.pdf" } diff --git a/frontend/translations/eo.json b/frontend/translations/eo.json new file mode 100644 index 00000000..d36160ed --- /dev/null +++ b/frontend/translations/eo.json @@ -0,0 +1,929 @@ +{ + "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", + "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.create_account": "Create account", + "auth.display_name_label": "Display Name", + "auth.email_label": "Email", + "auth.forgot_password": "Forgot Password?", + "auth.forgot_username": "Forgot username?", + "auth.login": "Log In", + "auth.login_title": "Log In", + "auth.logo_alt": "DocuElevate Logo", + "auth.logout": "Log Out", + "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.profile": "Profile", + "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_title": "Sign Up", + "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.active": "Active", + "common.all": "All", + "common.back": "Back", + "common.cancel": "Cancel", + "common.close": "Close", + "common.col_pending": "Pending", + "common.completed": "Completed", + "common.confirm": "Confirm", + "common.copied": "Copied!", + "common.copy": "Copy", + "common.create": "Create", + "common.created": "Created", + "common.date": "Date", + "common.delete": "Delete", + "common.description": "Description", + "common.details": "Details", + "common.disabled": "Disabled", + "common.download": "Download", + "common.duplicate": "Duplicate", + "common.edit": "Edit", + "common.enabled": "Enabled", + "common.error": "Error", + "common.failed": "Failed", + "common.filter": "Filter", + "common.inactive": "Inactive", + "common.info": "Info", + "common.loading": "Loading...", + "common.name": "Name", + "common.next": "Next", + "common.next_page": "Next page", + "common.no": "No", + "common.none": "None", + "common.page": "Page", + "common.pending": "Pending", + "common.prev_page": "Previous page", + "common.previous": "Previous", + "common.processing": "Processing", + "common.refresh": "Refresh", + "common.reset": "Reset", + "common.retry": "Retry", + "common.save": "Save", + "common.search": "Search", + "common.select": "Select", + "common.select_placeholder": "— select —", + "common.size": "Size", + "common.status": "Status", + "common.submit": "Submit", + "common.success": "Success", + "common.tags": "Tags", + "common.type": "Type", + "common.updated": "Updated", + "common.upload": "Upload", + "common.view": "View", + "common.warning": "Warning", + "common.yes": "Yes", + "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", + "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", + "cookie.notice_label": "Cookie notice", + "cookie.policy_link": "Cookie Policy", + "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.files_this_month": "Files This Month", + "dashboard.files_today": "Files Today", + "dashboard.ocr_processed": "OCR Processed", + "dashboard.quick_actions": "Quick Actions", + "dashboard.recent_activity": "Recent Activity", + "dashboard.storage_targets": "Storage Targets", + "dashboard.title": "Dashboard", + "dashboard.total_files": "Total Files", + "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_heading": "Oops, we couldn’t find that page!", + "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_title": "404 - Not Found", + "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_heading": "Oops! Something Went Wrong.", + "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_message": "You do not have permission to access this page.", + "error.not_found": "Page not found", + "error.not_found_message": "The page you are looking for does not exist.", + "error.server_error": "Internal Server Error", + "error.server_error_message": "Something went wrong. Please try again later.", + "error.unauthorized": "Unauthorized", + "error.unauthorized_message": "You need to log in to access this page.", + "files.action_delete": "Delete file", + "files.action_details": "View details", + "files.action_preview": "Quick preview", + "files.bulk_clear_selection": "Clear Selection", + "files.bulk_cloud_ocr": "Re-run Cloud OCR", + "files.bulk_delete": "Delete Selected", + "files.bulk_download": "Download as ZIP", + "files.bulk_reprocess": "Reprocess Selected", + "files.delete_modal_cancel": "Cancel", + "files.delete_modal_confirm": "Delete", + "files.delete_modal_message": "Are you sure you want to delete this file?", + "files.delete_modal_title": "Confirm Deletion", + "files.document_title": "Document Title", + "files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more – folders are processed recursively", + "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.filename": "Filename", + "files.files_selected": "files selected", + "files.filter_all_providers": "All Providers", + "files.filter_all_statuses": "All Statuses", + "files.filter_all_types": "All Types", + "files.filter_apply": "Apply Filters", + "files.filter_clear": "Clear", + "files.filter_date_from": "Date From", + "files.filter_date_from_aria": "Filter from date", + "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_ocr_all": "All Files", + "files.filter_ocr_good": "Good quality", + "files.filter_ocr_poor": "Poor 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_search_label": "Search Filename", + "files.filter_search_placeholder": "Enter filename...", + "files.filter_storage_provider": "Storage Provider", + "files.filter_tags_aria": "Filter by tags (comma-separated)", + "files.filter_tags_placeholder": "e.g. invoice,amazon", + "files.fulltext_search_label": "Full-Text Search (OCR text, metadata, tags)", + "files.fulltext_search_placeholder": "Search document content, sender, tags, type...", + "files.no_files": "No files found", + "files.ocr_status": "OCR Status", + "files.page_title": "File Records", + "files.pagination_files": "files", + "files.pagination_first": "First", + "files.pagination_last": "Last", + "files.pagination_nav_aria": "File list pagination", + "files.pagination_next": "Next", + "files.pagination_of": "of", + "files.pagination_previous": "Previous", + "files.pagination_showing": "Showing", + "files.preview_modal_close": "Close 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.saved_searches_empty": "No saved searches yet", + "files.saved_searches_error": "Could not load saved searches", + "files.saved_searches_label": "Saved Searches", + "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_title": "Search Results", + "files.status_duplicate": "Duplicate", + "files.table_actions": "Actions", + "files.table_aria": "File records", + "files.table_created_at": "Created At", + "files.table_empty": "No files found", + "files.table_id": "ID", + "files.table_mime_type": "MIME Type", + "files.table_original_filename": "Original Filename", + "files.table_select_all": "Select all files on this page", + "files.tags": "Tags", + "files.title": "Files", + "files.upload_modal_aria": "Upload progress", + "files.upload_modal_close": "Close upload progress", + "files.upload_modal_header": "Uploading Files", + "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", + "footer.attributions": "Attributions", + "footer.cookies": "Cookies", + "footer.copyright": "DocuElevate {year}", + "footer.imprint": "Imprint", + "footer.license": "License", + "footer.navigation": "Footer navigation", + "footer.privacy": "Privacy", + "footer.terms": "Terms", + "footer.version": "Version {version}", + "help.destinations_dropbox": "Dropbox", + "help.destinations_dropbox_desc": "OAuth-linked. Files land in your chosen folder.", + "help.destinations_email": "Email Forwarding", + "help.destinations_email_desc": "Processed files sent as SMTP attachments.", + "help.destinations_google_drive": "Google Drive", + "help.destinations_google_drive_desc": "Service account or OAuth. Supports shared drives.", + "help.destinations_heading": "Destinations – Where Documents Go", + "help.destinations_nextcloud": "Nextcloud / WebDAV", + "help.destinations_nextcloud_desc": "Self-hosted cloud storage via WebDAV.", + "help.destinations_onedrive": "OneDrive", + "help.destinations_onedrive_desc": "Microsoft Graph API integration.", + "help.destinations_paperless": "Paperless-ngx", + "help.destinations_paperless_desc": "Push documents straight into Paperless for archival.", + "help.destinations_s3": "Amazon S3", + "help.destinations_s3_desc": "Any S3-compatible bucket (AWS, MinIO, Wasabi).", + "help.destinations_sftp": "SFTP / FTP", + "help.destinations_sftp_desc": "Secure file transfer to any server.", + "help.destinations_webhook": "Webhook", + "help.destinations_webhook_desc": "POST metadata to any external endpoint.", + "help.documentation": "Documentation", + "help.faq": "Frequently Asked Questions", + "help.faq_1_a": "Navigate to the Upload page, drag-and-drop your files or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.faq_1_q": "How do I upload documents?", + "help.faq_2_a": "PDF, JPEG, PNG, TIFF, BMP, GIF, DOCX, XLSX, PPTX, ODT, ODS, TXT, RTF, and HTML. Non-PDF files are automatically converted to PDF before processing.", + "help.faq_2_q": "Which file formats are supported?", + "help.faq_3_a": "Yes. Go to Email Ingestion, add an IMAP account, and DocuElevate will poll for new messages and process attachments automatically.", + "help.faq_3_q": "Can I ingest documents from email?", + "help.faq_4_a": "Pipelines let you chain processing steps – OCR, AI extraction, format conversion – and route the result to one or more destinations. Create and manage them from the Pipelines page.", + "help.faq_4_q": "How do processing pipelines work?", + "help.faq_5_a": "DocuElevate encrypts credentials at rest, communicates over TLS, and never stores your documents longer than necessary. See the Privacy Notice for full details.", + "help.faq_5_q": "Is my data secure?", + "help.faq_heading": "Frequently Asked Questions", + "help.getting_started": "Getting Started", + "help.heading": "Help Center", + "help.page_title": "Help Center", + "help.privacy_notice": "Privacy Notice", + "help.quickstart_heading": "Quick Start", + "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_upload": "Upload Documents", + "help.quickstart_upload_desc": "Drag & drop files onto the Upload page or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.quickstart_workflows": "Automate Workflows", + "help.quickstart_workflows_desc": "Create Pipelines to define multi-step processing and routing rules. Combine OCR, AI extraction, format conversion, and delivery in a single flow.", + "help.sources_email_ingestion": "Email Ingestion (IMAP)", + "help.sources_email_ingestion_desc": "Forward documents to a dedicated mailbox. Under Email Ingestion, add one or more IMAP accounts. DocuElevate polls for new messages and processes attachments automatically.", + "help.sources_heading": "Sources – Getting Documents In", + "help.sources_rest_api": "REST API", + "help.sources_rest_api_desc": "Integrate programmatically by POST-ing files to /api/upload. Ideal for scripts, watched folders, scanners, or third-party tools like Zapier and n8n.", + "help.sources_scanner": "Scanner & Mobile", + "help.sources_scanner_desc": "Point network scanners at DocuElevate's upload endpoint or use any mobile scanning app that supports custom HTTP destinations.", + "help.sources_web_upload": "Web Upload", + "help.sources_web_upload_desc": "The fastest way to get started. Open the Upload page, drop one or more files, and DocuElevate takes care of the rest. Supported formats include PDF, JPEG, PNG, TIFF, DOCX, XLSX, and more.", + "help.subheading": "Everything you need to get the most out of DocuElevate. Browse topics below or search for what you need.", + "help.support": "Support", + "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_heading": "Contact Support", + "help.support_ticket_button": "Submit a Ticket", + "help.support_ticket_heading": "Open a Support Ticket", + "help.title": "Help Center", + "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_heading": "Workflows & Pipelines", + "help.workflows_step_1": "Convert to PDF", + "help.workflows_step_1_create": "Go to Pipelines in the main menu.", + "help.workflows_step_2": "OCR – extract text", + "help.workflows_step_2_create": "Click New Pipeline and give it a name.", + "help.workflows_step_3": "AI metadata extraction", + "help.workflows_step_3_create": "Add the processing steps you need.", + "help.workflows_step_4": "Deliver to one or more destinations", + "help.workflows_step_4_create": "Choose one or more delivery destinations.", + "help.workflows_step_5_create": "Save – new documents will be processed through this pipeline automatically.", + "help.workflows_typical_steps": "Typical Steps", + "help.workflows_what_is": "What is a Pipeline?", + "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_ingestion": "Email & URL-based document ingestion", + "index.capabilities_ocr": "OCR & metadata extraction with AI", + "index.capabilities_paperless": "Paperless-ngx integration for document management", + "index.capabilities_title": "Capabilities", + "index.capabilities_workflows": "Automated classification & routing workflows", + "index.cta_description": "Join teams already automating their document processing with DocuElevate.", + "index.cta_heading": "Ready to elevate your document workflow?", + "index.cta_pricing": "See pricing", + "index.cta_signup": "Create a free account", + "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_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_desc": "Route processed files to Dropbox, Google Drive, OneDrive, Amazon S3, Nextcloud, Paperless NGX, WebDAV, FTP/SFTP, and more.", + "index.feature_email": "Email & IMAP Ingestion", + "index.feature_email_desc": "Automatically pull documents from Gmail or any IMAP mailbox — no manual uploads needed.", + "index.feature_ocr": "OCR & Text Extraction", + "index.feature_ocr_desc": "Azure Document Intelligence converts scanned PDFs and images into fully searchable text automatically.", + "index.feature_pipelines": "Custom Pipelines", + "index.feature_pipelines_desc": "Build processing pipelines with configurable steps — OCR, AI extraction, format conversion, and storage routing in any order.", + "index.feature_search": "Full-Text Search", + "index.feature_search_desc": "Instantly find any document by content, metadata, or tags across your entire archive.", + "index.feature_section_title": "Everything you need for smart document workflows", + "index.getting_started": "Getting Started", + "index.getting_started_1": "Configure integrations via System Status", + "index.getting_started_2": "Upload your first document", + "index.getting_started_3": "Review results in Files", + "index.getting_started_learn": "Learn more about DocuElevate", + "index.hero_description": "DocuElevate ingests your documents, runs OCR, extracts metadata with AI, and routes files to Dropbox, Google Drive, OneDrive, S3, Nextcloud, and more — all in one seamless pipeline.", + "index.hero_heading": "From upload to insight — automatically.", + "index.hero_login": "Log In", + "index.hero_pricing": "View Plans & Pricing", + "index.hero_signup": "Get Started — it’s free", + "index.integrations_active": "Active integrations", + "index.integrations_storage": "Storage targets", + "index.integrations_title": "Integrations", + "index.integrations_view_status": "View system status", + "index.page_title_dashboard": "Dashboard", + "index.page_title_public": "Intelligent Document Processing", + "index.platform_overview": "Platform overview", + "index.quick_actions": "Quick Actions", + "index.quick_documents": "My Documents", + "index.quick_documents_desc": "Browse your processed files", + "index.quick_search": "Search", + "index.quick_search_desc": "Full-text search across documents", + "index.quick_subscription": "My Subscription", + "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_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_subtitle": "Intelligent document processing & management", + "index.stat_active_integrations": "Active Integrations", + "index.stat_active_users": "Active users", + "index.stat_files_month": "Files this month", + "index.stat_files_today": "Files today", + "index.stat_storage_targets": "Storage Targets", + "index.stat_total_files": "Total files", + "index.tier_plan": "Plan", + "index.tier_upgrade": "Upgrade", + "index.tier_view_details": "View full details", + "index.upgrade_daily_limits": "Higher daily & monthly limits", + "index.upgrade_description": "Unlock more documents, more destinations and priority support.", + "index.upgrade_destinations": "More storage destinations", + "index.upgrade_ocr_pages": "More OCR pages", + "index.upgrade_plan": "Upgrade your plan", + "index.upgrade_view_pricing": "View plans & pricing", + "index.usage_lifetime": "Lifetime files", + "index.usage_month": "Files this month", + "index.usage_my_usage": "My usage", + "index.usage_today": "Files today", + "index.usage_unlimited": "Unlimited", + "integrations.configure": "Configure", + "integrations.connect": "Connect", + "integrations.connected": "Connected", + "integrations.disconnect": "Disconnect", + "integrations.empty_state": "No integrations configured", + "integrations.folder_label": "Folder", + "integrations.host_label": "Host", + "integrations.imap_settings": "IMAP Settings", + "integrations.not_connected": "Not Connected", + "integrations.page_title": "Integrations", + "integrations.password_label": "Password", + "integrations.port_label": "Port", + "integrations.title": "Integrations", + "integrations.username_label": "Username", + "language.bg": "Български", + "language.ca": "Català", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", + "language.cs": "Čeština", + "language.da": "Dansk", + "language.de": "Deutsch", + "language.el": "Ελληνικά", + "language.en": "English", + "language.es": "Español", + "language.et": "Eesti", + "language.fi": "Suomi", + "language.fr": "Français", + "language.ga": "Gaeilge", + "language.hr": "Hrvatski", + "language.hu": "Magyar", + "language.is": "Íslenska", + "language.it": "Italiano", + "language.lb": "Lëtzebuergesch", + "language.lt": "Lietuvių", + "language.lv": "Latviešu", + "language.nb": "Norsk", + "language.nl": "Nederlands", + "language.pl": "Polski", + "language.pt": "Português", + "language.ro": "Română", + "language.ru": "Русский", + "language.selector": "Language", + "language.selector_label": "Select language", + "language.sk": "Slovenčina", + "language.sl": "Slovenščina", + "language.sv": "Svenska", + "language.tr": "Türkçe", + "language.uk": "Українська", + "language.zh": "中文", + "nav.about": "About", + "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", + "nav.admin_actions": "Admin actions", + "nav.admin_menu": "Admin menu", + "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", + "nav.backup_restore": "Backup & Restore", + "nav.credentials": "Credentials", + "nav.dark_mode": "Dark Mode", + "nav.dashboard": "Dashboard", + "nav.developer_docs": "Developer Docs", + "nav.duplicates": "Duplicates", + "nav.file_manager": "File Manager", + "nav.files": "Files", + "nav.help": "Help", + "nav.help_center": "Help Center", + "nav.imap": "Email Import", + "nav.integrations": "Integrations", + "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", + "nav.main_navigation": "Main navigation", + "nav.notifications": "Notifications", + "nav.open_main_menu": "Open main menu", + "nav.pipelines": "Pipelines", + "nav.plan_designer": "Plan Designer", + "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", + "nav.queue_monitor": "Queue Monitor", + "nav.scheduled_jobs": "Scheduled Jobs", + "nav.search": "Search", + "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", + "nav.similarity": "Similarity", + "nav.skip_to_content": "Skip to main content", + "nav.status": "Status", + "nav.subscription": "Subscription", + "nav.toggle_dark_mode": "Toggle dark mode", + "nav.toggle_nav": "Toggle navigation menu", + "nav.upload": "Upload", + "nav.users": "Users", + "nav.version": "Version Info", + "notifications.filter_all": "All", + "notifications.filter_read": "Read only", + "notifications.filter_unread": "Unread only", + "notifications.manage_desc": "Manage your notification inbox, targets, and event preferences", + "notifications.mark_all_read": "Mark All as Read", + "notifications.mark_all_read_btn": "Mark all read", + "notifications.mark_read": "Mark as Read", + "notifications.no_notifications": "No notifications", + "notifications.page_title": "Notifications", + "notifications.tab_inbox": "Inbox", + "notifications.tab_settings": "Settings", + "notifications.title": "Notifications", + "notifications.unread_count": "{count} unread notifications", + "pipelines.active_label": "Active", + "pipelines.add_step_btn": "Add Step", + "pipelines.create": "Create Pipeline", + "pipelines.custom_label_label": "Custom Label", + "pipelines.default_label": "Default", + "pipelines.description_label": "Description", + "pipelines.description_placeholder": "Optional description", + "pipelines.disabled_label": "Disabled", + "pipelines.edit": "Edit Pipeline", + "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.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)", + "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.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_pipeline_label": "System pipeline (visible to all users)", + "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.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_date_from": "Date From", + "search.filter_date_to": "Date To", + "search.filter_document_type": "Document Type", + "search.filter_document_type_placeholder": "e.g. Invoice", + "search.filter_language": "Language", + "search.filter_language_placeholder": "e.g. de", + "search.filter_sender": "Sender", + "search.filter_sender_placeholder": "e.g. ACME Corp", + "search.filter_tags": "Tags", + "search.filter_tags_placeholder": "e.g. amazon", + "search.filter_text_quality": "Text Quality", + "search.filter_text_quality_all": "All", + "search.filter_text_quality_high": "High", + "search.filter_text_quality_low": "Low", + "search.filter_text_quality_medium": "Medium", + "search.filter_text_quality_no_text": "No text", + "search.heading": "Document Search", + "search.input_aria_label": "Search documents", + "search.input_placeholder": "Search documents by content, sender, tags, type...", + "search.loading_indicator": "Searching…", + "search.no_results": "No results found", + "search.page_title": "Search Documents", + "search.placeholder": "Search by filename, content, tags...", + "search.result_empty": "No documents found matching your query.", + "search.results_count": "{count} results found", + "search.saved_aria_save": "Save current search", + "search.saved_button": "Save Current", + "search.saved_empty": "No saved searches yet", + "search.saved_error": "Could not load saved searches", + "search.saved_label": "Saved Searches", + "search.saved_loading": "Loading...", + "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.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_setting_title": "Save this setting", + "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.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.build_date": "Build Date", + "status.container_id": "Container ID", + "status.git_commit": "Git Commit", + "status.last_check": "Last Check", + "status.page_title": "System Status", + "status.setting_label": "Setting", + "status.value_label": "Value", + "upload.browse_button": "Browse Files", + "upload.button_processing": "Processing...", + "upload.camera_button": "Take Photo / Scan Document", + "upload.download_button": "Download and Process", + "upload.downloading": "Downloading file from URL...", + "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_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_invalid_url": "Invalid URL format", + "upload.error_url_required": "Please enter a URL", + "upload.file_size_hint": "Maximum size: 500 MB per file", + "upload.file_types": "Allowed types: PDF, Office documents (Word, Excel, PowerPoint, etc.), Images", + "upload.filename_description": "Leave empty to use filename from URL", + "upload.filename_label": "Filename (optional)", + "upload.filename_placeholder": "my-document.pdf", + "upload.max_size": "Maximum file size: {size}", + "upload.page_title": "Upload Files", + "upload.section_device": "Upload from Device", + "upload.section_url": "Upload from URL", + "upload.select_file": "Select File", + "upload.success": "File uploaded successfully", + "upload.title": "Upload Document", + "upload.uploading": "Uploading...", + "upload.url_description": "Enter a direct link to a file (PDF, Office documents, or images)", + "upload.url_label": "File URL", + "upload.url_placeholder": "https://example.com/document.pdf" +} diff --git a/frontend/translations/es.json b/frontend/translations/es.json index 48f3ad9a..bba56174 100644 --- a/frontend/translations/es.json +++ b/frontend/translations/es.json @@ -195,6 +195,7 @@ "common.confirm": "Confirmar", "common.copied": "¡Copiado!", "common.copy": "Copiar", + "common.create": "Create", "common.created": "Creado", "common.date": "Fecha", "common.delete": "Eliminar", @@ -202,6 +203,7 @@ "common.details": "Detalles", "common.disabled": "Deshabilitado", "common.download": "Descargar", + "common.duplicate": "Duplicate", "common.edit": "Editar", "common.enabled": "Habilitado", "common.error": "Error", @@ -218,6 +220,7 @@ "common.page": "Page", "common.pending": "Pendiente", "common.prev_page": "Previous page", + "common.previous": "Previous", "common.processing": "Procesando", "common.refresh": "Actualizar", "common.reset": "Restablecer", @@ -228,7 +231,9 @@ "common.select_placeholder": "— select —", "common.size": "Tamaño", "common.status": "Estado", + "common.submit": "Submit", "common.success": "Éxito", + "common.tags": "Tags", "common.type": "Tipo", "common.updated": "Actualizado", "common.upload": "Subir", @@ -236,6 +241,8 @@ "common.warning": "Advertencia", "common.yes": "Sí", "cookie.accept": "Entendido", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", "cookie.notice": "DocuElevate utiliza solo cookies de sesión esenciales necesarias para la autenticación y el funcionamiento del servicio. No se utilizan cookies de seguimiento ni analíticas.", "cookie.notice_label": "Aviso de cookies", "cookie.policy_link": "Política de cookies", @@ -398,6 +405,8 @@ "files.upload_modal_close": "Close upload progress", "files.upload_modal_header": "Uploading Files", "files.uploaded": "Subido", + "footer.about": "About", + "footer.attribution": "Attribution", "footer.attributions": "Atribuciones", "footer.cookies": "Cookies", "footer.copyright": "DocuElevate {year}", @@ -577,6 +586,7 @@ "integrations.username_label": "Username", "language.bg": "Български", "language.ca": "Català", + "language.change_success": "Language changed to {language}", "language.changed": "Idioma cambiado a {language}", "language.cs": "Čeština", "language.da": "Dansk", @@ -602,6 +612,7 @@ "language.ro": "Română", "language.ru": "Русский", "language.selector": "Idioma", + "language.selector_label": "Select language", "language.sk": "Slovenčina", "language.sl": "Slovenščina", "language.sv": "Svenska", @@ -610,9 +621,15 @@ "language.zh": "中文", "nav.about": "Acerca de", "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", "nav.admin_actions": "Acciones de administración", "nav.admin_menu": "Menú de administración", "nav.api_docs": "Documentación API", + "nav.api_tokens": "API Tokens", "nav.backup_restore": "Copia de seguridad y restauración", "nav.credentials": "Credenciales", "nav.dark_mode": "Modo oscuro", @@ -623,25 +640,34 @@ "nav.files": "Archivos", "nav.help": "Ayuda", "nav.help_center": "Centro de ayuda", + "nav.imap": "Email Import", "nav.integrations": "Integraciones", "nav.light_mode": "Modo claro", + "nav.login": "Log In", + "nav.logout": "Log Out", "nav.main_navigation": "Navegación principal", "nav.notifications": "Notificaciones", "nav.open_main_menu": "Abrir menú principal", "nav.pipelines": "Pipelines", "nav.plan_designer": "Diseñador de planes", "nav.pricing": "Precios", + "nav.profile": "Profile", + "nav.queue": "Queue", "nav.queue_monitor": "Monitor de cola", "nav.scheduled_jobs": "Tareas programadas", "nav.search": "Buscar", "nav.settings": "Configuración", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", "nav.similarity": "Similitud", "nav.skip_to_content": "Ir al contenido principal", "nav.status": "Estado", + "nav.subscription": "Subscription", "nav.toggle_dark_mode": "Alternar modo oscuro", "nav.toggle_nav": "Alternar menú de navegación", "nav.upload": "Subir", "nav.users": "Usuarios", + "nav.version": "Version Info", "notifications.filter_all": "All", "notifications.filter_read": "Read only", "notifications.filter_unread": "Unread only", diff --git a/frontend/translations/et.json b/frontend/translations/et.json index d922331a..d36160ed 100644 --- a/frontend/translations/et.json +++ b/frontend/translations/et.json @@ -195,6 +195,7 @@ "common.confirm": "Confirm", "common.copied": "Copied!", "common.copy": "Copy", + "common.create": "Create", "common.created": "Created", "common.date": "Date", "common.delete": "Delete", @@ -202,6 +203,7 @@ "common.details": "Details", "common.disabled": "Disabled", "common.download": "Download", + "common.duplicate": "Duplicate", "common.edit": "Edit", "common.enabled": "Enabled", "common.error": "Error", @@ -218,6 +220,7 @@ "common.page": "Page", "common.pending": "Pending", "common.prev_page": "Previous page", + "common.previous": "Previous", "common.processing": "Processing", "common.refresh": "Refresh", "common.reset": "Reset", @@ -228,7 +231,9 @@ "common.select_placeholder": "— select —", "common.size": "Size", "common.status": "Status", + "common.submit": "Submit", "common.success": "Success", + "common.tags": "Tags", "common.type": "Type", "common.updated": "Updated", "common.upload": "Upload", @@ -236,6 +241,8 @@ "common.warning": "Warning", "common.yes": "Yes", "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", "cookie.notice_label": "Cookie notice", "cookie.policy_link": "Cookie Policy", @@ -331,7 +338,7 @@ "files.delete_modal_message": "Are you sure you want to delete this file?", "files.delete_modal_title": "Confirm Deletion", "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 – folders are processed recursively", "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", @@ -359,7 +366,7 @@ "files.filter_storage_provider": "Storage Provider", "files.filter_tags_aria": "Filter by tags (comma-separated)", "files.filter_tags_placeholder": "e.g. invoice,amazon", - "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.no_files": "No files found", "files.ocr_status": "OCR Status", @@ -398,6 +405,8 @@ "files.upload_modal_close": "Close upload progress", "files.upload_modal_header": "Uploading Files", "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", "footer.attributions": "Attributions", "footer.cookies": "Cookies", "footer.copyright": "DocuElevate {year}", @@ -577,7 +586,8 @@ "integrations.username_label": "Username", "language.bg": "Български", "language.ca": "Català", - "language.changed": "Keel muudeti keelele {language}", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", "language.cs": "Čeština", "language.da": "Dansk", "language.de": "Deutsch", @@ -601,7 +611,8 @@ "language.pt": "Português", "language.ro": "Română", "language.ru": "Русский", - "language.selector": "Eesti", + "language.selector": "Language", + "language.selector_label": "Select language", "language.sk": "Slovenčina", "language.sl": "Slovenščina", "language.sv": "Svenska", @@ -610,9 +621,15 @@ "language.zh": "中文", "nav.about": "About", "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", "nav.admin_actions": "Admin actions", "nav.admin_menu": "Admin menu", "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", "nav.backup_restore": "Backup & Restore", "nav.credentials": "Credentials", "nav.dark_mode": "Dark Mode", @@ -623,25 +640,34 @@ "nav.files": "Files", "nav.help": "Help", "nav.help_center": "Help Center", + "nav.imap": "Email Import", "nav.integrations": "Integrations", "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", "nav.main_navigation": "Main navigation", "nav.notifications": "Notifications", "nav.open_main_menu": "Open main menu", "nav.pipelines": "Pipelines", "nav.plan_designer": "Plan Designer", "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", "nav.queue_monitor": "Queue Monitor", "nav.scheduled_jobs": "Scheduled Jobs", "nav.search": "Search", "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", "nav.similarity": "Similarity", "nav.skip_to_content": "Skip to main content", "nav.status": "Status", + "nav.subscription": "Subscription", "nav.toggle_dark_mode": "Toggle dark mode", "nav.toggle_nav": "Toggle navigation menu", "nav.upload": "Upload", "nav.users": "Users", + "nav.version": "Version Info", "notifications.filter_all": "All", "notifications.filter_read": "Read only", "notifications.filter_unread": "Unread only", diff --git a/frontend/translations/fa.json b/frontend/translations/fa.json new file mode 100644 index 00000000..d36160ed --- /dev/null +++ b/frontend/translations/fa.json @@ -0,0 +1,929 @@ +{ + "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", + "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.create_account": "Create account", + "auth.display_name_label": "Display Name", + "auth.email_label": "Email", + "auth.forgot_password": "Forgot Password?", + "auth.forgot_username": "Forgot username?", + "auth.login": "Log In", + "auth.login_title": "Log In", + "auth.logo_alt": "DocuElevate Logo", + "auth.logout": "Log Out", + "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.profile": "Profile", + "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_title": "Sign Up", + "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.active": "Active", + "common.all": "All", + "common.back": "Back", + "common.cancel": "Cancel", + "common.close": "Close", + "common.col_pending": "Pending", + "common.completed": "Completed", + "common.confirm": "Confirm", + "common.copied": "Copied!", + "common.copy": "Copy", + "common.create": "Create", + "common.created": "Created", + "common.date": "Date", + "common.delete": "Delete", + "common.description": "Description", + "common.details": "Details", + "common.disabled": "Disabled", + "common.download": "Download", + "common.duplicate": "Duplicate", + "common.edit": "Edit", + "common.enabled": "Enabled", + "common.error": "Error", + "common.failed": "Failed", + "common.filter": "Filter", + "common.inactive": "Inactive", + "common.info": "Info", + "common.loading": "Loading...", + "common.name": "Name", + "common.next": "Next", + "common.next_page": "Next page", + "common.no": "No", + "common.none": "None", + "common.page": "Page", + "common.pending": "Pending", + "common.prev_page": "Previous page", + "common.previous": "Previous", + "common.processing": "Processing", + "common.refresh": "Refresh", + "common.reset": "Reset", + "common.retry": "Retry", + "common.save": "Save", + "common.search": "Search", + "common.select": "Select", + "common.select_placeholder": "— select —", + "common.size": "Size", + "common.status": "Status", + "common.submit": "Submit", + "common.success": "Success", + "common.tags": "Tags", + "common.type": "Type", + "common.updated": "Updated", + "common.upload": "Upload", + "common.view": "View", + "common.warning": "Warning", + "common.yes": "Yes", + "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", + "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", + "cookie.notice_label": "Cookie notice", + "cookie.policy_link": "Cookie Policy", + "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.files_this_month": "Files This Month", + "dashboard.files_today": "Files Today", + "dashboard.ocr_processed": "OCR Processed", + "dashboard.quick_actions": "Quick Actions", + "dashboard.recent_activity": "Recent Activity", + "dashboard.storage_targets": "Storage Targets", + "dashboard.title": "Dashboard", + "dashboard.total_files": "Total Files", + "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_heading": "Oops, we couldn’t find that page!", + "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_title": "404 - Not Found", + "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_heading": "Oops! Something Went Wrong.", + "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_message": "You do not have permission to access this page.", + "error.not_found": "Page not found", + "error.not_found_message": "The page you are looking for does not exist.", + "error.server_error": "Internal Server Error", + "error.server_error_message": "Something went wrong. Please try again later.", + "error.unauthorized": "Unauthorized", + "error.unauthorized_message": "You need to log in to access this page.", + "files.action_delete": "Delete file", + "files.action_details": "View details", + "files.action_preview": "Quick preview", + "files.bulk_clear_selection": "Clear Selection", + "files.bulk_cloud_ocr": "Re-run Cloud OCR", + "files.bulk_delete": "Delete Selected", + "files.bulk_download": "Download as ZIP", + "files.bulk_reprocess": "Reprocess Selected", + "files.delete_modal_cancel": "Cancel", + "files.delete_modal_confirm": "Delete", + "files.delete_modal_message": "Are you sure you want to delete this file?", + "files.delete_modal_title": "Confirm Deletion", + "files.document_title": "Document Title", + "files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more – folders are processed recursively", + "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.filename": "Filename", + "files.files_selected": "files selected", + "files.filter_all_providers": "All Providers", + "files.filter_all_statuses": "All Statuses", + "files.filter_all_types": "All Types", + "files.filter_apply": "Apply Filters", + "files.filter_clear": "Clear", + "files.filter_date_from": "Date From", + "files.filter_date_from_aria": "Filter from date", + "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_ocr_all": "All Files", + "files.filter_ocr_good": "Good quality", + "files.filter_ocr_poor": "Poor 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_search_label": "Search Filename", + "files.filter_search_placeholder": "Enter filename...", + "files.filter_storage_provider": "Storage Provider", + "files.filter_tags_aria": "Filter by tags (comma-separated)", + "files.filter_tags_placeholder": "e.g. invoice,amazon", + "files.fulltext_search_label": "Full-Text Search (OCR text, metadata, tags)", + "files.fulltext_search_placeholder": "Search document content, sender, tags, type...", + "files.no_files": "No files found", + "files.ocr_status": "OCR Status", + "files.page_title": "File Records", + "files.pagination_files": "files", + "files.pagination_first": "First", + "files.pagination_last": "Last", + "files.pagination_nav_aria": "File list pagination", + "files.pagination_next": "Next", + "files.pagination_of": "of", + "files.pagination_previous": "Previous", + "files.pagination_showing": "Showing", + "files.preview_modal_close": "Close 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.saved_searches_empty": "No saved searches yet", + "files.saved_searches_error": "Could not load saved searches", + "files.saved_searches_label": "Saved Searches", + "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_title": "Search Results", + "files.status_duplicate": "Duplicate", + "files.table_actions": "Actions", + "files.table_aria": "File records", + "files.table_created_at": "Created At", + "files.table_empty": "No files found", + "files.table_id": "ID", + "files.table_mime_type": "MIME Type", + "files.table_original_filename": "Original Filename", + "files.table_select_all": "Select all files on this page", + "files.tags": "Tags", + "files.title": "Files", + "files.upload_modal_aria": "Upload progress", + "files.upload_modal_close": "Close upload progress", + "files.upload_modal_header": "Uploading Files", + "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", + "footer.attributions": "Attributions", + "footer.cookies": "Cookies", + "footer.copyright": "DocuElevate {year}", + "footer.imprint": "Imprint", + "footer.license": "License", + "footer.navigation": "Footer navigation", + "footer.privacy": "Privacy", + "footer.terms": "Terms", + "footer.version": "Version {version}", + "help.destinations_dropbox": "Dropbox", + "help.destinations_dropbox_desc": "OAuth-linked. Files land in your chosen folder.", + "help.destinations_email": "Email Forwarding", + "help.destinations_email_desc": "Processed files sent as SMTP attachments.", + "help.destinations_google_drive": "Google Drive", + "help.destinations_google_drive_desc": "Service account or OAuth. Supports shared drives.", + "help.destinations_heading": "Destinations – Where Documents Go", + "help.destinations_nextcloud": "Nextcloud / WebDAV", + "help.destinations_nextcloud_desc": "Self-hosted cloud storage via WebDAV.", + "help.destinations_onedrive": "OneDrive", + "help.destinations_onedrive_desc": "Microsoft Graph API integration.", + "help.destinations_paperless": "Paperless-ngx", + "help.destinations_paperless_desc": "Push documents straight into Paperless for archival.", + "help.destinations_s3": "Amazon S3", + "help.destinations_s3_desc": "Any S3-compatible bucket (AWS, MinIO, Wasabi).", + "help.destinations_sftp": "SFTP / FTP", + "help.destinations_sftp_desc": "Secure file transfer to any server.", + "help.destinations_webhook": "Webhook", + "help.destinations_webhook_desc": "POST metadata to any external endpoint.", + "help.documentation": "Documentation", + "help.faq": "Frequently Asked Questions", + "help.faq_1_a": "Navigate to the Upload page, drag-and-drop your files or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.faq_1_q": "How do I upload documents?", + "help.faq_2_a": "PDF, JPEG, PNG, TIFF, BMP, GIF, DOCX, XLSX, PPTX, ODT, ODS, TXT, RTF, and HTML. Non-PDF files are automatically converted to PDF before processing.", + "help.faq_2_q": "Which file formats are supported?", + "help.faq_3_a": "Yes. Go to Email Ingestion, add an IMAP account, and DocuElevate will poll for new messages and process attachments automatically.", + "help.faq_3_q": "Can I ingest documents from email?", + "help.faq_4_a": "Pipelines let you chain processing steps – OCR, AI extraction, format conversion – and route the result to one or more destinations. Create and manage them from the Pipelines page.", + "help.faq_4_q": "How do processing pipelines work?", + "help.faq_5_a": "DocuElevate encrypts credentials at rest, communicates over TLS, and never stores your documents longer than necessary. See the Privacy Notice for full details.", + "help.faq_5_q": "Is my data secure?", + "help.faq_heading": "Frequently Asked Questions", + "help.getting_started": "Getting Started", + "help.heading": "Help Center", + "help.page_title": "Help Center", + "help.privacy_notice": "Privacy Notice", + "help.quickstart_heading": "Quick Start", + "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_upload": "Upload Documents", + "help.quickstart_upload_desc": "Drag & drop files onto the Upload page or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.quickstart_workflows": "Automate Workflows", + "help.quickstart_workflows_desc": "Create Pipelines to define multi-step processing and routing rules. Combine OCR, AI extraction, format conversion, and delivery in a single flow.", + "help.sources_email_ingestion": "Email Ingestion (IMAP)", + "help.sources_email_ingestion_desc": "Forward documents to a dedicated mailbox. Under Email Ingestion, add one or more IMAP accounts. DocuElevate polls for new messages and processes attachments automatically.", + "help.sources_heading": "Sources – Getting Documents In", + "help.sources_rest_api": "REST API", + "help.sources_rest_api_desc": "Integrate programmatically by POST-ing files to /api/upload. Ideal for scripts, watched folders, scanners, or third-party tools like Zapier and n8n.", + "help.sources_scanner": "Scanner & Mobile", + "help.sources_scanner_desc": "Point network scanners at DocuElevate's upload endpoint or use any mobile scanning app that supports custom HTTP destinations.", + "help.sources_web_upload": "Web Upload", + "help.sources_web_upload_desc": "The fastest way to get started. Open the Upload page, drop one or more files, and DocuElevate takes care of the rest. Supported formats include PDF, JPEG, PNG, TIFF, DOCX, XLSX, and more.", + "help.subheading": "Everything you need to get the most out of DocuElevate. Browse topics below or search for what you need.", + "help.support": "Support", + "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_heading": "Contact Support", + "help.support_ticket_button": "Submit a Ticket", + "help.support_ticket_heading": "Open a Support Ticket", + "help.title": "Help Center", + "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_heading": "Workflows & Pipelines", + "help.workflows_step_1": "Convert to PDF", + "help.workflows_step_1_create": "Go to Pipelines in the main menu.", + "help.workflows_step_2": "OCR – extract text", + "help.workflows_step_2_create": "Click New Pipeline and give it a name.", + "help.workflows_step_3": "AI metadata extraction", + "help.workflows_step_3_create": "Add the processing steps you need.", + "help.workflows_step_4": "Deliver to one or more destinations", + "help.workflows_step_4_create": "Choose one or more delivery destinations.", + "help.workflows_step_5_create": "Save – new documents will be processed through this pipeline automatically.", + "help.workflows_typical_steps": "Typical Steps", + "help.workflows_what_is": "What is a Pipeline?", + "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_ingestion": "Email & URL-based document ingestion", + "index.capabilities_ocr": "OCR & metadata extraction with AI", + "index.capabilities_paperless": "Paperless-ngx integration for document management", + "index.capabilities_title": "Capabilities", + "index.capabilities_workflows": "Automated classification & routing workflows", + "index.cta_description": "Join teams already automating their document processing with DocuElevate.", + "index.cta_heading": "Ready to elevate your document workflow?", + "index.cta_pricing": "See pricing", + "index.cta_signup": "Create a free account", + "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_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_desc": "Route processed files to Dropbox, Google Drive, OneDrive, Amazon S3, Nextcloud, Paperless NGX, WebDAV, FTP/SFTP, and more.", + "index.feature_email": "Email & IMAP Ingestion", + "index.feature_email_desc": "Automatically pull documents from Gmail or any IMAP mailbox — no manual uploads needed.", + "index.feature_ocr": "OCR & Text Extraction", + "index.feature_ocr_desc": "Azure Document Intelligence converts scanned PDFs and images into fully searchable text automatically.", + "index.feature_pipelines": "Custom Pipelines", + "index.feature_pipelines_desc": "Build processing pipelines with configurable steps — OCR, AI extraction, format conversion, and storage routing in any order.", + "index.feature_search": "Full-Text Search", + "index.feature_search_desc": "Instantly find any document by content, metadata, or tags across your entire archive.", + "index.feature_section_title": "Everything you need for smart document workflows", + "index.getting_started": "Getting Started", + "index.getting_started_1": "Configure integrations via System Status", + "index.getting_started_2": "Upload your first document", + "index.getting_started_3": "Review results in Files", + "index.getting_started_learn": "Learn more about DocuElevate", + "index.hero_description": "DocuElevate ingests your documents, runs OCR, extracts metadata with AI, and routes files to Dropbox, Google Drive, OneDrive, S3, Nextcloud, and more — all in one seamless pipeline.", + "index.hero_heading": "From upload to insight — automatically.", + "index.hero_login": "Log In", + "index.hero_pricing": "View Plans & Pricing", + "index.hero_signup": "Get Started — it’s free", + "index.integrations_active": "Active integrations", + "index.integrations_storage": "Storage targets", + "index.integrations_title": "Integrations", + "index.integrations_view_status": "View system status", + "index.page_title_dashboard": "Dashboard", + "index.page_title_public": "Intelligent Document Processing", + "index.platform_overview": "Platform overview", + "index.quick_actions": "Quick Actions", + "index.quick_documents": "My Documents", + "index.quick_documents_desc": "Browse your processed files", + "index.quick_search": "Search", + "index.quick_search_desc": "Full-text search across documents", + "index.quick_subscription": "My Subscription", + "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_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_subtitle": "Intelligent document processing & management", + "index.stat_active_integrations": "Active Integrations", + "index.stat_active_users": "Active users", + "index.stat_files_month": "Files this month", + "index.stat_files_today": "Files today", + "index.stat_storage_targets": "Storage Targets", + "index.stat_total_files": "Total files", + "index.tier_plan": "Plan", + "index.tier_upgrade": "Upgrade", + "index.tier_view_details": "View full details", + "index.upgrade_daily_limits": "Higher daily & monthly limits", + "index.upgrade_description": "Unlock more documents, more destinations and priority support.", + "index.upgrade_destinations": "More storage destinations", + "index.upgrade_ocr_pages": "More OCR pages", + "index.upgrade_plan": "Upgrade your plan", + "index.upgrade_view_pricing": "View plans & pricing", + "index.usage_lifetime": "Lifetime files", + "index.usage_month": "Files this month", + "index.usage_my_usage": "My usage", + "index.usage_today": "Files today", + "index.usage_unlimited": "Unlimited", + "integrations.configure": "Configure", + "integrations.connect": "Connect", + "integrations.connected": "Connected", + "integrations.disconnect": "Disconnect", + "integrations.empty_state": "No integrations configured", + "integrations.folder_label": "Folder", + "integrations.host_label": "Host", + "integrations.imap_settings": "IMAP Settings", + "integrations.not_connected": "Not Connected", + "integrations.page_title": "Integrations", + "integrations.password_label": "Password", + "integrations.port_label": "Port", + "integrations.title": "Integrations", + "integrations.username_label": "Username", + "language.bg": "Български", + "language.ca": "Català", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", + "language.cs": "Čeština", + "language.da": "Dansk", + "language.de": "Deutsch", + "language.el": "Ελληνικά", + "language.en": "English", + "language.es": "Español", + "language.et": "Eesti", + "language.fi": "Suomi", + "language.fr": "Français", + "language.ga": "Gaeilge", + "language.hr": "Hrvatski", + "language.hu": "Magyar", + "language.is": "Íslenska", + "language.it": "Italiano", + "language.lb": "Lëtzebuergesch", + "language.lt": "Lietuvių", + "language.lv": "Latviešu", + "language.nb": "Norsk", + "language.nl": "Nederlands", + "language.pl": "Polski", + "language.pt": "Português", + "language.ro": "Română", + "language.ru": "Русский", + "language.selector": "Language", + "language.selector_label": "Select language", + "language.sk": "Slovenčina", + "language.sl": "Slovenščina", + "language.sv": "Svenska", + "language.tr": "Türkçe", + "language.uk": "Українська", + "language.zh": "中文", + "nav.about": "About", + "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", + "nav.admin_actions": "Admin actions", + "nav.admin_menu": "Admin menu", + "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", + "nav.backup_restore": "Backup & Restore", + "nav.credentials": "Credentials", + "nav.dark_mode": "Dark Mode", + "nav.dashboard": "Dashboard", + "nav.developer_docs": "Developer Docs", + "nav.duplicates": "Duplicates", + "nav.file_manager": "File Manager", + "nav.files": "Files", + "nav.help": "Help", + "nav.help_center": "Help Center", + "nav.imap": "Email Import", + "nav.integrations": "Integrations", + "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", + "nav.main_navigation": "Main navigation", + "nav.notifications": "Notifications", + "nav.open_main_menu": "Open main menu", + "nav.pipelines": "Pipelines", + "nav.plan_designer": "Plan Designer", + "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", + "nav.queue_monitor": "Queue Monitor", + "nav.scheduled_jobs": "Scheduled Jobs", + "nav.search": "Search", + "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", + "nav.similarity": "Similarity", + "nav.skip_to_content": "Skip to main content", + "nav.status": "Status", + "nav.subscription": "Subscription", + "nav.toggle_dark_mode": "Toggle dark mode", + "nav.toggle_nav": "Toggle navigation menu", + "nav.upload": "Upload", + "nav.users": "Users", + "nav.version": "Version Info", + "notifications.filter_all": "All", + "notifications.filter_read": "Read only", + "notifications.filter_unread": "Unread only", + "notifications.manage_desc": "Manage your notification inbox, targets, and event preferences", + "notifications.mark_all_read": "Mark All as Read", + "notifications.mark_all_read_btn": "Mark all read", + "notifications.mark_read": "Mark as Read", + "notifications.no_notifications": "No notifications", + "notifications.page_title": "Notifications", + "notifications.tab_inbox": "Inbox", + "notifications.tab_settings": "Settings", + "notifications.title": "Notifications", + "notifications.unread_count": "{count} unread notifications", + "pipelines.active_label": "Active", + "pipelines.add_step_btn": "Add Step", + "pipelines.create": "Create Pipeline", + "pipelines.custom_label_label": "Custom Label", + "pipelines.default_label": "Default", + "pipelines.description_label": "Description", + "pipelines.description_placeholder": "Optional description", + "pipelines.disabled_label": "Disabled", + "pipelines.edit": "Edit Pipeline", + "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.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)", + "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.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_pipeline_label": "System pipeline (visible to all users)", + "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.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_date_from": "Date From", + "search.filter_date_to": "Date To", + "search.filter_document_type": "Document Type", + "search.filter_document_type_placeholder": "e.g. Invoice", + "search.filter_language": "Language", + "search.filter_language_placeholder": "e.g. de", + "search.filter_sender": "Sender", + "search.filter_sender_placeholder": "e.g. ACME Corp", + "search.filter_tags": "Tags", + "search.filter_tags_placeholder": "e.g. amazon", + "search.filter_text_quality": "Text Quality", + "search.filter_text_quality_all": "All", + "search.filter_text_quality_high": "High", + "search.filter_text_quality_low": "Low", + "search.filter_text_quality_medium": "Medium", + "search.filter_text_quality_no_text": "No text", + "search.heading": "Document Search", + "search.input_aria_label": "Search documents", + "search.input_placeholder": "Search documents by content, sender, tags, type...", + "search.loading_indicator": "Searching…", + "search.no_results": "No results found", + "search.page_title": "Search Documents", + "search.placeholder": "Search by filename, content, tags...", + "search.result_empty": "No documents found matching your query.", + "search.results_count": "{count} results found", + "search.saved_aria_save": "Save current search", + "search.saved_button": "Save Current", + "search.saved_empty": "No saved searches yet", + "search.saved_error": "Could not load saved searches", + "search.saved_label": "Saved Searches", + "search.saved_loading": "Loading...", + "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.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_setting_title": "Save this setting", + "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.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.build_date": "Build Date", + "status.container_id": "Container ID", + "status.git_commit": "Git Commit", + "status.last_check": "Last Check", + "status.page_title": "System Status", + "status.setting_label": "Setting", + "status.value_label": "Value", + "upload.browse_button": "Browse Files", + "upload.button_processing": "Processing...", + "upload.camera_button": "Take Photo / Scan Document", + "upload.download_button": "Download and Process", + "upload.downloading": "Downloading file from URL...", + "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_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_invalid_url": "Invalid URL format", + "upload.error_url_required": "Please enter a URL", + "upload.file_size_hint": "Maximum size: 500 MB per file", + "upload.file_types": "Allowed types: PDF, Office documents (Word, Excel, PowerPoint, etc.), Images", + "upload.filename_description": "Leave empty to use filename from URL", + "upload.filename_label": "Filename (optional)", + "upload.filename_placeholder": "my-document.pdf", + "upload.max_size": "Maximum file size: {size}", + "upload.page_title": "Upload Files", + "upload.section_device": "Upload from Device", + "upload.section_url": "Upload from URL", + "upload.select_file": "Select File", + "upload.success": "File uploaded successfully", + "upload.title": "Upload Document", + "upload.uploading": "Uploading...", + "upload.url_description": "Enter a direct link to a file (PDF, Office documents, or images)", + "upload.url_label": "File URL", + "upload.url_placeholder": "https://example.com/document.pdf" +} diff --git a/frontend/translations/fi.json b/frontend/translations/fi.json index cfe1710b..edc89326 100644 --- a/frontend/translations/fi.json +++ b/frontend/translations/fi.json @@ -195,6 +195,7 @@ "common.confirm": "Confirm", "common.copied": "Copied!", "common.copy": "Copy", + "common.create": "Create", "common.created": "Created", "common.date": "Date", "common.delete": "Delete", @@ -202,6 +203,7 @@ "common.details": "Details", "common.disabled": "Disabled", "common.download": "Download", + "common.duplicate": "Duplicate", "common.edit": "Edit", "common.enabled": "Enabled", "common.error": "Error", @@ -218,6 +220,7 @@ "common.page": "Page", "common.pending": "Pending", "common.prev_page": "Previous page", + "common.previous": "Previous", "common.processing": "Processing", "common.refresh": "Refresh", "common.reset": "Reset", @@ -228,7 +231,9 @@ "common.select_placeholder": "— select —", "common.size": "Size", "common.status": "Status", + "common.submit": "Submit", "common.success": "Success", + "common.tags": "Tags", "common.type": "Type", "common.updated": "Updated", "common.upload": "Upload", @@ -236,6 +241,8 @@ "common.warning": "Warning", "common.yes": "Yes", "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", "cookie.notice_label": "Cookie notice", "cookie.policy_link": "Cookie Policy", @@ -398,6 +405,8 @@ "files.upload_modal_close": "Close upload progress", "files.upload_modal_header": "Uploading Files", "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", "footer.attributions": "Attributions", "footer.cookies": "Cookies", "footer.copyright": "DocuElevate {year}", @@ -577,6 +586,7 @@ "integrations.username_label": "Username", "language.bg": "Български", "language.ca": "Català", + "language.change_success": "Language changed to {language}", "language.changed": "Kieli vaihdettiin kieleen {language}", "language.cs": "Čeština", "language.da": "Dansk", @@ -602,6 +612,7 @@ "language.ro": "Română", "language.ru": "Русский", "language.selector": "Suomi", + "language.selector_label": "Select language", "language.sk": "Slovenčina", "language.sl": "Slovenščina", "language.sv": "Svenska", @@ -610,9 +621,15 @@ "language.zh": "中文", "nav.about": "About", "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", "nav.admin_actions": "Admin actions", "nav.admin_menu": "Admin menu", "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", "nav.backup_restore": "Backup & Restore", "nav.credentials": "Credentials", "nav.dark_mode": "Dark Mode", @@ -623,25 +640,34 @@ "nav.files": "Files", "nav.help": "Help", "nav.help_center": "Help Center", + "nav.imap": "Email Import", "nav.integrations": "Integrations", "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", "nav.main_navigation": "Main navigation", "nav.notifications": "Notifications", "nav.open_main_menu": "Open main menu", "nav.pipelines": "Pipelines", "nav.plan_designer": "Plan Designer", "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", "nav.queue_monitor": "Queue Monitor", "nav.scheduled_jobs": "Scheduled Jobs", "nav.search": "Search", "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", "nav.similarity": "Similarity", "nav.skip_to_content": "Skip to main content", "nav.status": "Status", + "nav.subscription": "Subscription", "nav.toggle_dark_mode": "Toggle dark mode", "nav.toggle_nav": "Toggle navigation menu", "nav.upload": "Upload", "nav.users": "Users", + "nav.version": "Version Info", "notifications.filter_all": "All", "notifications.filter_read": "Read only", "notifications.filter_unread": "Unread only", diff --git a/frontend/translations/fr.json b/frontend/translations/fr.json index 8be9a08a..bf19fc9f 100644 --- a/frontend/translations/fr.json +++ b/frontend/translations/fr.json @@ -195,6 +195,7 @@ "common.confirm": "Confirmer", "common.copied": "Copié !", "common.copy": "Copier", + "common.create": "Create", "common.created": "Créé", "common.date": "Date", "common.delete": "Supprimer", @@ -202,6 +203,7 @@ "common.details": "Détails", "common.disabled": "Désactivé", "common.download": "Télécharger", + "common.duplicate": "Duplicate", "common.edit": "Modifier", "common.enabled": "Activé", "common.error": "Erreur", @@ -218,6 +220,7 @@ "common.page": "Page", "common.pending": "En attente", "common.prev_page": "Previous page", + "common.previous": "Previous", "common.processing": "En cours de traitement", "common.refresh": "Actualiser", "common.reset": "Réinitialiser", @@ -228,7 +231,9 @@ "common.select_placeholder": "— select —", "common.size": "Taille", "common.status": "Statut", + "common.submit": "Submit", "common.success": "Succès", + "common.tags": "Tags", "common.type": "Type", "common.updated": "Mis à jour", "common.upload": "Téléverser", @@ -236,6 +241,8 @@ "common.warning": "Avertissement", "common.yes": "Oui", "cookie.accept": "Compris", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", "cookie.notice": "DocuElevate utilise uniquement des cookies de session essentiels nécessaires à l'authentification et au fonctionnement du service. Aucun cookie de suivi ou d'analyse n'est utilisé.", "cookie.notice_label": "Avis relatif aux cookies", "cookie.policy_link": "Politique de cookies", @@ -398,6 +405,8 @@ "files.upload_modal_close": "Close upload progress", "files.upload_modal_header": "Uploading Files", "files.uploaded": "Téléversé", + "footer.about": "About", + "footer.attribution": "Attribution", "footer.attributions": "Attributions", "footer.cookies": "Cookies", "footer.copyright": "DocuElevate {year}", @@ -577,6 +586,7 @@ "integrations.username_label": "Username", "language.bg": "Български", "language.ca": "Català", + "language.change_success": "Language changed to {language}", "language.changed": "Langue changée en {language}", "language.cs": "Čeština", "language.da": "Dansk", @@ -602,6 +612,7 @@ "language.ro": "Română", "language.ru": "Русский", "language.selector": "Langue", + "language.selector_label": "Select language", "language.sk": "Slovenčina", "language.sl": "Slovenščina", "language.sv": "Svenska", @@ -610,9 +621,15 @@ "language.zh": "中文", "nav.about": "À propos", "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", "nav.admin_actions": "Actions admin", "nav.admin_menu": "Menu admin", "nav.api_docs": "Documentation API", + "nav.api_tokens": "API Tokens", "nav.backup_restore": "Sauvegarde et restauration", "nav.credentials": "Identifiants", "nav.dark_mode": "Mode sombre", @@ -623,25 +640,34 @@ "nav.files": "Fichiers", "nav.help": "Aide", "nav.help_center": "Centre d'aide", + "nav.imap": "Email Import", "nav.integrations": "Intégrations", "nav.light_mode": "Mode clair", + "nav.login": "Log In", + "nav.logout": "Log Out", "nav.main_navigation": "Navigation principale", "nav.notifications": "Notifications", "nav.open_main_menu": "Ouvrir le menu principal", "nav.pipelines": "Pipelines", "nav.plan_designer": "Concepteur de plans", "nav.pricing": "Tarifs", + "nav.profile": "Profile", + "nav.queue": "Queue", "nav.queue_monitor": "File d'attente", "nav.scheduled_jobs": "Tâches planifiées", "nav.search": "Recherche", "nav.settings": "Paramètres", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", "nav.similarity": "Similarité", "nav.skip_to_content": "Aller au contenu principal", "nav.status": "Statut", + "nav.subscription": "Subscription", "nav.toggle_dark_mode": "Basculer le mode sombre", "nav.toggle_nav": "Basculer le menu de navigation", "nav.upload": "Téléverser", "nav.users": "Utilisateurs", + "nav.version": "Version Info", "notifications.filter_all": "All", "notifications.filter_read": "Read only", "notifications.filter_unread": "Unread only", diff --git a/frontend/translations/fy.json b/frontend/translations/fy.json new file mode 100644 index 00000000..d36160ed --- /dev/null +++ b/frontend/translations/fy.json @@ -0,0 +1,929 @@ +{ + "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", + "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.create_account": "Create account", + "auth.display_name_label": "Display Name", + "auth.email_label": "Email", + "auth.forgot_password": "Forgot Password?", + "auth.forgot_username": "Forgot username?", + "auth.login": "Log In", + "auth.login_title": "Log In", + "auth.logo_alt": "DocuElevate Logo", + "auth.logout": "Log Out", + "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.profile": "Profile", + "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_title": "Sign Up", + "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.active": "Active", + "common.all": "All", + "common.back": "Back", + "common.cancel": "Cancel", + "common.close": "Close", + "common.col_pending": "Pending", + "common.completed": "Completed", + "common.confirm": "Confirm", + "common.copied": "Copied!", + "common.copy": "Copy", + "common.create": "Create", + "common.created": "Created", + "common.date": "Date", + "common.delete": "Delete", + "common.description": "Description", + "common.details": "Details", + "common.disabled": "Disabled", + "common.download": "Download", + "common.duplicate": "Duplicate", + "common.edit": "Edit", + "common.enabled": "Enabled", + "common.error": "Error", + "common.failed": "Failed", + "common.filter": "Filter", + "common.inactive": "Inactive", + "common.info": "Info", + "common.loading": "Loading...", + "common.name": "Name", + "common.next": "Next", + "common.next_page": "Next page", + "common.no": "No", + "common.none": "None", + "common.page": "Page", + "common.pending": "Pending", + "common.prev_page": "Previous page", + "common.previous": "Previous", + "common.processing": "Processing", + "common.refresh": "Refresh", + "common.reset": "Reset", + "common.retry": "Retry", + "common.save": "Save", + "common.search": "Search", + "common.select": "Select", + "common.select_placeholder": "— select —", + "common.size": "Size", + "common.status": "Status", + "common.submit": "Submit", + "common.success": "Success", + "common.tags": "Tags", + "common.type": "Type", + "common.updated": "Updated", + "common.upload": "Upload", + "common.view": "View", + "common.warning": "Warning", + "common.yes": "Yes", + "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", + "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", + "cookie.notice_label": "Cookie notice", + "cookie.policy_link": "Cookie Policy", + "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.files_this_month": "Files This Month", + "dashboard.files_today": "Files Today", + "dashboard.ocr_processed": "OCR Processed", + "dashboard.quick_actions": "Quick Actions", + "dashboard.recent_activity": "Recent Activity", + "dashboard.storage_targets": "Storage Targets", + "dashboard.title": "Dashboard", + "dashboard.total_files": "Total Files", + "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_heading": "Oops, we couldn’t find that page!", + "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_title": "404 - Not Found", + "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_heading": "Oops! Something Went Wrong.", + "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_message": "You do not have permission to access this page.", + "error.not_found": "Page not found", + "error.not_found_message": "The page you are looking for does not exist.", + "error.server_error": "Internal Server Error", + "error.server_error_message": "Something went wrong. Please try again later.", + "error.unauthorized": "Unauthorized", + "error.unauthorized_message": "You need to log in to access this page.", + "files.action_delete": "Delete file", + "files.action_details": "View details", + "files.action_preview": "Quick preview", + "files.bulk_clear_selection": "Clear Selection", + "files.bulk_cloud_ocr": "Re-run Cloud OCR", + "files.bulk_delete": "Delete Selected", + "files.bulk_download": "Download as ZIP", + "files.bulk_reprocess": "Reprocess Selected", + "files.delete_modal_cancel": "Cancel", + "files.delete_modal_confirm": "Delete", + "files.delete_modal_message": "Are you sure you want to delete this file?", + "files.delete_modal_title": "Confirm Deletion", + "files.document_title": "Document Title", + "files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more – folders are processed recursively", + "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.filename": "Filename", + "files.files_selected": "files selected", + "files.filter_all_providers": "All Providers", + "files.filter_all_statuses": "All Statuses", + "files.filter_all_types": "All Types", + "files.filter_apply": "Apply Filters", + "files.filter_clear": "Clear", + "files.filter_date_from": "Date From", + "files.filter_date_from_aria": "Filter from date", + "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_ocr_all": "All Files", + "files.filter_ocr_good": "Good quality", + "files.filter_ocr_poor": "Poor 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_search_label": "Search Filename", + "files.filter_search_placeholder": "Enter filename...", + "files.filter_storage_provider": "Storage Provider", + "files.filter_tags_aria": "Filter by tags (comma-separated)", + "files.filter_tags_placeholder": "e.g. invoice,amazon", + "files.fulltext_search_label": "Full-Text Search (OCR text, metadata, tags)", + "files.fulltext_search_placeholder": "Search document content, sender, tags, type...", + "files.no_files": "No files found", + "files.ocr_status": "OCR Status", + "files.page_title": "File Records", + "files.pagination_files": "files", + "files.pagination_first": "First", + "files.pagination_last": "Last", + "files.pagination_nav_aria": "File list pagination", + "files.pagination_next": "Next", + "files.pagination_of": "of", + "files.pagination_previous": "Previous", + "files.pagination_showing": "Showing", + "files.preview_modal_close": "Close 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.saved_searches_empty": "No saved searches yet", + "files.saved_searches_error": "Could not load saved searches", + "files.saved_searches_label": "Saved Searches", + "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_title": "Search Results", + "files.status_duplicate": "Duplicate", + "files.table_actions": "Actions", + "files.table_aria": "File records", + "files.table_created_at": "Created At", + "files.table_empty": "No files found", + "files.table_id": "ID", + "files.table_mime_type": "MIME Type", + "files.table_original_filename": "Original Filename", + "files.table_select_all": "Select all files on this page", + "files.tags": "Tags", + "files.title": "Files", + "files.upload_modal_aria": "Upload progress", + "files.upload_modal_close": "Close upload progress", + "files.upload_modal_header": "Uploading Files", + "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", + "footer.attributions": "Attributions", + "footer.cookies": "Cookies", + "footer.copyright": "DocuElevate {year}", + "footer.imprint": "Imprint", + "footer.license": "License", + "footer.navigation": "Footer navigation", + "footer.privacy": "Privacy", + "footer.terms": "Terms", + "footer.version": "Version {version}", + "help.destinations_dropbox": "Dropbox", + "help.destinations_dropbox_desc": "OAuth-linked. Files land in your chosen folder.", + "help.destinations_email": "Email Forwarding", + "help.destinations_email_desc": "Processed files sent as SMTP attachments.", + "help.destinations_google_drive": "Google Drive", + "help.destinations_google_drive_desc": "Service account or OAuth. Supports shared drives.", + "help.destinations_heading": "Destinations – Where Documents Go", + "help.destinations_nextcloud": "Nextcloud / WebDAV", + "help.destinations_nextcloud_desc": "Self-hosted cloud storage via WebDAV.", + "help.destinations_onedrive": "OneDrive", + "help.destinations_onedrive_desc": "Microsoft Graph API integration.", + "help.destinations_paperless": "Paperless-ngx", + "help.destinations_paperless_desc": "Push documents straight into Paperless for archival.", + "help.destinations_s3": "Amazon S3", + "help.destinations_s3_desc": "Any S3-compatible bucket (AWS, MinIO, Wasabi).", + "help.destinations_sftp": "SFTP / FTP", + "help.destinations_sftp_desc": "Secure file transfer to any server.", + "help.destinations_webhook": "Webhook", + "help.destinations_webhook_desc": "POST metadata to any external endpoint.", + "help.documentation": "Documentation", + "help.faq": "Frequently Asked Questions", + "help.faq_1_a": "Navigate to the Upload page, drag-and-drop your files or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.faq_1_q": "How do I upload documents?", + "help.faq_2_a": "PDF, JPEG, PNG, TIFF, BMP, GIF, DOCX, XLSX, PPTX, ODT, ODS, TXT, RTF, and HTML. Non-PDF files are automatically converted to PDF before processing.", + "help.faq_2_q": "Which file formats are supported?", + "help.faq_3_a": "Yes. Go to Email Ingestion, add an IMAP account, and DocuElevate will poll for new messages and process attachments automatically.", + "help.faq_3_q": "Can I ingest documents from email?", + "help.faq_4_a": "Pipelines let you chain processing steps – OCR, AI extraction, format conversion – and route the result to one or more destinations. Create and manage them from the Pipelines page.", + "help.faq_4_q": "How do processing pipelines work?", + "help.faq_5_a": "DocuElevate encrypts credentials at rest, communicates over TLS, and never stores your documents longer than necessary. See the Privacy Notice for full details.", + "help.faq_5_q": "Is my data secure?", + "help.faq_heading": "Frequently Asked Questions", + "help.getting_started": "Getting Started", + "help.heading": "Help Center", + "help.page_title": "Help Center", + "help.privacy_notice": "Privacy Notice", + "help.quickstart_heading": "Quick Start", + "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_upload": "Upload Documents", + "help.quickstart_upload_desc": "Drag & drop files onto the Upload page or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.quickstart_workflows": "Automate Workflows", + "help.quickstart_workflows_desc": "Create Pipelines to define multi-step processing and routing rules. Combine OCR, AI extraction, format conversion, and delivery in a single flow.", + "help.sources_email_ingestion": "Email Ingestion (IMAP)", + "help.sources_email_ingestion_desc": "Forward documents to a dedicated mailbox. Under Email Ingestion, add one or more IMAP accounts. DocuElevate polls for new messages and processes attachments automatically.", + "help.sources_heading": "Sources – Getting Documents In", + "help.sources_rest_api": "REST API", + "help.sources_rest_api_desc": "Integrate programmatically by POST-ing files to /api/upload. Ideal for scripts, watched folders, scanners, or third-party tools like Zapier and n8n.", + "help.sources_scanner": "Scanner & Mobile", + "help.sources_scanner_desc": "Point network scanners at DocuElevate's upload endpoint or use any mobile scanning app that supports custom HTTP destinations.", + "help.sources_web_upload": "Web Upload", + "help.sources_web_upload_desc": "The fastest way to get started. Open the Upload page, drop one or more files, and DocuElevate takes care of the rest. Supported formats include PDF, JPEG, PNG, TIFF, DOCX, XLSX, and more.", + "help.subheading": "Everything you need to get the most out of DocuElevate. Browse topics below or search for what you need.", + "help.support": "Support", + "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_heading": "Contact Support", + "help.support_ticket_button": "Submit a Ticket", + "help.support_ticket_heading": "Open a Support Ticket", + "help.title": "Help Center", + "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_heading": "Workflows & Pipelines", + "help.workflows_step_1": "Convert to PDF", + "help.workflows_step_1_create": "Go to Pipelines in the main menu.", + "help.workflows_step_2": "OCR – extract text", + "help.workflows_step_2_create": "Click New Pipeline and give it a name.", + "help.workflows_step_3": "AI metadata extraction", + "help.workflows_step_3_create": "Add the processing steps you need.", + "help.workflows_step_4": "Deliver to one or more destinations", + "help.workflows_step_4_create": "Choose one or more delivery destinations.", + "help.workflows_step_5_create": "Save – new documents will be processed through this pipeline automatically.", + "help.workflows_typical_steps": "Typical Steps", + "help.workflows_what_is": "What is a Pipeline?", + "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_ingestion": "Email & URL-based document ingestion", + "index.capabilities_ocr": "OCR & metadata extraction with AI", + "index.capabilities_paperless": "Paperless-ngx integration for document management", + "index.capabilities_title": "Capabilities", + "index.capabilities_workflows": "Automated classification & routing workflows", + "index.cta_description": "Join teams already automating their document processing with DocuElevate.", + "index.cta_heading": "Ready to elevate your document workflow?", + "index.cta_pricing": "See pricing", + "index.cta_signup": "Create a free account", + "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_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_desc": "Route processed files to Dropbox, Google Drive, OneDrive, Amazon S3, Nextcloud, Paperless NGX, WebDAV, FTP/SFTP, and more.", + "index.feature_email": "Email & IMAP Ingestion", + "index.feature_email_desc": "Automatically pull documents from Gmail or any IMAP mailbox — no manual uploads needed.", + "index.feature_ocr": "OCR & Text Extraction", + "index.feature_ocr_desc": "Azure Document Intelligence converts scanned PDFs and images into fully searchable text automatically.", + "index.feature_pipelines": "Custom Pipelines", + "index.feature_pipelines_desc": "Build processing pipelines with configurable steps — OCR, AI extraction, format conversion, and storage routing in any order.", + "index.feature_search": "Full-Text Search", + "index.feature_search_desc": "Instantly find any document by content, metadata, or tags across your entire archive.", + "index.feature_section_title": "Everything you need for smart document workflows", + "index.getting_started": "Getting Started", + "index.getting_started_1": "Configure integrations via System Status", + "index.getting_started_2": "Upload your first document", + "index.getting_started_3": "Review results in Files", + "index.getting_started_learn": "Learn more about DocuElevate", + "index.hero_description": "DocuElevate ingests your documents, runs OCR, extracts metadata with AI, and routes files to Dropbox, Google Drive, OneDrive, S3, Nextcloud, and more — all in one seamless pipeline.", + "index.hero_heading": "From upload to insight — automatically.", + "index.hero_login": "Log In", + "index.hero_pricing": "View Plans & Pricing", + "index.hero_signup": "Get Started — it’s free", + "index.integrations_active": "Active integrations", + "index.integrations_storage": "Storage targets", + "index.integrations_title": "Integrations", + "index.integrations_view_status": "View system status", + "index.page_title_dashboard": "Dashboard", + "index.page_title_public": "Intelligent Document Processing", + "index.platform_overview": "Platform overview", + "index.quick_actions": "Quick Actions", + "index.quick_documents": "My Documents", + "index.quick_documents_desc": "Browse your processed files", + "index.quick_search": "Search", + "index.quick_search_desc": "Full-text search across documents", + "index.quick_subscription": "My Subscription", + "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_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_subtitle": "Intelligent document processing & management", + "index.stat_active_integrations": "Active Integrations", + "index.stat_active_users": "Active users", + "index.stat_files_month": "Files this month", + "index.stat_files_today": "Files today", + "index.stat_storage_targets": "Storage Targets", + "index.stat_total_files": "Total files", + "index.tier_plan": "Plan", + "index.tier_upgrade": "Upgrade", + "index.tier_view_details": "View full details", + "index.upgrade_daily_limits": "Higher daily & monthly limits", + "index.upgrade_description": "Unlock more documents, more destinations and priority support.", + "index.upgrade_destinations": "More storage destinations", + "index.upgrade_ocr_pages": "More OCR pages", + "index.upgrade_plan": "Upgrade your plan", + "index.upgrade_view_pricing": "View plans & pricing", + "index.usage_lifetime": "Lifetime files", + "index.usage_month": "Files this month", + "index.usage_my_usage": "My usage", + "index.usage_today": "Files today", + "index.usage_unlimited": "Unlimited", + "integrations.configure": "Configure", + "integrations.connect": "Connect", + "integrations.connected": "Connected", + "integrations.disconnect": "Disconnect", + "integrations.empty_state": "No integrations configured", + "integrations.folder_label": "Folder", + "integrations.host_label": "Host", + "integrations.imap_settings": "IMAP Settings", + "integrations.not_connected": "Not Connected", + "integrations.page_title": "Integrations", + "integrations.password_label": "Password", + "integrations.port_label": "Port", + "integrations.title": "Integrations", + "integrations.username_label": "Username", + "language.bg": "Български", + "language.ca": "Català", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", + "language.cs": "Čeština", + "language.da": "Dansk", + "language.de": "Deutsch", + "language.el": "Ελληνικά", + "language.en": "English", + "language.es": "Español", + "language.et": "Eesti", + "language.fi": "Suomi", + "language.fr": "Français", + "language.ga": "Gaeilge", + "language.hr": "Hrvatski", + "language.hu": "Magyar", + "language.is": "Íslenska", + "language.it": "Italiano", + "language.lb": "Lëtzebuergesch", + "language.lt": "Lietuvių", + "language.lv": "Latviešu", + "language.nb": "Norsk", + "language.nl": "Nederlands", + "language.pl": "Polski", + "language.pt": "Português", + "language.ro": "Română", + "language.ru": "Русский", + "language.selector": "Language", + "language.selector_label": "Select language", + "language.sk": "Slovenčina", + "language.sl": "Slovenščina", + "language.sv": "Svenska", + "language.tr": "Türkçe", + "language.uk": "Українська", + "language.zh": "中文", + "nav.about": "About", + "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", + "nav.admin_actions": "Admin actions", + "nav.admin_menu": "Admin menu", + "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", + "nav.backup_restore": "Backup & Restore", + "nav.credentials": "Credentials", + "nav.dark_mode": "Dark Mode", + "nav.dashboard": "Dashboard", + "nav.developer_docs": "Developer Docs", + "nav.duplicates": "Duplicates", + "nav.file_manager": "File Manager", + "nav.files": "Files", + "nav.help": "Help", + "nav.help_center": "Help Center", + "nav.imap": "Email Import", + "nav.integrations": "Integrations", + "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", + "nav.main_navigation": "Main navigation", + "nav.notifications": "Notifications", + "nav.open_main_menu": "Open main menu", + "nav.pipelines": "Pipelines", + "nav.plan_designer": "Plan Designer", + "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", + "nav.queue_monitor": "Queue Monitor", + "nav.scheduled_jobs": "Scheduled Jobs", + "nav.search": "Search", + "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", + "nav.similarity": "Similarity", + "nav.skip_to_content": "Skip to main content", + "nav.status": "Status", + "nav.subscription": "Subscription", + "nav.toggle_dark_mode": "Toggle dark mode", + "nav.toggle_nav": "Toggle navigation menu", + "nav.upload": "Upload", + "nav.users": "Users", + "nav.version": "Version Info", + "notifications.filter_all": "All", + "notifications.filter_read": "Read only", + "notifications.filter_unread": "Unread only", + "notifications.manage_desc": "Manage your notification inbox, targets, and event preferences", + "notifications.mark_all_read": "Mark All as Read", + "notifications.mark_all_read_btn": "Mark all read", + "notifications.mark_read": "Mark as Read", + "notifications.no_notifications": "No notifications", + "notifications.page_title": "Notifications", + "notifications.tab_inbox": "Inbox", + "notifications.tab_settings": "Settings", + "notifications.title": "Notifications", + "notifications.unread_count": "{count} unread notifications", + "pipelines.active_label": "Active", + "pipelines.add_step_btn": "Add Step", + "pipelines.create": "Create Pipeline", + "pipelines.custom_label_label": "Custom Label", + "pipelines.default_label": "Default", + "pipelines.description_label": "Description", + "pipelines.description_placeholder": "Optional description", + "pipelines.disabled_label": "Disabled", + "pipelines.edit": "Edit Pipeline", + "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.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)", + "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.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_pipeline_label": "System pipeline (visible to all users)", + "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.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_date_from": "Date From", + "search.filter_date_to": "Date To", + "search.filter_document_type": "Document Type", + "search.filter_document_type_placeholder": "e.g. Invoice", + "search.filter_language": "Language", + "search.filter_language_placeholder": "e.g. de", + "search.filter_sender": "Sender", + "search.filter_sender_placeholder": "e.g. ACME Corp", + "search.filter_tags": "Tags", + "search.filter_tags_placeholder": "e.g. amazon", + "search.filter_text_quality": "Text Quality", + "search.filter_text_quality_all": "All", + "search.filter_text_quality_high": "High", + "search.filter_text_quality_low": "Low", + "search.filter_text_quality_medium": "Medium", + "search.filter_text_quality_no_text": "No text", + "search.heading": "Document Search", + "search.input_aria_label": "Search documents", + "search.input_placeholder": "Search documents by content, sender, tags, type...", + "search.loading_indicator": "Searching…", + "search.no_results": "No results found", + "search.page_title": "Search Documents", + "search.placeholder": "Search by filename, content, tags...", + "search.result_empty": "No documents found matching your query.", + "search.results_count": "{count} results found", + "search.saved_aria_save": "Save current search", + "search.saved_button": "Save Current", + "search.saved_empty": "No saved searches yet", + "search.saved_error": "Could not load saved searches", + "search.saved_label": "Saved Searches", + "search.saved_loading": "Loading...", + "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.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_setting_title": "Save this setting", + "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.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.build_date": "Build Date", + "status.container_id": "Container ID", + "status.git_commit": "Git Commit", + "status.last_check": "Last Check", + "status.page_title": "System Status", + "status.setting_label": "Setting", + "status.value_label": "Value", + "upload.browse_button": "Browse Files", + "upload.button_processing": "Processing...", + "upload.camera_button": "Take Photo / Scan Document", + "upload.download_button": "Download and Process", + "upload.downloading": "Downloading file from URL...", + "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_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_invalid_url": "Invalid URL format", + "upload.error_url_required": "Please enter a URL", + "upload.file_size_hint": "Maximum size: 500 MB per file", + "upload.file_types": "Allowed types: PDF, Office documents (Word, Excel, PowerPoint, etc.), Images", + "upload.filename_description": "Leave empty to use filename from URL", + "upload.filename_label": "Filename (optional)", + "upload.filename_placeholder": "my-document.pdf", + "upload.max_size": "Maximum file size: {size}", + "upload.page_title": "Upload Files", + "upload.section_device": "Upload from Device", + "upload.section_url": "Upload from URL", + "upload.select_file": "Select File", + "upload.success": "File uploaded successfully", + "upload.title": "Upload Document", + "upload.uploading": "Uploading...", + "upload.url_description": "Enter a direct link to a file (PDF, Office documents, or images)", + "upload.url_label": "File URL", + "upload.url_placeholder": "https://example.com/document.pdf" +} diff --git a/frontend/translations/ga.json b/frontend/translations/ga.json index 2731badb..d36160ed 100644 --- a/frontend/translations/ga.json +++ b/frontend/translations/ga.json @@ -195,6 +195,7 @@ "common.confirm": "Confirm", "common.copied": "Copied!", "common.copy": "Copy", + "common.create": "Create", "common.created": "Created", "common.date": "Date", "common.delete": "Delete", @@ -202,6 +203,7 @@ "common.details": "Details", "common.disabled": "Disabled", "common.download": "Download", + "common.duplicate": "Duplicate", "common.edit": "Edit", "common.enabled": "Enabled", "common.error": "Error", @@ -218,6 +220,7 @@ "common.page": "Page", "common.pending": "Pending", "common.prev_page": "Previous page", + "common.previous": "Previous", "common.processing": "Processing", "common.refresh": "Refresh", "common.reset": "Reset", @@ -228,7 +231,9 @@ "common.select_placeholder": "— select —", "common.size": "Size", "common.status": "Status", + "common.submit": "Submit", "common.success": "Success", + "common.tags": "Tags", "common.type": "Type", "common.updated": "Updated", "common.upload": "Upload", @@ -236,6 +241,8 @@ "common.warning": "Warning", "common.yes": "Yes", "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", "cookie.notice_label": "Cookie notice", "cookie.policy_link": "Cookie Policy", @@ -331,7 +338,7 @@ "files.delete_modal_message": "Are you sure you want to delete this file?", "files.delete_modal_title": "Confirm Deletion", "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 – folders are processed recursively", "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", @@ -359,7 +366,7 @@ "files.filter_storage_provider": "Storage Provider", "files.filter_tags_aria": "Filter by tags (comma-separated)", "files.filter_tags_placeholder": "e.g. invoice,amazon", - "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.no_files": "No files found", "files.ocr_status": "OCR Status", @@ -398,6 +405,8 @@ "files.upload_modal_close": "Close upload progress", "files.upload_modal_header": "Uploading Files", "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", "footer.attributions": "Attributions", "footer.cookies": "Cookies", "footer.copyright": "DocuElevate {year}", @@ -577,7 +586,8 @@ "integrations.username_label": "Username", "language.bg": "Български", "language.ca": "Català", - "language.changed": "Athraíodh an teanga go {language}", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", "language.cs": "Čeština", "language.da": "Dansk", "language.de": "Deutsch", @@ -601,7 +611,8 @@ "language.pt": "Português", "language.ro": "Română", "language.ru": "Русский", - "language.selector": "Gaeilge", + "language.selector": "Language", + "language.selector_label": "Select language", "language.sk": "Slovenčina", "language.sl": "Slovenščina", "language.sv": "Svenska", @@ -610,9 +621,15 @@ "language.zh": "中文", "nav.about": "About", "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", "nav.admin_actions": "Admin actions", "nav.admin_menu": "Admin menu", "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", "nav.backup_restore": "Backup & Restore", "nav.credentials": "Credentials", "nav.dark_mode": "Dark Mode", @@ -623,25 +640,34 @@ "nav.files": "Files", "nav.help": "Help", "nav.help_center": "Help Center", + "nav.imap": "Email Import", "nav.integrations": "Integrations", "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", "nav.main_navigation": "Main navigation", "nav.notifications": "Notifications", "nav.open_main_menu": "Open main menu", "nav.pipelines": "Pipelines", "nav.plan_designer": "Plan Designer", "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", "nav.queue_monitor": "Queue Monitor", "nav.scheduled_jobs": "Scheduled Jobs", "nav.search": "Search", "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", "nav.similarity": "Similarity", "nav.skip_to_content": "Skip to main content", "nav.status": "Status", + "nav.subscription": "Subscription", "nav.toggle_dark_mode": "Toggle dark mode", "nav.toggle_nav": "Toggle navigation menu", "nav.upload": "Upload", "nav.users": "Users", + "nav.version": "Version Info", "notifications.filter_all": "All", "notifications.filter_read": "Read only", "notifications.filter_unread": "Unread only", diff --git a/frontend/translations/gl.json b/frontend/translations/gl.json new file mode 100644 index 00000000..d36160ed --- /dev/null +++ b/frontend/translations/gl.json @@ -0,0 +1,929 @@ +{ + "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", + "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.create_account": "Create account", + "auth.display_name_label": "Display Name", + "auth.email_label": "Email", + "auth.forgot_password": "Forgot Password?", + "auth.forgot_username": "Forgot username?", + "auth.login": "Log In", + "auth.login_title": "Log In", + "auth.logo_alt": "DocuElevate Logo", + "auth.logout": "Log Out", + "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.profile": "Profile", + "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_title": "Sign Up", + "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.active": "Active", + "common.all": "All", + "common.back": "Back", + "common.cancel": "Cancel", + "common.close": "Close", + "common.col_pending": "Pending", + "common.completed": "Completed", + "common.confirm": "Confirm", + "common.copied": "Copied!", + "common.copy": "Copy", + "common.create": "Create", + "common.created": "Created", + "common.date": "Date", + "common.delete": "Delete", + "common.description": "Description", + "common.details": "Details", + "common.disabled": "Disabled", + "common.download": "Download", + "common.duplicate": "Duplicate", + "common.edit": "Edit", + "common.enabled": "Enabled", + "common.error": "Error", + "common.failed": "Failed", + "common.filter": "Filter", + "common.inactive": "Inactive", + "common.info": "Info", + "common.loading": "Loading...", + "common.name": "Name", + "common.next": "Next", + "common.next_page": "Next page", + "common.no": "No", + "common.none": "None", + "common.page": "Page", + "common.pending": "Pending", + "common.prev_page": "Previous page", + "common.previous": "Previous", + "common.processing": "Processing", + "common.refresh": "Refresh", + "common.reset": "Reset", + "common.retry": "Retry", + "common.save": "Save", + "common.search": "Search", + "common.select": "Select", + "common.select_placeholder": "— select —", + "common.size": "Size", + "common.status": "Status", + "common.submit": "Submit", + "common.success": "Success", + "common.tags": "Tags", + "common.type": "Type", + "common.updated": "Updated", + "common.upload": "Upload", + "common.view": "View", + "common.warning": "Warning", + "common.yes": "Yes", + "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", + "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", + "cookie.notice_label": "Cookie notice", + "cookie.policy_link": "Cookie Policy", + "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.files_this_month": "Files This Month", + "dashboard.files_today": "Files Today", + "dashboard.ocr_processed": "OCR Processed", + "dashboard.quick_actions": "Quick Actions", + "dashboard.recent_activity": "Recent Activity", + "dashboard.storage_targets": "Storage Targets", + "dashboard.title": "Dashboard", + "dashboard.total_files": "Total Files", + "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_heading": "Oops, we couldn’t find that page!", + "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_title": "404 - Not Found", + "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_heading": "Oops! Something Went Wrong.", + "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_message": "You do not have permission to access this page.", + "error.not_found": "Page not found", + "error.not_found_message": "The page you are looking for does not exist.", + "error.server_error": "Internal Server Error", + "error.server_error_message": "Something went wrong. Please try again later.", + "error.unauthorized": "Unauthorized", + "error.unauthorized_message": "You need to log in to access this page.", + "files.action_delete": "Delete file", + "files.action_details": "View details", + "files.action_preview": "Quick preview", + "files.bulk_clear_selection": "Clear Selection", + "files.bulk_cloud_ocr": "Re-run Cloud OCR", + "files.bulk_delete": "Delete Selected", + "files.bulk_download": "Download as ZIP", + "files.bulk_reprocess": "Reprocess Selected", + "files.delete_modal_cancel": "Cancel", + "files.delete_modal_confirm": "Delete", + "files.delete_modal_message": "Are you sure you want to delete this file?", + "files.delete_modal_title": "Confirm Deletion", + "files.document_title": "Document Title", + "files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more – folders are processed recursively", + "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.filename": "Filename", + "files.files_selected": "files selected", + "files.filter_all_providers": "All Providers", + "files.filter_all_statuses": "All Statuses", + "files.filter_all_types": "All Types", + "files.filter_apply": "Apply Filters", + "files.filter_clear": "Clear", + "files.filter_date_from": "Date From", + "files.filter_date_from_aria": "Filter from date", + "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_ocr_all": "All Files", + "files.filter_ocr_good": "Good quality", + "files.filter_ocr_poor": "Poor 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_search_label": "Search Filename", + "files.filter_search_placeholder": "Enter filename...", + "files.filter_storage_provider": "Storage Provider", + "files.filter_tags_aria": "Filter by tags (comma-separated)", + "files.filter_tags_placeholder": "e.g. invoice,amazon", + "files.fulltext_search_label": "Full-Text Search (OCR text, metadata, tags)", + "files.fulltext_search_placeholder": "Search document content, sender, tags, type...", + "files.no_files": "No files found", + "files.ocr_status": "OCR Status", + "files.page_title": "File Records", + "files.pagination_files": "files", + "files.pagination_first": "First", + "files.pagination_last": "Last", + "files.pagination_nav_aria": "File list pagination", + "files.pagination_next": "Next", + "files.pagination_of": "of", + "files.pagination_previous": "Previous", + "files.pagination_showing": "Showing", + "files.preview_modal_close": "Close 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.saved_searches_empty": "No saved searches yet", + "files.saved_searches_error": "Could not load saved searches", + "files.saved_searches_label": "Saved Searches", + "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_title": "Search Results", + "files.status_duplicate": "Duplicate", + "files.table_actions": "Actions", + "files.table_aria": "File records", + "files.table_created_at": "Created At", + "files.table_empty": "No files found", + "files.table_id": "ID", + "files.table_mime_type": "MIME Type", + "files.table_original_filename": "Original Filename", + "files.table_select_all": "Select all files on this page", + "files.tags": "Tags", + "files.title": "Files", + "files.upload_modal_aria": "Upload progress", + "files.upload_modal_close": "Close upload progress", + "files.upload_modal_header": "Uploading Files", + "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", + "footer.attributions": "Attributions", + "footer.cookies": "Cookies", + "footer.copyright": "DocuElevate {year}", + "footer.imprint": "Imprint", + "footer.license": "License", + "footer.navigation": "Footer navigation", + "footer.privacy": "Privacy", + "footer.terms": "Terms", + "footer.version": "Version {version}", + "help.destinations_dropbox": "Dropbox", + "help.destinations_dropbox_desc": "OAuth-linked. Files land in your chosen folder.", + "help.destinations_email": "Email Forwarding", + "help.destinations_email_desc": "Processed files sent as SMTP attachments.", + "help.destinations_google_drive": "Google Drive", + "help.destinations_google_drive_desc": "Service account or OAuth. Supports shared drives.", + "help.destinations_heading": "Destinations – Where Documents Go", + "help.destinations_nextcloud": "Nextcloud / WebDAV", + "help.destinations_nextcloud_desc": "Self-hosted cloud storage via WebDAV.", + "help.destinations_onedrive": "OneDrive", + "help.destinations_onedrive_desc": "Microsoft Graph API integration.", + "help.destinations_paperless": "Paperless-ngx", + "help.destinations_paperless_desc": "Push documents straight into Paperless for archival.", + "help.destinations_s3": "Amazon S3", + "help.destinations_s3_desc": "Any S3-compatible bucket (AWS, MinIO, Wasabi).", + "help.destinations_sftp": "SFTP / FTP", + "help.destinations_sftp_desc": "Secure file transfer to any server.", + "help.destinations_webhook": "Webhook", + "help.destinations_webhook_desc": "POST metadata to any external endpoint.", + "help.documentation": "Documentation", + "help.faq": "Frequently Asked Questions", + "help.faq_1_a": "Navigate to the Upload page, drag-and-drop your files or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.faq_1_q": "How do I upload documents?", + "help.faq_2_a": "PDF, JPEG, PNG, TIFF, BMP, GIF, DOCX, XLSX, PPTX, ODT, ODS, TXT, RTF, and HTML. Non-PDF files are automatically converted to PDF before processing.", + "help.faq_2_q": "Which file formats are supported?", + "help.faq_3_a": "Yes. Go to Email Ingestion, add an IMAP account, and DocuElevate will poll for new messages and process attachments automatically.", + "help.faq_3_q": "Can I ingest documents from email?", + "help.faq_4_a": "Pipelines let you chain processing steps – OCR, AI extraction, format conversion – and route the result to one or more destinations. Create and manage them from the Pipelines page.", + "help.faq_4_q": "How do processing pipelines work?", + "help.faq_5_a": "DocuElevate encrypts credentials at rest, communicates over TLS, and never stores your documents longer than necessary. See the Privacy Notice for full details.", + "help.faq_5_q": "Is my data secure?", + "help.faq_heading": "Frequently Asked Questions", + "help.getting_started": "Getting Started", + "help.heading": "Help Center", + "help.page_title": "Help Center", + "help.privacy_notice": "Privacy Notice", + "help.quickstart_heading": "Quick Start", + "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_upload": "Upload Documents", + "help.quickstart_upload_desc": "Drag & drop files onto the Upload page or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.quickstart_workflows": "Automate Workflows", + "help.quickstart_workflows_desc": "Create Pipelines to define multi-step processing and routing rules. Combine OCR, AI extraction, format conversion, and delivery in a single flow.", + "help.sources_email_ingestion": "Email Ingestion (IMAP)", + "help.sources_email_ingestion_desc": "Forward documents to a dedicated mailbox. Under Email Ingestion, add one or more IMAP accounts. DocuElevate polls for new messages and processes attachments automatically.", + "help.sources_heading": "Sources – Getting Documents In", + "help.sources_rest_api": "REST API", + "help.sources_rest_api_desc": "Integrate programmatically by POST-ing files to /api/upload. Ideal for scripts, watched folders, scanners, or third-party tools like Zapier and n8n.", + "help.sources_scanner": "Scanner & Mobile", + "help.sources_scanner_desc": "Point network scanners at DocuElevate's upload endpoint or use any mobile scanning app that supports custom HTTP destinations.", + "help.sources_web_upload": "Web Upload", + "help.sources_web_upload_desc": "The fastest way to get started. Open the Upload page, drop one or more files, and DocuElevate takes care of the rest. Supported formats include PDF, JPEG, PNG, TIFF, DOCX, XLSX, and more.", + "help.subheading": "Everything you need to get the most out of DocuElevate. Browse topics below or search for what you need.", + "help.support": "Support", + "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_heading": "Contact Support", + "help.support_ticket_button": "Submit a Ticket", + "help.support_ticket_heading": "Open a Support Ticket", + "help.title": "Help Center", + "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_heading": "Workflows & Pipelines", + "help.workflows_step_1": "Convert to PDF", + "help.workflows_step_1_create": "Go to Pipelines in the main menu.", + "help.workflows_step_2": "OCR – extract text", + "help.workflows_step_2_create": "Click New Pipeline and give it a name.", + "help.workflows_step_3": "AI metadata extraction", + "help.workflows_step_3_create": "Add the processing steps you need.", + "help.workflows_step_4": "Deliver to one or more destinations", + "help.workflows_step_4_create": "Choose one or more delivery destinations.", + "help.workflows_step_5_create": "Save – new documents will be processed through this pipeline automatically.", + "help.workflows_typical_steps": "Typical Steps", + "help.workflows_what_is": "What is a Pipeline?", + "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_ingestion": "Email & URL-based document ingestion", + "index.capabilities_ocr": "OCR & metadata extraction with AI", + "index.capabilities_paperless": "Paperless-ngx integration for document management", + "index.capabilities_title": "Capabilities", + "index.capabilities_workflows": "Automated classification & routing workflows", + "index.cta_description": "Join teams already automating their document processing with DocuElevate.", + "index.cta_heading": "Ready to elevate your document workflow?", + "index.cta_pricing": "See pricing", + "index.cta_signup": "Create a free account", + "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_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_desc": "Route processed files to Dropbox, Google Drive, OneDrive, Amazon S3, Nextcloud, Paperless NGX, WebDAV, FTP/SFTP, and more.", + "index.feature_email": "Email & IMAP Ingestion", + "index.feature_email_desc": "Automatically pull documents from Gmail or any IMAP mailbox — no manual uploads needed.", + "index.feature_ocr": "OCR & Text Extraction", + "index.feature_ocr_desc": "Azure Document Intelligence converts scanned PDFs and images into fully searchable text automatically.", + "index.feature_pipelines": "Custom Pipelines", + "index.feature_pipelines_desc": "Build processing pipelines with configurable steps — OCR, AI extraction, format conversion, and storage routing in any order.", + "index.feature_search": "Full-Text Search", + "index.feature_search_desc": "Instantly find any document by content, metadata, or tags across your entire archive.", + "index.feature_section_title": "Everything you need for smart document workflows", + "index.getting_started": "Getting Started", + "index.getting_started_1": "Configure integrations via System Status", + "index.getting_started_2": "Upload your first document", + "index.getting_started_3": "Review results in Files", + "index.getting_started_learn": "Learn more about DocuElevate", + "index.hero_description": "DocuElevate ingests your documents, runs OCR, extracts metadata with AI, and routes files to Dropbox, Google Drive, OneDrive, S3, Nextcloud, and more — all in one seamless pipeline.", + "index.hero_heading": "From upload to insight — automatically.", + "index.hero_login": "Log In", + "index.hero_pricing": "View Plans & Pricing", + "index.hero_signup": "Get Started — it’s free", + "index.integrations_active": "Active integrations", + "index.integrations_storage": "Storage targets", + "index.integrations_title": "Integrations", + "index.integrations_view_status": "View system status", + "index.page_title_dashboard": "Dashboard", + "index.page_title_public": "Intelligent Document Processing", + "index.platform_overview": "Platform overview", + "index.quick_actions": "Quick Actions", + "index.quick_documents": "My Documents", + "index.quick_documents_desc": "Browse your processed files", + "index.quick_search": "Search", + "index.quick_search_desc": "Full-text search across documents", + "index.quick_subscription": "My Subscription", + "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_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_subtitle": "Intelligent document processing & management", + "index.stat_active_integrations": "Active Integrations", + "index.stat_active_users": "Active users", + "index.stat_files_month": "Files this month", + "index.stat_files_today": "Files today", + "index.stat_storage_targets": "Storage Targets", + "index.stat_total_files": "Total files", + "index.tier_plan": "Plan", + "index.tier_upgrade": "Upgrade", + "index.tier_view_details": "View full details", + "index.upgrade_daily_limits": "Higher daily & monthly limits", + "index.upgrade_description": "Unlock more documents, more destinations and priority support.", + "index.upgrade_destinations": "More storage destinations", + "index.upgrade_ocr_pages": "More OCR pages", + "index.upgrade_plan": "Upgrade your plan", + "index.upgrade_view_pricing": "View plans & pricing", + "index.usage_lifetime": "Lifetime files", + "index.usage_month": "Files this month", + "index.usage_my_usage": "My usage", + "index.usage_today": "Files today", + "index.usage_unlimited": "Unlimited", + "integrations.configure": "Configure", + "integrations.connect": "Connect", + "integrations.connected": "Connected", + "integrations.disconnect": "Disconnect", + "integrations.empty_state": "No integrations configured", + "integrations.folder_label": "Folder", + "integrations.host_label": "Host", + "integrations.imap_settings": "IMAP Settings", + "integrations.not_connected": "Not Connected", + "integrations.page_title": "Integrations", + "integrations.password_label": "Password", + "integrations.port_label": "Port", + "integrations.title": "Integrations", + "integrations.username_label": "Username", + "language.bg": "Български", + "language.ca": "Català", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", + "language.cs": "Čeština", + "language.da": "Dansk", + "language.de": "Deutsch", + "language.el": "Ελληνικά", + "language.en": "English", + "language.es": "Español", + "language.et": "Eesti", + "language.fi": "Suomi", + "language.fr": "Français", + "language.ga": "Gaeilge", + "language.hr": "Hrvatski", + "language.hu": "Magyar", + "language.is": "Íslenska", + "language.it": "Italiano", + "language.lb": "Lëtzebuergesch", + "language.lt": "Lietuvių", + "language.lv": "Latviešu", + "language.nb": "Norsk", + "language.nl": "Nederlands", + "language.pl": "Polski", + "language.pt": "Português", + "language.ro": "Română", + "language.ru": "Русский", + "language.selector": "Language", + "language.selector_label": "Select language", + "language.sk": "Slovenčina", + "language.sl": "Slovenščina", + "language.sv": "Svenska", + "language.tr": "Türkçe", + "language.uk": "Українська", + "language.zh": "中文", + "nav.about": "About", + "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", + "nav.admin_actions": "Admin actions", + "nav.admin_menu": "Admin menu", + "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", + "nav.backup_restore": "Backup & Restore", + "nav.credentials": "Credentials", + "nav.dark_mode": "Dark Mode", + "nav.dashboard": "Dashboard", + "nav.developer_docs": "Developer Docs", + "nav.duplicates": "Duplicates", + "nav.file_manager": "File Manager", + "nav.files": "Files", + "nav.help": "Help", + "nav.help_center": "Help Center", + "nav.imap": "Email Import", + "nav.integrations": "Integrations", + "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", + "nav.main_navigation": "Main navigation", + "nav.notifications": "Notifications", + "nav.open_main_menu": "Open main menu", + "nav.pipelines": "Pipelines", + "nav.plan_designer": "Plan Designer", + "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", + "nav.queue_monitor": "Queue Monitor", + "nav.scheduled_jobs": "Scheduled Jobs", + "nav.search": "Search", + "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", + "nav.similarity": "Similarity", + "nav.skip_to_content": "Skip to main content", + "nav.status": "Status", + "nav.subscription": "Subscription", + "nav.toggle_dark_mode": "Toggle dark mode", + "nav.toggle_nav": "Toggle navigation menu", + "nav.upload": "Upload", + "nav.users": "Users", + "nav.version": "Version Info", + "notifications.filter_all": "All", + "notifications.filter_read": "Read only", + "notifications.filter_unread": "Unread only", + "notifications.manage_desc": "Manage your notification inbox, targets, and event preferences", + "notifications.mark_all_read": "Mark All as Read", + "notifications.mark_all_read_btn": "Mark all read", + "notifications.mark_read": "Mark as Read", + "notifications.no_notifications": "No notifications", + "notifications.page_title": "Notifications", + "notifications.tab_inbox": "Inbox", + "notifications.tab_settings": "Settings", + "notifications.title": "Notifications", + "notifications.unread_count": "{count} unread notifications", + "pipelines.active_label": "Active", + "pipelines.add_step_btn": "Add Step", + "pipelines.create": "Create Pipeline", + "pipelines.custom_label_label": "Custom Label", + "pipelines.default_label": "Default", + "pipelines.description_label": "Description", + "pipelines.description_placeholder": "Optional description", + "pipelines.disabled_label": "Disabled", + "pipelines.edit": "Edit Pipeline", + "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.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)", + "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.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_pipeline_label": "System pipeline (visible to all users)", + "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.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_date_from": "Date From", + "search.filter_date_to": "Date To", + "search.filter_document_type": "Document Type", + "search.filter_document_type_placeholder": "e.g. Invoice", + "search.filter_language": "Language", + "search.filter_language_placeholder": "e.g. de", + "search.filter_sender": "Sender", + "search.filter_sender_placeholder": "e.g. ACME Corp", + "search.filter_tags": "Tags", + "search.filter_tags_placeholder": "e.g. amazon", + "search.filter_text_quality": "Text Quality", + "search.filter_text_quality_all": "All", + "search.filter_text_quality_high": "High", + "search.filter_text_quality_low": "Low", + "search.filter_text_quality_medium": "Medium", + "search.filter_text_quality_no_text": "No text", + "search.heading": "Document Search", + "search.input_aria_label": "Search documents", + "search.input_placeholder": "Search documents by content, sender, tags, type...", + "search.loading_indicator": "Searching…", + "search.no_results": "No results found", + "search.page_title": "Search Documents", + "search.placeholder": "Search by filename, content, tags...", + "search.result_empty": "No documents found matching your query.", + "search.results_count": "{count} results found", + "search.saved_aria_save": "Save current search", + "search.saved_button": "Save Current", + "search.saved_empty": "No saved searches yet", + "search.saved_error": "Could not load saved searches", + "search.saved_label": "Saved Searches", + "search.saved_loading": "Loading...", + "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.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_setting_title": "Save this setting", + "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.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.build_date": "Build Date", + "status.container_id": "Container ID", + "status.git_commit": "Git Commit", + "status.last_check": "Last Check", + "status.page_title": "System Status", + "status.setting_label": "Setting", + "status.value_label": "Value", + "upload.browse_button": "Browse Files", + "upload.button_processing": "Processing...", + "upload.camera_button": "Take Photo / Scan Document", + "upload.download_button": "Download and Process", + "upload.downloading": "Downloading file from URL...", + "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_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_invalid_url": "Invalid URL format", + "upload.error_url_required": "Please enter a URL", + "upload.file_size_hint": "Maximum size: 500 MB per file", + "upload.file_types": "Allowed types: PDF, Office documents (Word, Excel, PowerPoint, etc.), Images", + "upload.filename_description": "Leave empty to use filename from URL", + "upload.filename_label": "Filename (optional)", + "upload.filename_placeholder": "my-document.pdf", + "upload.max_size": "Maximum file size: {size}", + "upload.page_title": "Upload Files", + "upload.section_device": "Upload from Device", + "upload.section_url": "Upload from URL", + "upload.select_file": "Select File", + "upload.success": "File uploaded successfully", + "upload.title": "Upload Document", + "upload.uploading": "Uploading...", + "upload.url_description": "Enter a direct link to a file (PDF, Office documents, or images)", + "upload.url_label": "File URL", + "upload.url_placeholder": "https://example.com/document.pdf" +} diff --git a/frontend/translations/he.json b/frontend/translations/he.json new file mode 100644 index 00000000..d36160ed --- /dev/null +++ b/frontend/translations/he.json @@ -0,0 +1,929 @@ +{ + "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", + "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.create_account": "Create account", + "auth.display_name_label": "Display Name", + "auth.email_label": "Email", + "auth.forgot_password": "Forgot Password?", + "auth.forgot_username": "Forgot username?", + "auth.login": "Log In", + "auth.login_title": "Log In", + "auth.logo_alt": "DocuElevate Logo", + "auth.logout": "Log Out", + "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.profile": "Profile", + "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_title": "Sign Up", + "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.active": "Active", + "common.all": "All", + "common.back": "Back", + "common.cancel": "Cancel", + "common.close": "Close", + "common.col_pending": "Pending", + "common.completed": "Completed", + "common.confirm": "Confirm", + "common.copied": "Copied!", + "common.copy": "Copy", + "common.create": "Create", + "common.created": "Created", + "common.date": "Date", + "common.delete": "Delete", + "common.description": "Description", + "common.details": "Details", + "common.disabled": "Disabled", + "common.download": "Download", + "common.duplicate": "Duplicate", + "common.edit": "Edit", + "common.enabled": "Enabled", + "common.error": "Error", + "common.failed": "Failed", + "common.filter": "Filter", + "common.inactive": "Inactive", + "common.info": "Info", + "common.loading": "Loading...", + "common.name": "Name", + "common.next": "Next", + "common.next_page": "Next page", + "common.no": "No", + "common.none": "None", + "common.page": "Page", + "common.pending": "Pending", + "common.prev_page": "Previous page", + "common.previous": "Previous", + "common.processing": "Processing", + "common.refresh": "Refresh", + "common.reset": "Reset", + "common.retry": "Retry", + "common.save": "Save", + "common.search": "Search", + "common.select": "Select", + "common.select_placeholder": "— select —", + "common.size": "Size", + "common.status": "Status", + "common.submit": "Submit", + "common.success": "Success", + "common.tags": "Tags", + "common.type": "Type", + "common.updated": "Updated", + "common.upload": "Upload", + "common.view": "View", + "common.warning": "Warning", + "common.yes": "Yes", + "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", + "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", + "cookie.notice_label": "Cookie notice", + "cookie.policy_link": "Cookie Policy", + "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.files_this_month": "Files This Month", + "dashboard.files_today": "Files Today", + "dashboard.ocr_processed": "OCR Processed", + "dashboard.quick_actions": "Quick Actions", + "dashboard.recent_activity": "Recent Activity", + "dashboard.storage_targets": "Storage Targets", + "dashboard.title": "Dashboard", + "dashboard.total_files": "Total Files", + "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_heading": "Oops, we couldn’t find that page!", + "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_title": "404 - Not Found", + "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_heading": "Oops! Something Went Wrong.", + "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_message": "You do not have permission to access this page.", + "error.not_found": "Page not found", + "error.not_found_message": "The page you are looking for does not exist.", + "error.server_error": "Internal Server Error", + "error.server_error_message": "Something went wrong. Please try again later.", + "error.unauthorized": "Unauthorized", + "error.unauthorized_message": "You need to log in to access this page.", + "files.action_delete": "Delete file", + "files.action_details": "View details", + "files.action_preview": "Quick preview", + "files.bulk_clear_selection": "Clear Selection", + "files.bulk_cloud_ocr": "Re-run Cloud OCR", + "files.bulk_delete": "Delete Selected", + "files.bulk_download": "Download as ZIP", + "files.bulk_reprocess": "Reprocess Selected", + "files.delete_modal_cancel": "Cancel", + "files.delete_modal_confirm": "Delete", + "files.delete_modal_message": "Are you sure you want to delete this file?", + "files.delete_modal_title": "Confirm Deletion", + "files.document_title": "Document Title", + "files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more – folders are processed recursively", + "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.filename": "Filename", + "files.files_selected": "files selected", + "files.filter_all_providers": "All Providers", + "files.filter_all_statuses": "All Statuses", + "files.filter_all_types": "All Types", + "files.filter_apply": "Apply Filters", + "files.filter_clear": "Clear", + "files.filter_date_from": "Date From", + "files.filter_date_from_aria": "Filter from date", + "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_ocr_all": "All Files", + "files.filter_ocr_good": "Good quality", + "files.filter_ocr_poor": "Poor 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_search_label": "Search Filename", + "files.filter_search_placeholder": "Enter filename...", + "files.filter_storage_provider": "Storage Provider", + "files.filter_tags_aria": "Filter by tags (comma-separated)", + "files.filter_tags_placeholder": "e.g. invoice,amazon", + "files.fulltext_search_label": "Full-Text Search (OCR text, metadata, tags)", + "files.fulltext_search_placeholder": "Search document content, sender, tags, type...", + "files.no_files": "No files found", + "files.ocr_status": "OCR Status", + "files.page_title": "File Records", + "files.pagination_files": "files", + "files.pagination_first": "First", + "files.pagination_last": "Last", + "files.pagination_nav_aria": "File list pagination", + "files.pagination_next": "Next", + "files.pagination_of": "of", + "files.pagination_previous": "Previous", + "files.pagination_showing": "Showing", + "files.preview_modal_close": "Close 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.saved_searches_empty": "No saved searches yet", + "files.saved_searches_error": "Could not load saved searches", + "files.saved_searches_label": "Saved Searches", + "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_title": "Search Results", + "files.status_duplicate": "Duplicate", + "files.table_actions": "Actions", + "files.table_aria": "File records", + "files.table_created_at": "Created At", + "files.table_empty": "No files found", + "files.table_id": "ID", + "files.table_mime_type": "MIME Type", + "files.table_original_filename": "Original Filename", + "files.table_select_all": "Select all files on this page", + "files.tags": "Tags", + "files.title": "Files", + "files.upload_modal_aria": "Upload progress", + "files.upload_modal_close": "Close upload progress", + "files.upload_modal_header": "Uploading Files", + "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", + "footer.attributions": "Attributions", + "footer.cookies": "Cookies", + "footer.copyright": "DocuElevate {year}", + "footer.imprint": "Imprint", + "footer.license": "License", + "footer.navigation": "Footer navigation", + "footer.privacy": "Privacy", + "footer.terms": "Terms", + "footer.version": "Version {version}", + "help.destinations_dropbox": "Dropbox", + "help.destinations_dropbox_desc": "OAuth-linked. Files land in your chosen folder.", + "help.destinations_email": "Email Forwarding", + "help.destinations_email_desc": "Processed files sent as SMTP attachments.", + "help.destinations_google_drive": "Google Drive", + "help.destinations_google_drive_desc": "Service account or OAuth. Supports shared drives.", + "help.destinations_heading": "Destinations – Where Documents Go", + "help.destinations_nextcloud": "Nextcloud / WebDAV", + "help.destinations_nextcloud_desc": "Self-hosted cloud storage via WebDAV.", + "help.destinations_onedrive": "OneDrive", + "help.destinations_onedrive_desc": "Microsoft Graph API integration.", + "help.destinations_paperless": "Paperless-ngx", + "help.destinations_paperless_desc": "Push documents straight into Paperless for archival.", + "help.destinations_s3": "Amazon S3", + "help.destinations_s3_desc": "Any S3-compatible bucket (AWS, MinIO, Wasabi).", + "help.destinations_sftp": "SFTP / FTP", + "help.destinations_sftp_desc": "Secure file transfer to any server.", + "help.destinations_webhook": "Webhook", + "help.destinations_webhook_desc": "POST metadata to any external endpoint.", + "help.documentation": "Documentation", + "help.faq": "Frequently Asked Questions", + "help.faq_1_a": "Navigate to the Upload page, drag-and-drop your files or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.faq_1_q": "How do I upload documents?", + "help.faq_2_a": "PDF, JPEG, PNG, TIFF, BMP, GIF, DOCX, XLSX, PPTX, ODT, ODS, TXT, RTF, and HTML. Non-PDF files are automatically converted to PDF before processing.", + "help.faq_2_q": "Which file formats are supported?", + "help.faq_3_a": "Yes. Go to Email Ingestion, add an IMAP account, and DocuElevate will poll for new messages and process attachments automatically.", + "help.faq_3_q": "Can I ingest documents from email?", + "help.faq_4_a": "Pipelines let you chain processing steps – OCR, AI extraction, format conversion – and route the result to one or more destinations. Create and manage them from the Pipelines page.", + "help.faq_4_q": "How do processing pipelines work?", + "help.faq_5_a": "DocuElevate encrypts credentials at rest, communicates over TLS, and never stores your documents longer than necessary. See the Privacy Notice for full details.", + "help.faq_5_q": "Is my data secure?", + "help.faq_heading": "Frequently Asked Questions", + "help.getting_started": "Getting Started", + "help.heading": "Help Center", + "help.page_title": "Help Center", + "help.privacy_notice": "Privacy Notice", + "help.quickstart_heading": "Quick Start", + "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_upload": "Upload Documents", + "help.quickstart_upload_desc": "Drag & drop files onto the Upload page or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.quickstart_workflows": "Automate Workflows", + "help.quickstart_workflows_desc": "Create Pipelines to define multi-step processing and routing rules. Combine OCR, AI extraction, format conversion, and delivery in a single flow.", + "help.sources_email_ingestion": "Email Ingestion (IMAP)", + "help.sources_email_ingestion_desc": "Forward documents to a dedicated mailbox. Under Email Ingestion, add one or more IMAP accounts. DocuElevate polls for new messages and processes attachments automatically.", + "help.sources_heading": "Sources – Getting Documents In", + "help.sources_rest_api": "REST API", + "help.sources_rest_api_desc": "Integrate programmatically by POST-ing files to /api/upload. Ideal for scripts, watched folders, scanners, or third-party tools like Zapier and n8n.", + "help.sources_scanner": "Scanner & Mobile", + "help.sources_scanner_desc": "Point network scanners at DocuElevate's upload endpoint or use any mobile scanning app that supports custom HTTP destinations.", + "help.sources_web_upload": "Web Upload", + "help.sources_web_upload_desc": "The fastest way to get started. Open the Upload page, drop one or more files, and DocuElevate takes care of the rest. Supported formats include PDF, JPEG, PNG, TIFF, DOCX, XLSX, and more.", + "help.subheading": "Everything you need to get the most out of DocuElevate. Browse topics below or search for what you need.", + "help.support": "Support", + "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_heading": "Contact Support", + "help.support_ticket_button": "Submit a Ticket", + "help.support_ticket_heading": "Open a Support Ticket", + "help.title": "Help Center", + "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_heading": "Workflows & Pipelines", + "help.workflows_step_1": "Convert to PDF", + "help.workflows_step_1_create": "Go to Pipelines in the main menu.", + "help.workflows_step_2": "OCR – extract text", + "help.workflows_step_2_create": "Click New Pipeline and give it a name.", + "help.workflows_step_3": "AI metadata extraction", + "help.workflows_step_3_create": "Add the processing steps you need.", + "help.workflows_step_4": "Deliver to one or more destinations", + "help.workflows_step_4_create": "Choose one or more delivery destinations.", + "help.workflows_step_5_create": "Save – new documents will be processed through this pipeline automatically.", + "help.workflows_typical_steps": "Typical Steps", + "help.workflows_what_is": "What is a Pipeline?", + "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_ingestion": "Email & URL-based document ingestion", + "index.capabilities_ocr": "OCR & metadata extraction with AI", + "index.capabilities_paperless": "Paperless-ngx integration for document management", + "index.capabilities_title": "Capabilities", + "index.capabilities_workflows": "Automated classification & routing workflows", + "index.cta_description": "Join teams already automating their document processing with DocuElevate.", + "index.cta_heading": "Ready to elevate your document workflow?", + "index.cta_pricing": "See pricing", + "index.cta_signup": "Create a free account", + "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_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_desc": "Route processed files to Dropbox, Google Drive, OneDrive, Amazon S3, Nextcloud, Paperless NGX, WebDAV, FTP/SFTP, and more.", + "index.feature_email": "Email & IMAP Ingestion", + "index.feature_email_desc": "Automatically pull documents from Gmail or any IMAP mailbox — no manual uploads needed.", + "index.feature_ocr": "OCR & Text Extraction", + "index.feature_ocr_desc": "Azure Document Intelligence converts scanned PDFs and images into fully searchable text automatically.", + "index.feature_pipelines": "Custom Pipelines", + "index.feature_pipelines_desc": "Build processing pipelines with configurable steps — OCR, AI extraction, format conversion, and storage routing in any order.", + "index.feature_search": "Full-Text Search", + "index.feature_search_desc": "Instantly find any document by content, metadata, or tags across your entire archive.", + "index.feature_section_title": "Everything you need for smart document workflows", + "index.getting_started": "Getting Started", + "index.getting_started_1": "Configure integrations via System Status", + "index.getting_started_2": "Upload your first document", + "index.getting_started_3": "Review results in Files", + "index.getting_started_learn": "Learn more about DocuElevate", + "index.hero_description": "DocuElevate ingests your documents, runs OCR, extracts metadata with AI, and routes files to Dropbox, Google Drive, OneDrive, S3, Nextcloud, and more — all in one seamless pipeline.", + "index.hero_heading": "From upload to insight — automatically.", + "index.hero_login": "Log In", + "index.hero_pricing": "View Plans & Pricing", + "index.hero_signup": "Get Started — it’s free", + "index.integrations_active": "Active integrations", + "index.integrations_storage": "Storage targets", + "index.integrations_title": "Integrations", + "index.integrations_view_status": "View system status", + "index.page_title_dashboard": "Dashboard", + "index.page_title_public": "Intelligent Document Processing", + "index.platform_overview": "Platform overview", + "index.quick_actions": "Quick Actions", + "index.quick_documents": "My Documents", + "index.quick_documents_desc": "Browse your processed files", + "index.quick_search": "Search", + "index.quick_search_desc": "Full-text search across documents", + "index.quick_subscription": "My Subscription", + "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_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_subtitle": "Intelligent document processing & management", + "index.stat_active_integrations": "Active Integrations", + "index.stat_active_users": "Active users", + "index.stat_files_month": "Files this month", + "index.stat_files_today": "Files today", + "index.stat_storage_targets": "Storage Targets", + "index.stat_total_files": "Total files", + "index.tier_plan": "Plan", + "index.tier_upgrade": "Upgrade", + "index.tier_view_details": "View full details", + "index.upgrade_daily_limits": "Higher daily & monthly limits", + "index.upgrade_description": "Unlock more documents, more destinations and priority support.", + "index.upgrade_destinations": "More storage destinations", + "index.upgrade_ocr_pages": "More OCR pages", + "index.upgrade_plan": "Upgrade your plan", + "index.upgrade_view_pricing": "View plans & pricing", + "index.usage_lifetime": "Lifetime files", + "index.usage_month": "Files this month", + "index.usage_my_usage": "My usage", + "index.usage_today": "Files today", + "index.usage_unlimited": "Unlimited", + "integrations.configure": "Configure", + "integrations.connect": "Connect", + "integrations.connected": "Connected", + "integrations.disconnect": "Disconnect", + "integrations.empty_state": "No integrations configured", + "integrations.folder_label": "Folder", + "integrations.host_label": "Host", + "integrations.imap_settings": "IMAP Settings", + "integrations.not_connected": "Not Connected", + "integrations.page_title": "Integrations", + "integrations.password_label": "Password", + "integrations.port_label": "Port", + "integrations.title": "Integrations", + "integrations.username_label": "Username", + "language.bg": "Български", + "language.ca": "Català", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", + "language.cs": "Čeština", + "language.da": "Dansk", + "language.de": "Deutsch", + "language.el": "Ελληνικά", + "language.en": "English", + "language.es": "Español", + "language.et": "Eesti", + "language.fi": "Suomi", + "language.fr": "Français", + "language.ga": "Gaeilge", + "language.hr": "Hrvatski", + "language.hu": "Magyar", + "language.is": "Íslenska", + "language.it": "Italiano", + "language.lb": "Lëtzebuergesch", + "language.lt": "Lietuvių", + "language.lv": "Latviešu", + "language.nb": "Norsk", + "language.nl": "Nederlands", + "language.pl": "Polski", + "language.pt": "Português", + "language.ro": "Română", + "language.ru": "Русский", + "language.selector": "Language", + "language.selector_label": "Select language", + "language.sk": "Slovenčina", + "language.sl": "Slovenščina", + "language.sv": "Svenska", + "language.tr": "Türkçe", + "language.uk": "Українська", + "language.zh": "中文", + "nav.about": "About", + "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", + "nav.admin_actions": "Admin actions", + "nav.admin_menu": "Admin menu", + "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", + "nav.backup_restore": "Backup & Restore", + "nav.credentials": "Credentials", + "nav.dark_mode": "Dark Mode", + "nav.dashboard": "Dashboard", + "nav.developer_docs": "Developer Docs", + "nav.duplicates": "Duplicates", + "nav.file_manager": "File Manager", + "nav.files": "Files", + "nav.help": "Help", + "nav.help_center": "Help Center", + "nav.imap": "Email Import", + "nav.integrations": "Integrations", + "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", + "nav.main_navigation": "Main navigation", + "nav.notifications": "Notifications", + "nav.open_main_menu": "Open main menu", + "nav.pipelines": "Pipelines", + "nav.plan_designer": "Plan Designer", + "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", + "nav.queue_monitor": "Queue Monitor", + "nav.scheduled_jobs": "Scheduled Jobs", + "nav.search": "Search", + "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", + "nav.similarity": "Similarity", + "nav.skip_to_content": "Skip to main content", + "nav.status": "Status", + "nav.subscription": "Subscription", + "nav.toggle_dark_mode": "Toggle dark mode", + "nav.toggle_nav": "Toggle navigation menu", + "nav.upload": "Upload", + "nav.users": "Users", + "nav.version": "Version Info", + "notifications.filter_all": "All", + "notifications.filter_read": "Read only", + "notifications.filter_unread": "Unread only", + "notifications.manage_desc": "Manage your notification inbox, targets, and event preferences", + "notifications.mark_all_read": "Mark All as Read", + "notifications.mark_all_read_btn": "Mark all read", + "notifications.mark_read": "Mark as Read", + "notifications.no_notifications": "No notifications", + "notifications.page_title": "Notifications", + "notifications.tab_inbox": "Inbox", + "notifications.tab_settings": "Settings", + "notifications.title": "Notifications", + "notifications.unread_count": "{count} unread notifications", + "pipelines.active_label": "Active", + "pipelines.add_step_btn": "Add Step", + "pipelines.create": "Create Pipeline", + "pipelines.custom_label_label": "Custom Label", + "pipelines.default_label": "Default", + "pipelines.description_label": "Description", + "pipelines.description_placeholder": "Optional description", + "pipelines.disabled_label": "Disabled", + "pipelines.edit": "Edit Pipeline", + "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.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)", + "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.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_pipeline_label": "System pipeline (visible to all users)", + "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.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_date_from": "Date From", + "search.filter_date_to": "Date To", + "search.filter_document_type": "Document Type", + "search.filter_document_type_placeholder": "e.g. Invoice", + "search.filter_language": "Language", + "search.filter_language_placeholder": "e.g. de", + "search.filter_sender": "Sender", + "search.filter_sender_placeholder": "e.g. ACME Corp", + "search.filter_tags": "Tags", + "search.filter_tags_placeholder": "e.g. amazon", + "search.filter_text_quality": "Text Quality", + "search.filter_text_quality_all": "All", + "search.filter_text_quality_high": "High", + "search.filter_text_quality_low": "Low", + "search.filter_text_quality_medium": "Medium", + "search.filter_text_quality_no_text": "No text", + "search.heading": "Document Search", + "search.input_aria_label": "Search documents", + "search.input_placeholder": "Search documents by content, sender, tags, type...", + "search.loading_indicator": "Searching…", + "search.no_results": "No results found", + "search.page_title": "Search Documents", + "search.placeholder": "Search by filename, content, tags...", + "search.result_empty": "No documents found matching your query.", + "search.results_count": "{count} results found", + "search.saved_aria_save": "Save current search", + "search.saved_button": "Save Current", + "search.saved_empty": "No saved searches yet", + "search.saved_error": "Could not load saved searches", + "search.saved_label": "Saved Searches", + "search.saved_loading": "Loading...", + "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.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_setting_title": "Save this setting", + "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.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.build_date": "Build Date", + "status.container_id": "Container ID", + "status.git_commit": "Git Commit", + "status.last_check": "Last Check", + "status.page_title": "System Status", + "status.setting_label": "Setting", + "status.value_label": "Value", + "upload.browse_button": "Browse Files", + "upload.button_processing": "Processing...", + "upload.camera_button": "Take Photo / Scan Document", + "upload.download_button": "Download and Process", + "upload.downloading": "Downloading file from URL...", + "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_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_invalid_url": "Invalid URL format", + "upload.error_url_required": "Please enter a URL", + "upload.file_size_hint": "Maximum size: 500 MB per file", + "upload.file_types": "Allowed types: PDF, Office documents (Word, Excel, PowerPoint, etc.), Images", + "upload.filename_description": "Leave empty to use filename from URL", + "upload.filename_label": "Filename (optional)", + "upload.filename_placeholder": "my-document.pdf", + "upload.max_size": "Maximum file size: {size}", + "upload.page_title": "Upload Files", + "upload.section_device": "Upload from Device", + "upload.section_url": "Upload from URL", + "upload.select_file": "Select File", + "upload.success": "File uploaded successfully", + "upload.title": "Upload Document", + "upload.uploading": "Uploading...", + "upload.url_description": "Enter a direct link to a file (PDF, Office documents, or images)", + "upload.url_label": "File URL", + "upload.url_placeholder": "https://example.com/document.pdf" +} diff --git a/frontend/translations/hr.json b/frontend/translations/hr.json index 22cd2578..39d6e0ee 100644 --- a/frontend/translations/hr.json +++ b/frontend/translations/hr.json @@ -195,6 +195,7 @@ "common.confirm": "Confirm", "common.copied": "Copied!", "common.copy": "Copy", + "common.create": "Create", "common.created": "Created", "common.date": "Date", "common.delete": "Delete", @@ -202,6 +203,7 @@ "common.details": "Details", "common.disabled": "Disabled", "common.download": "Download", + "common.duplicate": "Duplicate", "common.edit": "Edit", "common.enabled": "Enabled", "common.error": "Error", @@ -218,6 +220,7 @@ "common.page": "Page", "common.pending": "Pending", "common.prev_page": "Previous page", + "common.previous": "Previous", "common.processing": "Processing", "common.refresh": "Refresh", "common.reset": "Reset", @@ -228,7 +231,9 @@ "common.select_placeholder": "— select —", "common.size": "Size", "common.status": "Status", + "common.submit": "Submit", "common.success": "Success", + "common.tags": "Tags", "common.type": "Type", "common.updated": "Updated", "common.upload": "Upload", @@ -236,6 +241,8 @@ "common.warning": "Warning", "common.yes": "Yes", "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", "cookie.notice_label": "Cookie notice", "cookie.policy_link": "Cookie Policy", @@ -398,6 +405,8 @@ "files.upload_modal_close": "Close upload progress", "files.upload_modal_header": "Uploading Files", "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", "footer.attributions": "Attributions", "footer.cookies": "Cookies", "footer.copyright": "DocuElevate {year}", @@ -577,6 +586,7 @@ "integrations.username_label": "Username", "language.bg": "Български", "language.ca": "Català", + "language.change_success": "Language changed to {language}", "language.changed": "Jezik je promijenjen na {language}", "language.cs": "Čeština", "language.da": "Dansk", @@ -602,6 +612,7 @@ "language.ro": "Română", "language.ru": "Русский", "language.selector": "Hrvatski", + "language.selector_label": "Select language", "language.sk": "Slovenčina", "language.sl": "Slovenščina", "language.sv": "Svenska", @@ -610,9 +621,15 @@ "language.zh": "中文", "nav.about": "About", "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", "nav.admin_actions": "Admin actions", "nav.admin_menu": "Admin menu", "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", "nav.backup_restore": "Backup & Restore", "nav.credentials": "Credentials", "nav.dark_mode": "Dark Mode", @@ -623,25 +640,34 @@ "nav.files": "Files", "nav.help": "Help", "nav.help_center": "Help Center", + "nav.imap": "Email Import", "nav.integrations": "Integrations", "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", "nav.main_navigation": "Main navigation", "nav.notifications": "Notifications", "nav.open_main_menu": "Open main menu", "nav.pipelines": "Pipelines", "nav.plan_designer": "Plan Designer", "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", "nav.queue_monitor": "Queue Monitor", "nav.scheduled_jobs": "Scheduled Jobs", "nav.search": "Search", "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", "nav.similarity": "Similarity", "nav.skip_to_content": "Skip to main content", "nav.status": "Status", + "nav.subscription": "Subscription", "nav.toggle_dark_mode": "Toggle dark mode", "nav.toggle_nav": "Toggle navigation menu", "nav.upload": "Upload", "nav.users": "Users", + "nav.version": "Version Info", "notifications.filter_all": "All", "notifications.filter_read": "Read only", "notifications.filter_unread": "Unread only", diff --git a/frontend/translations/hu.json b/frontend/translations/hu.json index e10229bb..d36160ed 100644 --- a/frontend/translations/hu.json +++ b/frontend/translations/hu.json @@ -195,6 +195,7 @@ "common.confirm": "Confirm", "common.copied": "Copied!", "common.copy": "Copy", + "common.create": "Create", "common.created": "Created", "common.date": "Date", "common.delete": "Delete", @@ -202,6 +203,7 @@ "common.details": "Details", "common.disabled": "Disabled", "common.download": "Download", + "common.duplicate": "Duplicate", "common.edit": "Edit", "common.enabled": "Enabled", "common.error": "Error", @@ -218,6 +220,7 @@ "common.page": "Page", "common.pending": "Pending", "common.prev_page": "Previous page", + "common.previous": "Previous", "common.processing": "Processing", "common.refresh": "Refresh", "common.reset": "Reset", @@ -228,7 +231,9 @@ "common.select_placeholder": "— select —", "common.size": "Size", "common.status": "Status", + "common.submit": "Submit", "common.success": "Success", + "common.tags": "Tags", "common.type": "Type", "common.updated": "Updated", "common.upload": "Upload", @@ -236,6 +241,8 @@ "common.warning": "Warning", "common.yes": "Yes", "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", "cookie.notice_label": "Cookie notice", "cookie.policy_link": "Cookie Policy", @@ -331,7 +338,7 @@ "files.delete_modal_message": "Are you sure you want to delete this file?", "files.delete_modal_title": "Confirm Deletion", "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 – folders are processed recursively", "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", @@ -359,7 +366,7 @@ "files.filter_storage_provider": "Storage Provider", "files.filter_tags_aria": "Filter by tags (comma-separated)", "files.filter_tags_placeholder": "e.g. invoice,amazon", - "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.no_files": "No files found", "files.ocr_status": "OCR Status", @@ -398,6 +405,8 @@ "files.upload_modal_close": "Close upload progress", "files.upload_modal_header": "Uploading Files", "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", "footer.attributions": "Attributions", "footer.cookies": "Cookies", "footer.copyright": "DocuElevate {year}", @@ -577,7 +586,8 @@ "integrations.username_label": "Username", "language.bg": "Български", "language.ca": "Català", - "language.changed": "A nyelv megváltozott erre: {language}", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", "language.cs": "Čeština", "language.da": "Dansk", "language.de": "Deutsch", @@ -601,7 +611,8 @@ "language.pt": "Português", "language.ro": "Română", "language.ru": "Русский", - "language.selector": "Magyar", + "language.selector": "Language", + "language.selector_label": "Select language", "language.sk": "Slovenčina", "language.sl": "Slovenščina", "language.sv": "Svenska", @@ -610,9 +621,15 @@ "language.zh": "中文", "nav.about": "About", "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", "nav.admin_actions": "Admin actions", "nav.admin_menu": "Admin menu", "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", "nav.backup_restore": "Backup & Restore", "nav.credentials": "Credentials", "nav.dark_mode": "Dark Mode", @@ -623,25 +640,34 @@ "nav.files": "Files", "nav.help": "Help", "nav.help_center": "Help Center", + "nav.imap": "Email Import", "nav.integrations": "Integrations", "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", "nav.main_navigation": "Main navigation", "nav.notifications": "Notifications", "nav.open_main_menu": "Open main menu", "nav.pipelines": "Pipelines", "nav.plan_designer": "Plan Designer", "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", "nav.queue_monitor": "Queue Monitor", "nav.scheduled_jobs": "Scheduled Jobs", "nav.search": "Search", "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", "nav.similarity": "Similarity", "nav.skip_to_content": "Skip to main content", "nav.status": "Status", + "nav.subscription": "Subscription", "nav.toggle_dark_mode": "Toggle dark mode", "nav.toggle_nav": "Toggle navigation menu", "nav.upload": "Upload", "nav.users": "Users", + "nav.version": "Version Info", "notifications.filter_all": "All", "notifications.filter_read": "Read only", "notifications.filter_unread": "Unread only", diff --git a/frontend/translations/is.json b/frontend/translations/is.json index 708253f0..b4bf7872 100644 --- a/frontend/translations/is.json +++ b/frontend/translations/is.json @@ -195,6 +195,7 @@ "common.confirm": "Confirm", "common.copied": "Copied!", "common.copy": "Copy", + "common.create": "Create", "common.created": "Created", "common.date": "Date", "common.delete": "Delete", @@ -202,6 +203,7 @@ "common.details": "Details", "common.disabled": "Disabled", "common.download": "Download", + "common.duplicate": "Duplicate", "common.edit": "Edit", "common.enabled": "Enabled", "common.error": "Error", @@ -218,6 +220,7 @@ "common.page": "Page", "common.pending": "Pending", "common.prev_page": "Previous page", + "common.previous": "Previous", "common.processing": "Processing", "common.refresh": "Refresh", "common.reset": "Reset", @@ -228,7 +231,9 @@ "common.select_placeholder": "— select —", "common.size": "Size", "common.status": "Status", + "common.submit": "Submit", "common.success": "Success", + "common.tags": "Tags", "common.type": "Type", "common.updated": "Updated", "common.upload": "Upload", @@ -236,6 +241,8 @@ "common.warning": "Warning", "common.yes": "Yes", "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", "cookie.notice_label": "Cookie notice", "cookie.policy_link": "Cookie Policy", @@ -398,6 +405,8 @@ "files.upload_modal_close": "Close upload progress", "files.upload_modal_header": "Uploading Files", "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", "footer.attributions": "Attributions", "footer.cookies": "Cookies", "footer.copyright": "DocuElevate {year}", @@ -577,6 +586,7 @@ "integrations.username_label": "Username", "language.bg": "Български", "language.ca": "Català", + "language.change_success": "Language changed to {language}", "language.changed": "Tungumálið var breytt í {language}", "language.cs": "Čeština", "language.da": "Dansk", @@ -602,6 +612,7 @@ "language.ro": "Română", "language.ru": "Русский", "language.selector": "Íslenska", + "language.selector_label": "Select language", "language.sk": "Slovenčina", "language.sl": "Slovenščina", "language.sv": "Svenska", @@ -610,9 +621,15 @@ "language.zh": "中文", "nav.about": "About", "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", "nav.admin_actions": "Admin actions", "nav.admin_menu": "Admin menu", "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", "nav.backup_restore": "Backup & Restore", "nav.credentials": "Credentials", "nav.dark_mode": "Dark Mode", @@ -623,25 +640,34 @@ "nav.files": "Files", "nav.help": "Help", "nav.help_center": "Help Center", + "nav.imap": "Email Import", "nav.integrations": "Integrations", "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", "nav.main_navigation": "Main navigation", "nav.notifications": "Notifications", "nav.open_main_menu": "Open main menu", "nav.pipelines": "Pipelines", "nav.plan_designer": "Plan Designer", "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", "nav.queue_monitor": "Queue Monitor", "nav.scheduled_jobs": "Scheduled Jobs", "nav.search": "Search", "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", "nav.similarity": "Similarity", "nav.skip_to_content": "Skip to main content", "nav.status": "Status", + "nav.subscription": "Subscription", "nav.toggle_dark_mode": "Toggle dark mode", "nav.toggle_nav": "Toggle navigation menu", "nav.upload": "Upload", "nav.users": "Users", + "nav.version": "Version Info", "notifications.filter_all": "All", "notifications.filter_read": "Read only", "notifications.filter_unread": "Unread only", diff --git a/frontend/translations/it.json b/frontend/translations/it.json index 433dea04..673ec619 100644 --- a/frontend/translations/it.json +++ b/frontend/translations/it.json @@ -195,6 +195,7 @@ "common.confirm": "Conferma", "common.copied": "Copiato!", "common.copy": "Copia", + "common.create": "Create", "common.created": "Creato", "common.date": "Data", "common.delete": "Elimina", @@ -202,6 +203,7 @@ "common.details": "Dettagli", "common.disabled": "Disabilitato", "common.download": "Scarica", + "common.duplicate": "Duplicate", "common.edit": "Modifica", "common.enabled": "Abilitato", "common.error": "Errore", @@ -218,6 +220,7 @@ "common.page": "Page", "common.pending": "In attesa", "common.prev_page": "Previous page", + "common.previous": "Previous", "common.processing": "In elaborazione", "common.refresh": "Aggiorna", "common.reset": "Reimposta", @@ -228,7 +231,9 @@ "common.select_placeholder": "— select —", "common.size": "Dimensione", "common.status": "Stato", + "common.submit": "Submit", "common.success": "Successo", + "common.tags": "Tags", "common.type": "Tipo", "common.updated": "Aggiornato", "common.upload": "Carica", @@ -236,6 +241,8 @@ "common.warning": "Avviso", "common.yes": "Sì", "cookie.accept": "Ho capito", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", "cookie.notice": "DocuElevate utilizza solo cookie di sessione essenziali necessari per l'autenticazione e il funzionamento del servizio. Non vengono utilizzati cookie di tracciamento o analisi.", "cookie.notice_label": "Avviso sui cookie", "cookie.policy_link": "Politica sui cookie", @@ -398,6 +405,8 @@ "files.upload_modal_close": "Close upload progress", "files.upload_modal_header": "Uploading Files", "files.uploaded": "Caricato", + "footer.about": "About", + "footer.attribution": "Attribution", "footer.attributions": "Attribuzioni", "footer.cookies": "Cookie", "footer.copyright": "DocuElevate {year}", @@ -577,6 +586,7 @@ "integrations.username_label": "Username", "language.bg": "Български", "language.ca": "Català", + "language.change_success": "Language changed to {language}", "language.changed": "Lingua cambiata in {language}", "language.cs": "Čeština", "language.da": "Dansk", @@ -602,6 +612,7 @@ "language.ro": "Română", "language.ru": "Русский", "language.selector": "Lingua", + "language.selector_label": "Select language", "language.sk": "Slovenčina", "language.sl": "Slovenščina", "language.sv": "Svenska", @@ -610,9 +621,15 @@ "language.zh": "中文", "nav.about": "Informazioni", "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", "nav.admin_actions": "Azioni admin", "nav.admin_menu": "Menu admin", "nav.api_docs": "Documentazione API", + "nav.api_tokens": "API Tokens", "nav.backup_restore": "Backup e ripristino", "nav.credentials": "Credenziali", "nav.dark_mode": "Modalità scura", @@ -623,25 +640,34 @@ "nav.files": "File", "nav.help": "Aiuto", "nav.help_center": "Centro assistenza", + "nav.imap": "Email Import", "nav.integrations": "Integrazioni", "nav.light_mode": "Modalità chiara", + "nav.login": "Log In", + "nav.logout": "Log Out", "nav.main_navigation": "Navigazione principale", "nav.notifications": "Notifiche", "nav.open_main_menu": "Apri menu principale", "nav.pipelines": "Pipeline", "nav.plan_designer": "Designer dei piani", "nav.pricing": "Prezzi", + "nav.profile": "Profile", + "nav.queue": "Queue", "nav.queue_monitor": "Monitor coda", "nav.scheduled_jobs": "Attività pianificate", "nav.search": "Cerca", "nav.settings": "Impostazioni", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", "nav.similarity": "Similarità", "nav.skip_to_content": "Vai al contenuto principale", "nav.status": "Stato", + "nav.subscription": "Subscription", "nav.toggle_dark_mode": "Attiva/disattiva modalità scura", "nav.toggle_nav": "Attiva/disattiva menu di navigazione", "nav.upload": "Carica", "nav.users": "Utenti", + "nav.version": "Version Info", "notifications.filter_all": "All", "notifications.filter_read": "Read only", "notifications.filter_unread": "Unread only", diff --git a/frontend/translations/ja.json b/frontend/translations/ja.json new file mode 100644 index 00000000..d36160ed --- /dev/null +++ b/frontend/translations/ja.json @@ -0,0 +1,929 @@ +{ + "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", + "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.create_account": "Create account", + "auth.display_name_label": "Display Name", + "auth.email_label": "Email", + "auth.forgot_password": "Forgot Password?", + "auth.forgot_username": "Forgot username?", + "auth.login": "Log In", + "auth.login_title": "Log In", + "auth.logo_alt": "DocuElevate Logo", + "auth.logout": "Log Out", + "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.profile": "Profile", + "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_title": "Sign Up", + "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.active": "Active", + "common.all": "All", + "common.back": "Back", + "common.cancel": "Cancel", + "common.close": "Close", + "common.col_pending": "Pending", + "common.completed": "Completed", + "common.confirm": "Confirm", + "common.copied": "Copied!", + "common.copy": "Copy", + "common.create": "Create", + "common.created": "Created", + "common.date": "Date", + "common.delete": "Delete", + "common.description": "Description", + "common.details": "Details", + "common.disabled": "Disabled", + "common.download": "Download", + "common.duplicate": "Duplicate", + "common.edit": "Edit", + "common.enabled": "Enabled", + "common.error": "Error", + "common.failed": "Failed", + "common.filter": "Filter", + "common.inactive": "Inactive", + "common.info": "Info", + "common.loading": "Loading...", + "common.name": "Name", + "common.next": "Next", + "common.next_page": "Next page", + "common.no": "No", + "common.none": "None", + "common.page": "Page", + "common.pending": "Pending", + "common.prev_page": "Previous page", + "common.previous": "Previous", + "common.processing": "Processing", + "common.refresh": "Refresh", + "common.reset": "Reset", + "common.retry": "Retry", + "common.save": "Save", + "common.search": "Search", + "common.select": "Select", + "common.select_placeholder": "— select —", + "common.size": "Size", + "common.status": "Status", + "common.submit": "Submit", + "common.success": "Success", + "common.tags": "Tags", + "common.type": "Type", + "common.updated": "Updated", + "common.upload": "Upload", + "common.view": "View", + "common.warning": "Warning", + "common.yes": "Yes", + "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", + "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", + "cookie.notice_label": "Cookie notice", + "cookie.policy_link": "Cookie Policy", + "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.files_this_month": "Files This Month", + "dashboard.files_today": "Files Today", + "dashboard.ocr_processed": "OCR Processed", + "dashboard.quick_actions": "Quick Actions", + "dashboard.recent_activity": "Recent Activity", + "dashboard.storage_targets": "Storage Targets", + "dashboard.title": "Dashboard", + "dashboard.total_files": "Total Files", + "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_heading": "Oops, we couldn’t find that page!", + "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_title": "404 - Not Found", + "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_heading": "Oops! Something Went Wrong.", + "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_message": "You do not have permission to access this page.", + "error.not_found": "Page not found", + "error.not_found_message": "The page you are looking for does not exist.", + "error.server_error": "Internal Server Error", + "error.server_error_message": "Something went wrong. Please try again later.", + "error.unauthorized": "Unauthorized", + "error.unauthorized_message": "You need to log in to access this page.", + "files.action_delete": "Delete file", + "files.action_details": "View details", + "files.action_preview": "Quick preview", + "files.bulk_clear_selection": "Clear Selection", + "files.bulk_cloud_ocr": "Re-run Cloud OCR", + "files.bulk_delete": "Delete Selected", + "files.bulk_download": "Download as ZIP", + "files.bulk_reprocess": "Reprocess Selected", + "files.delete_modal_cancel": "Cancel", + "files.delete_modal_confirm": "Delete", + "files.delete_modal_message": "Are you sure you want to delete this file?", + "files.delete_modal_title": "Confirm Deletion", + "files.document_title": "Document Title", + "files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more – folders are processed recursively", + "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.filename": "Filename", + "files.files_selected": "files selected", + "files.filter_all_providers": "All Providers", + "files.filter_all_statuses": "All Statuses", + "files.filter_all_types": "All Types", + "files.filter_apply": "Apply Filters", + "files.filter_clear": "Clear", + "files.filter_date_from": "Date From", + "files.filter_date_from_aria": "Filter from date", + "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_ocr_all": "All Files", + "files.filter_ocr_good": "Good quality", + "files.filter_ocr_poor": "Poor 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_search_label": "Search Filename", + "files.filter_search_placeholder": "Enter filename...", + "files.filter_storage_provider": "Storage Provider", + "files.filter_tags_aria": "Filter by tags (comma-separated)", + "files.filter_tags_placeholder": "e.g. invoice,amazon", + "files.fulltext_search_label": "Full-Text Search (OCR text, metadata, tags)", + "files.fulltext_search_placeholder": "Search document content, sender, tags, type...", + "files.no_files": "No files found", + "files.ocr_status": "OCR Status", + "files.page_title": "File Records", + "files.pagination_files": "files", + "files.pagination_first": "First", + "files.pagination_last": "Last", + "files.pagination_nav_aria": "File list pagination", + "files.pagination_next": "Next", + "files.pagination_of": "of", + "files.pagination_previous": "Previous", + "files.pagination_showing": "Showing", + "files.preview_modal_close": "Close 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.saved_searches_empty": "No saved searches yet", + "files.saved_searches_error": "Could not load saved searches", + "files.saved_searches_label": "Saved Searches", + "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_title": "Search Results", + "files.status_duplicate": "Duplicate", + "files.table_actions": "Actions", + "files.table_aria": "File records", + "files.table_created_at": "Created At", + "files.table_empty": "No files found", + "files.table_id": "ID", + "files.table_mime_type": "MIME Type", + "files.table_original_filename": "Original Filename", + "files.table_select_all": "Select all files on this page", + "files.tags": "Tags", + "files.title": "Files", + "files.upload_modal_aria": "Upload progress", + "files.upload_modal_close": "Close upload progress", + "files.upload_modal_header": "Uploading Files", + "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", + "footer.attributions": "Attributions", + "footer.cookies": "Cookies", + "footer.copyright": "DocuElevate {year}", + "footer.imprint": "Imprint", + "footer.license": "License", + "footer.navigation": "Footer navigation", + "footer.privacy": "Privacy", + "footer.terms": "Terms", + "footer.version": "Version {version}", + "help.destinations_dropbox": "Dropbox", + "help.destinations_dropbox_desc": "OAuth-linked. Files land in your chosen folder.", + "help.destinations_email": "Email Forwarding", + "help.destinations_email_desc": "Processed files sent as SMTP attachments.", + "help.destinations_google_drive": "Google Drive", + "help.destinations_google_drive_desc": "Service account or OAuth. Supports shared drives.", + "help.destinations_heading": "Destinations – Where Documents Go", + "help.destinations_nextcloud": "Nextcloud / WebDAV", + "help.destinations_nextcloud_desc": "Self-hosted cloud storage via WebDAV.", + "help.destinations_onedrive": "OneDrive", + "help.destinations_onedrive_desc": "Microsoft Graph API integration.", + "help.destinations_paperless": "Paperless-ngx", + "help.destinations_paperless_desc": "Push documents straight into Paperless for archival.", + "help.destinations_s3": "Amazon S3", + "help.destinations_s3_desc": "Any S3-compatible bucket (AWS, MinIO, Wasabi).", + "help.destinations_sftp": "SFTP / FTP", + "help.destinations_sftp_desc": "Secure file transfer to any server.", + "help.destinations_webhook": "Webhook", + "help.destinations_webhook_desc": "POST metadata to any external endpoint.", + "help.documentation": "Documentation", + "help.faq": "Frequently Asked Questions", + "help.faq_1_a": "Navigate to the Upload page, drag-and-drop your files or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.faq_1_q": "How do I upload documents?", + "help.faq_2_a": "PDF, JPEG, PNG, TIFF, BMP, GIF, DOCX, XLSX, PPTX, ODT, ODS, TXT, RTF, and HTML. Non-PDF files are automatically converted to PDF before processing.", + "help.faq_2_q": "Which file formats are supported?", + "help.faq_3_a": "Yes. Go to Email Ingestion, add an IMAP account, and DocuElevate will poll for new messages and process attachments automatically.", + "help.faq_3_q": "Can I ingest documents from email?", + "help.faq_4_a": "Pipelines let you chain processing steps – OCR, AI extraction, format conversion – and route the result to one or more destinations. Create and manage them from the Pipelines page.", + "help.faq_4_q": "How do processing pipelines work?", + "help.faq_5_a": "DocuElevate encrypts credentials at rest, communicates over TLS, and never stores your documents longer than necessary. See the Privacy Notice for full details.", + "help.faq_5_q": "Is my data secure?", + "help.faq_heading": "Frequently Asked Questions", + "help.getting_started": "Getting Started", + "help.heading": "Help Center", + "help.page_title": "Help Center", + "help.privacy_notice": "Privacy Notice", + "help.quickstart_heading": "Quick Start", + "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_upload": "Upload Documents", + "help.quickstart_upload_desc": "Drag & drop files onto the Upload page or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.quickstart_workflows": "Automate Workflows", + "help.quickstart_workflows_desc": "Create Pipelines to define multi-step processing and routing rules. Combine OCR, AI extraction, format conversion, and delivery in a single flow.", + "help.sources_email_ingestion": "Email Ingestion (IMAP)", + "help.sources_email_ingestion_desc": "Forward documents to a dedicated mailbox. Under Email Ingestion, add one or more IMAP accounts. DocuElevate polls for new messages and processes attachments automatically.", + "help.sources_heading": "Sources – Getting Documents In", + "help.sources_rest_api": "REST API", + "help.sources_rest_api_desc": "Integrate programmatically by POST-ing files to /api/upload. Ideal for scripts, watched folders, scanners, or third-party tools like Zapier and n8n.", + "help.sources_scanner": "Scanner & Mobile", + "help.sources_scanner_desc": "Point network scanners at DocuElevate's upload endpoint or use any mobile scanning app that supports custom HTTP destinations.", + "help.sources_web_upload": "Web Upload", + "help.sources_web_upload_desc": "The fastest way to get started. Open the Upload page, drop one or more files, and DocuElevate takes care of the rest. Supported formats include PDF, JPEG, PNG, TIFF, DOCX, XLSX, and more.", + "help.subheading": "Everything you need to get the most out of DocuElevate. Browse topics below or search for what you need.", + "help.support": "Support", + "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_heading": "Contact Support", + "help.support_ticket_button": "Submit a Ticket", + "help.support_ticket_heading": "Open a Support Ticket", + "help.title": "Help Center", + "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_heading": "Workflows & Pipelines", + "help.workflows_step_1": "Convert to PDF", + "help.workflows_step_1_create": "Go to Pipelines in the main menu.", + "help.workflows_step_2": "OCR – extract text", + "help.workflows_step_2_create": "Click New Pipeline and give it a name.", + "help.workflows_step_3": "AI metadata extraction", + "help.workflows_step_3_create": "Add the processing steps you need.", + "help.workflows_step_4": "Deliver to one or more destinations", + "help.workflows_step_4_create": "Choose one or more delivery destinations.", + "help.workflows_step_5_create": "Save – new documents will be processed through this pipeline automatically.", + "help.workflows_typical_steps": "Typical Steps", + "help.workflows_what_is": "What is a Pipeline?", + "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_ingestion": "Email & URL-based document ingestion", + "index.capabilities_ocr": "OCR & metadata extraction with AI", + "index.capabilities_paperless": "Paperless-ngx integration for document management", + "index.capabilities_title": "Capabilities", + "index.capabilities_workflows": "Automated classification & routing workflows", + "index.cta_description": "Join teams already automating their document processing with DocuElevate.", + "index.cta_heading": "Ready to elevate your document workflow?", + "index.cta_pricing": "See pricing", + "index.cta_signup": "Create a free account", + "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_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_desc": "Route processed files to Dropbox, Google Drive, OneDrive, Amazon S3, Nextcloud, Paperless NGX, WebDAV, FTP/SFTP, and more.", + "index.feature_email": "Email & IMAP Ingestion", + "index.feature_email_desc": "Automatically pull documents from Gmail or any IMAP mailbox — no manual uploads needed.", + "index.feature_ocr": "OCR & Text Extraction", + "index.feature_ocr_desc": "Azure Document Intelligence converts scanned PDFs and images into fully searchable text automatically.", + "index.feature_pipelines": "Custom Pipelines", + "index.feature_pipelines_desc": "Build processing pipelines with configurable steps — OCR, AI extraction, format conversion, and storage routing in any order.", + "index.feature_search": "Full-Text Search", + "index.feature_search_desc": "Instantly find any document by content, metadata, or tags across your entire archive.", + "index.feature_section_title": "Everything you need for smart document workflows", + "index.getting_started": "Getting Started", + "index.getting_started_1": "Configure integrations via System Status", + "index.getting_started_2": "Upload your first document", + "index.getting_started_3": "Review results in Files", + "index.getting_started_learn": "Learn more about DocuElevate", + "index.hero_description": "DocuElevate ingests your documents, runs OCR, extracts metadata with AI, and routes files to Dropbox, Google Drive, OneDrive, S3, Nextcloud, and more — all in one seamless pipeline.", + "index.hero_heading": "From upload to insight — automatically.", + "index.hero_login": "Log In", + "index.hero_pricing": "View Plans & Pricing", + "index.hero_signup": "Get Started — it’s free", + "index.integrations_active": "Active integrations", + "index.integrations_storage": "Storage targets", + "index.integrations_title": "Integrations", + "index.integrations_view_status": "View system status", + "index.page_title_dashboard": "Dashboard", + "index.page_title_public": "Intelligent Document Processing", + "index.platform_overview": "Platform overview", + "index.quick_actions": "Quick Actions", + "index.quick_documents": "My Documents", + "index.quick_documents_desc": "Browse your processed files", + "index.quick_search": "Search", + "index.quick_search_desc": "Full-text search across documents", + "index.quick_subscription": "My Subscription", + "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_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_subtitle": "Intelligent document processing & management", + "index.stat_active_integrations": "Active Integrations", + "index.stat_active_users": "Active users", + "index.stat_files_month": "Files this month", + "index.stat_files_today": "Files today", + "index.stat_storage_targets": "Storage Targets", + "index.stat_total_files": "Total files", + "index.tier_plan": "Plan", + "index.tier_upgrade": "Upgrade", + "index.tier_view_details": "View full details", + "index.upgrade_daily_limits": "Higher daily & monthly limits", + "index.upgrade_description": "Unlock more documents, more destinations and priority support.", + "index.upgrade_destinations": "More storage destinations", + "index.upgrade_ocr_pages": "More OCR pages", + "index.upgrade_plan": "Upgrade your plan", + "index.upgrade_view_pricing": "View plans & pricing", + "index.usage_lifetime": "Lifetime files", + "index.usage_month": "Files this month", + "index.usage_my_usage": "My usage", + "index.usage_today": "Files today", + "index.usage_unlimited": "Unlimited", + "integrations.configure": "Configure", + "integrations.connect": "Connect", + "integrations.connected": "Connected", + "integrations.disconnect": "Disconnect", + "integrations.empty_state": "No integrations configured", + "integrations.folder_label": "Folder", + "integrations.host_label": "Host", + "integrations.imap_settings": "IMAP Settings", + "integrations.not_connected": "Not Connected", + "integrations.page_title": "Integrations", + "integrations.password_label": "Password", + "integrations.port_label": "Port", + "integrations.title": "Integrations", + "integrations.username_label": "Username", + "language.bg": "Български", + "language.ca": "Català", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", + "language.cs": "Čeština", + "language.da": "Dansk", + "language.de": "Deutsch", + "language.el": "Ελληνικά", + "language.en": "English", + "language.es": "Español", + "language.et": "Eesti", + "language.fi": "Suomi", + "language.fr": "Français", + "language.ga": "Gaeilge", + "language.hr": "Hrvatski", + "language.hu": "Magyar", + "language.is": "Íslenska", + "language.it": "Italiano", + "language.lb": "Lëtzebuergesch", + "language.lt": "Lietuvių", + "language.lv": "Latviešu", + "language.nb": "Norsk", + "language.nl": "Nederlands", + "language.pl": "Polski", + "language.pt": "Português", + "language.ro": "Română", + "language.ru": "Русский", + "language.selector": "Language", + "language.selector_label": "Select language", + "language.sk": "Slovenčina", + "language.sl": "Slovenščina", + "language.sv": "Svenska", + "language.tr": "Türkçe", + "language.uk": "Українська", + "language.zh": "中文", + "nav.about": "About", + "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", + "nav.admin_actions": "Admin actions", + "nav.admin_menu": "Admin menu", + "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", + "nav.backup_restore": "Backup & Restore", + "nav.credentials": "Credentials", + "nav.dark_mode": "Dark Mode", + "nav.dashboard": "Dashboard", + "nav.developer_docs": "Developer Docs", + "nav.duplicates": "Duplicates", + "nav.file_manager": "File Manager", + "nav.files": "Files", + "nav.help": "Help", + "nav.help_center": "Help Center", + "nav.imap": "Email Import", + "nav.integrations": "Integrations", + "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", + "nav.main_navigation": "Main navigation", + "nav.notifications": "Notifications", + "nav.open_main_menu": "Open main menu", + "nav.pipelines": "Pipelines", + "nav.plan_designer": "Plan Designer", + "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", + "nav.queue_monitor": "Queue Monitor", + "nav.scheduled_jobs": "Scheduled Jobs", + "nav.search": "Search", + "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", + "nav.similarity": "Similarity", + "nav.skip_to_content": "Skip to main content", + "nav.status": "Status", + "nav.subscription": "Subscription", + "nav.toggle_dark_mode": "Toggle dark mode", + "nav.toggle_nav": "Toggle navigation menu", + "nav.upload": "Upload", + "nav.users": "Users", + "nav.version": "Version Info", + "notifications.filter_all": "All", + "notifications.filter_read": "Read only", + "notifications.filter_unread": "Unread only", + "notifications.manage_desc": "Manage your notification inbox, targets, and event preferences", + "notifications.mark_all_read": "Mark All as Read", + "notifications.mark_all_read_btn": "Mark all read", + "notifications.mark_read": "Mark as Read", + "notifications.no_notifications": "No notifications", + "notifications.page_title": "Notifications", + "notifications.tab_inbox": "Inbox", + "notifications.tab_settings": "Settings", + "notifications.title": "Notifications", + "notifications.unread_count": "{count} unread notifications", + "pipelines.active_label": "Active", + "pipelines.add_step_btn": "Add Step", + "pipelines.create": "Create Pipeline", + "pipelines.custom_label_label": "Custom Label", + "pipelines.default_label": "Default", + "pipelines.description_label": "Description", + "pipelines.description_placeholder": "Optional description", + "pipelines.disabled_label": "Disabled", + "pipelines.edit": "Edit Pipeline", + "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.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)", + "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.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_pipeline_label": "System pipeline (visible to all users)", + "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.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_date_from": "Date From", + "search.filter_date_to": "Date To", + "search.filter_document_type": "Document Type", + "search.filter_document_type_placeholder": "e.g. Invoice", + "search.filter_language": "Language", + "search.filter_language_placeholder": "e.g. de", + "search.filter_sender": "Sender", + "search.filter_sender_placeholder": "e.g. ACME Corp", + "search.filter_tags": "Tags", + "search.filter_tags_placeholder": "e.g. amazon", + "search.filter_text_quality": "Text Quality", + "search.filter_text_quality_all": "All", + "search.filter_text_quality_high": "High", + "search.filter_text_quality_low": "Low", + "search.filter_text_quality_medium": "Medium", + "search.filter_text_quality_no_text": "No text", + "search.heading": "Document Search", + "search.input_aria_label": "Search documents", + "search.input_placeholder": "Search documents by content, sender, tags, type...", + "search.loading_indicator": "Searching…", + "search.no_results": "No results found", + "search.page_title": "Search Documents", + "search.placeholder": "Search by filename, content, tags...", + "search.result_empty": "No documents found matching your query.", + "search.results_count": "{count} results found", + "search.saved_aria_save": "Save current search", + "search.saved_button": "Save Current", + "search.saved_empty": "No saved searches yet", + "search.saved_error": "Could not load saved searches", + "search.saved_label": "Saved Searches", + "search.saved_loading": "Loading...", + "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.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_setting_title": "Save this setting", + "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.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.build_date": "Build Date", + "status.container_id": "Container ID", + "status.git_commit": "Git Commit", + "status.last_check": "Last Check", + "status.page_title": "System Status", + "status.setting_label": "Setting", + "status.value_label": "Value", + "upload.browse_button": "Browse Files", + "upload.button_processing": "Processing...", + "upload.camera_button": "Take Photo / Scan Document", + "upload.download_button": "Download and Process", + "upload.downloading": "Downloading file from URL...", + "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_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_invalid_url": "Invalid URL format", + "upload.error_url_required": "Please enter a URL", + "upload.file_size_hint": "Maximum size: 500 MB per file", + "upload.file_types": "Allowed types: PDF, Office documents (Word, Excel, PowerPoint, etc.), Images", + "upload.filename_description": "Leave empty to use filename from URL", + "upload.filename_label": "Filename (optional)", + "upload.filename_placeholder": "my-document.pdf", + "upload.max_size": "Maximum file size: {size}", + "upload.page_title": "Upload Files", + "upload.section_device": "Upload from Device", + "upload.section_url": "Upload from URL", + "upload.select_file": "Select File", + "upload.success": "File uploaded successfully", + "upload.title": "Upload Document", + "upload.uploading": "Uploading...", + "upload.url_description": "Enter a direct link to a file (PDF, Office documents, or images)", + "upload.url_label": "File URL", + "upload.url_placeholder": "https://example.com/document.pdf" +} diff --git a/frontend/translations/kn.json b/frontend/translations/kn.json new file mode 100644 index 00000000..d36160ed --- /dev/null +++ b/frontend/translations/kn.json @@ -0,0 +1,929 @@ +{ + "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", + "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.create_account": "Create account", + "auth.display_name_label": "Display Name", + "auth.email_label": "Email", + "auth.forgot_password": "Forgot Password?", + "auth.forgot_username": "Forgot username?", + "auth.login": "Log In", + "auth.login_title": "Log In", + "auth.logo_alt": "DocuElevate Logo", + "auth.logout": "Log Out", + "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.profile": "Profile", + "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_title": "Sign Up", + "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.active": "Active", + "common.all": "All", + "common.back": "Back", + "common.cancel": "Cancel", + "common.close": "Close", + "common.col_pending": "Pending", + "common.completed": "Completed", + "common.confirm": "Confirm", + "common.copied": "Copied!", + "common.copy": "Copy", + "common.create": "Create", + "common.created": "Created", + "common.date": "Date", + "common.delete": "Delete", + "common.description": "Description", + "common.details": "Details", + "common.disabled": "Disabled", + "common.download": "Download", + "common.duplicate": "Duplicate", + "common.edit": "Edit", + "common.enabled": "Enabled", + "common.error": "Error", + "common.failed": "Failed", + "common.filter": "Filter", + "common.inactive": "Inactive", + "common.info": "Info", + "common.loading": "Loading...", + "common.name": "Name", + "common.next": "Next", + "common.next_page": "Next page", + "common.no": "No", + "common.none": "None", + "common.page": "Page", + "common.pending": "Pending", + "common.prev_page": "Previous page", + "common.previous": "Previous", + "common.processing": "Processing", + "common.refresh": "Refresh", + "common.reset": "Reset", + "common.retry": "Retry", + "common.save": "Save", + "common.search": "Search", + "common.select": "Select", + "common.select_placeholder": "— select —", + "common.size": "Size", + "common.status": "Status", + "common.submit": "Submit", + "common.success": "Success", + "common.tags": "Tags", + "common.type": "Type", + "common.updated": "Updated", + "common.upload": "Upload", + "common.view": "View", + "common.warning": "Warning", + "common.yes": "Yes", + "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", + "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", + "cookie.notice_label": "Cookie notice", + "cookie.policy_link": "Cookie Policy", + "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.files_this_month": "Files This Month", + "dashboard.files_today": "Files Today", + "dashboard.ocr_processed": "OCR Processed", + "dashboard.quick_actions": "Quick Actions", + "dashboard.recent_activity": "Recent Activity", + "dashboard.storage_targets": "Storage Targets", + "dashboard.title": "Dashboard", + "dashboard.total_files": "Total Files", + "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_heading": "Oops, we couldn’t find that page!", + "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_title": "404 - Not Found", + "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_heading": "Oops! Something Went Wrong.", + "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_message": "You do not have permission to access this page.", + "error.not_found": "Page not found", + "error.not_found_message": "The page you are looking for does not exist.", + "error.server_error": "Internal Server Error", + "error.server_error_message": "Something went wrong. Please try again later.", + "error.unauthorized": "Unauthorized", + "error.unauthorized_message": "You need to log in to access this page.", + "files.action_delete": "Delete file", + "files.action_details": "View details", + "files.action_preview": "Quick preview", + "files.bulk_clear_selection": "Clear Selection", + "files.bulk_cloud_ocr": "Re-run Cloud OCR", + "files.bulk_delete": "Delete Selected", + "files.bulk_download": "Download as ZIP", + "files.bulk_reprocess": "Reprocess Selected", + "files.delete_modal_cancel": "Cancel", + "files.delete_modal_confirm": "Delete", + "files.delete_modal_message": "Are you sure you want to delete this file?", + "files.delete_modal_title": "Confirm Deletion", + "files.document_title": "Document Title", + "files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more – folders are processed recursively", + "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.filename": "Filename", + "files.files_selected": "files selected", + "files.filter_all_providers": "All Providers", + "files.filter_all_statuses": "All Statuses", + "files.filter_all_types": "All Types", + "files.filter_apply": "Apply Filters", + "files.filter_clear": "Clear", + "files.filter_date_from": "Date From", + "files.filter_date_from_aria": "Filter from date", + "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_ocr_all": "All Files", + "files.filter_ocr_good": "Good quality", + "files.filter_ocr_poor": "Poor 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_search_label": "Search Filename", + "files.filter_search_placeholder": "Enter filename...", + "files.filter_storage_provider": "Storage Provider", + "files.filter_tags_aria": "Filter by tags (comma-separated)", + "files.filter_tags_placeholder": "e.g. invoice,amazon", + "files.fulltext_search_label": "Full-Text Search (OCR text, metadata, tags)", + "files.fulltext_search_placeholder": "Search document content, sender, tags, type...", + "files.no_files": "No files found", + "files.ocr_status": "OCR Status", + "files.page_title": "File Records", + "files.pagination_files": "files", + "files.pagination_first": "First", + "files.pagination_last": "Last", + "files.pagination_nav_aria": "File list pagination", + "files.pagination_next": "Next", + "files.pagination_of": "of", + "files.pagination_previous": "Previous", + "files.pagination_showing": "Showing", + "files.preview_modal_close": "Close 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.saved_searches_empty": "No saved searches yet", + "files.saved_searches_error": "Could not load saved searches", + "files.saved_searches_label": "Saved Searches", + "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_title": "Search Results", + "files.status_duplicate": "Duplicate", + "files.table_actions": "Actions", + "files.table_aria": "File records", + "files.table_created_at": "Created At", + "files.table_empty": "No files found", + "files.table_id": "ID", + "files.table_mime_type": "MIME Type", + "files.table_original_filename": "Original Filename", + "files.table_select_all": "Select all files on this page", + "files.tags": "Tags", + "files.title": "Files", + "files.upload_modal_aria": "Upload progress", + "files.upload_modal_close": "Close upload progress", + "files.upload_modal_header": "Uploading Files", + "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", + "footer.attributions": "Attributions", + "footer.cookies": "Cookies", + "footer.copyright": "DocuElevate {year}", + "footer.imprint": "Imprint", + "footer.license": "License", + "footer.navigation": "Footer navigation", + "footer.privacy": "Privacy", + "footer.terms": "Terms", + "footer.version": "Version {version}", + "help.destinations_dropbox": "Dropbox", + "help.destinations_dropbox_desc": "OAuth-linked. Files land in your chosen folder.", + "help.destinations_email": "Email Forwarding", + "help.destinations_email_desc": "Processed files sent as SMTP attachments.", + "help.destinations_google_drive": "Google Drive", + "help.destinations_google_drive_desc": "Service account or OAuth. Supports shared drives.", + "help.destinations_heading": "Destinations – Where Documents Go", + "help.destinations_nextcloud": "Nextcloud / WebDAV", + "help.destinations_nextcloud_desc": "Self-hosted cloud storage via WebDAV.", + "help.destinations_onedrive": "OneDrive", + "help.destinations_onedrive_desc": "Microsoft Graph API integration.", + "help.destinations_paperless": "Paperless-ngx", + "help.destinations_paperless_desc": "Push documents straight into Paperless for archival.", + "help.destinations_s3": "Amazon S3", + "help.destinations_s3_desc": "Any S3-compatible bucket (AWS, MinIO, Wasabi).", + "help.destinations_sftp": "SFTP / FTP", + "help.destinations_sftp_desc": "Secure file transfer to any server.", + "help.destinations_webhook": "Webhook", + "help.destinations_webhook_desc": "POST metadata to any external endpoint.", + "help.documentation": "Documentation", + "help.faq": "Frequently Asked Questions", + "help.faq_1_a": "Navigate to the Upload page, drag-and-drop your files or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.faq_1_q": "How do I upload documents?", + "help.faq_2_a": "PDF, JPEG, PNG, TIFF, BMP, GIF, DOCX, XLSX, PPTX, ODT, ODS, TXT, RTF, and HTML. Non-PDF files are automatically converted to PDF before processing.", + "help.faq_2_q": "Which file formats are supported?", + "help.faq_3_a": "Yes. Go to Email Ingestion, add an IMAP account, and DocuElevate will poll for new messages and process attachments automatically.", + "help.faq_3_q": "Can I ingest documents from email?", + "help.faq_4_a": "Pipelines let you chain processing steps – OCR, AI extraction, format conversion – and route the result to one or more destinations. Create and manage them from the Pipelines page.", + "help.faq_4_q": "How do processing pipelines work?", + "help.faq_5_a": "DocuElevate encrypts credentials at rest, communicates over TLS, and never stores your documents longer than necessary. See the Privacy Notice for full details.", + "help.faq_5_q": "Is my data secure?", + "help.faq_heading": "Frequently Asked Questions", + "help.getting_started": "Getting Started", + "help.heading": "Help Center", + "help.page_title": "Help Center", + "help.privacy_notice": "Privacy Notice", + "help.quickstart_heading": "Quick Start", + "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_upload": "Upload Documents", + "help.quickstart_upload_desc": "Drag & drop files onto the Upload page or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.quickstart_workflows": "Automate Workflows", + "help.quickstart_workflows_desc": "Create Pipelines to define multi-step processing and routing rules. Combine OCR, AI extraction, format conversion, and delivery in a single flow.", + "help.sources_email_ingestion": "Email Ingestion (IMAP)", + "help.sources_email_ingestion_desc": "Forward documents to a dedicated mailbox. Under Email Ingestion, add one or more IMAP accounts. DocuElevate polls for new messages and processes attachments automatically.", + "help.sources_heading": "Sources – Getting Documents In", + "help.sources_rest_api": "REST API", + "help.sources_rest_api_desc": "Integrate programmatically by POST-ing files to /api/upload. Ideal for scripts, watched folders, scanners, or third-party tools like Zapier and n8n.", + "help.sources_scanner": "Scanner & Mobile", + "help.sources_scanner_desc": "Point network scanners at DocuElevate's upload endpoint or use any mobile scanning app that supports custom HTTP destinations.", + "help.sources_web_upload": "Web Upload", + "help.sources_web_upload_desc": "The fastest way to get started. Open the Upload page, drop one or more files, and DocuElevate takes care of the rest. Supported formats include PDF, JPEG, PNG, TIFF, DOCX, XLSX, and more.", + "help.subheading": "Everything you need to get the most out of DocuElevate. Browse topics below or search for what you need.", + "help.support": "Support", + "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_heading": "Contact Support", + "help.support_ticket_button": "Submit a Ticket", + "help.support_ticket_heading": "Open a Support Ticket", + "help.title": "Help Center", + "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_heading": "Workflows & Pipelines", + "help.workflows_step_1": "Convert to PDF", + "help.workflows_step_1_create": "Go to Pipelines in the main menu.", + "help.workflows_step_2": "OCR – extract text", + "help.workflows_step_2_create": "Click New Pipeline and give it a name.", + "help.workflows_step_3": "AI metadata extraction", + "help.workflows_step_3_create": "Add the processing steps you need.", + "help.workflows_step_4": "Deliver to one or more destinations", + "help.workflows_step_4_create": "Choose one or more delivery destinations.", + "help.workflows_step_5_create": "Save – new documents will be processed through this pipeline automatically.", + "help.workflows_typical_steps": "Typical Steps", + "help.workflows_what_is": "What is a Pipeline?", + "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_ingestion": "Email & URL-based document ingestion", + "index.capabilities_ocr": "OCR & metadata extraction with AI", + "index.capabilities_paperless": "Paperless-ngx integration for document management", + "index.capabilities_title": "Capabilities", + "index.capabilities_workflows": "Automated classification & routing workflows", + "index.cta_description": "Join teams already automating their document processing with DocuElevate.", + "index.cta_heading": "Ready to elevate your document workflow?", + "index.cta_pricing": "See pricing", + "index.cta_signup": "Create a free account", + "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_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_desc": "Route processed files to Dropbox, Google Drive, OneDrive, Amazon S3, Nextcloud, Paperless NGX, WebDAV, FTP/SFTP, and more.", + "index.feature_email": "Email & IMAP Ingestion", + "index.feature_email_desc": "Automatically pull documents from Gmail or any IMAP mailbox — no manual uploads needed.", + "index.feature_ocr": "OCR & Text Extraction", + "index.feature_ocr_desc": "Azure Document Intelligence converts scanned PDFs and images into fully searchable text automatically.", + "index.feature_pipelines": "Custom Pipelines", + "index.feature_pipelines_desc": "Build processing pipelines with configurable steps — OCR, AI extraction, format conversion, and storage routing in any order.", + "index.feature_search": "Full-Text Search", + "index.feature_search_desc": "Instantly find any document by content, metadata, or tags across your entire archive.", + "index.feature_section_title": "Everything you need for smart document workflows", + "index.getting_started": "Getting Started", + "index.getting_started_1": "Configure integrations via System Status", + "index.getting_started_2": "Upload your first document", + "index.getting_started_3": "Review results in Files", + "index.getting_started_learn": "Learn more about DocuElevate", + "index.hero_description": "DocuElevate ingests your documents, runs OCR, extracts metadata with AI, and routes files to Dropbox, Google Drive, OneDrive, S3, Nextcloud, and more — all in one seamless pipeline.", + "index.hero_heading": "From upload to insight — automatically.", + "index.hero_login": "Log In", + "index.hero_pricing": "View Plans & Pricing", + "index.hero_signup": "Get Started — it’s free", + "index.integrations_active": "Active integrations", + "index.integrations_storage": "Storage targets", + "index.integrations_title": "Integrations", + "index.integrations_view_status": "View system status", + "index.page_title_dashboard": "Dashboard", + "index.page_title_public": "Intelligent Document Processing", + "index.platform_overview": "Platform overview", + "index.quick_actions": "Quick Actions", + "index.quick_documents": "My Documents", + "index.quick_documents_desc": "Browse your processed files", + "index.quick_search": "Search", + "index.quick_search_desc": "Full-text search across documents", + "index.quick_subscription": "My Subscription", + "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_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_subtitle": "Intelligent document processing & management", + "index.stat_active_integrations": "Active Integrations", + "index.stat_active_users": "Active users", + "index.stat_files_month": "Files this month", + "index.stat_files_today": "Files today", + "index.stat_storage_targets": "Storage Targets", + "index.stat_total_files": "Total files", + "index.tier_plan": "Plan", + "index.tier_upgrade": "Upgrade", + "index.tier_view_details": "View full details", + "index.upgrade_daily_limits": "Higher daily & monthly limits", + "index.upgrade_description": "Unlock more documents, more destinations and priority support.", + "index.upgrade_destinations": "More storage destinations", + "index.upgrade_ocr_pages": "More OCR pages", + "index.upgrade_plan": "Upgrade your plan", + "index.upgrade_view_pricing": "View plans & pricing", + "index.usage_lifetime": "Lifetime files", + "index.usage_month": "Files this month", + "index.usage_my_usage": "My usage", + "index.usage_today": "Files today", + "index.usage_unlimited": "Unlimited", + "integrations.configure": "Configure", + "integrations.connect": "Connect", + "integrations.connected": "Connected", + "integrations.disconnect": "Disconnect", + "integrations.empty_state": "No integrations configured", + "integrations.folder_label": "Folder", + "integrations.host_label": "Host", + "integrations.imap_settings": "IMAP Settings", + "integrations.not_connected": "Not Connected", + "integrations.page_title": "Integrations", + "integrations.password_label": "Password", + "integrations.port_label": "Port", + "integrations.title": "Integrations", + "integrations.username_label": "Username", + "language.bg": "Български", + "language.ca": "Català", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", + "language.cs": "Čeština", + "language.da": "Dansk", + "language.de": "Deutsch", + "language.el": "Ελληνικά", + "language.en": "English", + "language.es": "Español", + "language.et": "Eesti", + "language.fi": "Suomi", + "language.fr": "Français", + "language.ga": "Gaeilge", + "language.hr": "Hrvatski", + "language.hu": "Magyar", + "language.is": "Íslenska", + "language.it": "Italiano", + "language.lb": "Lëtzebuergesch", + "language.lt": "Lietuvių", + "language.lv": "Latviešu", + "language.nb": "Norsk", + "language.nl": "Nederlands", + "language.pl": "Polski", + "language.pt": "Português", + "language.ro": "Română", + "language.ru": "Русский", + "language.selector": "Language", + "language.selector_label": "Select language", + "language.sk": "Slovenčina", + "language.sl": "Slovenščina", + "language.sv": "Svenska", + "language.tr": "Türkçe", + "language.uk": "Українська", + "language.zh": "中文", + "nav.about": "About", + "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", + "nav.admin_actions": "Admin actions", + "nav.admin_menu": "Admin menu", + "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", + "nav.backup_restore": "Backup & Restore", + "nav.credentials": "Credentials", + "nav.dark_mode": "Dark Mode", + "nav.dashboard": "Dashboard", + "nav.developer_docs": "Developer Docs", + "nav.duplicates": "Duplicates", + "nav.file_manager": "File Manager", + "nav.files": "Files", + "nav.help": "Help", + "nav.help_center": "Help Center", + "nav.imap": "Email Import", + "nav.integrations": "Integrations", + "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", + "nav.main_navigation": "Main navigation", + "nav.notifications": "Notifications", + "nav.open_main_menu": "Open main menu", + "nav.pipelines": "Pipelines", + "nav.plan_designer": "Plan Designer", + "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", + "nav.queue_monitor": "Queue Monitor", + "nav.scheduled_jobs": "Scheduled Jobs", + "nav.search": "Search", + "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", + "nav.similarity": "Similarity", + "nav.skip_to_content": "Skip to main content", + "nav.status": "Status", + "nav.subscription": "Subscription", + "nav.toggle_dark_mode": "Toggle dark mode", + "nav.toggle_nav": "Toggle navigation menu", + "nav.upload": "Upload", + "nav.users": "Users", + "nav.version": "Version Info", + "notifications.filter_all": "All", + "notifications.filter_read": "Read only", + "notifications.filter_unread": "Unread only", + "notifications.manage_desc": "Manage your notification inbox, targets, and event preferences", + "notifications.mark_all_read": "Mark All as Read", + "notifications.mark_all_read_btn": "Mark all read", + "notifications.mark_read": "Mark as Read", + "notifications.no_notifications": "No notifications", + "notifications.page_title": "Notifications", + "notifications.tab_inbox": "Inbox", + "notifications.tab_settings": "Settings", + "notifications.title": "Notifications", + "notifications.unread_count": "{count} unread notifications", + "pipelines.active_label": "Active", + "pipelines.add_step_btn": "Add Step", + "pipelines.create": "Create Pipeline", + "pipelines.custom_label_label": "Custom Label", + "pipelines.default_label": "Default", + "pipelines.description_label": "Description", + "pipelines.description_placeholder": "Optional description", + "pipelines.disabled_label": "Disabled", + "pipelines.edit": "Edit Pipeline", + "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.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)", + "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.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_pipeline_label": "System pipeline (visible to all users)", + "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.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_date_from": "Date From", + "search.filter_date_to": "Date To", + "search.filter_document_type": "Document Type", + "search.filter_document_type_placeholder": "e.g. Invoice", + "search.filter_language": "Language", + "search.filter_language_placeholder": "e.g. de", + "search.filter_sender": "Sender", + "search.filter_sender_placeholder": "e.g. ACME Corp", + "search.filter_tags": "Tags", + "search.filter_tags_placeholder": "e.g. amazon", + "search.filter_text_quality": "Text Quality", + "search.filter_text_quality_all": "All", + "search.filter_text_quality_high": "High", + "search.filter_text_quality_low": "Low", + "search.filter_text_quality_medium": "Medium", + "search.filter_text_quality_no_text": "No text", + "search.heading": "Document Search", + "search.input_aria_label": "Search documents", + "search.input_placeholder": "Search documents by content, sender, tags, type...", + "search.loading_indicator": "Searching…", + "search.no_results": "No results found", + "search.page_title": "Search Documents", + "search.placeholder": "Search by filename, content, tags...", + "search.result_empty": "No documents found matching your query.", + "search.results_count": "{count} results found", + "search.saved_aria_save": "Save current search", + "search.saved_button": "Save Current", + "search.saved_empty": "No saved searches yet", + "search.saved_error": "Could not load saved searches", + "search.saved_label": "Saved Searches", + "search.saved_loading": "Loading...", + "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.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_setting_title": "Save this setting", + "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.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.build_date": "Build Date", + "status.container_id": "Container ID", + "status.git_commit": "Git Commit", + "status.last_check": "Last Check", + "status.page_title": "System Status", + "status.setting_label": "Setting", + "status.value_label": "Value", + "upload.browse_button": "Browse Files", + "upload.button_processing": "Processing...", + "upload.camera_button": "Take Photo / Scan Document", + "upload.download_button": "Download and Process", + "upload.downloading": "Downloading file from URL...", + "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_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_invalid_url": "Invalid URL format", + "upload.error_url_required": "Please enter a URL", + "upload.file_size_hint": "Maximum size: 500 MB per file", + "upload.file_types": "Allowed types: PDF, Office documents (Word, Excel, PowerPoint, etc.), Images", + "upload.filename_description": "Leave empty to use filename from URL", + "upload.filename_label": "Filename (optional)", + "upload.filename_placeholder": "my-document.pdf", + "upload.max_size": "Maximum file size: {size}", + "upload.page_title": "Upload Files", + "upload.section_device": "Upload from Device", + "upload.section_url": "Upload from URL", + "upload.select_file": "Select File", + "upload.success": "File uploaded successfully", + "upload.title": "Upload Document", + "upload.uploading": "Uploading...", + "upload.url_description": "Enter a direct link to a file (PDF, Office documents, or images)", + "upload.url_label": "File URL", + "upload.url_placeholder": "https://example.com/document.pdf" +} diff --git a/frontend/translations/ko.json b/frontend/translations/ko.json new file mode 100644 index 00000000..d36160ed --- /dev/null +++ b/frontend/translations/ko.json @@ -0,0 +1,929 @@ +{ + "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", + "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.create_account": "Create account", + "auth.display_name_label": "Display Name", + "auth.email_label": "Email", + "auth.forgot_password": "Forgot Password?", + "auth.forgot_username": "Forgot username?", + "auth.login": "Log In", + "auth.login_title": "Log In", + "auth.logo_alt": "DocuElevate Logo", + "auth.logout": "Log Out", + "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.profile": "Profile", + "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_title": "Sign Up", + "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.active": "Active", + "common.all": "All", + "common.back": "Back", + "common.cancel": "Cancel", + "common.close": "Close", + "common.col_pending": "Pending", + "common.completed": "Completed", + "common.confirm": "Confirm", + "common.copied": "Copied!", + "common.copy": "Copy", + "common.create": "Create", + "common.created": "Created", + "common.date": "Date", + "common.delete": "Delete", + "common.description": "Description", + "common.details": "Details", + "common.disabled": "Disabled", + "common.download": "Download", + "common.duplicate": "Duplicate", + "common.edit": "Edit", + "common.enabled": "Enabled", + "common.error": "Error", + "common.failed": "Failed", + "common.filter": "Filter", + "common.inactive": "Inactive", + "common.info": "Info", + "common.loading": "Loading...", + "common.name": "Name", + "common.next": "Next", + "common.next_page": "Next page", + "common.no": "No", + "common.none": "None", + "common.page": "Page", + "common.pending": "Pending", + "common.prev_page": "Previous page", + "common.previous": "Previous", + "common.processing": "Processing", + "common.refresh": "Refresh", + "common.reset": "Reset", + "common.retry": "Retry", + "common.save": "Save", + "common.search": "Search", + "common.select": "Select", + "common.select_placeholder": "— select —", + "common.size": "Size", + "common.status": "Status", + "common.submit": "Submit", + "common.success": "Success", + "common.tags": "Tags", + "common.type": "Type", + "common.updated": "Updated", + "common.upload": "Upload", + "common.view": "View", + "common.warning": "Warning", + "common.yes": "Yes", + "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", + "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", + "cookie.notice_label": "Cookie notice", + "cookie.policy_link": "Cookie Policy", + "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.files_this_month": "Files This Month", + "dashboard.files_today": "Files Today", + "dashboard.ocr_processed": "OCR Processed", + "dashboard.quick_actions": "Quick Actions", + "dashboard.recent_activity": "Recent Activity", + "dashboard.storage_targets": "Storage Targets", + "dashboard.title": "Dashboard", + "dashboard.total_files": "Total Files", + "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_heading": "Oops, we couldn’t find that page!", + "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_title": "404 - Not Found", + "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_heading": "Oops! Something Went Wrong.", + "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_message": "You do not have permission to access this page.", + "error.not_found": "Page not found", + "error.not_found_message": "The page you are looking for does not exist.", + "error.server_error": "Internal Server Error", + "error.server_error_message": "Something went wrong. Please try again later.", + "error.unauthorized": "Unauthorized", + "error.unauthorized_message": "You need to log in to access this page.", + "files.action_delete": "Delete file", + "files.action_details": "View details", + "files.action_preview": "Quick preview", + "files.bulk_clear_selection": "Clear Selection", + "files.bulk_cloud_ocr": "Re-run Cloud OCR", + "files.bulk_delete": "Delete Selected", + "files.bulk_download": "Download as ZIP", + "files.bulk_reprocess": "Reprocess Selected", + "files.delete_modal_cancel": "Cancel", + "files.delete_modal_confirm": "Delete", + "files.delete_modal_message": "Are you sure you want to delete this file?", + "files.delete_modal_title": "Confirm Deletion", + "files.document_title": "Document Title", + "files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more – folders are processed recursively", + "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.filename": "Filename", + "files.files_selected": "files selected", + "files.filter_all_providers": "All Providers", + "files.filter_all_statuses": "All Statuses", + "files.filter_all_types": "All Types", + "files.filter_apply": "Apply Filters", + "files.filter_clear": "Clear", + "files.filter_date_from": "Date From", + "files.filter_date_from_aria": "Filter from date", + "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_ocr_all": "All Files", + "files.filter_ocr_good": "Good quality", + "files.filter_ocr_poor": "Poor 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_search_label": "Search Filename", + "files.filter_search_placeholder": "Enter filename...", + "files.filter_storage_provider": "Storage Provider", + "files.filter_tags_aria": "Filter by tags (comma-separated)", + "files.filter_tags_placeholder": "e.g. invoice,amazon", + "files.fulltext_search_label": "Full-Text Search (OCR text, metadata, tags)", + "files.fulltext_search_placeholder": "Search document content, sender, tags, type...", + "files.no_files": "No files found", + "files.ocr_status": "OCR Status", + "files.page_title": "File Records", + "files.pagination_files": "files", + "files.pagination_first": "First", + "files.pagination_last": "Last", + "files.pagination_nav_aria": "File list pagination", + "files.pagination_next": "Next", + "files.pagination_of": "of", + "files.pagination_previous": "Previous", + "files.pagination_showing": "Showing", + "files.preview_modal_close": "Close 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.saved_searches_empty": "No saved searches yet", + "files.saved_searches_error": "Could not load saved searches", + "files.saved_searches_label": "Saved Searches", + "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_title": "Search Results", + "files.status_duplicate": "Duplicate", + "files.table_actions": "Actions", + "files.table_aria": "File records", + "files.table_created_at": "Created At", + "files.table_empty": "No files found", + "files.table_id": "ID", + "files.table_mime_type": "MIME Type", + "files.table_original_filename": "Original Filename", + "files.table_select_all": "Select all files on this page", + "files.tags": "Tags", + "files.title": "Files", + "files.upload_modal_aria": "Upload progress", + "files.upload_modal_close": "Close upload progress", + "files.upload_modal_header": "Uploading Files", + "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", + "footer.attributions": "Attributions", + "footer.cookies": "Cookies", + "footer.copyright": "DocuElevate {year}", + "footer.imprint": "Imprint", + "footer.license": "License", + "footer.navigation": "Footer navigation", + "footer.privacy": "Privacy", + "footer.terms": "Terms", + "footer.version": "Version {version}", + "help.destinations_dropbox": "Dropbox", + "help.destinations_dropbox_desc": "OAuth-linked. Files land in your chosen folder.", + "help.destinations_email": "Email Forwarding", + "help.destinations_email_desc": "Processed files sent as SMTP attachments.", + "help.destinations_google_drive": "Google Drive", + "help.destinations_google_drive_desc": "Service account or OAuth. Supports shared drives.", + "help.destinations_heading": "Destinations – Where Documents Go", + "help.destinations_nextcloud": "Nextcloud / WebDAV", + "help.destinations_nextcloud_desc": "Self-hosted cloud storage via WebDAV.", + "help.destinations_onedrive": "OneDrive", + "help.destinations_onedrive_desc": "Microsoft Graph API integration.", + "help.destinations_paperless": "Paperless-ngx", + "help.destinations_paperless_desc": "Push documents straight into Paperless for archival.", + "help.destinations_s3": "Amazon S3", + "help.destinations_s3_desc": "Any S3-compatible bucket (AWS, MinIO, Wasabi).", + "help.destinations_sftp": "SFTP / FTP", + "help.destinations_sftp_desc": "Secure file transfer to any server.", + "help.destinations_webhook": "Webhook", + "help.destinations_webhook_desc": "POST metadata to any external endpoint.", + "help.documentation": "Documentation", + "help.faq": "Frequently Asked Questions", + "help.faq_1_a": "Navigate to the Upload page, drag-and-drop your files or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.faq_1_q": "How do I upload documents?", + "help.faq_2_a": "PDF, JPEG, PNG, TIFF, BMP, GIF, DOCX, XLSX, PPTX, ODT, ODS, TXT, RTF, and HTML. Non-PDF files are automatically converted to PDF before processing.", + "help.faq_2_q": "Which file formats are supported?", + "help.faq_3_a": "Yes. Go to Email Ingestion, add an IMAP account, and DocuElevate will poll for new messages and process attachments automatically.", + "help.faq_3_q": "Can I ingest documents from email?", + "help.faq_4_a": "Pipelines let you chain processing steps – OCR, AI extraction, format conversion – and route the result to one or more destinations. Create and manage them from the Pipelines page.", + "help.faq_4_q": "How do processing pipelines work?", + "help.faq_5_a": "DocuElevate encrypts credentials at rest, communicates over TLS, and never stores your documents longer than necessary. See the Privacy Notice for full details.", + "help.faq_5_q": "Is my data secure?", + "help.faq_heading": "Frequently Asked Questions", + "help.getting_started": "Getting Started", + "help.heading": "Help Center", + "help.page_title": "Help Center", + "help.privacy_notice": "Privacy Notice", + "help.quickstart_heading": "Quick Start", + "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_upload": "Upload Documents", + "help.quickstart_upload_desc": "Drag & drop files onto the Upload page or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.quickstart_workflows": "Automate Workflows", + "help.quickstart_workflows_desc": "Create Pipelines to define multi-step processing and routing rules. Combine OCR, AI extraction, format conversion, and delivery in a single flow.", + "help.sources_email_ingestion": "Email Ingestion (IMAP)", + "help.sources_email_ingestion_desc": "Forward documents to a dedicated mailbox. Under Email Ingestion, add one or more IMAP accounts. DocuElevate polls for new messages and processes attachments automatically.", + "help.sources_heading": "Sources – Getting Documents In", + "help.sources_rest_api": "REST API", + "help.sources_rest_api_desc": "Integrate programmatically by POST-ing files to /api/upload. Ideal for scripts, watched folders, scanners, or third-party tools like Zapier and n8n.", + "help.sources_scanner": "Scanner & Mobile", + "help.sources_scanner_desc": "Point network scanners at DocuElevate's upload endpoint or use any mobile scanning app that supports custom HTTP destinations.", + "help.sources_web_upload": "Web Upload", + "help.sources_web_upload_desc": "The fastest way to get started. Open the Upload page, drop one or more files, and DocuElevate takes care of the rest. Supported formats include PDF, JPEG, PNG, TIFF, DOCX, XLSX, and more.", + "help.subheading": "Everything you need to get the most out of DocuElevate. Browse topics below or search for what you need.", + "help.support": "Support", + "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_heading": "Contact Support", + "help.support_ticket_button": "Submit a Ticket", + "help.support_ticket_heading": "Open a Support Ticket", + "help.title": "Help Center", + "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_heading": "Workflows & Pipelines", + "help.workflows_step_1": "Convert to PDF", + "help.workflows_step_1_create": "Go to Pipelines in the main menu.", + "help.workflows_step_2": "OCR – extract text", + "help.workflows_step_2_create": "Click New Pipeline and give it a name.", + "help.workflows_step_3": "AI metadata extraction", + "help.workflows_step_3_create": "Add the processing steps you need.", + "help.workflows_step_4": "Deliver to one or more destinations", + "help.workflows_step_4_create": "Choose one or more delivery destinations.", + "help.workflows_step_5_create": "Save – new documents will be processed through this pipeline automatically.", + "help.workflows_typical_steps": "Typical Steps", + "help.workflows_what_is": "What is a Pipeline?", + "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_ingestion": "Email & URL-based document ingestion", + "index.capabilities_ocr": "OCR & metadata extraction with AI", + "index.capabilities_paperless": "Paperless-ngx integration for document management", + "index.capabilities_title": "Capabilities", + "index.capabilities_workflows": "Automated classification & routing workflows", + "index.cta_description": "Join teams already automating their document processing with DocuElevate.", + "index.cta_heading": "Ready to elevate your document workflow?", + "index.cta_pricing": "See pricing", + "index.cta_signup": "Create a free account", + "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_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_desc": "Route processed files to Dropbox, Google Drive, OneDrive, Amazon S3, Nextcloud, Paperless NGX, WebDAV, FTP/SFTP, and more.", + "index.feature_email": "Email & IMAP Ingestion", + "index.feature_email_desc": "Automatically pull documents from Gmail or any IMAP mailbox — no manual uploads needed.", + "index.feature_ocr": "OCR & Text Extraction", + "index.feature_ocr_desc": "Azure Document Intelligence converts scanned PDFs and images into fully searchable text automatically.", + "index.feature_pipelines": "Custom Pipelines", + "index.feature_pipelines_desc": "Build processing pipelines with configurable steps — OCR, AI extraction, format conversion, and storage routing in any order.", + "index.feature_search": "Full-Text Search", + "index.feature_search_desc": "Instantly find any document by content, metadata, or tags across your entire archive.", + "index.feature_section_title": "Everything you need for smart document workflows", + "index.getting_started": "Getting Started", + "index.getting_started_1": "Configure integrations via System Status", + "index.getting_started_2": "Upload your first document", + "index.getting_started_3": "Review results in Files", + "index.getting_started_learn": "Learn more about DocuElevate", + "index.hero_description": "DocuElevate ingests your documents, runs OCR, extracts metadata with AI, and routes files to Dropbox, Google Drive, OneDrive, S3, Nextcloud, and more — all in one seamless pipeline.", + "index.hero_heading": "From upload to insight — automatically.", + "index.hero_login": "Log In", + "index.hero_pricing": "View Plans & Pricing", + "index.hero_signup": "Get Started — it’s free", + "index.integrations_active": "Active integrations", + "index.integrations_storage": "Storage targets", + "index.integrations_title": "Integrations", + "index.integrations_view_status": "View system status", + "index.page_title_dashboard": "Dashboard", + "index.page_title_public": "Intelligent Document Processing", + "index.platform_overview": "Platform overview", + "index.quick_actions": "Quick Actions", + "index.quick_documents": "My Documents", + "index.quick_documents_desc": "Browse your processed files", + "index.quick_search": "Search", + "index.quick_search_desc": "Full-text search across documents", + "index.quick_subscription": "My Subscription", + "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_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_subtitle": "Intelligent document processing & management", + "index.stat_active_integrations": "Active Integrations", + "index.stat_active_users": "Active users", + "index.stat_files_month": "Files this month", + "index.stat_files_today": "Files today", + "index.stat_storage_targets": "Storage Targets", + "index.stat_total_files": "Total files", + "index.tier_plan": "Plan", + "index.tier_upgrade": "Upgrade", + "index.tier_view_details": "View full details", + "index.upgrade_daily_limits": "Higher daily & monthly limits", + "index.upgrade_description": "Unlock more documents, more destinations and priority support.", + "index.upgrade_destinations": "More storage destinations", + "index.upgrade_ocr_pages": "More OCR pages", + "index.upgrade_plan": "Upgrade your plan", + "index.upgrade_view_pricing": "View plans & pricing", + "index.usage_lifetime": "Lifetime files", + "index.usage_month": "Files this month", + "index.usage_my_usage": "My usage", + "index.usage_today": "Files today", + "index.usage_unlimited": "Unlimited", + "integrations.configure": "Configure", + "integrations.connect": "Connect", + "integrations.connected": "Connected", + "integrations.disconnect": "Disconnect", + "integrations.empty_state": "No integrations configured", + "integrations.folder_label": "Folder", + "integrations.host_label": "Host", + "integrations.imap_settings": "IMAP Settings", + "integrations.not_connected": "Not Connected", + "integrations.page_title": "Integrations", + "integrations.password_label": "Password", + "integrations.port_label": "Port", + "integrations.title": "Integrations", + "integrations.username_label": "Username", + "language.bg": "Български", + "language.ca": "Català", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", + "language.cs": "Čeština", + "language.da": "Dansk", + "language.de": "Deutsch", + "language.el": "Ελληνικά", + "language.en": "English", + "language.es": "Español", + "language.et": "Eesti", + "language.fi": "Suomi", + "language.fr": "Français", + "language.ga": "Gaeilge", + "language.hr": "Hrvatski", + "language.hu": "Magyar", + "language.is": "Íslenska", + "language.it": "Italiano", + "language.lb": "Lëtzebuergesch", + "language.lt": "Lietuvių", + "language.lv": "Latviešu", + "language.nb": "Norsk", + "language.nl": "Nederlands", + "language.pl": "Polski", + "language.pt": "Português", + "language.ro": "Română", + "language.ru": "Русский", + "language.selector": "Language", + "language.selector_label": "Select language", + "language.sk": "Slovenčina", + "language.sl": "Slovenščina", + "language.sv": "Svenska", + "language.tr": "Türkçe", + "language.uk": "Українська", + "language.zh": "中文", + "nav.about": "About", + "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", + "nav.admin_actions": "Admin actions", + "nav.admin_menu": "Admin menu", + "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", + "nav.backup_restore": "Backup & Restore", + "nav.credentials": "Credentials", + "nav.dark_mode": "Dark Mode", + "nav.dashboard": "Dashboard", + "nav.developer_docs": "Developer Docs", + "nav.duplicates": "Duplicates", + "nav.file_manager": "File Manager", + "nav.files": "Files", + "nav.help": "Help", + "nav.help_center": "Help Center", + "nav.imap": "Email Import", + "nav.integrations": "Integrations", + "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", + "nav.main_navigation": "Main navigation", + "nav.notifications": "Notifications", + "nav.open_main_menu": "Open main menu", + "nav.pipelines": "Pipelines", + "nav.plan_designer": "Plan Designer", + "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", + "nav.queue_monitor": "Queue Monitor", + "nav.scheduled_jobs": "Scheduled Jobs", + "nav.search": "Search", + "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", + "nav.similarity": "Similarity", + "nav.skip_to_content": "Skip to main content", + "nav.status": "Status", + "nav.subscription": "Subscription", + "nav.toggle_dark_mode": "Toggle dark mode", + "nav.toggle_nav": "Toggle navigation menu", + "nav.upload": "Upload", + "nav.users": "Users", + "nav.version": "Version Info", + "notifications.filter_all": "All", + "notifications.filter_read": "Read only", + "notifications.filter_unread": "Unread only", + "notifications.manage_desc": "Manage your notification inbox, targets, and event preferences", + "notifications.mark_all_read": "Mark All as Read", + "notifications.mark_all_read_btn": "Mark all read", + "notifications.mark_read": "Mark as Read", + "notifications.no_notifications": "No notifications", + "notifications.page_title": "Notifications", + "notifications.tab_inbox": "Inbox", + "notifications.tab_settings": "Settings", + "notifications.title": "Notifications", + "notifications.unread_count": "{count} unread notifications", + "pipelines.active_label": "Active", + "pipelines.add_step_btn": "Add Step", + "pipelines.create": "Create Pipeline", + "pipelines.custom_label_label": "Custom Label", + "pipelines.default_label": "Default", + "pipelines.description_label": "Description", + "pipelines.description_placeholder": "Optional description", + "pipelines.disabled_label": "Disabled", + "pipelines.edit": "Edit Pipeline", + "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.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)", + "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.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_pipeline_label": "System pipeline (visible to all users)", + "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.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_date_from": "Date From", + "search.filter_date_to": "Date To", + "search.filter_document_type": "Document Type", + "search.filter_document_type_placeholder": "e.g. Invoice", + "search.filter_language": "Language", + "search.filter_language_placeholder": "e.g. de", + "search.filter_sender": "Sender", + "search.filter_sender_placeholder": "e.g. ACME Corp", + "search.filter_tags": "Tags", + "search.filter_tags_placeholder": "e.g. amazon", + "search.filter_text_quality": "Text Quality", + "search.filter_text_quality_all": "All", + "search.filter_text_quality_high": "High", + "search.filter_text_quality_low": "Low", + "search.filter_text_quality_medium": "Medium", + "search.filter_text_quality_no_text": "No text", + "search.heading": "Document Search", + "search.input_aria_label": "Search documents", + "search.input_placeholder": "Search documents by content, sender, tags, type...", + "search.loading_indicator": "Searching…", + "search.no_results": "No results found", + "search.page_title": "Search Documents", + "search.placeholder": "Search by filename, content, tags...", + "search.result_empty": "No documents found matching your query.", + "search.results_count": "{count} results found", + "search.saved_aria_save": "Save current search", + "search.saved_button": "Save Current", + "search.saved_empty": "No saved searches yet", + "search.saved_error": "Could not load saved searches", + "search.saved_label": "Saved Searches", + "search.saved_loading": "Loading...", + "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.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_setting_title": "Save this setting", + "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.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.build_date": "Build Date", + "status.container_id": "Container ID", + "status.git_commit": "Git Commit", + "status.last_check": "Last Check", + "status.page_title": "System Status", + "status.setting_label": "Setting", + "status.value_label": "Value", + "upload.browse_button": "Browse Files", + "upload.button_processing": "Processing...", + "upload.camera_button": "Take Photo / Scan Document", + "upload.download_button": "Download and Process", + "upload.downloading": "Downloading file from URL...", + "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_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_invalid_url": "Invalid URL format", + "upload.error_url_required": "Please enter a URL", + "upload.file_size_hint": "Maximum size: 500 MB per file", + "upload.file_types": "Allowed types: PDF, Office documents (Word, Excel, PowerPoint, etc.), Images", + "upload.filename_description": "Leave empty to use filename from URL", + "upload.filename_label": "Filename (optional)", + "upload.filename_placeholder": "my-document.pdf", + "upload.max_size": "Maximum file size: {size}", + "upload.page_title": "Upload Files", + "upload.section_device": "Upload from Device", + "upload.section_url": "Upload from URL", + "upload.select_file": "Select File", + "upload.success": "File uploaded successfully", + "upload.title": "Upload Document", + "upload.uploading": "Uploading...", + "upload.url_description": "Enter a direct link to a file (PDF, Office documents, or images)", + "upload.url_label": "File URL", + "upload.url_placeholder": "https://example.com/document.pdf" +} diff --git a/frontend/translations/lb.json b/frontend/translations/lb.json index 6ab5782e..d36160ed 100644 --- a/frontend/translations/lb.json +++ b/frontend/translations/lb.json @@ -195,6 +195,7 @@ "common.confirm": "Confirm", "common.copied": "Copied!", "common.copy": "Copy", + "common.create": "Create", "common.created": "Created", "common.date": "Date", "common.delete": "Delete", @@ -202,6 +203,7 @@ "common.details": "Details", "common.disabled": "Disabled", "common.download": "Download", + "common.duplicate": "Duplicate", "common.edit": "Edit", "common.enabled": "Enabled", "common.error": "Error", @@ -218,6 +220,7 @@ "common.page": "Page", "common.pending": "Pending", "common.prev_page": "Previous page", + "common.previous": "Previous", "common.processing": "Processing", "common.refresh": "Refresh", "common.reset": "Reset", @@ -228,7 +231,9 @@ "common.select_placeholder": "— select —", "common.size": "Size", "common.status": "Status", + "common.submit": "Submit", "common.success": "Success", + "common.tags": "Tags", "common.type": "Type", "common.updated": "Updated", "common.upload": "Upload", @@ -236,6 +241,8 @@ "common.warning": "Warning", "common.yes": "Yes", "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", "cookie.notice_label": "Cookie notice", "cookie.policy_link": "Cookie Policy", @@ -331,7 +338,7 @@ "files.delete_modal_message": "Are you sure you want to delete this file?", "files.delete_modal_title": "Confirm Deletion", "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 – folders are processed recursively", "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", @@ -359,7 +366,7 @@ "files.filter_storage_provider": "Storage Provider", "files.filter_tags_aria": "Filter by tags (comma-separated)", "files.filter_tags_placeholder": "e.g. invoice,amazon", - "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.no_files": "No files found", "files.ocr_status": "OCR Status", @@ -398,6 +405,8 @@ "files.upload_modal_close": "Close upload progress", "files.upload_modal_header": "Uploading Files", "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", "footer.attributions": "Attributions", "footer.cookies": "Cookies", "footer.copyright": "DocuElevate {year}", @@ -577,7 +586,8 @@ "integrations.username_label": "Username", "language.bg": "Български", "language.ca": "Català", - "language.changed": "D'Sprooch gouf op {language} geännert", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", "language.cs": "Čeština", "language.da": "Dansk", "language.de": "Deutsch", @@ -601,7 +611,8 @@ "language.pt": "Português", "language.ro": "Română", "language.ru": "Русский", - "language.selector": "Lëtzebuergesch", + "language.selector": "Language", + "language.selector_label": "Select language", "language.sk": "Slovenčina", "language.sl": "Slovenščina", "language.sv": "Svenska", @@ -610,9 +621,15 @@ "language.zh": "中文", "nav.about": "About", "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", "nav.admin_actions": "Admin actions", "nav.admin_menu": "Admin menu", "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", "nav.backup_restore": "Backup & Restore", "nav.credentials": "Credentials", "nav.dark_mode": "Dark Mode", @@ -623,25 +640,34 @@ "nav.files": "Files", "nav.help": "Help", "nav.help_center": "Help Center", + "nav.imap": "Email Import", "nav.integrations": "Integrations", "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", "nav.main_navigation": "Main navigation", "nav.notifications": "Notifications", "nav.open_main_menu": "Open main menu", "nav.pipelines": "Pipelines", "nav.plan_designer": "Plan Designer", "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", "nav.queue_monitor": "Queue Monitor", "nav.scheduled_jobs": "Scheduled Jobs", "nav.search": "Search", "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", "nav.similarity": "Similarity", "nav.skip_to_content": "Skip to main content", "nav.status": "Status", + "nav.subscription": "Subscription", "nav.toggle_dark_mode": "Toggle dark mode", "nav.toggle_nav": "Toggle navigation menu", "nav.upload": "Upload", "nav.users": "Users", + "nav.version": "Version Info", "notifications.filter_all": "All", "notifications.filter_read": "Read only", "notifications.filter_unread": "Unread only", diff --git a/frontend/translations/li.json b/frontend/translations/li.json new file mode 100644 index 00000000..d36160ed --- /dev/null +++ b/frontend/translations/li.json @@ -0,0 +1,929 @@ +{ + "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", + "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.create_account": "Create account", + "auth.display_name_label": "Display Name", + "auth.email_label": "Email", + "auth.forgot_password": "Forgot Password?", + "auth.forgot_username": "Forgot username?", + "auth.login": "Log In", + "auth.login_title": "Log In", + "auth.logo_alt": "DocuElevate Logo", + "auth.logout": "Log Out", + "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.profile": "Profile", + "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_title": "Sign Up", + "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.active": "Active", + "common.all": "All", + "common.back": "Back", + "common.cancel": "Cancel", + "common.close": "Close", + "common.col_pending": "Pending", + "common.completed": "Completed", + "common.confirm": "Confirm", + "common.copied": "Copied!", + "common.copy": "Copy", + "common.create": "Create", + "common.created": "Created", + "common.date": "Date", + "common.delete": "Delete", + "common.description": "Description", + "common.details": "Details", + "common.disabled": "Disabled", + "common.download": "Download", + "common.duplicate": "Duplicate", + "common.edit": "Edit", + "common.enabled": "Enabled", + "common.error": "Error", + "common.failed": "Failed", + "common.filter": "Filter", + "common.inactive": "Inactive", + "common.info": "Info", + "common.loading": "Loading...", + "common.name": "Name", + "common.next": "Next", + "common.next_page": "Next page", + "common.no": "No", + "common.none": "None", + "common.page": "Page", + "common.pending": "Pending", + "common.prev_page": "Previous page", + "common.previous": "Previous", + "common.processing": "Processing", + "common.refresh": "Refresh", + "common.reset": "Reset", + "common.retry": "Retry", + "common.save": "Save", + "common.search": "Search", + "common.select": "Select", + "common.select_placeholder": "— select —", + "common.size": "Size", + "common.status": "Status", + "common.submit": "Submit", + "common.success": "Success", + "common.tags": "Tags", + "common.type": "Type", + "common.updated": "Updated", + "common.upload": "Upload", + "common.view": "View", + "common.warning": "Warning", + "common.yes": "Yes", + "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", + "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", + "cookie.notice_label": "Cookie notice", + "cookie.policy_link": "Cookie Policy", + "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.files_this_month": "Files This Month", + "dashboard.files_today": "Files Today", + "dashboard.ocr_processed": "OCR Processed", + "dashboard.quick_actions": "Quick Actions", + "dashboard.recent_activity": "Recent Activity", + "dashboard.storage_targets": "Storage Targets", + "dashboard.title": "Dashboard", + "dashboard.total_files": "Total Files", + "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_heading": "Oops, we couldn’t find that page!", + "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_title": "404 - Not Found", + "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_heading": "Oops! Something Went Wrong.", + "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_message": "You do not have permission to access this page.", + "error.not_found": "Page not found", + "error.not_found_message": "The page you are looking for does not exist.", + "error.server_error": "Internal Server Error", + "error.server_error_message": "Something went wrong. Please try again later.", + "error.unauthorized": "Unauthorized", + "error.unauthorized_message": "You need to log in to access this page.", + "files.action_delete": "Delete file", + "files.action_details": "View details", + "files.action_preview": "Quick preview", + "files.bulk_clear_selection": "Clear Selection", + "files.bulk_cloud_ocr": "Re-run Cloud OCR", + "files.bulk_delete": "Delete Selected", + "files.bulk_download": "Download as ZIP", + "files.bulk_reprocess": "Reprocess Selected", + "files.delete_modal_cancel": "Cancel", + "files.delete_modal_confirm": "Delete", + "files.delete_modal_message": "Are you sure you want to delete this file?", + "files.delete_modal_title": "Confirm Deletion", + "files.document_title": "Document Title", + "files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more – folders are processed recursively", + "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.filename": "Filename", + "files.files_selected": "files selected", + "files.filter_all_providers": "All Providers", + "files.filter_all_statuses": "All Statuses", + "files.filter_all_types": "All Types", + "files.filter_apply": "Apply Filters", + "files.filter_clear": "Clear", + "files.filter_date_from": "Date From", + "files.filter_date_from_aria": "Filter from date", + "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_ocr_all": "All Files", + "files.filter_ocr_good": "Good quality", + "files.filter_ocr_poor": "Poor 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_search_label": "Search Filename", + "files.filter_search_placeholder": "Enter filename...", + "files.filter_storage_provider": "Storage Provider", + "files.filter_tags_aria": "Filter by tags (comma-separated)", + "files.filter_tags_placeholder": "e.g. invoice,amazon", + "files.fulltext_search_label": "Full-Text Search (OCR text, metadata, tags)", + "files.fulltext_search_placeholder": "Search document content, sender, tags, type...", + "files.no_files": "No files found", + "files.ocr_status": "OCR Status", + "files.page_title": "File Records", + "files.pagination_files": "files", + "files.pagination_first": "First", + "files.pagination_last": "Last", + "files.pagination_nav_aria": "File list pagination", + "files.pagination_next": "Next", + "files.pagination_of": "of", + "files.pagination_previous": "Previous", + "files.pagination_showing": "Showing", + "files.preview_modal_close": "Close 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.saved_searches_empty": "No saved searches yet", + "files.saved_searches_error": "Could not load saved searches", + "files.saved_searches_label": "Saved Searches", + "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_title": "Search Results", + "files.status_duplicate": "Duplicate", + "files.table_actions": "Actions", + "files.table_aria": "File records", + "files.table_created_at": "Created At", + "files.table_empty": "No files found", + "files.table_id": "ID", + "files.table_mime_type": "MIME Type", + "files.table_original_filename": "Original Filename", + "files.table_select_all": "Select all files on this page", + "files.tags": "Tags", + "files.title": "Files", + "files.upload_modal_aria": "Upload progress", + "files.upload_modal_close": "Close upload progress", + "files.upload_modal_header": "Uploading Files", + "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", + "footer.attributions": "Attributions", + "footer.cookies": "Cookies", + "footer.copyright": "DocuElevate {year}", + "footer.imprint": "Imprint", + "footer.license": "License", + "footer.navigation": "Footer navigation", + "footer.privacy": "Privacy", + "footer.terms": "Terms", + "footer.version": "Version {version}", + "help.destinations_dropbox": "Dropbox", + "help.destinations_dropbox_desc": "OAuth-linked. Files land in your chosen folder.", + "help.destinations_email": "Email Forwarding", + "help.destinations_email_desc": "Processed files sent as SMTP attachments.", + "help.destinations_google_drive": "Google Drive", + "help.destinations_google_drive_desc": "Service account or OAuth. Supports shared drives.", + "help.destinations_heading": "Destinations – Where Documents Go", + "help.destinations_nextcloud": "Nextcloud / WebDAV", + "help.destinations_nextcloud_desc": "Self-hosted cloud storage via WebDAV.", + "help.destinations_onedrive": "OneDrive", + "help.destinations_onedrive_desc": "Microsoft Graph API integration.", + "help.destinations_paperless": "Paperless-ngx", + "help.destinations_paperless_desc": "Push documents straight into Paperless for archival.", + "help.destinations_s3": "Amazon S3", + "help.destinations_s3_desc": "Any S3-compatible bucket (AWS, MinIO, Wasabi).", + "help.destinations_sftp": "SFTP / FTP", + "help.destinations_sftp_desc": "Secure file transfer to any server.", + "help.destinations_webhook": "Webhook", + "help.destinations_webhook_desc": "POST metadata to any external endpoint.", + "help.documentation": "Documentation", + "help.faq": "Frequently Asked Questions", + "help.faq_1_a": "Navigate to the Upload page, drag-and-drop your files or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.faq_1_q": "How do I upload documents?", + "help.faq_2_a": "PDF, JPEG, PNG, TIFF, BMP, GIF, DOCX, XLSX, PPTX, ODT, ODS, TXT, RTF, and HTML. Non-PDF files are automatically converted to PDF before processing.", + "help.faq_2_q": "Which file formats are supported?", + "help.faq_3_a": "Yes. Go to Email Ingestion, add an IMAP account, and DocuElevate will poll for new messages and process attachments automatically.", + "help.faq_3_q": "Can I ingest documents from email?", + "help.faq_4_a": "Pipelines let you chain processing steps – OCR, AI extraction, format conversion – and route the result to one or more destinations. Create and manage them from the Pipelines page.", + "help.faq_4_q": "How do processing pipelines work?", + "help.faq_5_a": "DocuElevate encrypts credentials at rest, communicates over TLS, and never stores your documents longer than necessary. See the Privacy Notice for full details.", + "help.faq_5_q": "Is my data secure?", + "help.faq_heading": "Frequently Asked Questions", + "help.getting_started": "Getting Started", + "help.heading": "Help Center", + "help.page_title": "Help Center", + "help.privacy_notice": "Privacy Notice", + "help.quickstart_heading": "Quick Start", + "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_upload": "Upload Documents", + "help.quickstart_upload_desc": "Drag & drop files onto the Upload page or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.quickstart_workflows": "Automate Workflows", + "help.quickstart_workflows_desc": "Create Pipelines to define multi-step processing and routing rules. Combine OCR, AI extraction, format conversion, and delivery in a single flow.", + "help.sources_email_ingestion": "Email Ingestion (IMAP)", + "help.sources_email_ingestion_desc": "Forward documents to a dedicated mailbox. Under Email Ingestion, add one or more IMAP accounts. DocuElevate polls for new messages and processes attachments automatically.", + "help.sources_heading": "Sources – Getting Documents In", + "help.sources_rest_api": "REST API", + "help.sources_rest_api_desc": "Integrate programmatically by POST-ing files to /api/upload. Ideal for scripts, watched folders, scanners, or third-party tools like Zapier and n8n.", + "help.sources_scanner": "Scanner & Mobile", + "help.sources_scanner_desc": "Point network scanners at DocuElevate's upload endpoint or use any mobile scanning app that supports custom HTTP destinations.", + "help.sources_web_upload": "Web Upload", + "help.sources_web_upload_desc": "The fastest way to get started. Open the Upload page, drop one or more files, and DocuElevate takes care of the rest. Supported formats include PDF, JPEG, PNG, TIFF, DOCX, XLSX, and more.", + "help.subheading": "Everything you need to get the most out of DocuElevate. Browse topics below or search for what you need.", + "help.support": "Support", + "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_heading": "Contact Support", + "help.support_ticket_button": "Submit a Ticket", + "help.support_ticket_heading": "Open a Support Ticket", + "help.title": "Help Center", + "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_heading": "Workflows & Pipelines", + "help.workflows_step_1": "Convert to PDF", + "help.workflows_step_1_create": "Go to Pipelines in the main menu.", + "help.workflows_step_2": "OCR – extract text", + "help.workflows_step_2_create": "Click New Pipeline and give it a name.", + "help.workflows_step_3": "AI metadata extraction", + "help.workflows_step_3_create": "Add the processing steps you need.", + "help.workflows_step_4": "Deliver to one or more destinations", + "help.workflows_step_4_create": "Choose one or more delivery destinations.", + "help.workflows_step_5_create": "Save – new documents will be processed through this pipeline automatically.", + "help.workflows_typical_steps": "Typical Steps", + "help.workflows_what_is": "What is a Pipeline?", + "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_ingestion": "Email & URL-based document ingestion", + "index.capabilities_ocr": "OCR & metadata extraction with AI", + "index.capabilities_paperless": "Paperless-ngx integration for document management", + "index.capabilities_title": "Capabilities", + "index.capabilities_workflows": "Automated classification & routing workflows", + "index.cta_description": "Join teams already automating their document processing with DocuElevate.", + "index.cta_heading": "Ready to elevate your document workflow?", + "index.cta_pricing": "See pricing", + "index.cta_signup": "Create a free account", + "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_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_desc": "Route processed files to Dropbox, Google Drive, OneDrive, Amazon S3, Nextcloud, Paperless NGX, WebDAV, FTP/SFTP, and more.", + "index.feature_email": "Email & IMAP Ingestion", + "index.feature_email_desc": "Automatically pull documents from Gmail or any IMAP mailbox — no manual uploads needed.", + "index.feature_ocr": "OCR & Text Extraction", + "index.feature_ocr_desc": "Azure Document Intelligence converts scanned PDFs and images into fully searchable text automatically.", + "index.feature_pipelines": "Custom Pipelines", + "index.feature_pipelines_desc": "Build processing pipelines with configurable steps — OCR, AI extraction, format conversion, and storage routing in any order.", + "index.feature_search": "Full-Text Search", + "index.feature_search_desc": "Instantly find any document by content, metadata, or tags across your entire archive.", + "index.feature_section_title": "Everything you need for smart document workflows", + "index.getting_started": "Getting Started", + "index.getting_started_1": "Configure integrations via System Status", + "index.getting_started_2": "Upload your first document", + "index.getting_started_3": "Review results in Files", + "index.getting_started_learn": "Learn more about DocuElevate", + "index.hero_description": "DocuElevate ingests your documents, runs OCR, extracts metadata with AI, and routes files to Dropbox, Google Drive, OneDrive, S3, Nextcloud, and more — all in one seamless pipeline.", + "index.hero_heading": "From upload to insight — automatically.", + "index.hero_login": "Log In", + "index.hero_pricing": "View Plans & Pricing", + "index.hero_signup": "Get Started — it’s free", + "index.integrations_active": "Active integrations", + "index.integrations_storage": "Storage targets", + "index.integrations_title": "Integrations", + "index.integrations_view_status": "View system status", + "index.page_title_dashboard": "Dashboard", + "index.page_title_public": "Intelligent Document Processing", + "index.platform_overview": "Platform overview", + "index.quick_actions": "Quick Actions", + "index.quick_documents": "My Documents", + "index.quick_documents_desc": "Browse your processed files", + "index.quick_search": "Search", + "index.quick_search_desc": "Full-text search across documents", + "index.quick_subscription": "My Subscription", + "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_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_subtitle": "Intelligent document processing & management", + "index.stat_active_integrations": "Active Integrations", + "index.stat_active_users": "Active users", + "index.stat_files_month": "Files this month", + "index.stat_files_today": "Files today", + "index.stat_storage_targets": "Storage Targets", + "index.stat_total_files": "Total files", + "index.tier_plan": "Plan", + "index.tier_upgrade": "Upgrade", + "index.tier_view_details": "View full details", + "index.upgrade_daily_limits": "Higher daily & monthly limits", + "index.upgrade_description": "Unlock more documents, more destinations and priority support.", + "index.upgrade_destinations": "More storage destinations", + "index.upgrade_ocr_pages": "More OCR pages", + "index.upgrade_plan": "Upgrade your plan", + "index.upgrade_view_pricing": "View plans & pricing", + "index.usage_lifetime": "Lifetime files", + "index.usage_month": "Files this month", + "index.usage_my_usage": "My usage", + "index.usage_today": "Files today", + "index.usage_unlimited": "Unlimited", + "integrations.configure": "Configure", + "integrations.connect": "Connect", + "integrations.connected": "Connected", + "integrations.disconnect": "Disconnect", + "integrations.empty_state": "No integrations configured", + "integrations.folder_label": "Folder", + "integrations.host_label": "Host", + "integrations.imap_settings": "IMAP Settings", + "integrations.not_connected": "Not Connected", + "integrations.page_title": "Integrations", + "integrations.password_label": "Password", + "integrations.port_label": "Port", + "integrations.title": "Integrations", + "integrations.username_label": "Username", + "language.bg": "Български", + "language.ca": "Català", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", + "language.cs": "Čeština", + "language.da": "Dansk", + "language.de": "Deutsch", + "language.el": "Ελληνικά", + "language.en": "English", + "language.es": "Español", + "language.et": "Eesti", + "language.fi": "Suomi", + "language.fr": "Français", + "language.ga": "Gaeilge", + "language.hr": "Hrvatski", + "language.hu": "Magyar", + "language.is": "Íslenska", + "language.it": "Italiano", + "language.lb": "Lëtzebuergesch", + "language.lt": "Lietuvių", + "language.lv": "Latviešu", + "language.nb": "Norsk", + "language.nl": "Nederlands", + "language.pl": "Polski", + "language.pt": "Português", + "language.ro": "Română", + "language.ru": "Русский", + "language.selector": "Language", + "language.selector_label": "Select language", + "language.sk": "Slovenčina", + "language.sl": "Slovenščina", + "language.sv": "Svenska", + "language.tr": "Türkçe", + "language.uk": "Українська", + "language.zh": "中文", + "nav.about": "About", + "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", + "nav.admin_actions": "Admin actions", + "nav.admin_menu": "Admin menu", + "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", + "nav.backup_restore": "Backup & Restore", + "nav.credentials": "Credentials", + "nav.dark_mode": "Dark Mode", + "nav.dashboard": "Dashboard", + "nav.developer_docs": "Developer Docs", + "nav.duplicates": "Duplicates", + "nav.file_manager": "File Manager", + "nav.files": "Files", + "nav.help": "Help", + "nav.help_center": "Help Center", + "nav.imap": "Email Import", + "nav.integrations": "Integrations", + "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", + "nav.main_navigation": "Main navigation", + "nav.notifications": "Notifications", + "nav.open_main_menu": "Open main menu", + "nav.pipelines": "Pipelines", + "nav.plan_designer": "Plan Designer", + "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", + "nav.queue_monitor": "Queue Monitor", + "nav.scheduled_jobs": "Scheduled Jobs", + "nav.search": "Search", + "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", + "nav.similarity": "Similarity", + "nav.skip_to_content": "Skip to main content", + "nav.status": "Status", + "nav.subscription": "Subscription", + "nav.toggle_dark_mode": "Toggle dark mode", + "nav.toggle_nav": "Toggle navigation menu", + "nav.upload": "Upload", + "nav.users": "Users", + "nav.version": "Version Info", + "notifications.filter_all": "All", + "notifications.filter_read": "Read only", + "notifications.filter_unread": "Unread only", + "notifications.manage_desc": "Manage your notification inbox, targets, and event preferences", + "notifications.mark_all_read": "Mark All as Read", + "notifications.mark_all_read_btn": "Mark all read", + "notifications.mark_read": "Mark as Read", + "notifications.no_notifications": "No notifications", + "notifications.page_title": "Notifications", + "notifications.tab_inbox": "Inbox", + "notifications.tab_settings": "Settings", + "notifications.title": "Notifications", + "notifications.unread_count": "{count} unread notifications", + "pipelines.active_label": "Active", + "pipelines.add_step_btn": "Add Step", + "pipelines.create": "Create Pipeline", + "pipelines.custom_label_label": "Custom Label", + "pipelines.default_label": "Default", + "pipelines.description_label": "Description", + "pipelines.description_placeholder": "Optional description", + "pipelines.disabled_label": "Disabled", + "pipelines.edit": "Edit Pipeline", + "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.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)", + "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.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_pipeline_label": "System pipeline (visible to all users)", + "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.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_date_from": "Date From", + "search.filter_date_to": "Date To", + "search.filter_document_type": "Document Type", + "search.filter_document_type_placeholder": "e.g. Invoice", + "search.filter_language": "Language", + "search.filter_language_placeholder": "e.g. de", + "search.filter_sender": "Sender", + "search.filter_sender_placeholder": "e.g. ACME Corp", + "search.filter_tags": "Tags", + "search.filter_tags_placeholder": "e.g. amazon", + "search.filter_text_quality": "Text Quality", + "search.filter_text_quality_all": "All", + "search.filter_text_quality_high": "High", + "search.filter_text_quality_low": "Low", + "search.filter_text_quality_medium": "Medium", + "search.filter_text_quality_no_text": "No text", + "search.heading": "Document Search", + "search.input_aria_label": "Search documents", + "search.input_placeholder": "Search documents by content, sender, tags, type...", + "search.loading_indicator": "Searching…", + "search.no_results": "No results found", + "search.page_title": "Search Documents", + "search.placeholder": "Search by filename, content, tags...", + "search.result_empty": "No documents found matching your query.", + "search.results_count": "{count} results found", + "search.saved_aria_save": "Save current search", + "search.saved_button": "Save Current", + "search.saved_empty": "No saved searches yet", + "search.saved_error": "Could not load saved searches", + "search.saved_label": "Saved Searches", + "search.saved_loading": "Loading...", + "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.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_setting_title": "Save this setting", + "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.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.build_date": "Build Date", + "status.container_id": "Container ID", + "status.git_commit": "Git Commit", + "status.last_check": "Last Check", + "status.page_title": "System Status", + "status.setting_label": "Setting", + "status.value_label": "Value", + "upload.browse_button": "Browse Files", + "upload.button_processing": "Processing...", + "upload.camera_button": "Take Photo / Scan Document", + "upload.download_button": "Download and Process", + "upload.downloading": "Downloading file from URL...", + "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_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_invalid_url": "Invalid URL format", + "upload.error_url_required": "Please enter a URL", + "upload.file_size_hint": "Maximum size: 500 MB per file", + "upload.file_types": "Allowed types: PDF, Office documents (Word, Excel, PowerPoint, etc.), Images", + "upload.filename_description": "Leave empty to use filename from URL", + "upload.filename_label": "Filename (optional)", + "upload.filename_placeholder": "my-document.pdf", + "upload.max_size": "Maximum file size: {size}", + "upload.page_title": "Upload Files", + "upload.section_device": "Upload from Device", + "upload.section_url": "Upload from URL", + "upload.select_file": "Select File", + "upload.success": "File uploaded successfully", + "upload.title": "Upload Document", + "upload.uploading": "Uploading...", + "upload.url_description": "Enter a direct link to a file (PDF, Office documents, or images)", + "upload.url_label": "File URL", + "upload.url_placeholder": "https://example.com/document.pdf" +} diff --git a/frontend/translations/lt.json b/frontend/translations/lt.json index 4842a453..d36160ed 100644 --- a/frontend/translations/lt.json +++ b/frontend/translations/lt.json @@ -195,6 +195,7 @@ "common.confirm": "Confirm", "common.copied": "Copied!", "common.copy": "Copy", + "common.create": "Create", "common.created": "Created", "common.date": "Date", "common.delete": "Delete", @@ -202,6 +203,7 @@ "common.details": "Details", "common.disabled": "Disabled", "common.download": "Download", + "common.duplicate": "Duplicate", "common.edit": "Edit", "common.enabled": "Enabled", "common.error": "Error", @@ -218,6 +220,7 @@ "common.page": "Page", "common.pending": "Pending", "common.prev_page": "Previous page", + "common.previous": "Previous", "common.processing": "Processing", "common.refresh": "Refresh", "common.reset": "Reset", @@ -228,7 +231,9 @@ "common.select_placeholder": "— select —", "common.size": "Size", "common.status": "Status", + "common.submit": "Submit", "common.success": "Success", + "common.tags": "Tags", "common.type": "Type", "common.updated": "Updated", "common.upload": "Upload", @@ -236,6 +241,8 @@ "common.warning": "Warning", "common.yes": "Yes", "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", "cookie.notice_label": "Cookie notice", "cookie.policy_link": "Cookie Policy", @@ -331,7 +338,7 @@ "files.delete_modal_message": "Are you sure you want to delete this file?", "files.delete_modal_title": "Confirm Deletion", "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 – folders are processed recursively", "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", @@ -359,7 +366,7 @@ "files.filter_storage_provider": "Storage Provider", "files.filter_tags_aria": "Filter by tags (comma-separated)", "files.filter_tags_placeholder": "e.g. invoice,amazon", - "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.no_files": "No files found", "files.ocr_status": "OCR Status", @@ -398,6 +405,8 @@ "files.upload_modal_close": "Close upload progress", "files.upload_modal_header": "Uploading Files", "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", "footer.attributions": "Attributions", "footer.cookies": "Cookies", "footer.copyright": "DocuElevate {year}", @@ -577,7 +586,8 @@ "integrations.username_label": "Username", "language.bg": "Български", "language.ca": "Català", - "language.changed": "Kalba pakeista į {language}", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", "language.cs": "Čeština", "language.da": "Dansk", "language.de": "Deutsch", @@ -601,7 +611,8 @@ "language.pt": "Português", "language.ro": "Română", "language.ru": "Русский", - "language.selector": "Lietuvių", + "language.selector": "Language", + "language.selector_label": "Select language", "language.sk": "Slovenčina", "language.sl": "Slovenščina", "language.sv": "Svenska", @@ -610,9 +621,15 @@ "language.zh": "中文", "nav.about": "About", "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", "nav.admin_actions": "Admin actions", "nav.admin_menu": "Admin menu", "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", "nav.backup_restore": "Backup & Restore", "nav.credentials": "Credentials", "nav.dark_mode": "Dark Mode", @@ -623,25 +640,34 @@ "nav.files": "Files", "nav.help": "Help", "nav.help_center": "Help Center", + "nav.imap": "Email Import", "nav.integrations": "Integrations", "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", "nav.main_navigation": "Main navigation", "nav.notifications": "Notifications", "nav.open_main_menu": "Open main menu", "nav.pipelines": "Pipelines", "nav.plan_designer": "Plan Designer", "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", "nav.queue_monitor": "Queue Monitor", "nav.scheduled_jobs": "Scheduled Jobs", "nav.search": "Search", "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", "nav.similarity": "Similarity", "nav.skip_to_content": "Skip to main content", "nav.status": "Status", + "nav.subscription": "Subscription", "nav.toggle_dark_mode": "Toggle dark mode", "nav.toggle_nav": "Toggle navigation menu", "nav.upload": "Upload", "nav.users": "Users", + "nav.version": "Version Info", "notifications.filter_all": "All", "notifications.filter_read": "Read only", "notifications.filter_unread": "Unread only", diff --git a/frontend/translations/lv.json b/frontend/translations/lv.json index e4bcad5c..d36160ed 100644 --- a/frontend/translations/lv.json +++ b/frontend/translations/lv.json @@ -195,6 +195,7 @@ "common.confirm": "Confirm", "common.copied": "Copied!", "common.copy": "Copy", + "common.create": "Create", "common.created": "Created", "common.date": "Date", "common.delete": "Delete", @@ -202,6 +203,7 @@ "common.details": "Details", "common.disabled": "Disabled", "common.download": "Download", + "common.duplicate": "Duplicate", "common.edit": "Edit", "common.enabled": "Enabled", "common.error": "Error", @@ -218,6 +220,7 @@ "common.page": "Page", "common.pending": "Pending", "common.prev_page": "Previous page", + "common.previous": "Previous", "common.processing": "Processing", "common.refresh": "Refresh", "common.reset": "Reset", @@ -228,7 +231,9 @@ "common.select_placeholder": "— select —", "common.size": "Size", "common.status": "Status", + "common.submit": "Submit", "common.success": "Success", + "common.tags": "Tags", "common.type": "Type", "common.updated": "Updated", "common.upload": "Upload", @@ -236,6 +241,8 @@ "common.warning": "Warning", "common.yes": "Yes", "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", "cookie.notice_label": "Cookie notice", "cookie.policy_link": "Cookie Policy", @@ -331,7 +338,7 @@ "files.delete_modal_message": "Are you sure you want to delete this file?", "files.delete_modal_title": "Confirm Deletion", "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 – folders are processed recursively", "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", @@ -359,7 +366,7 @@ "files.filter_storage_provider": "Storage Provider", "files.filter_tags_aria": "Filter by tags (comma-separated)", "files.filter_tags_placeholder": "e.g. invoice,amazon", - "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.no_files": "No files found", "files.ocr_status": "OCR Status", @@ -398,6 +405,8 @@ "files.upload_modal_close": "Close upload progress", "files.upload_modal_header": "Uploading Files", "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", "footer.attributions": "Attributions", "footer.cookies": "Cookies", "footer.copyright": "DocuElevate {year}", @@ -577,7 +586,8 @@ "integrations.username_label": "Username", "language.bg": "Български", "language.ca": "Català", - "language.changed": "Valoda tika nomainīta uz {language}", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", "language.cs": "Čeština", "language.da": "Dansk", "language.de": "Deutsch", @@ -601,7 +611,8 @@ "language.pt": "Português", "language.ro": "Română", "language.ru": "Русский", - "language.selector": "Latviešu", + "language.selector": "Language", + "language.selector_label": "Select language", "language.sk": "Slovenčina", "language.sl": "Slovenščina", "language.sv": "Svenska", @@ -610,9 +621,15 @@ "language.zh": "中文", "nav.about": "About", "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", "nav.admin_actions": "Admin actions", "nav.admin_menu": "Admin menu", "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", "nav.backup_restore": "Backup & Restore", "nav.credentials": "Credentials", "nav.dark_mode": "Dark Mode", @@ -623,25 +640,34 @@ "nav.files": "Files", "nav.help": "Help", "nav.help_center": "Help Center", + "nav.imap": "Email Import", "nav.integrations": "Integrations", "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", "nav.main_navigation": "Main navigation", "nav.notifications": "Notifications", "nav.open_main_menu": "Open main menu", "nav.pipelines": "Pipelines", "nav.plan_designer": "Plan Designer", "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", "nav.queue_monitor": "Queue Monitor", "nav.scheduled_jobs": "Scheduled Jobs", "nav.search": "Search", "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", "nav.similarity": "Similarity", "nav.skip_to_content": "Skip to main content", "nav.status": "Status", + "nav.subscription": "Subscription", "nav.toggle_dark_mode": "Toggle dark mode", "nav.toggle_nav": "Toggle navigation menu", "nav.upload": "Upload", "nav.users": "Users", + "nav.version": "Version Info", "notifications.filter_all": "All", "notifications.filter_read": "Read only", "notifications.filter_unread": "Unread only", diff --git a/frontend/translations/nb.json b/frontend/translations/nb.json index 2a77bd92..0b0eed6a 100644 --- a/frontend/translations/nb.json +++ b/frontend/translations/nb.json @@ -195,6 +195,7 @@ "common.confirm": "Confirm", "common.copied": "Copied!", "common.copy": "Copy", + "common.create": "Create", "common.created": "Created", "common.date": "Date", "common.delete": "Delete", @@ -202,6 +203,7 @@ "common.details": "Details", "common.disabled": "Disabled", "common.download": "Download", + "common.duplicate": "Duplicate", "common.edit": "Edit", "common.enabled": "Enabled", "common.error": "Error", @@ -218,6 +220,7 @@ "common.page": "Page", "common.pending": "Pending", "common.prev_page": "Previous page", + "common.previous": "Previous", "common.processing": "Processing", "common.refresh": "Refresh", "common.reset": "Reset", @@ -228,7 +231,9 @@ "common.select_placeholder": "— select —", "common.size": "Size", "common.status": "Status", + "common.submit": "Submit", "common.success": "Success", + "common.tags": "Tags", "common.type": "Type", "common.updated": "Updated", "common.upload": "Upload", @@ -236,6 +241,8 @@ "common.warning": "Warning", "common.yes": "Yes", "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", "cookie.notice_label": "Cookie notice", "cookie.policy_link": "Cookie Policy", @@ -398,6 +405,8 @@ "files.upload_modal_close": "Close upload progress", "files.upload_modal_header": "Uploading Files", "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", "footer.attributions": "Attributions", "footer.cookies": "Cookies", "footer.copyright": "DocuElevate {year}", @@ -577,6 +586,7 @@ "integrations.username_label": "Username", "language.bg": "Български", "language.ca": "Català", + "language.change_success": "Language changed to {language}", "language.changed": "Språket ble endret til {language}", "language.cs": "Čeština", "language.da": "Dansk", @@ -602,6 +612,7 @@ "language.ro": "Română", "language.ru": "Русский", "language.selector": "Norsk", + "language.selector_label": "Select language", "language.sk": "Slovenčina", "language.sl": "Slovenščina", "language.sv": "Svenska", @@ -610,9 +621,15 @@ "language.zh": "中文", "nav.about": "About", "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", "nav.admin_actions": "Admin actions", "nav.admin_menu": "Admin menu", "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", "nav.backup_restore": "Backup & Restore", "nav.credentials": "Credentials", "nav.dark_mode": "Dark Mode", @@ -623,25 +640,34 @@ "nav.files": "Files", "nav.help": "Help", "nav.help_center": "Help Center", + "nav.imap": "Email Import", "nav.integrations": "Integrations", "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", "nav.main_navigation": "Main navigation", "nav.notifications": "Notifications", "nav.open_main_menu": "Open main menu", "nav.pipelines": "Pipelines", "nav.plan_designer": "Plan Designer", "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", "nav.queue_monitor": "Queue Monitor", "nav.scheduled_jobs": "Scheduled Jobs", "nav.search": "Search", "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", "nav.similarity": "Similarity", "nav.skip_to_content": "Skip to main content", "nav.status": "Status", + "nav.subscription": "Subscription", "nav.toggle_dark_mode": "Toggle dark mode", "nav.toggle_nav": "Toggle navigation menu", "nav.upload": "Upload", "nav.users": "Users", + "nav.version": "Version Info", "notifications.filter_all": "All", "notifications.filter_read": "Read only", "notifications.filter_unread": "Unread only", diff --git a/frontend/translations/nds.json b/frontend/translations/nds.json new file mode 100644 index 00000000..d36160ed --- /dev/null +++ b/frontend/translations/nds.json @@ -0,0 +1,929 @@ +{ + "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", + "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.create_account": "Create account", + "auth.display_name_label": "Display Name", + "auth.email_label": "Email", + "auth.forgot_password": "Forgot Password?", + "auth.forgot_username": "Forgot username?", + "auth.login": "Log In", + "auth.login_title": "Log In", + "auth.logo_alt": "DocuElevate Logo", + "auth.logout": "Log Out", + "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.profile": "Profile", + "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_title": "Sign Up", + "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.active": "Active", + "common.all": "All", + "common.back": "Back", + "common.cancel": "Cancel", + "common.close": "Close", + "common.col_pending": "Pending", + "common.completed": "Completed", + "common.confirm": "Confirm", + "common.copied": "Copied!", + "common.copy": "Copy", + "common.create": "Create", + "common.created": "Created", + "common.date": "Date", + "common.delete": "Delete", + "common.description": "Description", + "common.details": "Details", + "common.disabled": "Disabled", + "common.download": "Download", + "common.duplicate": "Duplicate", + "common.edit": "Edit", + "common.enabled": "Enabled", + "common.error": "Error", + "common.failed": "Failed", + "common.filter": "Filter", + "common.inactive": "Inactive", + "common.info": "Info", + "common.loading": "Loading...", + "common.name": "Name", + "common.next": "Next", + "common.next_page": "Next page", + "common.no": "No", + "common.none": "None", + "common.page": "Page", + "common.pending": "Pending", + "common.prev_page": "Previous page", + "common.previous": "Previous", + "common.processing": "Processing", + "common.refresh": "Refresh", + "common.reset": "Reset", + "common.retry": "Retry", + "common.save": "Save", + "common.search": "Search", + "common.select": "Select", + "common.select_placeholder": "— select —", + "common.size": "Size", + "common.status": "Status", + "common.submit": "Submit", + "common.success": "Success", + "common.tags": "Tags", + "common.type": "Type", + "common.updated": "Updated", + "common.upload": "Upload", + "common.view": "View", + "common.warning": "Warning", + "common.yes": "Yes", + "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", + "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", + "cookie.notice_label": "Cookie notice", + "cookie.policy_link": "Cookie Policy", + "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.files_this_month": "Files This Month", + "dashboard.files_today": "Files Today", + "dashboard.ocr_processed": "OCR Processed", + "dashboard.quick_actions": "Quick Actions", + "dashboard.recent_activity": "Recent Activity", + "dashboard.storage_targets": "Storage Targets", + "dashboard.title": "Dashboard", + "dashboard.total_files": "Total Files", + "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_heading": "Oops, we couldn’t find that page!", + "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_title": "404 - Not Found", + "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_heading": "Oops! Something Went Wrong.", + "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_message": "You do not have permission to access this page.", + "error.not_found": "Page not found", + "error.not_found_message": "The page you are looking for does not exist.", + "error.server_error": "Internal Server Error", + "error.server_error_message": "Something went wrong. Please try again later.", + "error.unauthorized": "Unauthorized", + "error.unauthorized_message": "You need to log in to access this page.", + "files.action_delete": "Delete file", + "files.action_details": "View details", + "files.action_preview": "Quick preview", + "files.bulk_clear_selection": "Clear Selection", + "files.bulk_cloud_ocr": "Re-run Cloud OCR", + "files.bulk_delete": "Delete Selected", + "files.bulk_download": "Download as ZIP", + "files.bulk_reprocess": "Reprocess Selected", + "files.delete_modal_cancel": "Cancel", + "files.delete_modal_confirm": "Delete", + "files.delete_modal_message": "Are you sure you want to delete this file?", + "files.delete_modal_title": "Confirm Deletion", + "files.document_title": "Document Title", + "files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more – folders are processed recursively", + "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.filename": "Filename", + "files.files_selected": "files selected", + "files.filter_all_providers": "All Providers", + "files.filter_all_statuses": "All Statuses", + "files.filter_all_types": "All Types", + "files.filter_apply": "Apply Filters", + "files.filter_clear": "Clear", + "files.filter_date_from": "Date From", + "files.filter_date_from_aria": "Filter from date", + "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_ocr_all": "All Files", + "files.filter_ocr_good": "Good quality", + "files.filter_ocr_poor": "Poor 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_search_label": "Search Filename", + "files.filter_search_placeholder": "Enter filename...", + "files.filter_storage_provider": "Storage Provider", + "files.filter_tags_aria": "Filter by tags (comma-separated)", + "files.filter_tags_placeholder": "e.g. invoice,amazon", + "files.fulltext_search_label": "Full-Text Search (OCR text, metadata, tags)", + "files.fulltext_search_placeholder": "Search document content, sender, tags, type...", + "files.no_files": "No files found", + "files.ocr_status": "OCR Status", + "files.page_title": "File Records", + "files.pagination_files": "files", + "files.pagination_first": "First", + "files.pagination_last": "Last", + "files.pagination_nav_aria": "File list pagination", + "files.pagination_next": "Next", + "files.pagination_of": "of", + "files.pagination_previous": "Previous", + "files.pagination_showing": "Showing", + "files.preview_modal_close": "Close 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.saved_searches_empty": "No saved searches yet", + "files.saved_searches_error": "Could not load saved searches", + "files.saved_searches_label": "Saved Searches", + "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_title": "Search Results", + "files.status_duplicate": "Duplicate", + "files.table_actions": "Actions", + "files.table_aria": "File records", + "files.table_created_at": "Created At", + "files.table_empty": "No files found", + "files.table_id": "ID", + "files.table_mime_type": "MIME Type", + "files.table_original_filename": "Original Filename", + "files.table_select_all": "Select all files on this page", + "files.tags": "Tags", + "files.title": "Files", + "files.upload_modal_aria": "Upload progress", + "files.upload_modal_close": "Close upload progress", + "files.upload_modal_header": "Uploading Files", + "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", + "footer.attributions": "Attributions", + "footer.cookies": "Cookies", + "footer.copyright": "DocuElevate {year}", + "footer.imprint": "Imprint", + "footer.license": "License", + "footer.navigation": "Footer navigation", + "footer.privacy": "Privacy", + "footer.terms": "Terms", + "footer.version": "Version {version}", + "help.destinations_dropbox": "Dropbox", + "help.destinations_dropbox_desc": "OAuth-linked. Files land in your chosen folder.", + "help.destinations_email": "Email Forwarding", + "help.destinations_email_desc": "Processed files sent as SMTP attachments.", + "help.destinations_google_drive": "Google Drive", + "help.destinations_google_drive_desc": "Service account or OAuth. Supports shared drives.", + "help.destinations_heading": "Destinations – Where Documents Go", + "help.destinations_nextcloud": "Nextcloud / WebDAV", + "help.destinations_nextcloud_desc": "Self-hosted cloud storage via WebDAV.", + "help.destinations_onedrive": "OneDrive", + "help.destinations_onedrive_desc": "Microsoft Graph API integration.", + "help.destinations_paperless": "Paperless-ngx", + "help.destinations_paperless_desc": "Push documents straight into Paperless for archival.", + "help.destinations_s3": "Amazon S3", + "help.destinations_s3_desc": "Any S3-compatible bucket (AWS, MinIO, Wasabi).", + "help.destinations_sftp": "SFTP / FTP", + "help.destinations_sftp_desc": "Secure file transfer to any server.", + "help.destinations_webhook": "Webhook", + "help.destinations_webhook_desc": "POST metadata to any external endpoint.", + "help.documentation": "Documentation", + "help.faq": "Frequently Asked Questions", + "help.faq_1_a": "Navigate to the Upload page, drag-and-drop your files or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.faq_1_q": "How do I upload documents?", + "help.faq_2_a": "PDF, JPEG, PNG, TIFF, BMP, GIF, DOCX, XLSX, PPTX, ODT, ODS, TXT, RTF, and HTML. Non-PDF files are automatically converted to PDF before processing.", + "help.faq_2_q": "Which file formats are supported?", + "help.faq_3_a": "Yes. Go to Email Ingestion, add an IMAP account, and DocuElevate will poll for new messages and process attachments automatically.", + "help.faq_3_q": "Can I ingest documents from email?", + "help.faq_4_a": "Pipelines let you chain processing steps – OCR, AI extraction, format conversion – and route the result to one or more destinations. Create and manage them from the Pipelines page.", + "help.faq_4_q": "How do processing pipelines work?", + "help.faq_5_a": "DocuElevate encrypts credentials at rest, communicates over TLS, and never stores your documents longer than necessary. See the Privacy Notice for full details.", + "help.faq_5_q": "Is my data secure?", + "help.faq_heading": "Frequently Asked Questions", + "help.getting_started": "Getting Started", + "help.heading": "Help Center", + "help.page_title": "Help Center", + "help.privacy_notice": "Privacy Notice", + "help.quickstart_heading": "Quick Start", + "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_upload": "Upload Documents", + "help.quickstart_upload_desc": "Drag & drop files onto the Upload page or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.quickstart_workflows": "Automate Workflows", + "help.quickstart_workflows_desc": "Create Pipelines to define multi-step processing and routing rules. Combine OCR, AI extraction, format conversion, and delivery in a single flow.", + "help.sources_email_ingestion": "Email Ingestion (IMAP)", + "help.sources_email_ingestion_desc": "Forward documents to a dedicated mailbox. Under Email Ingestion, add one or more IMAP accounts. DocuElevate polls for new messages and processes attachments automatically.", + "help.sources_heading": "Sources – Getting Documents In", + "help.sources_rest_api": "REST API", + "help.sources_rest_api_desc": "Integrate programmatically by POST-ing files to /api/upload. Ideal for scripts, watched folders, scanners, or third-party tools like Zapier and n8n.", + "help.sources_scanner": "Scanner & Mobile", + "help.sources_scanner_desc": "Point network scanners at DocuElevate's upload endpoint or use any mobile scanning app that supports custom HTTP destinations.", + "help.sources_web_upload": "Web Upload", + "help.sources_web_upload_desc": "The fastest way to get started. Open the Upload page, drop one or more files, and DocuElevate takes care of the rest. Supported formats include PDF, JPEG, PNG, TIFF, DOCX, XLSX, and more.", + "help.subheading": "Everything you need to get the most out of DocuElevate. Browse topics below or search for what you need.", + "help.support": "Support", + "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_heading": "Contact Support", + "help.support_ticket_button": "Submit a Ticket", + "help.support_ticket_heading": "Open a Support Ticket", + "help.title": "Help Center", + "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_heading": "Workflows & Pipelines", + "help.workflows_step_1": "Convert to PDF", + "help.workflows_step_1_create": "Go to Pipelines in the main menu.", + "help.workflows_step_2": "OCR – extract text", + "help.workflows_step_2_create": "Click New Pipeline and give it a name.", + "help.workflows_step_3": "AI metadata extraction", + "help.workflows_step_3_create": "Add the processing steps you need.", + "help.workflows_step_4": "Deliver to one or more destinations", + "help.workflows_step_4_create": "Choose one or more delivery destinations.", + "help.workflows_step_5_create": "Save – new documents will be processed through this pipeline automatically.", + "help.workflows_typical_steps": "Typical Steps", + "help.workflows_what_is": "What is a Pipeline?", + "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_ingestion": "Email & URL-based document ingestion", + "index.capabilities_ocr": "OCR & metadata extraction with AI", + "index.capabilities_paperless": "Paperless-ngx integration for document management", + "index.capabilities_title": "Capabilities", + "index.capabilities_workflows": "Automated classification & routing workflows", + "index.cta_description": "Join teams already automating their document processing with DocuElevate.", + "index.cta_heading": "Ready to elevate your document workflow?", + "index.cta_pricing": "See pricing", + "index.cta_signup": "Create a free account", + "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_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_desc": "Route processed files to Dropbox, Google Drive, OneDrive, Amazon S3, Nextcloud, Paperless NGX, WebDAV, FTP/SFTP, and more.", + "index.feature_email": "Email & IMAP Ingestion", + "index.feature_email_desc": "Automatically pull documents from Gmail or any IMAP mailbox — no manual uploads needed.", + "index.feature_ocr": "OCR & Text Extraction", + "index.feature_ocr_desc": "Azure Document Intelligence converts scanned PDFs and images into fully searchable text automatically.", + "index.feature_pipelines": "Custom Pipelines", + "index.feature_pipelines_desc": "Build processing pipelines with configurable steps — OCR, AI extraction, format conversion, and storage routing in any order.", + "index.feature_search": "Full-Text Search", + "index.feature_search_desc": "Instantly find any document by content, metadata, or tags across your entire archive.", + "index.feature_section_title": "Everything you need for smart document workflows", + "index.getting_started": "Getting Started", + "index.getting_started_1": "Configure integrations via System Status", + "index.getting_started_2": "Upload your first document", + "index.getting_started_3": "Review results in Files", + "index.getting_started_learn": "Learn more about DocuElevate", + "index.hero_description": "DocuElevate ingests your documents, runs OCR, extracts metadata with AI, and routes files to Dropbox, Google Drive, OneDrive, S3, Nextcloud, and more — all in one seamless pipeline.", + "index.hero_heading": "From upload to insight — automatically.", + "index.hero_login": "Log In", + "index.hero_pricing": "View Plans & Pricing", + "index.hero_signup": "Get Started — it’s free", + "index.integrations_active": "Active integrations", + "index.integrations_storage": "Storage targets", + "index.integrations_title": "Integrations", + "index.integrations_view_status": "View system status", + "index.page_title_dashboard": "Dashboard", + "index.page_title_public": "Intelligent Document Processing", + "index.platform_overview": "Platform overview", + "index.quick_actions": "Quick Actions", + "index.quick_documents": "My Documents", + "index.quick_documents_desc": "Browse your processed files", + "index.quick_search": "Search", + "index.quick_search_desc": "Full-text search across documents", + "index.quick_subscription": "My Subscription", + "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_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_subtitle": "Intelligent document processing & management", + "index.stat_active_integrations": "Active Integrations", + "index.stat_active_users": "Active users", + "index.stat_files_month": "Files this month", + "index.stat_files_today": "Files today", + "index.stat_storage_targets": "Storage Targets", + "index.stat_total_files": "Total files", + "index.tier_plan": "Plan", + "index.tier_upgrade": "Upgrade", + "index.tier_view_details": "View full details", + "index.upgrade_daily_limits": "Higher daily & monthly limits", + "index.upgrade_description": "Unlock more documents, more destinations and priority support.", + "index.upgrade_destinations": "More storage destinations", + "index.upgrade_ocr_pages": "More OCR pages", + "index.upgrade_plan": "Upgrade your plan", + "index.upgrade_view_pricing": "View plans & pricing", + "index.usage_lifetime": "Lifetime files", + "index.usage_month": "Files this month", + "index.usage_my_usage": "My usage", + "index.usage_today": "Files today", + "index.usage_unlimited": "Unlimited", + "integrations.configure": "Configure", + "integrations.connect": "Connect", + "integrations.connected": "Connected", + "integrations.disconnect": "Disconnect", + "integrations.empty_state": "No integrations configured", + "integrations.folder_label": "Folder", + "integrations.host_label": "Host", + "integrations.imap_settings": "IMAP Settings", + "integrations.not_connected": "Not Connected", + "integrations.page_title": "Integrations", + "integrations.password_label": "Password", + "integrations.port_label": "Port", + "integrations.title": "Integrations", + "integrations.username_label": "Username", + "language.bg": "Български", + "language.ca": "Català", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", + "language.cs": "Čeština", + "language.da": "Dansk", + "language.de": "Deutsch", + "language.el": "Ελληνικά", + "language.en": "English", + "language.es": "Español", + "language.et": "Eesti", + "language.fi": "Suomi", + "language.fr": "Français", + "language.ga": "Gaeilge", + "language.hr": "Hrvatski", + "language.hu": "Magyar", + "language.is": "Íslenska", + "language.it": "Italiano", + "language.lb": "Lëtzebuergesch", + "language.lt": "Lietuvių", + "language.lv": "Latviešu", + "language.nb": "Norsk", + "language.nl": "Nederlands", + "language.pl": "Polski", + "language.pt": "Português", + "language.ro": "Română", + "language.ru": "Русский", + "language.selector": "Language", + "language.selector_label": "Select language", + "language.sk": "Slovenčina", + "language.sl": "Slovenščina", + "language.sv": "Svenska", + "language.tr": "Türkçe", + "language.uk": "Українська", + "language.zh": "中文", + "nav.about": "About", + "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", + "nav.admin_actions": "Admin actions", + "nav.admin_menu": "Admin menu", + "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", + "nav.backup_restore": "Backup & Restore", + "nav.credentials": "Credentials", + "nav.dark_mode": "Dark Mode", + "nav.dashboard": "Dashboard", + "nav.developer_docs": "Developer Docs", + "nav.duplicates": "Duplicates", + "nav.file_manager": "File Manager", + "nav.files": "Files", + "nav.help": "Help", + "nav.help_center": "Help Center", + "nav.imap": "Email Import", + "nav.integrations": "Integrations", + "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", + "nav.main_navigation": "Main navigation", + "nav.notifications": "Notifications", + "nav.open_main_menu": "Open main menu", + "nav.pipelines": "Pipelines", + "nav.plan_designer": "Plan Designer", + "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", + "nav.queue_monitor": "Queue Monitor", + "nav.scheduled_jobs": "Scheduled Jobs", + "nav.search": "Search", + "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", + "nav.similarity": "Similarity", + "nav.skip_to_content": "Skip to main content", + "nav.status": "Status", + "nav.subscription": "Subscription", + "nav.toggle_dark_mode": "Toggle dark mode", + "nav.toggle_nav": "Toggle navigation menu", + "nav.upload": "Upload", + "nav.users": "Users", + "nav.version": "Version Info", + "notifications.filter_all": "All", + "notifications.filter_read": "Read only", + "notifications.filter_unread": "Unread only", + "notifications.manage_desc": "Manage your notification inbox, targets, and event preferences", + "notifications.mark_all_read": "Mark All as Read", + "notifications.mark_all_read_btn": "Mark all read", + "notifications.mark_read": "Mark as Read", + "notifications.no_notifications": "No notifications", + "notifications.page_title": "Notifications", + "notifications.tab_inbox": "Inbox", + "notifications.tab_settings": "Settings", + "notifications.title": "Notifications", + "notifications.unread_count": "{count} unread notifications", + "pipelines.active_label": "Active", + "pipelines.add_step_btn": "Add Step", + "pipelines.create": "Create Pipeline", + "pipelines.custom_label_label": "Custom Label", + "pipelines.default_label": "Default", + "pipelines.description_label": "Description", + "pipelines.description_placeholder": "Optional description", + "pipelines.disabled_label": "Disabled", + "pipelines.edit": "Edit Pipeline", + "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.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)", + "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.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_pipeline_label": "System pipeline (visible to all users)", + "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.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_date_from": "Date From", + "search.filter_date_to": "Date To", + "search.filter_document_type": "Document Type", + "search.filter_document_type_placeholder": "e.g. Invoice", + "search.filter_language": "Language", + "search.filter_language_placeholder": "e.g. de", + "search.filter_sender": "Sender", + "search.filter_sender_placeholder": "e.g. ACME Corp", + "search.filter_tags": "Tags", + "search.filter_tags_placeholder": "e.g. amazon", + "search.filter_text_quality": "Text Quality", + "search.filter_text_quality_all": "All", + "search.filter_text_quality_high": "High", + "search.filter_text_quality_low": "Low", + "search.filter_text_quality_medium": "Medium", + "search.filter_text_quality_no_text": "No text", + "search.heading": "Document Search", + "search.input_aria_label": "Search documents", + "search.input_placeholder": "Search documents by content, sender, tags, type...", + "search.loading_indicator": "Searching…", + "search.no_results": "No results found", + "search.page_title": "Search Documents", + "search.placeholder": "Search by filename, content, tags...", + "search.result_empty": "No documents found matching your query.", + "search.results_count": "{count} results found", + "search.saved_aria_save": "Save current search", + "search.saved_button": "Save Current", + "search.saved_empty": "No saved searches yet", + "search.saved_error": "Could not load saved searches", + "search.saved_label": "Saved Searches", + "search.saved_loading": "Loading...", + "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.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_setting_title": "Save this setting", + "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.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.build_date": "Build Date", + "status.container_id": "Container ID", + "status.git_commit": "Git Commit", + "status.last_check": "Last Check", + "status.page_title": "System Status", + "status.setting_label": "Setting", + "status.value_label": "Value", + "upload.browse_button": "Browse Files", + "upload.button_processing": "Processing...", + "upload.camera_button": "Take Photo / Scan Document", + "upload.download_button": "Download and Process", + "upload.downloading": "Downloading file from URL...", + "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_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_invalid_url": "Invalid URL format", + "upload.error_url_required": "Please enter a URL", + "upload.file_size_hint": "Maximum size: 500 MB per file", + "upload.file_types": "Allowed types: PDF, Office documents (Word, Excel, PowerPoint, etc.), Images", + "upload.filename_description": "Leave empty to use filename from URL", + "upload.filename_label": "Filename (optional)", + "upload.filename_placeholder": "my-document.pdf", + "upload.max_size": "Maximum file size: {size}", + "upload.page_title": "Upload Files", + "upload.section_device": "Upload from Device", + "upload.section_url": "Upload from URL", + "upload.select_file": "Select File", + "upload.success": "File uploaded successfully", + "upload.title": "Upload Document", + "upload.uploading": "Uploading...", + "upload.url_description": "Enter a direct link to a file (PDF, Office documents, or images)", + "upload.url_label": "File URL", + "upload.url_placeholder": "https://example.com/document.pdf" +} diff --git a/frontend/translations/nl.json b/frontend/translations/nl.json index fc2b9d16..2ac89e9b 100644 --- a/frontend/translations/nl.json +++ b/frontend/translations/nl.json @@ -195,6 +195,7 @@ "common.confirm": "Bevestigen", "common.copied": "Gekopieerd!", "common.copy": "Kopiëren", + "common.create": "Create", "common.created": "Aangemaakt", "common.date": "Datum", "common.delete": "Verwijderen", @@ -202,6 +203,7 @@ "common.details": "Details", "common.disabled": "Uitgeschakeld", "common.download": "Downloaden", + "common.duplicate": "Duplicate", "common.edit": "Bewerken", "common.enabled": "Ingeschakeld", "common.error": "Fout", @@ -218,6 +220,7 @@ "common.page": "Page", "common.pending": "In afwachting", "common.prev_page": "Previous page", + "common.previous": "Previous", "common.processing": "Verwerken", "common.refresh": "Vernieuwen", "common.reset": "Herstellen", @@ -228,7 +231,9 @@ "common.select_placeholder": "— select —", "common.size": "Grootte", "common.status": "Status", + "common.submit": "Submit", "common.success": "Succes", + "common.tags": "Tags", "common.type": "Type", "common.updated": "Bijgewerkt", "common.upload": "Uploaden", @@ -236,6 +241,8 @@ "common.warning": "Waarschuwing", "common.yes": "Ja", "cookie.accept": "Begrepen", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", "cookie.notice": "DocuElevate gebruikt alleen essentiële sessiecookies die nodig zijn voor authenticatie en werking van de service. Er worden geen tracking- of analysecookies gebruikt.", "cookie.notice_label": "Cookiemelding", "cookie.policy_link": "Cookiebeleid", @@ -398,6 +405,8 @@ "files.upload_modal_close": "Close upload progress", "files.upload_modal_header": "Uploading Files", "files.uploaded": "Geüpload", + "footer.about": "About", + "footer.attribution": "Attribution", "footer.attributions": "Attributies", "footer.cookies": "Cookies", "footer.copyright": "DocuElevate {year}", @@ -577,6 +586,7 @@ "integrations.username_label": "Username", "language.bg": "Български", "language.ca": "Català", + "language.change_success": "Language changed to {language}", "language.changed": "Taal gewijzigd naar {language}", "language.cs": "Čeština", "language.da": "Dansk", @@ -602,6 +612,7 @@ "language.ro": "Română", "language.ru": "Русский", "language.selector": "Taal", + "language.selector_label": "Select language", "language.sk": "Slovenčina", "language.sl": "Slovenščina", "language.sv": "Svenska", @@ -610,9 +621,15 @@ "language.zh": "中文", "nav.about": "Over ons", "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", "nav.admin_actions": "Admin-acties", "nav.admin_menu": "Admin-menu", "nav.api_docs": "API-documentatie", + "nav.api_tokens": "API Tokens", "nav.backup_restore": "Back-up en herstel", "nav.credentials": "Referenties", "nav.dark_mode": "Donkere modus", @@ -623,25 +640,34 @@ "nav.files": "Bestanden", "nav.help": "Help", "nav.help_center": "Helpcentrum", + "nav.imap": "Email Import", "nav.integrations": "Integraties", "nav.light_mode": "Lichte modus", + "nav.login": "Log In", + "nav.logout": "Log Out", "nav.main_navigation": "Hoofdnavigatie", "nav.notifications": "Meldingen", "nav.open_main_menu": "Hoofdmenu openen", "nav.pipelines": "Pipelines", "nav.plan_designer": "Planontwerper", "nav.pricing": "Prijzen", + "nav.profile": "Profile", + "nav.queue": "Queue", "nav.queue_monitor": "Wachtrijmonitor", "nav.scheduled_jobs": "Geplande taken", "nav.search": "Zoeken", "nav.settings": "Instellingen", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", "nav.similarity": "Gelijkenis", "nav.skip_to_content": "Ga naar hoofdinhoud", "nav.status": "Status", + "nav.subscription": "Subscription", "nav.toggle_dark_mode": "Donkere modus schakelen", "nav.toggle_nav": "Navigatiemenu schakelen", "nav.upload": "Uploaden", "nav.users": "Gebruikers", + "nav.version": "Version Info", "notifications.filter_all": "All", "notifications.filter_read": "Read only", "notifications.filter_unread": "Unread only", diff --git a/frontend/translations/no.json b/frontend/translations/no.json new file mode 100644 index 00000000..d36160ed --- /dev/null +++ b/frontend/translations/no.json @@ -0,0 +1,929 @@ +{ + "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", + "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.create_account": "Create account", + "auth.display_name_label": "Display Name", + "auth.email_label": "Email", + "auth.forgot_password": "Forgot Password?", + "auth.forgot_username": "Forgot username?", + "auth.login": "Log In", + "auth.login_title": "Log In", + "auth.logo_alt": "DocuElevate Logo", + "auth.logout": "Log Out", + "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.profile": "Profile", + "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_title": "Sign Up", + "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.active": "Active", + "common.all": "All", + "common.back": "Back", + "common.cancel": "Cancel", + "common.close": "Close", + "common.col_pending": "Pending", + "common.completed": "Completed", + "common.confirm": "Confirm", + "common.copied": "Copied!", + "common.copy": "Copy", + "common.create": "Create", + "common.created": "Created", + "common.date": "Date", + "common.delete": "Delete", + "common.description": "Description", + "common.details": "Details", + "common.disabled": "Disabled", + "common.download": "Download", + "common.duplicate": "Duplicate", + "common.edit": "Edit", + "common.enabled": "Enabled", + "common.error": "Error", + "common.failed": "Failed", + "common.filter": "Filter", + "common.inactive": "Inactive", + "common.info": "Info", + "common.loading": "Loading...", + "common.name": "Name", + "common.next": "Next", + "common.next_page": "Next page", + "common.no": "No", + "common.none": "None", + "common.page": "Page", + "common.pending": "Pending", + "common.prev_page": "Previous page", + "common.previous": "Previous", + "common.processing": "Processing", + "common.refresh": "Refresh", + "common.reset": "Reset", + "common.retry": "Retry", + "common.save": "Save", + "common.search": "Search", + "common.select": "Select", + "common.select_placeholder": "— select —", + "common.size": "Size", + "common.status": "Status", + "common.submit": "Submit", + "common.success": "Success", + "common.tags": "Tags", + "common.type": "Type", + "common.updated": "Updated", + "common.upload": "Upload", + "common.view": "View", + "common.warning": "Warning", + "common.yes": "Yes", + "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", + "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", + "cookie.notice_label": "Cookie notice", + "cookie.policy_link": "Cookie Policy", + "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.files_this_month": "Files This Month", + "dashboard.files_today": "Files Today", + "dashboard.ocr_processed": "OCR Processed", + "dashboard.quick_actions": "Quick Actions", + "dashboard.recent_activity": "Recent Activity", + "dashboard.storage_targets": "Storage Targets", + "dashboard.title": "Dashboard", + "dashboard.total_files": "Total Files", + "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_heading": "Oops, we couldn’t find that page!", + "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_title": "404 - Not Found", + "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_heading": "Oops! Something Went Wrong.", + "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_message": "You do not have permission to access this page.", + "error.not_found": "Page not found", + "error.not_found_message": "The page you are looking for does not exist.", + "error.server_error": "Internal Server Error", + "error.server_error_message": "Something went wrong. Please try again later.", + "error.unauthorized": "Unauthorized", + "error.unauthorized_message": "You need to log in to access this page.", + "files.action_delete": "Delete file", + "files.action_details": "View details", + "files.action_preview": "Quick preview", + "files.bulk_clear_selection": "Clear Selection", + "files.bulk_cloud_ocr": "Re-run Cloud OCR", + "files.bulk_delete": "Delete Selected", + "files.bulk_download": "Download as ZIP", + "files.bulk_reprocess": "Reprocess Selected", + "files.delete_modal_cancel": "Cancel", + "files.delete_modal_confirm": "Delete", + "files.delete_modal_message": "Are you sure you want to delete this file?", + "files.delete_modal_title": "Confirm Deletion", + "files.document_title": "Document Title", + "files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more – folders are processed recursively", + "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.filename": "Filename", + "files.files_selected": "files selected", + "files.filter_all_providers": "All Providers", + "files.filter_all_statuses": "All Statuses", + "files.filter_all_types": "All Types", + "files.filter_apply": "Apply Filters", + "files.filter_clear": "Clear", + "files.filter_date_from": "Date From", + "files.filter_date_from_aria": "Filter from date", + "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_ocr_all": "All Files", + "files.filter_ocr_good": "Good quality", + "files.filter_ocr_poor": "Poor 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_search_label": "Search Filename", + "files.filter_search_placeholder": "Enter filename...", + "files.filter_storage_provider": "Storage Provider", + "files.filter_tags_aria": "Filter by tags (comma-separated)", + "files.filter_tags_placeholder": "e.g. invoice,amazon", + "files.fulltext_search_label": "Full-Text Search (OCR text, metadata, tags)", + "files.fulltext_search_placeholder": "Search document content, sender, tags, type...", + "files.no_files": "No files found", + "files.ocr_status": "OCR Status", + "files.page_title": "File Records", + "files.pagination_files": "files", + "files.pagination_first": "First", + "files.pagination_last": "Last", + "files.pagination_nav_aria": "File list pagination", + "files.pagination_next": "Next", + "files.pagination_of": "of", + "files.pagination_previous": "Previous", + "files.pagination_showing": "Showing", + "files.preview_modal_close": "Close 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.saved_searches_empty": "No saved searches yet", + "files.saved_searches_error": "Could not load saved searches", + "files.saved_searches_label": "Saved Searches", + "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_title": "Search Results", + "files.status_duplicate": "Duplicate", + "files.table_actions": "Actions", + "files.table_aria": "File records", + "files.table_created_at": "Created At", + "files.table_empty": "No files found", + "files.table_id": "ID", + "files.table_mime_type": "MIME Type", + "files.table_original_filename": "Original Filename", + "files.table_select_all": "Select all files on this page", + "files.tags": "Tags", + "files.title": "Files", + "files.upload_modal_aria": "Upload progress", + "files.upload_modal_close": "Close upload progress", + "files.upload_modal_header": "Uploading Files", + "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", + "footer.attributions": "Attributions", + "footer.cookies": "Cookies", + "footer.copyright": "DocuElevate {year}", + "footer.imprint": "Imprint", + "footer.license": "License", + "footer.navigation": "Footer navigation", + "footer.privacy": "Privacy", + "footer.terms": "Terms", + "footer.version": "Version {version}", + "help.destinations_dropbox": "Dropbox", + "help.destinations_dropbox_desc": "OAuth-linked. Files land in your chosen folder.", + "help.destinations_email": "Email Forwarding", + "help.destinations_email_desc": "Processed files sent as SMTP attachments.", + "help.destinations_google_drive": "Google Drive", + "help.destinations_google_drive_desc": "Service account or OAuth. Supports shared drives.", + "help.destinations_heading": "Destinations – Where Documents Go", + "help.destinations_nextcloud": "Nextcloud / WebDAV", + "help.destinations_nextcloud_desc": "Self-hosted cloud storage via WebDAV.", + "help.destinations_onedrive": "OneDrive", + "help.destinations_onedrive_desc": "Microsoft Graph API integration.", + "help.destinations_paperless": "Paperless-ngx", + "help.destinations_paperless_desc": "Push documents straight into Paperless for archival.", + "help.destinations_s3": "Amazon S3", + "help.destinations_s3_desc": "Any S3-compatible bucket (AWS, MinIO, Wasabi).", + "help.destinations_sftp": "SFTP / FTP", + "help.destinations_sftp_desc": "Secure file transfer to any server.", + "help.destinations_webhook": "Webhook", + "help.destinations_webhook_desc": "POST metadata to any external endpoint.", + "help.documentation": "Documentation", + "help.faq": "Frequently Asked Questions", + "help.faq_1_a": "Navigate to the Upload page, drag-and-drop your files or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.faq_1_q": "How do I upload documents?", + "help.faq_2_a": "PDF, JPEG, PNG, TIFF, BMP, GIF, DOCX, XLSX, PPTX, ODT, ODS, TXT, RTF, and HTML. Non-PDF files are automatically converted to PDF before processing.", + "help.faq_2_q": "Which file formats are supported?", + "help.faq_3_a": "Yes. Go to Email Ingestion, add an IMAP account, and DocuElevate will poll for new messages and process attachments automatically.", + "help.faq_3_q": "Can I ingest documents from email?", + "help.faq_4_a": "Pipelines let you chain processing steps – OCR, AI extraction, format conversion – and route the result to one or more destinations. Create and manage them from the Pipelines page.", + "help.faq_4_q": "How do processing pipelines work?", + "help.faq_5_a": "DocuElevate encrypts credentials at rest, communicates over TLS, and never stores your documents longer than necessary. See the Privacy Notice for full details.", + "help.faq_5_q": "Is my data secure?", + "help.faq_heading": "Frequently Asked Questions", + "help.getting_started": "Getting Started", + "help.heading": "Help Center", + "help.page_title": "Help Center", + "help.privacy_notice": "Privacy Notice", + "help.quickstart_heading": "Quick Start", + "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_upload": "Upload Documents", + "help.quickstart_upload_desc": "Drag & drop files onto the Upload page or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.quickstart_workflows": "Automate Workflows", + "help.quickstart_workflows_desc": "Create Pipelines to define multi-step processing and routing rules. Combine OCR, AI extraction, format conversion, and delivery in a single flow.", + "help.sources_email_ingestion": "Email Ingestion (IMAP)", + "help.sources_email_ingestion_desc": "Forward documents to a dedicated mailbox. Under Email Ingestion, add one or more IMAP accounts. DocuElevate polls for new messages and processes attachments automatically.", + "help.sources_heading": "Sources – Getting Documents In", + "help.sources_rest_api": "REST API", + "help.sources_rest_api_desc": "Integrate programmatically by POST-ing files to /api/upload. Ideal for scripts, watched folders, scanners, or third-party tools like Zapier and n8n.", + "help.sources_scanner": "Scanner & Mobile", + "help.sources_scanner_desc": "Point network scanners at DocuElevate's upload endpoint or use any mobile scanning app that supports custom HTTP destinations.", + "help.sources_web_upload": "Web Upload", + "help.sources_web_upload_desc": "The fastest way to get started. Open the Upload page, drop one or more files, and DocuElevate takes care of the rest. Supported formats include PDF, JPEG, PNG, TIFF, DOCX, XLSX, and more.", + "help.subheading": "Everything you need to get the most out of DocuElevate. Browse topics below or search for what you need.", + "help.support": "Support", + "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_heading": "Contact Support", + "help.support_ticket_button": "Submit a Ticket", + "help.support_ticket_heading": "Open a Support Ticket", + "help.title": "Help Center", + "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_heading": "Workflows & Pipelines", + "help.workflows_step_1": "Convert to PDF", + "help.workflows_step_1_create": "Go to Pipelines in the main menu.", + "help.workflows_step_2": "OCR – extract text", + "help.workflows_step_2_create": "Click New Pipeline and give it a name.", + "help.workflows_step_3": "AI metadata extraction", + "help.workflows_step_3_create": "Add the processing steps you need.", + "help.workflows_step_4": "Deliver to one or more destinations", + "help.workflows_step_4_create": "Choose one or more delivery destinations.", + "help.workflows_step_5_create": "Save – new documents will be processed through this pipeline automatically.", + "help.workflows_typical_steps": "Typical Steps", + "help.workflows_what_is": "What is a Pipeline?", + "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_ingestion": "Email & URL-based document ingestion", + "index.capabilities_ocr": "OCR & metadata extraction with AI", + "index.capabilities_paperless": "Paperless-ngx integration for document management", + "index.capabilities_title": "Capabilities", + "index.capabilities_workflows": "Automated classification & routing workflows", + "index.cta_description": "Join teams already automating their document processing with DocuElevate.", + "index.cta_heading": "Ready to elevate your document workflow?", + "index.cta_pricing": "See pricing", + "index.cta_signup": "Create a free account", + "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_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_desc": "Route processed files to Dropbox, Google Drive, OneDrive, Amazon S3, Nextcloud, Paperless NGX, WebDAV, FTP/SFTP, and more.", + "index.feature_email": "Email & IMAP Ingestion", + "index.feature_email_desc": "Automatically pull documents from Gmail or any IMAP mailbox — no manual uploads needed.", + "index.feature_ocr": "OCR & Text Extraction", + "index.feature_ocr_desc": "Azure Document Intelligence converts scanned PDFs and images into fully searchable text automatically.", + "index.feature_pipelines": "Custom Pipelines", + "index.feature_pipelines_desc": "Build processing pipelines with configurable steps — OCR, AI extraction, format conversion, and storage routing in any order.", + "index.feature_search": "Full-Text Search", + "index.feature_search_desc": "Instantly find any document by content, metadata, or tags across your entire archive.", + "index.feature_section_title": "Everything you need for smart document workflows", + "index.getting_started": "Getting Started", + "index.getting_started_1": "Configure integrations via System Status", + "index.getting_started_2": "Upload your first document", + "index.getting_started_3": "Review results in Files", + "index.getting_started_learn": "Learn more about DocuElevate", + "index.hero_description": "DocuElevate ingests your documents, runs OCR, extracts metadata with AI, and routes files to Dropbox, Google Drive, OneDrive, S3, Nextcloud, and more — all in one seamless pipeline.", + "index.hero_heading": "From upload to insight — automatically.", + "index.hero_login": "Log In", + "index.hero_pricing": "View Plans & Pricing", + "index.hero_signup": "Get Started — it’s free", + "index.integrations_active": "Active integrations", + "index.integrations_storage": "Storage targets", + "index.integrations_title": "Integrations", + "index.integrations_view_status": "View system status", + "index.page_title_dashboard": "Dashboard", + "index.page_title_public": "Intelligent Document Processing", + "index.platform_overview": "Platform overview", + "index.quick_actions": "Quick Actions", + "index.quick_documents": "My Documents", + "index.quick_documents_desc": "Browse your processed files", + "index.quick_search": "Search", + "index.quick_search_desc": "Full-text search across documents", + "index.quick_subscription": "My Subscription", + "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_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_subtitle": "Intelligent document processing & management", + "index.stat_active_integrations": "Active Integrations", + "index.stat_active_users": "Active users", + "index.stat_files_month": "Files this month", + "index.stat_files_today": "Files today", + "index.stat_storage_targets": "Storage Targets", + "index.stat_total_files": "Total files", + "index.tier_plan": "Plan", + "index.tier_upgrade": "Upgrade", + "index.tier_view_details": "View full details", + "index.upgrade_daily_limits": "Higher daily & monthly limits", + "index.upgrade_description": "Unlock more documents, more destinations and priority support.", + "index.upgrade_destinations": "More storage destinations", + "index.upgrade_ocr_pages": "More OCR pages", + "index.upgrade_plan": "Upgrade your plan", + "index.upgrade_view_pricing": "View plans & pricing", + "index.usage_lifetime": "Lifetime files", + "index.usage_month": "Files this month", + "index.usage_my_usage": "My usage", + "index.usage_today": "Files today", + "index.usage_unlimited": "Unlimited", + "integrations.configure": "Configure", + "integrations.connect": "Connect", + "integrations.connected": "Connected", + "integrations.disconnect": "Disconnect", + "integrations.empty_state": "No integrations configured", + "integrations.folder_label": "Folder", + "integrations.host_label": "Host", + "integrations.imap_settings": "IMAP Settings", + "integrations.not_connected": "Not Connected", + "integrations.page_title": "Integrations", + "integrations.password_label": "Password", + "integrations.port_label": "Port", + "integrations.title": "Integrations", + "integrations.username_label": "Username", + "language.bg": "Български", + "language.ca": "Català", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", + "language.cs": "Čeština", + "language.da": "Dansk", + "language.de": "Deutsch", + "language.el": "Ελληνικά", + "language.en": "English", + "language.es": "Español", + "language.et": "Eesti", + "language.fi": "Suomi", + "language.fr": "Français", + "language.ga": "Gaeilge", + "language.hr": "Hrvatski", + "language.hu": "Magyar", + "language.is": "Íslenska", + "language.it": "Italiano", + "language.lb": "Lëtzebuergesch", + "language.lt": "Lietuvių", + "language.lv": "Latviešu", + "language.nb": "Norsk", + "language.nl": "Nederlands", + "language.pl": "Polski", + "language.pt": "Português", + "language.ro": "Română", + "language.ru": "Русский", + "language.selector": "Language", + "language.selector_label": "Select language", + "language.sk": "Slovenčina", + "language.sl": "Slovenščina", + "language.sv": "Svenska", + "language.tr": "Türkçe", + "language.uk": "Українська", + "language.zh": "中文", + "nav.about": "About", + "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", + "nav.admin_actions": "Admin actions", + "nav.admin_menu": "Admin menu", + "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", + "nav.backup_restore": "Backup & Restore", + "nav.credentials": "Credentials", + "nav.dark_mode": "Dark Mode", + "nav.dashboard": "Dashboard", + "nav.developer_docs": "Developer Docs", + "nav.duplicates": "Duplicates", + "nav.file_manager": "File Manager", + "nav.files": "Files", + "nav.help": "Help", + "nav.help_center": "Help Center", + "nav.imap": "Email Import", + "nav.integrations": "Integrations", + "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", + "nav.main_navigation": "Main navigation", + "nav.notifications": "Notifications", + "nav.open_main_menu": "Open main menu", + "nav.pipelines": "Pipelines", + "nav.plan_designer": "Plan Designer", + "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", + "nav.queue_monitor": "Queue Monitor", + "nav.scheduled_jobs": "Scheduled Jobs", + "nav.search": "Search", + "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", + "nav.similarity": "Similarity", + "nav.skip_to_content": "Skip to main content", + "nav.status": "Status", + "nav.subscription": "Subscription", + "nav.toggle_dark_mode": "Toggle dark mode", + "nav.toggle_nav": "Toggle navigation menu", + "nav.upload": "Upload", + "nav.users": "Users", + "nav.version": "Version Info", + "notifications.filter_all": "All", + "notifications.filter_read": "Read only", + "notifications.filter_unread": "Unread only", + "notifications.manage_desc": "Manage your notification inbox, targets, and event preferences", + "notifications.mark_all_read": "Mark All as Read", + "notifications.mark_all_read_btn": "Mark all read", + "notifications.mark_read": "Mark as Read", + "notifications.no_notifications": "No notifications", + "notifications.page_title": "Notifications", + "notifications.tab_inbox": "Inbox", + "notifications.tab_settings": "Settings", + "notifications.title": "Notifications", + "notifications.unread_count": "{count} unread notifications", + "pipelines.active_label": "Active", + "pipelines.add_step_btn": "Add Step", + "pipelines.create": "Create Pipeline", + "pipelines.custom_label_label": "Custom Label", + "pipelines.default_label": "Default", + "pipelines.description_label": "Description", + "pipelines.description_placeholder": "Optional description", + "pipelines.disabled_label": "Disabled", + "pipelines.edit": "Edit Pipeline", + "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.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)", + "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.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_pipeline_label": "System pipeline (visible to all users)", + "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.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_date_from": "Date From", + "search.filter_date_to": "Date To", + "search.filter_document_type": "Document Type", + "search.filter_document_type_placeholder": "e.g. Invoice", + "search.filter_language": "Language", + "search.filter_language_placeholder": "e.g. de", + "search.filter_sender": "Sender", + "search.filter_sender_placeholder": "e.g. ACME Corp", + "search.filter_tags": "Tags", + "search.filter_tags_placeholder": "e.g. amazon", + "search.filter_text_quality": "Text Quality", + "search.filter_text_quality_all": "All", + "search.filter_text_quality_high": "High", + "search.filter_text_quality_low": "Low", + "search.filter_text_quality_medium": "Medium", + "search.filter_text_quality_no_text": "No text", + "search.heading": "Document Search", + "search.input_aria_label": "Search documents", + "search.input_placeholder": "Search documents by content, sender, tags, type...", + "search.loading_indicator": "Searching…", + "search.no_results": "No results found", + "search.page_title": "Search Documents", + "search.placeholder": "Search by filename, content, tags...", + "search.result_empty": "No documents found matching your query.", + "search.results_count": "{count} results found", + "search.saved_aria_save": "Save current search", + "search.saved_button": "Save Current", + "search.saved_empty": "No saved searches yet", + "search.saved_error": "Could not load saved searches", + "search.saved_label": "Saved Searches", + "search.saved_loading": "Loading...", + "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.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_setting_title": "Save this setting", + "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.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.build_date": "Build Date", + "status.container_id": "Container ID", + "status.git_commit": "Git Commit", + "status.last_check": "Last Check", + "status.page_title": "System Status", + "status.setting_label": "Setting", + "status.value_label": "Value", + "upload.browse_button": "Browse Files", + "upload.button_processing": "Processing...", + "upload.camera_button": "Take Photo / Scan Document", + "upload.download_button": "Download and Process", + "upload.downloading": "Downloading file from URL...", + "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_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_invalid_url": "Invalid URL format", + "upload.error_url_required": "Please enter a URL", + "upload.file_size_hint": "Maximum size: 500 MB per file", + "upload.file_types": "Allowed types: PDF, Office documents (Word, Excel, PowerPoint, etc.), Images", + "upload.filename_description": "Leave empty to use filename from URL", + "upload.filename_label": "Filename (optional)", + "upload.filename_placeholder": "my-document.pdf", + "upload.max_size": "Maximum file size: {size}", + "upload.page_title": "Upload Files", + "upload.section_device": "Upload from Device", + "upload.section_url": "Upload from URL", + "upload.select_file": "Select File", + "upload.success": "File uploaded successfully", + "upload.title": "Upload Document", + "upload.uploading": "Uploading...", + "upload.url_description": "Enter a direct link to a file (PDF, Office documents, or images)", + "upload.url_label": "File URL", + "upload.url_placeholder": "https://example.com/document.pdf" +} diff --git a/frontend/translations/pa.json b/frontend/translations/pa.json new file mode 100644 index 00000000..d36160ed --- /dev/null +++ b/frontend/translations/pa.json @@ -0,0 +1,929 @@ +{ + "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", + "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.create_account": "Create account", + "auth.display_name_label": "Display Name", + "auth.email_label": "Email", + "auth.forgot_password": "Forgot Password?", + "auth.forgot_username": "Forgot username?", + "auth.login": "Log In", + "auth.login_title": "Log In", + "auth.logo_alt": "DocuElevate Logo", + "auth.logout": "Log Out", + "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.profile": "Profile", + "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_title": "Sign Up", + "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.active": "Active", + "common.all": "All", + "common.back": "Back", + "common.cancel": "Cancel", + "common.close": "Close", + "common.col_pending": "Pending", + "common.completed": "Completed", + "common.confirm": "Confirm", + "common.copied": "Copied!", + "common.copy": "Copy", + "common.create": "Create", + "common.created": "Created", + "common.date": "Date", + "common.delete": "Delete", + "common.description": "Description", + "common.details": "Details", + "common.disabled": "Disabled", + "common.download": "Download", + "common.duplicate": "Duplicate", + "common.edit": "Edit", + "common.enabled": "Enabled", + "common.error": "Error", + "common.failed": "Failed", + "common.filter": "Filter", + "common.inactive": "Inactive", + "common.info": "Info", + "common.loading": "Loading...", + "common.name": "Name", + "common.next": "Next", + "common.next_page": "Next page", + "common.no": "No", + "common.none": "None", + "common.page": "Page", + "common.pending": "Pending", + "common.prev_page": "Previous page", + "common.previous": "Previous", + "common.processing": "Processing", + "common.refresh": "Refresh", + "common.reset": "Reset", + "common.retry": "Retry", + "common.save": "Save", + "common.search": "Search", + "common.select": "Select", + "common.select_placeholder": "— select —", + "common.size": "Size", + "common.status": "Status", + "common.submit": "Submit", + "common.success": "Success", + "common.tags": "Tags", + "common.type": "Type", + "common.updated": "Updated", + "common.upload": "Upload", + "common.view": "View", + "common.warning": "Warning", + "common.yes": "Yes", + "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", + "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", + "cookie.notice_label": "Cookie notice", + "cookie.policy_link": "Cookie Policy", + "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.files_this_month": "Files This Month", + "dashboard.files_today": "Files Today", + "dashboard.ocr_processed": "OCR Processed", + "dashboard.quick_actions": "Quick Actions", + "dashboard.recent_activity": "Recent Activity", + "dashboard.storage_targets": "Storage Targets", + "dashboard.title": "Dashboard", + "dashboard.total_files": "Total Files", + "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_heading": "Oops, we couldn’t find that page!", + "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_title": "404 - Not Found", + "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_heading": "Oops! Something Went Wrong.", + "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_message": "You do not have permission to access this page.", + "error.not_found": "Page not found", + "error.not_found_message": "The page you are looking for does not exist.", + "error.server_error": "Internal Server Error", + "error.server_error_message": "Something went wrong. Please try again later.", + "error.unauthorized": "Unauthorized", + "error.unauthorized_message": "You need to log in to access this page.", + "files.action_delete": "Delete file", + "files.action_details": "View details", + "files.action_preview": "Quick preview", + "files.bulk_clear_selection": "Clear Selection", + "files.bulk_cloud_ocr": "Re-run Cloud OCR", + "files.bulk_delete": "Delete Selected", + "files.bulk_download": "Download as ZIP", + "files.bulk_reprocess": "Reprocess Selected", + "files.delete_modal_cancel": "Cancel", + "files.delete_modal_confirm": "Delete", + "files.delete_modal_message": "Are you sure you want to delete this file?", + "files.delete_modal_title": "Confirm Deletion", + "files.document_title": "Document Title", + "files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more – folders are processed recursively", + "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.filename": "Filename", + "files.files_selected": "files selected", + "files.filter_all_providers": "All Providers", + "files.filter_all_statuses": "All Statuses", + "files.filter_all_types": "All Types", + "files.filter_apply": "Apply Filters", + "files.filter_clear": "Clear", + "files.filter_date_from": "Date From", + "files.filter_date_from_aria": "Filter from date", + "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_ocr_all": "All Files", + "files.filter_ocr_good": "Good quality", + "files.filter_ocr_poor": "Poor 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_search_label": "Search Filename", + "files.filter_search_placeholder": "Enter filename...", + "files.filter_storage_provider": "Storage Provider", + "files.filter_tags_aria": "Filter by tags (comma-separated)", + "files.filter_tags_placeholder": "e.g. invoice,amazon", + "files.fulltext_search_label": "Full-Text Search (OCR text, metadata, tags)", + "files.fulltext_search_placeholder": "Search document content, sender, tags, type...", + "files.no_files": "No files found", + "files.ocr_status": "OCR Status", + "files.page_title": "File Records", + "files.pagination_files": "files", + "files.pagination_first": "First", + "files.pagination_last": "Last", + "files.pagination_nav_aria": "File list pagination", + "files.pagination_next": "Next", + "files.pagination_of": "of", + "files.pagination_previous": "Previous", + "files.pagination_showing": "Showing", + "files.preview_modal_close": "Close 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.saved_searches_empty": "No saved searches yet", + "files.saved_searches_error": "Could not load saved searches", + "files.saved_searches_label": "Saved Searches", + "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_title": "Search Results", + "files.status_duplicate": "Duplicate", + "files.table_actions": "Actions", + "files.table_aria": "File records", + "files.table_created_at": "Created At", + "files.table_empty": "No files found", + "files.table_id": "ID", + "files.table_mime_type": "MIME Type", + "files.table_original_filename": "Original Filename", + "files.table_select_all": "Select all files on this page", + "files.tags": "Tags", + "files.title": "Files", + "files.upload_modal_aria": "Upload progress", + "files.upload_modal_close": "Close upload progress", + "files.upload_modal_header": "Uploading Files", + "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", + "footer.attributions": "Attributions", + "footer.cookies": "Cookies", + "footer.copyright": "DocuElevate {year}", + "footer.imprint": "Imprint", + "footer.license": "License", + "footer.navigation": "Footer navigation", + "footer.privacy": "Privacy", + "footer.terms": "Terms", + "footer.version": "Version {version}", + "help.destinations_dropbox": "Dropbox", + "help.destinations_dropbox_desc": "OAuth-linked. Files land in your chosen folder.", + "help.destinations_email": "Email Forwarding", + "help.destinations_email_desc": "Processed files sent as SMTP attachments.", + "help.destinations_google_drive": "Google Drive", + "help.destinations_google_drive_desc": "Service account or OAuth. Supports shared drives.", + "help.destinations_heading": "Destinations – Where Documents Go", + "help.destinations_nextcloud": "Nextcloud / WebDAV", + "help.destinations_nextcloud_desc": "Self-hosted cloud storage via WebDAV.", + "help.destinations_onedrive": "OneDrive", + "help.destinations_onedrive_desc": "Microsoft Graph API integration.", + "help.destinations_paperless": "Paperless-ngx", + "help.destinations_paperless_desc": "Push documents straight into Paperless for archival.", + "help.destinations_s3": "Amazon S3", + "help.destinations_s3_desc": "Any S3-compatible bucket (AWS, MinIO, Wasabi).", + "help.destinations_sftp": "SFTP / FTP", + "help.destinations_sftp_desc": "Secure file transfer to any server.", + "help.destinations_webhook": "Webhook", + "help.destinations_webhook_desc": "POST metadata to any external endpoint.", + "help.documentation": "Documentation", + "help.faq": "Frequently Asked Questions", + "help.faq_1_a": "Navigate to the Upload page, drag-and-drop your files or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.faq_1_q": "How do I upload documents?", + "help.faq_2_a": "PDF, JPEG, PNG, TIFF, BMP, GIF, DOCX, XLSX, PPTX, ODT, ODS, TXT, RTF, and HTML. Non-PDF files are automatically converted to PDF before processing.", + "help.faq_2_q": "Which file formats are supported?", + "help.faq_3_a": "Yes. Go to Email Ingestion, add an IMAP account, and DocuElevate will poll for new messages and process attachments automatically.", + "help.faq_3_q": "Can I ingest documents from email?", + "help.faq_4_a": "Pipelines let you chain processing steps – OCR, AI extraction, format conversion – and route the result to one or more destinations. Create and manage them from the Pipelines page.", + "help.faq_4_q": "How do processing pipelines work?", + "help.faq_5_a": "DocuElevate encrypts credentials at rest, communicates over TLS, and never stores your documents longer than necessary. See the Privacy Notice for full details.", + "help.faq_5_q": "Is my data secure?", + "help.faq_heading": "Frequently Asked Questions", + "help.getting_started": "Getting Started", + "help.heading": "Help Center", + "help.page_title": "Help Center", + "help.privacy_notice": "Privacy Notice", + "help.quickstart_heading": "Quick Start", + "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_upload": "Upload Documents", + "help.quickstart_upload_desc": "Drag & drop files onto the Upload page or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.quickstart_workflows": "Automate Workflows", + "help.quickstart_workflows_desc": "Create Pipelines to define multi-step processing and routing rules. Combine OCR, AI extraction, format conversion, and delivery in a single flow.", + "help.sources_email_ingestion": "Email Ingestion (IMAP)", + "help.sources_email_ingestion_desc": "Forward documents to a dedicated mailbox. Under Email Ingestion, add one or more IMAP accounts. DocuElevate polls for new messages and processes attachments automatically.", + "help.sources_heading": "Sources – Getting Documents In", + "help.sources_rest_api": "REST API", + "help.sources_rest_api_desc": "Integrate programmatically by POST-ing files to /api/upload. Ideal for scripts, watched folders, scanners, or third-party tools like Zapier and n8n.", + "help.sources_scanner": "Scanner & Mobile", + "help.sources_scanner_desc": "Point network scanners at DocuElevate's upload endpoint or use any mobile scanning app that supports custom HTTP destinations.", + "help.sources_web_upload": "Web Upload", + "help.sources_web_upload_desc": "The fastest way to get started. Open the Upload page, drop one or more files, and DocuElevate takes care of the rest. Supported formats include PDF, JPEG, PNG, TIFF, DOCX, XLSX, and more.", + "help.subheading": "Everything you need to get the most out of DocuElevate. Browse topics below or search for what you need.", + "help.support": "Support", + "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_heading": "Contact Support", + "help.support_ticket_button": "Submit a Ticket", + "help.support_ticket_heading": "Open a Support Ticket", + "help.title": "Help Center", + "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_heading": "Workflows & Pipelines", + "help.workflows_step_1": "Convert to PDF", + "help.workflows_step_1_create": "Go to Pipelines in the main menu.", + "help.workflows_step_2": "OCR – extract text", + "help.workflows_step_2_create": "Click New Pipeline and give it a name.", + "help.workflows_step_3": "AI metadata extraction", + "help.workflows_step_3_create": "Add the processing steps you need.", + "help.workflows_step_4": "Deliver to one or more destinations", + "help.workflows_step_4_create": "Choose one or more delivery destinations.", + "help.workflows_step_5_create": "Save – new documents will be processed through this pipeline automatically.", + "help.workflows_typical_steps": "Typical Steps", + "help.workflows_what_is": "What is a Pipeline?", + "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_ingestion": "Email & URL-based document ingestion", + "index.capabilities_ocr": "OCR & metadata extraction with AI", + "index.capabilities_paperless": "Paperless-ngx integration for document management", + "index.capabilities_title": "Capabilities", + "index.capabilities_workflows": "Automated classification & routing workflows", + "index.cta_description": "Join teams already automating their document processing with DocuElevate.", + "index.cta_heading": "Ready to elevate your document workflow?", + "index.cta_pricing": "See pricing", + "index.cta_signup": "Create a free account", + "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_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_desc": "Route processed files to Dropbox, Google Drive, OneDrive, Amazon S3, Nextcloud, Paperless NGX, WebDAV, FTP/SFTP, and more.", + "index.feature_email": "Email & IMAP Ingestion", + "index.feature_email_desc": "Automatically pull documents from Gmail or any IMAP mailbox — no manual uploads needed.", + "index.feature_ocr": "OCR & Text Extraction", + "index.feature_ocr_desc": "Azure Document Intelligence converts scanned PDFs and images into fully searchable text automatically.", + "index.feature_pipelines": "Custom Pipelines", + "index.feature_pipelines_desc": "Build processing pipelines with configurable steps — OCR, AI extraction, format conversion, and storage routing in any order.", + "index.feature_search": "Full-Text Search", + "index.feature_search_desc": "Instantly find any document by content, metadata, or tags across your entire archive.", + "index.feature_section_title": "Everything you need for smart document workflows", + "index.getting_started": "Getting Started", + "index.getting_started_1": "Configure integrations via System Status", + "index.getting_started_2": "Upload your first document", + "index.getting_started_3": "Review results in Files", + "index.getting_started_learn": "Learn more about DocuElevate", + "index.hero_description": "DocuElevate ingests your documents, runs OCR, extracts metadata with AI, and routes files to Dropbox, Google Drive, OneDrive, S3, Nextcloud, and more — all in one seamless pipeline.", + "index.hero_heading": "From upload to insight — automatically.", + "index.hero_login": "Log In", + "index.hero_pricing": "View Plans & Pricing", + "index.hero_signup": "Get Started — it’s free", + "index.integrations_active": "Active integrations", + "index.integrations_storage": "Storage targets", + "index.integrations_title": "Integrations", + "index.integrations_view_status": "View system status", + "index.page_title_dashboard": "Dashboard", + "index.page_title_public": "Intelligent Document Processing", + "index.platform_overview": "Platform overview", + "index.quick_actions": "Quick Actions", + "index.quick_documents": "My Documents", + "index.quick_documents_desc": "Browse your processed files", + "index.quick_search": "Search", + "index.quick_search_desc": "Full-text search across documents", + "index.quick_subscription": "My Subscription", + "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_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_subtitle": "Intelligent document processing & management", + "index.stat_active_integrations": "Active Integrations", + "index.stat_active_users": "Active users", + "index.stat_files_month": "Files this month", + "index.stat_files_today": "Files today", + "index.stat_storage_targets": "Storage Targets", + "index.stat_total_files": "Total files", + "index.tier_plan": "Plan", + "index.tier_upgrade": "Upgrade", + "index.tier_view_details": "View full details", + "index.upgrade_daily_limits": "Higher daily & monthly limits", + "index.upgrade_description": "Unlock more documents, more destinations and priority support.", + "index.upgrade_destinations": "More storage destinations", + "index.upgrade_ocr_pages": "More OCR pages", + "index.upgrade_plan": "Upgrade your plan", + "index.upgrade_view_pricing": "View plans & pricing", + "index.usage_lifetime": "Lifetime files", + "index.usage_month": "Files this month", + "index.usage_my_usage": "My usage", + "index.usage_today": "Files today", + "index.usage_unlimited": "Unlimited", + "integrations.configure": "Configure", + "integrations.connect": "Connect", + "integrations.connected": "Connected", + "integrations.disconnect": "Disconnect", + "integrations.empty_state": "No integrations configured", + "integrations.folder_label": "Folder", + "integrations.host_label": "Host", + "integrations.imap_settings": "IMAP Settings", + "integrations.not_connected": "Not Connected", + "integrations.page_title": "Integrations", + "integrations.password_label": "Password", + "integrations.port_label": "Port", + "integrations.title": "Integrations", + "integrations.username_label": "Username", + "language.bg": "Български", + "language.ca": "Català", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", + "language.cs": "Čeština", + "language.da": "Dansk", + "language.de": "Deutsch", + "language.el": "Ελληνικά", + "language.en": "English", + "language.es": "Español", + "language.et": "Eesti", + "language.fi": "Suomi", + "language.fr": "Français", + "language.ga": "Gaeilge", + "language.hr": "Hrvatski", + "language.hu": "Magyar", + "language.is": "Íslenska", + "language.it": "Italiano", + "language.lb": "Lëtzebuergesch", + "language.lt": "Lietuvių", + "language.lv": "Latviešu", + "language.nb": "Norsk", + "language.nl": "Nederlands", + "language.pl": "Polski", + "language.pt": "Português", + "language.ro": "Română", + "language.ru": "Русский", + "language.selector": "Language", + "language.selector_label": "Select language", + "language.sk": "Slovenčina", + "language.sl": "Slovenščina", + "language.sv": "Svenska", + "language.tr": "Türkçe", + "language.uk": "Українська", + "language.zh": "中文", + "nav.about": "About", + "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", + "nav.admin_actions": "Admin actions", + "nav.admin_menu": "Admin menu", + "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", + "nav.backup_restore": "Backup & Restore", + "nav.credentials": "Credentials", + "nav.dark_mode": "Dark Mode", + "nav.dashboard": "Dashboard", + "nav.developer_docs": "Developer Docs", + "nav.duplicates": "Duplicates", + "nav.file_manager": "File Manager", + "nav.files": "Files", + "nav.help": "Help", + "nav.help_center": "Help Center", + "nav.imap": "Email Import", + "nav.integrations": "Integrations", + "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", + "nav.main_navigation": "Main navigation", + "nav.notifications": "Notifications", + "nav.open_main_menu": "Open main menu", + "nav.pipelines": "Pipelines", + "nav.plan_designer": "Plan Designer", + "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", + "nav.queue_monitor": "Queue Monitor", + "nav.scheduled_jobs": "Scheduled Jobs", + "nav.search": "Search", + "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", + "nav.similarity": "Similarity", + "nav.skip_to_content": "Skip to main content", + "nav.status": "Status", + "nav.subscription": "Subscription", + "nav.toggle_dark_mode": "Toggle dark mode", + "nav.toggle_nav": "Toggle navigation menu", + "nav.upload": "Upload", + "nav.users": "Users", + "nav.version": "Version Info", + "notifications.filter_all": "All", + "notifications.filter_read": "Read only", + "notifications.filter_unread": "Unread only", + "notifications.manage_desc": "Manage your notification inbox, targets, and event preferences", + "notifications.mark_all_read": "Mark All as Read", + "notifications.mark_all_read_btn": "Mark all read", + "notifications.mark_read": "Mark as Read", + "notifications.no_notifications": "No notifications", + "notifications.page_title": "Notifications", + "notifications.tab_inbox": "Inbox", + "notifications.tab_settings": "Settings", + "notifications.title": "Notifications", + "notifications.unread_count": "{count} unread notifications", + "pipelines.active_label": "Active", + "pipelines.add_step_btn": "Add Step", + "pipelines.create": "Create Pipeline", + "pipelines.custom_label_label": "Custom Label", + "pipelines.default_label": "Default", + "pipelines.description_label": "Description", + "pipelines.description_placeholder": "Optional description", + "pipelines.disabled_label": "Disabled", + "pipelines.edit": "Edit Pipeline", + "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.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)", + "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.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_pipeline_label": "System pipeline (visible to all users)", + "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.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_date_from": "Date From", + "search.filter_date_to": "Date To", + "search.filter_document_type": "Document Type", + "search.filter_document_type_placeholder": "e.g. Invoice", + "search.filter_language": "Language", + "search.filter_language_placeholder": "e.g. de", + "search.filter_sender": "Sender", + "search.filter_sender_placeholder": "e.g. ACME Corp", + "search.filter_tags": "Tags", + "search.filter_tags_placeholder": "e.g. amazon", + "search.filter_text_quality": "Text Quality", + "search.filter_text_quality_all": "All", + "search.filter_text_quality_high": "High", + "search.filter_text_quality_low": "Low", + "search.filter_text_quality_medium": "Medium", + "search.filter_text_quality_no_text": "No text", + "search.heading": "Document Search", + "search.input_aria_label": "Search documents", + "search.input_placeholder": "Search documents by content, sender, tags, type...", + "search.loading_indicator": "Searching…", + "search.no_results": "No results found", + "search.page_title": "Search Documents", + "search.placeholder": "Search by filename, content, tags...", + "search.result_empty": "No documents found matching your query.", + "search.results_count": "{count} results found", + "search.saved_aria_save": "Save current search", + "search.saved_button": "Save Current", + "search.saved_empty": "No saved searches yet", + "search.saved_error": "Could not load saved searches", + "search.saved_label": "Saved Searches", + "search.saved_loading": "Loading...", + "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.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_setting_title": "Save this setting", + "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.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.build_date": "Build Date", + "status.container_id": "Container ID", + "status.git_commit": "Git Commit", + "status.last_check": "Last Check", + "status.page_title": "System Status", + "status.setting_label": "Setting", + "status.value_label": "Value", + "upload.browse_button": "Browse Files", + "upload.button_processing": "Processing...", + "upload.camera_button": "Take Photo / Scan Document", + "upload.download_button": "Download and Process", + "upload.downloading": "Downloading file from URL...", + "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_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_invalid_url": "Invalid URL format", + "upload.error_url_required": "Please enter a URL", + "upload.file_size_hint": "Maximum size: 500 MB per file", + "upload.file_types": "Allowed types: PDF, Office documents (Word, Excel, PowerPoint, etc.), Images", + "upload.filename_description": "Leave empty to use filename from URL", + "upload.filename_label": "Filename (optional)", + "upload.filename_placeholder": "my-document.pdf", + "upload.max_size": "Maximum file size: {size}", + "upload.page_title": "Upload Files", + "upload.section_device": "Upload from Device", + "upload.section_url": "Upload from URL", + "upload.select_file": "Select File", + "upload.success": "File uploaded successfully", + "upload.title": "Upload Document", + "upload.uploading": "Uploading...", + "upload.url_description": "Enter a direct link to a file (PDF, Office documents, or images)", + "upload.url_label": "File URL", + "upload.url_placeholder": "https://example.com/document.pdf" +} diff --git a/frontend/translations/pl.json b/frontend/translations/pl.json index c13a7da8..874a3354 100644 --- a/frontend/translations/pl.json +++ b/frontend/translations/pl.json @@ -195,6 +195,7 @@ "common.confirm": "Potwierdź", "common.copied": "Skopiowano!", "common.copy": "Kopiuj", + "common.create": "Utwórz", "common.created": "Utworzono", "common.date": "Data", "common.delete": "Usuń", @@ -202,6 +203,7 @@ "common.details": "Szczegóły", "common.disabled": "Wyłączony", "common.download": "Pobierz", + "common.duplicate": "Duplikuj", "common.edit": "Edytuj", "common.enabled": "Włączony", "common.error": "Błąd", @@ -218,6 +220,7 @@ "common.page": "Page", "common.pending": "Oczekujące", "common.prev_page": "Previous page", + "common.previous": "Poprzedni", "common.processing": "Przetwarzanie", "common.refresh": "Odśwież", "common.reset": "Resetuj", @@ -228,7 +231,9 @@ "common.select_placeholder": "— select —", "common.size": "Rozmiar", "common.status": "Status", + "common.submit": "Wyślij", "common.success": "Sukces", + "common.tags": "Tagi", "common.type": "Typ", "common.updated": "Zaktualizowano", "common.upload": "Prześlij", @@ -236,6 +241,8 @@ "common.warning": "Ostrzeżenie", "common.yes": "Tak", "cookie.accept": "Rozumiem", + "cookie.learn_more": "Dowiedz się więcej", + "cookie.message": "Ta strona używa plików cookie, aby poprawić Twoje doświadczenie.", "cookie.notice": "DocuElevate używa wyłącznie niezbędnych plików cookie sesji wymaganych do uwierzytelniania i działania usługi. Nie są używane pliki cookie śledzące ani analityczne.", "cookie.notice_label": "Informacja o plikach cookie", "cookie.policy_link": "Polityka plików cookie", @@ -398,6 +405,8 @@ "files.upload_modal_close": "Close upload progress", "files.upload_modal_header": "Przesyłanie plików", "files.uploaded": "Przesłano", + "footer.about": "O nas", + "footer.attribution": "Atrybuty", "footer.attributions": "Atrybuty", "footer.cookies": "Polityka plików cookie", "footer.copyright": "DocuElevate {year}", @@ -577,6 +586,7 @@ "integrations.username_label": "Nazwa użytkownika", "language.bg": "Български", "language.ca": "Català", + "language.change_success": "Język zmieniony na {language}", "language.changed": "Język zmieniony na {language}", "language.cs": "Čeština", "language.da": "Dansk", @@ -602,6 +612,7 @@ "language.ro": "Română", "language.ru": "Rosyjski", "language.selector": "Język", + "language.selector_label": "Wybierz język", "language.sk": "Slovenčina", "language.sl": "Slovenščina", "language.sv": "Svenska", @@ -610,9 +621,15 @@ "language.zh": "Chiński", "nav.about": "O nas", "nav.admin": "Administracja", + "nav.admin.audit_logs": "Dzienniki audytu", + "nav.admin.backups": "Kopie zapasowe", + "nav.admin.plans": "Plany", + "nav.admin.scheduled_jobs": "Zaplanowane zadania", + "nav.admin.users": "Użytkownicy", "nav.admin_actions": "Akcje administratora", "nav.admin_menu": "Menu administratora", "nav.api_docs": "Dokumentacja API", + "nav.api_tokens": "Tokeny API", "nav.backup_restore": "Kopia zapasowa i przywracanie", "nav.credentials": "Poświadczenia", "nav.dark_mode": "Tryb ciemny", @@ -623,25 +640,34 @@ "nav.files": "Pliki", "nav.help": "Pomoc", "nav.help_center": "Centrum pomocy", + "nav.imap": "Import e-mail", "nav.integrations": "Integracje", "nav.light_mode": "Tryb jasny", + "nav.login": "Zaloguj się", + "nav.logout": "Wyloguj się", "nav.main_navigation": "Nawigacja główna", "nav.notifications": "Powiadomienia", "nav.open_main_menu": "Otwórz menu główne", "nav.pipelines": "Potoki", "nav.plan_designer": "Projektant planów", "nav.pricing": "Cennik", + "nav.profile": "Profil", + "nav.queue": "Kolejka", "nav.queue_monitor": "Monitor kolejki", "nav.scheduled_jobs": "Zaplanowane zadania", "nav.search": "Szukaj", "nav.settings": "Ustawienia", + "nav.shared_links": "Udostępnione linki", + "nav.signup": "Zarejestruj się", "nav.similarity": "Podobieństwo", "nav.skip_to_content": "Przejdź do treści głównej", "nav.status": "Stan systemu", + "nav.subscription": "Subskrypcja", "nav.toggle_dark_mode": "Przełącz tryb ciemny", "nav.toggle_nav": "Przełącz menu nawigacji", "nav.upload": "Prześlij", "nav.users": "Użytkownicy", + "nav.version": "Informacje o wersji", "notifications.filter_all": "Wszystkie", "notifications.filter_read": "Tylko przeczytane", "notifications.filter_unread": "Tylko nieprzeczytane", diff --git a/frontend/translations/pt.json b/frontend/translations/pt.json index 8f24c762..10bac698 100644 --- a/frontend/translations/pt.json +++ b/frontend/translations/pt.json @@ -195,6 +195,7 @@ "common.confirm": "Confirmar", "common.copied": "Copiado!", "common.copy": "Copiar", + "common.create": "Create", "common.created": "Criado", "common.date": "Data", "common.delete": "Eliminar", @@ -202,6 +203,7 @@ "common.details": "Detalhes", "common.disabled": "Desativado", "common.download": "Descarregar", + "common.duplicate": "Duplicate", "common.edit": "Editar", "common.enabled": "Ativado", "common.error": "Erro", @@ -218,6 +220,7 @@ "common.page": "Page", "common.pending": "Pendente", "common.prev_page": "Previous page", + "common.previous": "Previous", "common.processing": "A processar", "common.refresh": "Atualizar", "common.reset": "Repor", @@ -228,7 +231,9 @@ "common.select_placeholder": "— select —", "common.size": "Tamanho", "common.status": "Estado", + "common.submit": "Submit", "common.success": "Sucesso", + "common.tags": "Tags", "common.type": "Tipo", "common.updated": "Atualizado", "common.upload": "Carregar", @@ -236,6 +241,8 @@ "common.warning": "Aviso", "common.yes": "Sim", "cookie.accept": "Entendido", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", "cookie.notice": "O DocuElevate utiliza apenas cookies de sessão essenciais necessários para a autenticação e o funcionamento do serviço. Não são utilizados cookies de rastreamento ou analíticos.", "cookie.notice_label": "Aviso de cookies", "cookie.policy_link": "Política de cookies", @@ -398,6 +405,8 @@ "files.upload_modal_close": "Close upload progress", "files.upload_modal_header": "Uploading Files", "files.uploaded": "Carregado", + "footer.about": "About", + "footer.attribution": "Attribution", "footer.attributions": "Atribuições", "footer.cookies": "Cookies", "footer.copyright": "DocuElevate {year}", @@ -577,6 +586,7 @@ "integrations.username_label": "Username", "language.bg": "Български", "language.ca": "Català", + "language.change_success": "Language changed to {language}", "language.changed": "Idioma alterado para {language}", "language.cs": "Čeština", "language.da": "Dansk", @@ -602,6 +612,7 @@ "language.ro": "Română", "language.ru": "Русский", "language.selector": "Idioma", + "language.selector_label": "Select language", "language.sk": "Slovenčina", "language.sl": "Slovenščina", "language.sv": "Svenska", @@ -610,9 +621,15 @@ "language.zh": "中文", "nav.about": "Sobre", "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", "nav.admin_actions": "Ações de administração", "nav.admin_menu": "Menu de administração", "nav.api_docs": "Documentação API", + "nav.api_tokens": "API Tokens", "nav.backup_restore": "Cópia de segurança e restauro", "nav.credentials": "Credenciais", "nav.dark_mode": "Modo escuro", @@ -623,25 +640,34 @@ "nav.files": "Ficheiros", "nav.help": "Ajuda", "nav.help_center": "Centro de ajuda", + "nav.imap": "Email Import", "nav.integrations": "Integrações", "nav.light_mode": "Modo claro", + "nav.login": "Log In", + "nav.logout": "Log Out", "nav.main_navigation": "Navegação principal", "nav.notifications": "Notificações", "nav.open_main_menu": "Abrir menu principal", "nav.pipelines": "Pipelines", "nav.plan_designer": "Designer de planos", "nav.pricing": "Preços", + "nav.profile": "Profile", + "nav.queue": "Queue", "nav.queue_monitor": "Monitor de fila", "nav.scheduled_jobs": "Tarefas agendadas", "nav.search": "Pesquisar", "nav.settings": "Definições", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", "nav.similarity": "Similaridade", "nav.skip_to_content": "Ir para o conteúdo principal", "nav.status": "Estado", + "nav.subscription": "Subscription", "nav.toggle_dark_mode": "Alternar modo escuro", "nav.toggle_nav": "Alternar menu de navegação", "nav.upload": "Carregar", "nav.users": "Utilizadores", + "nav.version": "Version Info", "notifications.filter_all": "All", "notifications.filter_read": "Read only", "notifications.filter_unread": "Unread only", diff --git a/frontend/translations/ro.json b/frontend/translations/ro.json index 6dd0f04b..d36160ed 100644 --- a/frontend/translations/ro.json +++ b/frontend/translations/ro.json @@ -195,6 +195,7 @@ "common.confirm": "Confirm", "common.copied": "Copied!", "common.copy": "Copy", + "common.create": "Create", "common.created": "Created", "common.date": "Date", "common.delete": "Delete", @@ -202,6 +203,7 @@ "common.details": "Details", "common.disabled": "Disabled", "common.download": "Download", + "common.duplicate": "Duplicate", "common.edit": "Edit", "common.enabled": "Enabled", "common.error": "Error", @@ -218,6 +220,7 @@ "common.page": "Page", "common.pending": "Pending", "common.prev_page": "Previous page", + "common.previous": "Previous", "common.processing": "Processing", "common.refresh": "Refresh", "common.reset": "Reset", @@ -228,7 +231,9 @@ "common.select_placeholder": "— select —", "common.size": "Size", "common.status": "Status", + "common.submit": "Submit", "common.success": "Success", + "common.tags": "Tags", "common.type": "Type", "common.updated": "Updated", "common.upload": "Upload", @@ -236,6 +241,8 @@ "common.warning": "Warning", "common.yes": "Yes", "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", "cookie.notice_label": "Cookie notice", "cookie.policy_link": "Cookie Policy", @@ -331,7 +338,7 @@ "files.delete_modal_message": "Are you sure you want to delete this file?", "files.delete_modal_title": "Confirm Deletion", "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 – folders are processed recursively", "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", @@ -359,7 +366,7 @@ "files.filter_storage_provider": "Storage Provider", "files.filter_tags_aria": "Filter by tags (comma-separated)", "files.filter_tags_placeholder": "e.g. invoice,amazon", - "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.no_files": "No files found", "files.ocr_status": "OCR Status", @@ -398,6 +405,8 @@ "files.upload_modal_close": "Close upload progress", "files.upload_modal_header": "Uploading Files", "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", "footer.attributions": "Attributions", "footer.cookies": "Cookies", "footer.copyright": "DocuElevate {year}", @@ -577,7 +586,8 @@ "integrations.username_label": "Username", "language.bg": "Български", "language.ca": "Català", - "language.changed": "Limba a fost schimbată în {language}", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", "language.cs": "Čeština", "language.da": "Dansk", "language.de": "Deutsch", @@ -601,7 +611,8 @@ "language.pt": "Português", "language.ro": "Română", "language.ru": "Русский", - "language.selector": "Română", + "language.selector": "Language", + "language.selector_label": "Select language", "language.sk": "Slovenčina", "language.sl": "Slovenščina", "language.sv": "Svenska", @@ -610,9 +621,15 @@ "language.zh": "中文", "nav.about": "About", "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", "nav.admin_actions": "Admin actions", "nav.admin_menu": "Admin menu", "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", "nav.backup_restore": "Backup & Restore", "nav.credentials": "Credentials", "nav.dark_mode": "Dark Mode", @@ -623,25 +640,34 @@ "nav.files": "Files", "nav.help": "Help", "nav.help_center": "Help Center", + "nav.imap": "Email Import", "nav.integrations": "Integrations", "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", "nav.main_navigation": "Main navigation", "nav.notifications": "Notifications", "nav.open_main_menu": "Open main menu", "nav.pipelines": "Pipelines", "nav.plan_designer": "Plan Designer", "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", "nav.queue_monitor": "Queue Monitor", "nav.scheduled_jobs": "Scheduled Jobs", "nav.search": "Search", "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", "nav.similarity": "Similarity", "nav.skip_to_content": "Skip to main content", "nav.status": "Status", + "nav.subscription": "Subscription", "nav.toggle_dark_mode": "Toggle dark mode", "nav.toggle_nav": "Toggle navigation menu", "nav.upload": "Upload", "nav.users": "Users", + "nav.version": "Version Info", "notifications.filter_all": "All", "notifications.filter_read": "Read only", "notifications.filter_unread": "Unread only", diff --git a/frontend/translations/ru.json b/frontend/translations/ru.json index 4a3b999f..d36160ed 100644 --- a/frontend/translations/ru.json +++ b/frontend/translations/ru.json @@ -106,22 +106,22 @@ "auth.email_label": "Email", "auth.forgot_password": "Forgot Password?", "auth.forgot_username": "Forgot username?", - "auth.login": "Войти", + "auth.login": "Log In", "auth.login_title": "Log In", "auth.logo_alt": "DocuElevate Logo", - "auth.logout": "Выйти", - "auth.my_account": "Мой аккаунт", + "auth.logout": "Log Out", + "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.profile": "Профиль", + "auth.profile": "Profile", "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": "Sign Up", "auth.signup_title": "Sign Up", "auth.username_label": "Username", "auth.username_or_email": "Username or Email", @@ -184,62 +184,69 @@ "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.active": "Активно", - "common.all": "Все", - "common.back": "Назад", - "common.cancel": "Отмена", - "common.close": "Закрыть", + "common.actions": "Actions", + "common.active": "Active", + "common.all": "All", + "common.back": "Back", + "common.cancel": "Cancel", + "common.close": "Close", "common.col_pending": "Pending", - "common.completed": "Завершено", - "common.confirm": "Подтвердить", - "common.copied": "Скопировано!", - "common.copy": "Копировать", - "common.created": "Создано", - "common.date": "Дата", - "common.delete": "Удалить", - "common.description": "Описание", - "common.details": "Подробности", - "common.disabled": "Отключено", - "common.download": "Скачать", - "common.edit": "Редактировать", - "common.enabled": "Включено", - "common.error": "Ошибка", - "common.failed": "Ошибка", - "common.filter": "Фильтр", - "common.inactive": "Неактивно", - "common.info": "Информация", - "common.loading": "Загрузка...", - "common.name": "Название", - "common.next": "Далее", + "common.completed": "Completed", + "common.confirm": "Confirm", + "common.copied": "Copied!", + "common.copy": "Copy", + "common.create": "Create", + "common.created": "Created", + "common.date": "Date", + "common.delete": "Delete", + "common.description": "Description", + "common.details": "Details", + "common.disabled": "Disabled", + "common.download": "Download", + "common.duplicate": "Duplicate", + "common.edit": "Edit", + "common.enabled": "Enabled", + "common.error": "Error", + "common.failed": "Failed", + "common.filter": "Filter", + "common.inactive": "Inactive", + "common.info": "Info", + "common.loading": "Loading...", + "common.name": "Name", + "common.next": "Next", "common.next_page": "Next page", - "common.no": "Нет", - "common.none": "Нет", + "common.no": "No", + "common.none": "None", "common.page": "Page", - "common.pending": "В ожидании", + "common.pending": "Pending", "common.prev_page": "Previous page", - "common.processing": "Обработка", - "common.refresh": "Обновить", - "common.reset": "Сбросить", - "common.retry": "Повторить", - "common.save": "Сохранить", - "common.search": "Поиск", - "common.select": "Выбрать", + "common.previous": "Previous", + "common.processing": "Processing", + "common.refresh": "Refresh", + "common.reset": "Reset", + "common.retry": "Retry", + "common.save": "Save", + "common.search": "Search", + "common.select": "Select", "common.select_placeholder": "— select —", - "common.size": "Размер", - "common.status": "Статус", - "common.success": "Успешно", - "common.type": "Тип", - "common.updated": "Обновлено", - "common.upload": "Загрузить", - "common.view": "Просмотр", - "common.warning": "Предупреждение", - "common.yes": "Да", - "cookie.accept": "Понятно", - "cookie.notice": "DocuElevate использует только необходимые сессионные файлы cookie для аутентификации и работы сервиса. Файлы cookie для отслеживания и аналитики не используются.", - "cookie.notice_label": "Уведомление о файлах cookie", - "cookie.policy_link": "Политика файлов cookie", - "cookie.privacy_link": "Уведомление о конфиденциальности", + "common.size": "Size", + "common.status": "Status", + "common.submit": "Submit", + "common.success": "Success", + "common.tags": "Tags", + "common.type": "Type", + "common.updated": "Updated", + "common.upload": "Upload", + "common.view": "View", + "common.warning": "Warning", + "common.yes": "Yes", + "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", + "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", + "cookie.notice_label": "Cookie notice", + "cookie.policy_link": "Cookie Policy", + "cookie.privacy_link": "Privacy Notice", "credentials.col_action": "Action", "credentials.col_credential": "Credential", "credentials.col_source": "Source", @@ -263,16 +270,16 @@ "credentials.table_for": "Credentials for", "credentials.title": "Credential Audit", "credentials.total_credentials": "Total Credentials", - "dashboard.active_integrations": "Активные интеграции", - "dashboard.files_this_month": "Файлы за месяц", - "dashboard.files_today": "Файлы сегодня", - "dashboard.ocr_processed": "OCR обработано", - "dashboard.quick_actions": "Быстрые действия", - "dashboard.recent_activity": "Последняя активность", - "dashboard.storage_targets": "Хранилища", - "dashboard.title": "Панель управления", - "dashboard.total_files": "Всего файлов", - "dashboard.welcome": "Добро пожаловать в DocuElevate", + "dashboard.active_integrations": "Active Integrations", + "dashboard.files_this_month": "Files This Month", + "dashboard.files_today": "Files Today", + "dashboard.ocr_processed": "OCR Processed", + "dashboard.quick_actions": "Quick Actions", + "dashboard.recent_activity": "Recent Activity", + "dashboard.storage_targets": "Storage Targets", + "dashboard.title": "Dashboard", + "dashboard.total_files": "Total Files", + "dashboard.welcome": "Welcome to DocuElevate", "duplicates.file_id_label": "File ID", "duplicates.file_id_placeholder": "e.g. 42", "duplicates.find_btn": "Find", @@ -310,14 +317,14 @@ "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_message": "У вас нет прав для доступа к этой странице.", - "error.not_found": "Страница не найдена", - "error.not_found_message": "Запрашиваемая страница не существует.", - "error.server_error": "Внутренняя ошибка сервера", - "error.server_error_message": "Что-то пошло не так. Пожалуйста, попробуйте позже.", - "error.unauthorized": "Не авторизован", - "error.unauthorized_message": "Для доступа к этой странице необходимо войти в систему.", + "error.forbidden": "Forbidden", + "error.forbidden_message": "You do not have permission to access this page.", + "error.not_found": "Page not found", + "error.not_found_message": "The page you are looking for does not exist.", + "error.server_error": "Internal Server Error", + "error.server_error_message": "Something went wrong. Please try again later.", + "error.unauthorized": "Unauthorized", + "error.unauthorized_message": "You need to log in to access this page.", "files.action_delete": "Delete file", "files.action_details": "View details", "files.action_preview": "Quick preview", @@ -330,12 +337,12 @@ "files.delete_modal_confirm": "Delete", "files.delete_modal_message": "Are you sure you want to delete this file?", "files.delete_modal_title": "Confirm Deletion", - "files.document_title": "Название документа", - "files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more", + "files.document_title": "Document Title", + "files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more – folders are processed recursively", "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.filename": "Имя файла", + "files.file_size": "File Size", + "files.filename": "Filename", "files.files_selected": "files selected", "files.filter_all_providers": "All Providers", "files.filter_all_statuses": "All Statuses", @@ -359,10 +366,10 @@ "files.filter_storage_provider": "Storage Provider", "files.filter_tags_aria": "Filter by tags (comma-separated)", "files.filter_tags_placeholder": "e.g. invoice,amazon", - "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.no_files": "Файлы не найдены", - "files.ocr_status": "Статус OCR", + "files.no_files": "No files found", + "files.ocr_status": "OCR Status", "files.page_title": "File Records", "files.pagination_files": "files", "files.pagination_first": "First", @@ -392,21 +399,23 @@ "files.table_mime_type": "MIME Type", "files.table_original_filename": "Original Filename", "files.table_select_all": "Select all files on this page", - "files.tags": "Теги", - "files.title": "Файлы", + "files.tags": "Tags", + "files.title": "Files", "files.upload_modal_aria": "Upload progress", "files.upload_modal_close": "Close upload progress", "files.upload_modal_header": "Uploading Files", - "files.uploaded": "Загружено", - "footer.attributions": "Атрибуции", - "footer.cookies": "Файлы cookie", + "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", + "footer.attributions": "Attributions", + "footer.cookies": "Cookies", "footer.copyright": "DocuElevate {year}", - "footer.imprint": "Выходные данные", - "footer.license": "Лицензия", - "footer.navigation": "Навигация подвала", - "footer.privacy": "Конфиденциальность", - "footer.terms": "Условия", - "footer.version": "Версия {version}", + "footer.imprint": "Imprint", + "footer.license": "License", + "footer.navigation": "Footer navigation", + "footer.privacy": "Privacy", + "footer.terms": "Terms", + "footer.version": "Version {version}", "help.destinations_dropbox": "Dropbox", "help.destinations_dropbox_desc": "OAuth-linked. Files land in your chosen folder.", "help.destinations_email": "Email Forwarding", @@ -426,8 +435,8 @@ "help.destinations_sftp_desc": "Secure file transfer to any server.", "help.destinations_webhook": "Webhook", "help.destinations_webhook_desc": "POST metadata to any external endpoint.", - "help.documentation": "Документация", - "help.faq": "Часто задаваемые вопросы", + "help.documentation": "Documentation", + "help.faq": "Frequently Asked Questions", "help.faq_1_a": "Navigate to the Upload page, drag-and-drop your files or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", "help.faq_1_q": "How do I upload documents?", "help.faq_2_a": "PDF, JPEG, PNG, TIFF, BMP, GIF, DOCX, XLSX, PPTX, ODT, ODS, TXT, RTF, and HTML. Non-PDF files are automatically converted to PDF before processing.", @@ -439,7 +448,7 @@ "help.faq_5_a": "DocuElevate encrypts credentials at rest, communicates over TLS, and never stores your documents longer than necessary. See the Privacy Notice for full details.", "help.faq_5_q": "Is my data secure?", "help.faq_heading": "Frequently Asked Questions", - "help.getting_started": "Начало работы", + "help.getting_started": "Getting Started", "help.heading": "Help Center", "help.page_title": "Help Center", "help.privacy_notice": "Privacy Notice", @@ -460,13 +469,13 @@ "help.sources_web_upload": "Web Upload", "help.sources_web_upload_desc": "The fastest way to get started. Open the Upload page, drop one or more files, and DocuElevate takes care of the rest. Supported formats include PDF, JPEG, PNG, TIFF, DOCX, XLSX, and more.", "help.subheading": "Everything you need to get the most out of DocuElevate. Browse topics below or search for what you need.", - "help.support": "Поддержка", + "help.support": "Support", "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_heading": "Contact Support", "help.support_ticket_button": "Submit a Ticket", "help.support_ticket_heading": "Open a Support Ticket", - "help.title": "Центр помощи", + "help.title": "Help Center", "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_heading": "Workflows & Pipelines", @@ -561,23 +570,24 @@ "index.usage_my_usage": "My usage", "index.usage_today": "Files today", "index.usage_unlimited": "Unlimited", - "integrations.configure": "Настроить", - "integrations.connect": "Подключить", - "integrations.connected": "Подключено", - "integrations.disconnect": "Отключить", + "integrations.configure": "Configure", + "integrations.connect": "Connect", + "integrations.connected": "Connected", + "integrations.disconnect": "Disconnect", "integrations.empty_state": "No integrations configured", "integrations.folder_label": "Folder", "integrations.host_label": "Host", "integrations.imap_settings": "IMAP Settings", - "integrations.not_connected": "Не подключено", + "integrations.not_connected": "Not Connected", "integrations.page_title": "Integrations", "integrations.password_label": "Password", "integrations.port_label": "Port", - "integrations.title": "Интеграции", + "integrations.title": "Integrations", "integrations.username_label": "Username", "language.bg": "Български", "language.ca": "Català", - "language.changed": "Язык изменён на {language}", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", "language.cs": "Čeština", "language.da": "Dansk", "language.de": "Deutsch", @@ -601,69 +611,85 @@ "language.pt": "Português", "language.ro": "Română", "language.ru": "Русский", - "language.selector": "Язык", + "language.selector": "Language", + "language.selector_label": "Select language", "language.sk": "Slovenčina", "language.sl": "Slovenščina", "language.sv": "Svenska", "language.tr": "Türkçe", "language.uk": "Українська", "language.zh": "中文", - "nav.about": "О нас", - "nav.admin": "Админ", - "nav.admin_actions": "Действия администратора", - "nav.admin_menu": "Меню администратора", - "nav.api_docs": "Документация API", - "nav.backup_restore": "Резервное копирование и восстановление", - "nav.credentials": "Учётные данные", - "nav.dark_mode": "Тёмная тема", - "nav.dashboard": "Панель управления", - "nav.developer_docs": "Документация для разработчиков", - "nav.duplicates": "Дубликаты", - "nav.file_manager": "Менеджер файлов", - "nav.files": "Файлы", - "nav.help": "Помощь", - "nav.help_center": "Центр помощи", - "nav.integrations": "Интеграции", - "nav.light_mode": "Светлая тема", - "nav.main_navigation": "Основная навигация", - "nav.notifications": "Уведомления", - "nav.open_main_menu": "Открыть главное меню", - "nav.pipelines": "Конвейеры", - "nav.plan_designer": "Конструктор планов", - "nav.pricing": "Цены", - "nav.queue_monitor": "Монитор очереди", - "nav.scheduled_jobs": "Запланированные задачи", - "nav.search": "Поиск", - "nav.settings": "Настройки", - "nav.similarity": "Сходство", - "nav.skip_to_content": "Перейти к основному содержанию", - "nav.status": "Статус", - "nav.toggle_dark_mode": "Переключить тёмную тему", - "nav.toggle_nav": "Переключить меню навигации", - "nav.upload": "Загрузить", - "nav.users": "Пользователи", + "nav.about": "About", + "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", + "nav.admin_actions": "Admin actions", + "nav.admin_menu": "Admin menu", + "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", + "nav.backup_restore": "Backup & Restore", + "nav.credentials": "Credentials", + "nav.dark_mode": "Dark Mode", + "nav.dashboard": "Dashboard", + "nav.developer_docs": "Developer Docs", + "nav.duplicates": "Duplicates", + "nav.file_manager": "File Manager", + "nav.files": "Files", + "nav.help": "Help", + "nav.help_center": "Help Center", + "nav.imap": "Email Import", + "nav.integrations": "Integrations", + "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", + "nav.main_navigation": "Main navigation", + "nav.notifications": "Notifications", + "nav.open_main_menu": "Open main menu", + "nav.pipelines": "Pipelines", + "nav.plan_designer": "Plan Designer", + "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", + "nav.queue_monitor": "Queue Monitor", + "nav.scheduled_jobs": "Scheduled Jobs", + "nav.search": "Search", + "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", + "nav.similarity": "Similarity", + "nav.skip_to_content": "Skip to main content", + "nav.status": "Status", + "nav.subscription": "Subscription", + "nav.toggle_dark_mode": "Toggle dark mode", + "nav.toggle_nav": "Toggle navigation menu", + "nav.upload": "Upload", + "nav.users": "Users", + "nav.version": "Version Info", "notifications.filter_all": "All", "notifications.filter_read": "Read only", "notifications.filter_unread": "Unread only", "notifications.manage_desc": "Manage your notification inbox, targets, and event preferences", - "notifications.mark_all_read": "Отметить все как прочитанные", + "notifications.mark_all_read": "Mark All as Read", "notifications.mark_all_read_btn": "Mark all read", - "notifications.mark_read": "Отметить как прочитанное", - "notifications.no_notifications": "Нет уведомлений", + "notifications.mark_read": "Mark as Read", + "notifications.no_notifications": "No notifications", "notifications.page_title": "Notifications", "notifications.tab_inbox": "Inbox", "notifications.tab_settings": "Settings", - "notifications.title": "Уведомления", - "notifications.unread_count": "{count} непрочитанных уведомлений", + "notifications.title": "Notifications", + "notifications.unread_count": "{count} unread notifications", "pipelines.active_label": "Active", "pipelines.add_step_btn": "Add Step", - "pipelines.create": "Создать конвейер", + "pipelines.create": "Create Pipeline", "pipelines.custom_label_label": "Custom Label", "pipelines.default_label": "Default", "pipelines.description_label": "Description", "pipelines.description_placeholder": "Optional description", "pipelines.disabled_label": "Disabled", - "pipelines.edit": "Редактировать конвейер", + "pipelines.edit": "Edit Pipeline", "pipelines.empty_state": "No pipelines yet", "pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.", "pipelines.enabled_label": "Enabled", @@ -686,7 +712,7 @@ "pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a", "pipelines.system_label": "System", "pipelines.system_pipeline_label": "System pipeline (visible to all users)", - "pipelines.title": "Конвейеры обработки", + "pipelines.title": "Processing Pipelines", "queue.active_tasks": "Active Tasks", "queue.auto_refresh_1": "Auto-refreshes every", "queue.auto_refresh_2": "seconds", @@ -736,18 +762,18 @@ "search.input_aria_label": "Search documents", "search.input_placeholder": "Search documents by content, sender, tags, type...", "search.loading_indicator": "Searching…", - "search.no_results": "Результаты не найдены", + "search.no_results": "No results found", "search.page_title": "Search Documents", - "search.placeholder": "Поиск по имени, содержимому, тегам...", + "search.placeholder": "Search by filename, content, tags...", "search.result_empty": "No documents found matching your query.", - "search.results_count": "Найдено результатов: {count}", + "search.results_count": "{count} results found", "search.saved_aria_save": "Save current search", "search.saved_button": "Save Current", "search.saved_empty": "No saved searches yet", "search.saved_error": "Could not load saved searches", "search.saved_label": "Saved Searches", "search.saved_loading": "Loading...", - "search.title": "Поиск документов", + "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", @@ -771,15 +797,15 @@ "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": "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": "Не удалось сохранить настройку", + "settings.save_error": "Failed to save setting", "settings.save_setting_title": "Save this setting", - "settings.save_success": "Настройка сохранена", + "settings.save_success": "Setting saved successfully", "settings.saving_state": "Saving…", "settings.search_aria_label": "Search settings", "settings.search_clear_aria": "Clear search", @@ -788,7 +814,7 @@ "settings.source_db_badge": "DB", "settings.source_default_badge": "DEFAULT", "settings.source_env_badge": "ENV", - "settings.title": "Настройки", + "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", @@ -877,11 +903,11 @@ "upload.camera_button": "Take Photo / Scan Document", "upload.download_button": "Download and Process", "upload.downloading": "Downloading file from URL...", - "upload.drag_drop": "Перетащите файлы сюда или нажмите для выбора", + "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_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 failed", "upload.error_invalid_url": "Invalid URL format", "upload.error_url_required": "Please enter a URL", "upload.file_size_hint": "Maximum size: 500 MB per file", @@ -889,14 +915,14 @@ "upload.filename_description": "Leave empty to use filename from URL", "upload.filename_label": "Filename (optional)", "upload.filename_placeholder": "my-document.pdf", - "upload.max_size": "Максимальный размер файла: {size}", + "upload.max_size": "Maximum file size: {size}", "upload.page_title": "Upload Files", "upload.section_device": "Upload from Device", "upload.section_url": "Upload from URL", - "upload.select_file": "Выбрать файл", - "upload.success": "Файл успешно загружен", - "upload.title": "Загрузить документ", - "upload.uploading": "Загрузка...", + "upload.select_file": "Select File", + "upload.success": "File uploaded successfully", + "upload.title": "Upload Document", + "upload.uploading": "Uploading...", "upload.url_description": "Enter a direct link to a file (PDF, Office documents, or images)", "upload.url_label": "File URL", "upload.url_placeholder": "https://example.com/document.pdf" diff --git a/frontend/translations/sk.json b/frontend/translations/sk.json index a4585271..d36160ed 100644 --- a/frontend/translations/sk.json +++ b/frontend/translations/sk.json @@ -195,6 +195,7 @@ "common.confirm": "Confirm", "common.copied": "Copied!", "common.copy": "Copy", + "common.create": "Create", "common.created": "Created", "common.date": "Date", "common.delete": "Delete", @@ -202,6 +203,7 @@ "common.details": "Details", "common.disabled": "Disabled", "common.download": "Download", + "common.duplicate": "Duplicate", "common.edit": "Edit", "common.enabled": "Enabled", "common.error": "Error", @@ -218,6 +220,7 @@ "common.page": "Page", "common.pending": "Pending", "common.prev_page": "Previous page", + "common.previous": "Previous", "common.processing": "Processing", "common.refresh": "Refresh", "common.reset": "Reset", @@ -228,7 +231,9 @@ "common.select_placeholder": "— select —", "common.size": "Size", "common.status": "Status", + "common.submit": "Submit", "common.success": "Success", + "common.tags": "Tags", "common.type": "Type", "common.updated": "Updated", "common.upload": "Upload", @@ -236,6 +241,8 @@ "common.warning": "Warning", "common.yes": "Yes", "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", "cookie.notice_label": "Cookie notice", "cookie.policy_link": "Cookie Policy", @@ -331,7 +338,7 @@ "files.delete_modal_message": "Are you sure you want to delete this file?", "files.delete_modal_title": "Confirm Deletion", "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 – folders are processed recursively", "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", @@ -359,7 +366,7 @@ "files.filter_storage_provider": "Storage Provider", "files.filter_tags_aria": "Filter by tags (comma-separated)", "files.filter_tags_placeholder": "e.g. invoice,amazon", - "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.no_files": "No files found", "files.ocr_status": "OCR Status", @@ -398,6 +405,8 @@ "files.upload_modal_close": "Close upload progress", "files.upload_modal_header": "Uploading Files", "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", "footer.attributions": "Attributions", "footer.cookies": "Cookies", "footer.copyright": "DocuElevate {year}", @@ -577,7 +586,8 @@ "integrations.username_label": "Username", "language.bg": "Български", "language.ca": "Català", - "language.changed": "Jazyk bol zmenený na {language}", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", "language.cs": "Čeština", "language.da": "Dansk", "language.de": "Deutsch", @@ -601,7 +611,8 @@ "language.pt": "Português", "language.ro": "Română", "language.ru": "Русский", - "language.selector": "Slovenčina", + "language.selector": "Language", + "language.selector_label": "Select language", "language.sk": "Slovenčina", "language.sl": "Slovenščina", "language.sv": "Svenska", @@ -610,9 +621,15 @@ "language.zh": "中文", "nav.about": "About", "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", "nav.admin_actions": "Admin actions", "nav.admin_menu": "Admin menu", "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", "nav.backup_restore": "Backup & Restore", "nav.credentials": "Credentials", "nav.dark_mode": "Dark Mode", @@ -623,25 +640,34 @@ "nav.files": "Files", "nav.help": "Help", "nav.help_center": "Help Center", + "nav.imap": "Email Import", "nav.integrations": "Integrations", "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", "nav.main_navigation": "Main navigation", "nav.notifications": "Notifications", "nav.open_main_menu": "Open main menu", "nav.pipelines": "Pipelines", "nav.plan_designer": "Plan Designer", "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", "nav.queue_monitor": "Queue Monitor", "nav.scheduled_jobs": "Scheduled Jobs", "nav.search": "Search", "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", "nav.similarity": "Similarity", "nav.skip_to_content": "Skip to main content", "nav.status": "Status", + "nav.subscription": "Subscription", "nav.toggle_dark_mode": "Toggle dark mode", "nav.toggle_nav": "Toggle navigation menu", "nav.upload": "Upload", "nav.users": "Users", + "nav.version": "Version Info", "notifications.filter_all": "All", "notifications.filter_read": "Read only", "notifications.filter_unread": "Unread only", diff --git a/frontend/translations/sl.json b/frontend/translations/sl.json index 5172ee00..d36160ed 100644 --- a/frontend/translations/sl.json +++ b/frontend/translations/sl.json @@ -195,6 +195,7 @@ "common.confirm": "Confirm", "common.copied": "Copied!", "common.copy": "Copy", + "common.create": "Create", "common.created": "Created", "common.date": "Date", "common.delete": "Delete", @@ -202,6 +203,7 @@ "common.details": "Details", "common.disabled": "Disabled", "common.download": "Download", + "common.duplicate": "Duplicate", "common.edit": "Edit", "common.enabled": "Enabled", "common.error": "Error", @@ -218,6 +220,7 @@ "common.page": "Page", "common.pending": "Pending", "common.prev_page": "Previous page", + "common.previous": "Previous", "common.processing": "Processing", "common.refresh": "Refresh", "common.reset": "Reset", @@ -228,7 +231,9 @@ "common.select_placeholder": "— select —", "common.size": "Size", "common.status": "Status", + "common.submit": "Submit", "common.success": "Success", + "common.tags": "Tags", "common.type": "Type", "common.updated": "Updated", "common.upload": "Upload", @@ -236,6 +241,8 @@ "common.warning": "Warning", "common.yes": "Yes", "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", "cookie.notice_label": "Cookie notice", "cookie.policy_link": "Cookie Policy", @@ -331,7 +338,7 @@ "files.delete_modal_message": "Are you sure you want to delete this file?", "files.delete_modal_title": "Confirm Deletion", "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 – folders are processed recursively", "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", @@ -359,7 +366,7 @@ "files.filter_storage_provider": "Storage Provider", "files.filter_tags_aria": "Filter by tags (comma-separated)", "files.filter_tags_placeholder": "e.g. invoice,amazon", - "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.no_files": "No files found", "files.ocr_status": "OCR Status", @@ -398,6 +405,8 @@ "files.upload_modal_close": "Close upload progress", "files.upload_modal_header": "Uploading Files", "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", "footer.attributions": "Attributions", "footer.cookies": "Cookies", "footer.copyright": "DocuElevate {year}", @@ -577,7 +586,8 @@ "integrations.username_label": "Username", "language.bg": "Български", "language.ca": "Català", - "language.changed": "Jezik je bil spremenjen na {language}", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", "language.cs": "Čeština", "language.da": "Dansk", "language.de": "Deutsch", @@ -601,7 +611,8 @@ "language.pt": "Português", "language.ro": "Română", "language.ru": "Русский", - "language.selector": "Slovenščina", + "language.selector": "Language", + "language.selector_label": "Select language", "language.sk": "Slovenčina", "language.sl": "Slovenščina", "language.sv": "Svenska", @@ -610,9 +621,15 @@ "language.zh": "中文", "nav.about": "About", "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", "nav.admin_actions": "Admin actions", "nav.admin_menu": "Admin menu", "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", "nav.backup_restore": "Backup & Restore", "nav.credentials": "Credentials", "nav.dark_mode": "Dark Mode", @@ -623,25 +640,34 @@ "nav.files": "Files", "nav.help": "Help", "nav.help_center": "Help Center", + "nav.imap": "Email Import", "nav.integrations": "Integrations", "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", "nav.main_navigation": "Main navigation", "nav.notifications": "Notifications", "nav.open_main_menu": "Open main menu", "nav.pipelines": "Pipelines", "nav.plan_designer": "Plan Designer", "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", "nav.queue_monitor": "Queue Monitor", "nav.scheduled_jobs": "Scheduled Jobs", "nav.search": "Search", "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", "nav.similarity": "Similarity", "nav.skip_to_content": "Skip to main content", "nav.status": "Status", + "nav.subscription": "Subscription", "nav.toggle_dark_mode": "Toggle dark mode", "nav.toggle_nav": "Toggle navigation menu", "nav.upload": "Upload", "nav.users": "Users", + "nav.version": "Version Info", "notifications.filter_all": "All", "notifications.filter_read": "Read only", "notifications.filter_unread": "Unread only", diff --git a/frontend/translations/sr.json b/frontend/translations/sr.json new file mode 100644 index 00000000..d36160ed --- /dev/null +++ b/frontend/translations/sr.json @@ -0,0 +1,929 @@ +{ + "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", + "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.create_account": "Create account", + "auth.display_name_label": "Display Name", + "auth.email_label": "Email", + "auth.forgot_password": "Forgot Password?", + "auth.forgot_username": "Forgot username?", + "auth.login": "Log In", + "auth.login_title": "Log In", + "auth.logo_alt": "DocuElevate Logo", + "auth.logout": "Log Out", + "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.profile": "Profile", + "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_title": "Sign Up", + "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.active": "Active", + "common.all": "All", + "common.back": "Back", + "common.cancel": "Cancel", + "common.close": "Close", + "common.col_pending": "Pending", + "common.completed": "Completed", + "common.confirm": "Confirm", + "common.copied": "Copied!", + "common.copy": "Copy", + "common.create": "Create", + "common.created": "Created", + "common.date": "Date", + "common.delete": "Delete", + "common.description": "Description", + "common.details": "Details", + "common.disabled": "Disabled", + "common.download": "Download", + "common.duplicate": "Duplicate", + "common.edit": "Edit", + "common.enabled": "Enabled", + "common.error": "Error", + "common.failed": "Failed", + "common.filter": "Filter", + "common.inactive": "Inactive", + "common.info": "Info", + "common.loading": "Loading...", + "common.name": "Name", + "common.next": "Next", + "common.next_page": "Next page", + "common.no": "No", + "common.none": "None", + "common.page": "Page", + "common.pending": "Pending", + "common.prev_page": "Previous page", + "common.previous": "Previous", + "common.processing": "Processing", + "common.refresh": "Refresh", + "common.reset": "Reset", + "common.retry": "Retry", + "common.save": "Save", + "common.search": "Search", + "common.select": "Select", + "common.select_placeholder": "— select —", + "common.size": "Size", + "common.status": "Status", + "common.submit": "Submit", + "common.success": "Success", + "common.tags": "Tags", + "common.type": "Type", + "common.updated": "Updated", + "common.upload": "Upload", + "common.view": "View", + "common.warning": "Warning", + "common.yes": "Yes", + "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", + "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", + "cookie.notice_label": "Cookie notice", + "cookie.policy_link": "Cookie Policy", + "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.files_this_month": "Files This Month", + "dashboard.files_today": "Files Today", + "dashboard.ocr_processed": "OCR Processed", + "dashboard.quick_actions": "Quick Actions", + "dashboard.recent_activity": "Recent Activity", + "dashboard.storage_targets": "Storage Targets", + "dashboard.title": "Dashboard", + "dashboard.total_files": "Total Files", + "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_heading": "Oops, we couldn’t find that page!", + "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_title": "404 - Not Found", + "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_heading": "Oops! Something Went Wrong.", + "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_message": "You do not have permission to access this page.", + "error.not_found": "Page not found", + "error.not_found_message": "The page you are looking for does not exist.", + "error.server_error": "Internal Server Error", + "error.server_error_message": "Something went wrong. Please try again later.", + "error.unauthorized": "Unauthorized", + "error.unauthorized_message": "You need to log in to access this page.", + "files.action_delete": "Delete file", + "files.action_details": "View details", + "files.action_preview": "Quick preview", + "files.bulk_clear_selection": "Clear Selection", + "files.bulk_cloud_ocr": "Re-run Cloud OCR", + "files.bulk_delete": "Delete Selected", + "files.bulk_download": "Download as ZIP", + "files.bulk_reprocess": "Reprocess Selected", + "files.delete_modal_cancel": "Cancel", + "files.delete_modal_confirm": "Delete", + "files.delete_modal_message": "Are you sure you want to delete this file?", + "files.delete_modal_title": "Confirm Deletion", + "files.document_title": "Document Title", + "files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more – folders are processed recursively", + "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.filename": "Filename", + "files.files_selected": "files selected", + "files.filter_all_providers": "All Providers", + "files.filter_all_statuses": "All Statuses", + "files.filter_all_types": "All Types", + "files.filter_apply": "Apply Filters", + "files.filter_clear": "Clear", + "files.filter_date_from": "Date From", + "files.filter_date_from_aria": "Filter from date", + "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_ocr_all": "All Files", + "files.filter_ocr_good": "Good quality", + "files.filter_ocr_poor": "Poor 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_search_label": "Search Filename", + "files.filter_search_placeholder": "Enter filename...", + "files.filter_storage_provider": "Storage Provider", + "files.filter_tags_aria": "Filter by tags (comma-separated)", + "files.filter_tags_placeholder": "e.g. invoice,amazon", + "files.fulltext_search_label": "Full-Text Search (OCR text, metadata, tags)", + "files.fulltext_search_placeholder": "Search document content, sender, tags, type...", + "files.no_files": "No files found", + "files.ocr_status": "OCR Status", + "files.page_title": "File Records", + "files.pagination_files": "files", + "files.pagination_first": "First", + "files.pagination_last": "Last", + "files.pagination_nav_aria": "File list pagination", + "files.pagination_next": "Next", + "files.pagination_of": "of", + "files.pagination_previous": "Previous", + "files.pagination_showing": "Showing", + "files.preview_modal_close": "Close 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.saved_searches_empty": "No saved searches yet", + "files.saved_searches_error": "Could not load saved searches", + "files.saved_searches_label": "Saved Searches", + "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_title": "Search Results", + "files.status_duplicate": "Duplicate", + "files.table_actions": "Actions", + "files.table_aria": "File records", + "files.table_created_at": "Created At", + "files.table_empty": "No files found", + "files.table_id": "ID", + "files.table_mime_type": "MIME Type", + "files.table_original_filename": "Original Filename", + "files.table_select_all": "Select all files on this page", + "files.tags": "Tags", + "files.title": "Files", + "files.upload_modal_aria": "Upload progress", + "files.upload_modal_close": "Close upload progress", + "files.upload_modal_header": "Uploading Files", + "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", + "footer.attributions": "Attributions", + "footer.cookies": "Cookies", + "footer.copyright": "DocuElevate {year}", + "footer.imprint": "Imprint", + "footer.license": "License", + "footer.navigation": "Footer navigation", + "footer.privacy": "Privacy", + "footer.terms": "Terms", + "footer.version": "Version {version}", + "help.destinations_dropbox": "Dropbox", + "help.destinations_dropbox_desc": "OAuth-linked. Files land in your chosen folder.", + "help.destinations_email": "Email Forwarding", + "help.destinations_email_desc": "Processed files sent as SMTP attachments.", + "help.destinations_google_drive": "Google Drive", + "help.destinations_google_drive_desc": "Service account or OAuth. Supports shared drives.", + "help.destinations_heading": "Destinations – Where Documents Go", + "help.destinations_nextcloud": "Nextcloud / WebDAV", + "help.destinations_nextcloud_desc": "Self-hosted cloud storage via WebDAV.", + "help.destinations_onedrive": "OneDrive", + "help.destinations_onedrive_desc": "Microsoft Graph API integration.", + "help.destinations_paperless": "Paperless-ngx", + "help.destinations_paperless_desc": "Push documents straight into Paperless for archival.", + "help.destinations_s3": "Amazon S3", + "help.destinations_s3_desc": "Any S3-compatible bucket (AWS, MinIO, Wasabi).", + "help.destinations_sftp": "SFTP / FTP", + "help.destinations_sftp_desc": "Secure file transfer to any server.", + "help.destinations_webhook": "Webhook", + "help.destinations_webhook_desc": "POST metadata to any external endpoint.", + "help.documentation": "Documentation", + "help.faq": "Frequently Asked Questions", + "help.faq_1_a": "Navigate to the Upload page, drag-and-drop your files or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.faq_1_q": "How do I upload documents?", + "help.faq_2_a": "PDF, JPEG, PNG, TIFF, BMP, GIF, DOCX, XLSX, PPTX, ODT, ODS, TXT, RTF, and HTML. Non-PDF files are automatically converted to PDF before processing.", + "help.faq_2_q": "Which file formats are supported?", + "help.faq_3_a": "Yes. Go to Email Ingestion, add an IMAP account, and DocuElevate will poll for new messages and process attachments automatically.", + "help.faq_3_q": "Can I ingest documents from email?", + "help.faq_4_a": "Pipelines let you chain processing steps – OCR, AI extraction, format conversion – and route the result to one or more destinations. Create and manage them from the Pipelines page.", + "help.faq_4_q": "How do processing pipelines work?", + "help.faq_5_a": "DocuElevate encrypts credentials at rest, communicates over TLS, and never stores your documents longer than necessary. See the Privacy Notice for full details.", + "help.faq_5_q": "Is my data secure?", + "help.faq_heading": "Frequently Asked Questions", + "help.getting_started": "Getting Started", + "help.heading": "Help Center", + "help.page_title": "Help Center", + "help.privacy_notice": "Privacy Notice", + "help.quickstart_heading": "Quick Start", + "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_upload": "Upload Documents", + "help.quickstart_upload_desc": "Drag & drop files onto the Upload page or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.quickstart_workflows": "Automate Workflows", + "help.quickstart_workflows_desc": "Create Pipelines to define multi-step processing and routing rules. Combine OCR, AI extraction, format conversion, and delivery in a single flow.", + "help.sources_email_ingestion": "Email Ingestion (IMAP)", + "help.sources_email_ingestion_desc": "Forward documents to a dedicated mailbox. Under Email Ingestion, add one or more IMAP accounts. DocuElevate polls for new messages and processes attachments automatically.", + "help.sources_heading": "Sources – Getting Documents In", + "help.sources_rest_api": "REST API", + "help.sources_rest_api_desc": "Integrate programmatically by POST-ing files to /api/upload. Ideal for scripts, watched folders, scanners, or third-party tools like Zapier and n8n.", + "help.sources_scanner": "Scanner & Mobile", + "help.sources_scanner_desc": "Point network scanners at DocuElevate's upload endpoint or use any mobile scanning app that supports custom HTTP destinations.", + "help.sources_web_upload": "Web Upload", + "help.sources_web_upload_desc": "The fastest way to get started. Open the Upload page, drop one or more files, and DocuElevate takes care of the rest. Supported formats include PDF, JPEG, PNG, TIFF, DOCX, XLSX, and more.", + "help.subheading": "Everything you need to get the most out of DocuElevate. Browse topics below or search for what you need.", + "help.support": "Support", + "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_heading": "Contact Support", + "help.support_ticket_button": "Submit a Ticket", + "help.support_ticket_heading": "Open a Support Ticket", + "help.title": "Help Center", + "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_heading": "Workflows & Pipelines", + "help.workflows_step_1": "Convert to PDF", + "help.workflows_step_1_create": "Go to Pipelines in the main menu.", + "help.workflows_step_2": "OCR – extract text", + "help.workflows_step_2_create": "Click New Pipeline and give it a name.", + "help.workflows_step_3": "AI metadata extraction", + "help.workflows_step_3_create": "Add the processing steps you need.", + "help.workflows_step_4": "Deliver to one or more destinations", + "help.workflows_step_4_create": "Choose one or more delivery destinations.", + "help.workflows_step_5_create": "Save – new documents will be processed through this pipeline automatically.", + "help.workflows_typical_steps": "Typical Steps", + "help.workflows_what_is": "What is a Pipeline?", + "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_ingestion": "Email & URL-based document ingestion", + "index.capabilities_ocr": "OCR & metadata extraction with AI", + "index.capabilities_paperless": "Paperless-ngx integration for document management", + "index.capabilities_title": "Capabilities", + "index.capabilities_workflows": "Automated classification & routing workflows", + "index.cta_description": "Join teams already automating their document processing with DocuElevate.", + "index.cta_heading": "Ready to elevate your document workflow?", + "index.cta_pricing": "See pricing", + "index.cta_signup": "Create a free account", + "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_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_desc": "Route processed files to Dropbox, Google Drive, OneDrive, Amazon S3, Nextcloud, Paperless NGX, WebDAV, FTP/SFTP, and more.", + "index.feature_email": "Email & IMAP Ingestion", + "index.feature_email_desc": "Automatically pull documents from Gmail or any IMAP mailbox — no manual uploads needed.", + "index.feature_ocr": "OCR & Text Extraction", + "index.feature_ocr_desc": "Azure Document Intelligence converts scanned PDFs and images into fully searchable text automatically.", + "index.feature_pipelines": "Custom Pipelines", + "index.feature_pipelines_desc": "Build processing pipelines with configurable steps — OCR, AI extraction, format conversion, and storage routing in any order.", + "index.feature_search": "Full-Text Search", + "index.feature_search_desc": "Instantly find any document by content, metadata, or tags across your entire archive.", + "index.feature_section_title": "Everything you need for smart document workflows", + "index.getting_started": "Getting Started", + "index.getting_started_1": "Configure integrations via System Status", + "index.getting_started_2": "Upload your first document", + "index.getting_started_3": "Review results in Files", + "index.getting_started_learn": "Learn more about DocuElevate", + "index.hero_description": "DocuElevate ingests your documents, runs OCR, extracts metadata with AI, and routes files to Dropbox, Google Drive, OneDrive, S3, Nextcloud, and more — all in one seamless pipeline.", + "index.hero_heading": "From upload to insight — automatically.", + "index.hero_login": "Log In", + "index.hero_pricing": "View Plans & Pricing", + "index.hero_signup": "Get Started — it’s free", + "index.integrations_active": "Active integrations", + "index.integrations_storage": "Storage targets", + "index.integrations_title": "Integrations", + "index.integrations_view_status": "View system status", + "index.page_title_dashboard": "Dashboard", + "index.page_title_public": "Intelligent Document Processing", + "index.platform_overview": "Platform overview", + "index.quick_actions": "Quick Actions", + "index.quick_documents": "My Documents", + "index.quick_documents_desc": "Browse your processed files", + "index.quick_search": "Search", + "index.quick_search_desc": "Full-text search across documents", + "index.quick_subscription": "My Subscription", + "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_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_subtitle": "Intelligent document processing & management", + "index.stat_active_integrations": "Active Integrations", + "index.stat_active_users": "Active users", + "index.stat_files_month": "Files this month", + "index.stat_files_today": "Files today", + "index.stat_storage_targets": "Storage Targets", + "index.stat_total_files": "Total files", + "index.tier_plan": "Plan", + "index.tier_upgrade": "Upgrade", + "index.tier_view_details": "View full details", + "index.upgrade_daily_limits": "Higher daily & monthly limits", + "index.upgrade_description": "Unlock more documents, more destinations and priority support.", + "index.upgrade_destinations": "More storage destinations", + "index.upgrade_ocr_pages": "More OCR pages", + "index.upgrade_plan": "Upgrade your plan", + "index.upgrade_view_pricing": "View plans & pricing", + "index.usage_lifetime": "Lifetime files", + "index.usage_month": "Files this month", + "index.usage_my_usage": "My usage", + "index.usage_today": "Files today", + "index.usage_unlimited": "Unlimited", + "integrations.configure": "Configure", + "integrations.connect": "Connect", + "integrations.connected": "Connected", + "integrations.disconnect": "Disconnect", + "integrations.empty_state": "No integrations configured", + "integrations.folder_label": "Folder", + "integrations.host_label": "Host", + "integrations.imap_settings": "IMAP Settings", + "integrations.not_connected": "Not Connected", + "integrations.page_title": "Integrations", + "integrations.password_label": "Password", + "integrations.port_label": "Port", + "integrations.title": "Integrations", + "integrations.username_label": "Username", + "language.bg": "Български", + "language.ca": "Català", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", + "language.cs": "Čeština", + "language.da": "Dansk", + "language.de": "Deutsch", + "language.el": "Ελληνικά", + "language.en": "English", + "language.es": "Español", + "language.et": "Eesti", + "language.fi": "Suomi", + "language.fr": "Français", + "language.ga": "Gaeilge", + "language.hr": "Hrvatski", + "language.hu": "Magyar", + "language.is": "Íslenska", + "language.it": "Italiano", + "language.lb": "Lëtzebuergesch", + "language.lt": "Lietuvių", + "language.lv": "Latviešu", + "language.nb": "Norsk", + "language.nl": "Nederlands", + "language.pl": "Polski", + "language.pt": "Português", + "language.ro": "Română", + "language.ru": "Русский", + "language.selector": "Language", + "language.selector_label": "Select language", + "language.sk": "Slovenčina", + "language.sl": "Slovenščina", + "language.sv": "Svenska", + "language.tr": "Türkçe", + "language.uk": "Українська", + "language.zh": "中文", + "nav.about": "About", + "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", + "nav.admin_actions": "Admin actions", + "nav.admin_menu": "Admin menu", + "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", + "nav.backup_restore": "Backup & Restore", + "nav.credentials": "Credentials", + "nav.dark_mode": "Dark Mode", + "nav.dashboard": "Dashboard", + "nav.developer_docs": "Developer Docs", + "nav.duplicates": "Duplicates", + "nav.file_manager": "File Manager", + "nav.files": "Files", + "nav.help": "Help", + "nav.help_center": "Help Center", + "nav.imap": "Email Import", + "nav.integrations": "Integrations", + "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", + "nav.main_navigation": "Main navigation", + "nav.notifications": "Notifications", + "nav.open_main_menu": "Open main menu", + "nav.pipelines": "Pipelines", + "nav.plan_designer": "Plan Designer", + "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", + "nav.queue_monitor": "Queue Monitor", + "nav.scheduled_jobs": "Scheduled Jobs", + "nav.search": "Search", + "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", + "nav.similarity": "Similarity", + "nav.skip_to_content": "Skip to main content", + "nav.status": "Status", + "nav.subscription": "Subscription", + "nav.toggle_dark_mode": "Toggle dark mode", + "nav.toggle_nav": "Toggle navigation menu", + "nav.upload": "Upload", + "nav.users": "Users", + "nav.version": "Version Info", + "notifications.filter_all": "All", + "notifications.filter_read": "Read only", + "notifications.filter_unread": "Unread only", + "notifications.manage_desc": "Manage your notification inbox, targets, and event preferences", + "notifications.mark_all_read": "Mark All as Read", + "notifications.mark_all_read_btn": "Mark all read", + "notifications.mark_read": "Mark as Read", + "notifications.no_notifications": "No notifications", + "notifications.page_title": "Notifications", + "notifications.tab_inbox": "Inbox", + "notifications.tab_settings": "Settings", + "notifications.title": "Notifications", + "notifications.unread_count": "{count} unread notifications", + "pipelines.active_label": "Active", + "pipelines.add_step_btn": "Add Step", + "pipelines.create": "Create Pipeline", + "pipelines.custom_label_label": "Custom Label", + "pipelines.default_label": "Default", + "pipelines.description_label": "Description", + "pipelines.description_placeholder": "Optional description", + "pipelines.disabled_label": "Disabled", + "pipelines.edit": "Edit Pipeline", + "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.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)", + "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.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_pipeline_label": "System pipeline (visible to all users)", + "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.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_date_from": "Date From", + "search.filter_date_to": "Date To", + "search.filter_document_type": "Document Type", + "search.filter_document_type_placeholder": "e.g. Invoice", + "search.filter_language": "Language", + "search.filter_language_placeholder": "e.g. de", + "search.filter_sender": "Sender", + "search.filter_sender_placeholder": "e.g. ACME Corp", + "search.filter_tags": "Tags", + "search.filter_tags_placeholder": "e.g. amazon", + "search.filter_text_quality": "Text Quality", + "search.filter_text_quality_all": "All", + "search.filter_text_quality_high": "High", + "search.filter_text_quality_low": "Low", + "search.filter_text_quality_medium": "Medium", + "search.filter_text_quality_no_text": "No text", + "search.heading": "Document Search", + "search.input_aria_label": "Search documents", + "search.input_placeholder": "Search documents by content, sender, tags, type...", + "search.loading_indicator": "Searching…", + "search.no_results": "No results found", + "search.page_title": "Search Documents", + "search.placeholder": "Search by filename, content, tags...", + "search.result_empty": "No documents found matching your query.", + "search.results_count": "{count} results found", + "search.saved_aria_save": "Save current search", + "search.saved_button": "Save Current", + "search.saved_empty": "No saved searches yet", + "search.saved_error": "Could not load saved searches", + "search.saved_label": "Saved Searches", + "search.saved_loading": "Loading...", + "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.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_setting_title": "Save this setting", + "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.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.build_date": "Build Date", + "status.container_id": "Container ID", + "status.git_commit": "Git Commit", + "status.last_check": "Last Check", + "status.page_title": "System Status", + "status.setting_label": "Setting", + "status.value_label": "Value", + "upload.browse_button": "Browse Files", + "upload.button_processing": "Processing...", + "upload.camera_button": "Take Photo / Scan Document", + "upload.download_button": "Download and Process", + "upload.downloading": "Downloading file from URL...", + "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_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_invalid_url": "Invalid URL format", + "upload.error_url_required": "Please enter a URL", + "upload.file_size_hint": "Maximum size: 500 MB per file", + "upload.file_types": "Allowed types: PDF, Office documents (Word, Excel, PowerPoint, etc.), Images", + "upload.filename_description": "Leave empty to use filename from URL", + "upload.filename_label": "Filename (optional)", + "upload.filename_placeholder": "my-document.pdf", + "upload.max_size": "Maximum file size: {size}", + "upload.page_title": "Upload Files", + "upload.section_device": "Upload from Device", + "upload.section_url": "Upload from URL", + "upload.select_file": "Select File", + "upload.success": "File uploaded successfully", + "upload.title": "Upload Document", + "upload.uploading": "Uploading...", + "upload.url_description": "Enter a direct link to a file (PDF, Office documents, or images)", + "upload.url_label": "File URL", + "upload.url_placeholder": "https://example.com/document.pdf" +} diff --git a/frontend/translations/sv.json b/frontend/translations/sv.json index c85b7db7..9a0dd1e5 100644 --- a/frontend/translations/sv.json +++ b/frontend/translations/sv.json @@ -195,6 +195,7 @@ "common.confirm": "Confirm", "common.copied": "Copied!", "common.copy": "Copy", + "common.create": "Create", "common.created": "Created", "common.date": "Date", "common.delete": "Delete", @@ -202,6 +203,7 @@ "common.details": "Details", "common.disabled": "Disabled", "common.download": "Download", + "common.duplicate": "Duplicate", "common.edit": "Edit", "common.enabled": "Enabled", "common.error": "Error", @@ -218,6 +220,7 @@ "common.page": "Page", "common.pending": "Pending", "common.prev_page": "Previous page", + "common.previous": "Previous", "common.processing": "Processing", "common.refresh": "Refresh", "common.reset": "Reset", @@ -228,7 +231,9 @@ "common.select_placeholder": "— select —", "common.size": "Size", "common.status": "Status", + "common.submit": "Submit", "common.success": "Success", + "common.tags": "Tags", "common.type": "Type", "common.updated": "Updated", "common.upload": "Upload", @@ -236,6 +241,8 @@ "common.warning": "Warning", "common.yes": "Yes", "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", "cookie.notice_label": "Cookie notice", "cookie.policy_link": "Cookie Policy", @@ -398,6 +405,8 @@ "files.upload_modal_close": "Close upload progress", "files.upload_modal_header": "Uploading Files", "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", "footer.attributions": "Attributions", "footer.cookies": "Cookies", "footer.copyright": "DocuElevate {year}", @@ -577,6 +586,7 @@ "integrations.username_label": "Username", "language.bg": "Български", "language.ca": "Català", + "language.change_success": "Language changed to {language}", "language.changed": "Språket ändrades till {language}", "language.cs": "Čeština", "language.da": "Dansk", @@ -602,6 +612,7 @@ "language.ro": "Română", "language.ru": "Русский", "language.selector": "Svenska", + "language.selector_label": "Select language", "language.sk": "Slovenčina", "language.sl": "Slovenščina", "language.sv": "Svenska", @@ -610,9 +621,15 @@ "language.zh": "中文", "nav.about": "About", "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", "nav.admin_actions": "Admin actions", "nav.admin_menu": "Admin menu", "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", "nav.backup_restore": "Backup & Restore", "nav.credentials": "Credentials", "nav.dark_mode": "Dark Mode", @@ -623,25 +640,34 @@ "nav.files": "Files", "nav.help": "Help", "nav.help_center": "Help Center", + "nav.imap": "Email Import", "nav.integrations": "Integrations", "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", "nav.main_navigation": "Main navigation", "nav.notifications": "Notifications", "nav.open_main_menu": "Open main menu", "nav.pipelines": "Pipelines", "nav.plan_designer": "Plan Designer", "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", "nav.queue_monitor": "Queue Monitor", "nav.scheduled_jobs": "Scheduled Jobs", "nav.search": "Search", "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", "nav.similarity": "Similarity", "nav.skip_to_content": "Skip to main content", "nav.status": "Status", + "nav.subscription": "Subscription", "nav.toggle_dark_mode": "Toggle dark mode", "nav.toggle_nav": "Toggle navigation menu", "nav.upload": "Upload", "nav.users": "Users", + "nav.version": "Version Info", "notifications.filter_all": "All", "notifications.filter_read": "Read only", "notifications.filter_unread": "Unread only", diff --git a/frontend/translations/tr.json b/frontend/translations/tr.json index 12c4e37e..d36160ed 100644 --- a/frontend/translations/tr.json +++ b/frontend/translations/tr.json @@ -195,6 +195,7 @@ "common.confirm": "Confirm", "common.copied": "Copied!", "common.copy": "Copy", + "common.create": "Create", "common.created": "Created", "common.date": "Date", "common.delete": "Delete", @@ -202,6 +203,7 @@ "common.details": "Details", "common.disabled": "Disabled", "common.download": "Download", + "common.duplicate": "Duplicate", "common.edit": "Edit", "common.enabled": "Enabled", "common.error": "Error", @@ -218,6 +220,7 @@ "common.page": "Page", "common.pending": "Pending", "common.prev_page": "Previous page", + "common.previous": "Previous", "common.processing": "Processing", "common.refresh": "Refresh", "common.reset": "Reset", @@ -228,7 +231,9 @@ "common.select_placeholder": "— select —", "common.size": "Size", "common.status": "Status", + "common.submit": "Submit", "common.success": "Success", + "common.tags": "Tags", "common.type": "Type", "common.updated": "Updated", "common.upload": "Upload", @@ -236,6 +241,8 @@ "common.warning": "Warning", "common.yes": "Yes", "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", "cookie.notice_label": "Cookie notice", "cookie.policy_link": "Cookie Policy", @@ -331,7 +338,7 @@ "files.delete_modal_message": "Are you sure you want to delete this file?", "files.delete_modal_title": "Confirm Deletion", "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 – folders are processed recursively", "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", @@ -359,7 +366,7 @@ "files.filter_storage_provider": "Storage Provider", "files.filter_tags_aria": "Filter by tags (comma-separated)", "files.filter_tags_placeholder": "e.g. invoice,amazon", - "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.no_files": "No files found", "files.ocr_status": "OCR Status", @@ -398,6 +405,8 @@ "files.upload_modal_close": "Close upload progress", "files.upload_modal_header": "Uploading Files", "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", "footer.attributions": "Attributions", "footer.cookies": "Cookies", "footer.copyright": "DocuElevate {year}", @@ -577,7 +586,8 @@ "integrations.username_label": "Username", "language.bg": "Български", "language.ca": "Català", - "language.changed": "Dil {language} olarak değiştirildi", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", "language.cs": "Čeština", "language.da": "Dansk", "language.de": "Deutsch", @@ -601,7 +611,8 @@ "language.pt": "Português", "language.ro": "Română", "language.ru": "Русский", - "language.selector": "Türkçe", + "language.selector": "Language", + "language.selector_label": "Select language", "language.sk": "Slovenčina", "language.sl": "Slovenščina", "language.sv": "Svenska", @@ -610,9 +621,15 @@ "language.zh": "中文", "nav.about": "About", "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", "nav.admin_actions": "Admin actions", "nav.admin_menu": "Admin menu", "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", "nav.backup_restore": "Backup & Restore", "nav.credentials": "Credentials", "nav.dark_mode": "Dark Mode", @@ -623,25 +640,34 @@ "nav.files": "Files", "nav.help": "Help", "nav.help_center": "Help Center", + "nav.imap": "Email Import", "nav.integrations": "Integrations", "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", "nav.main_navigation": "Main navigation", "nav.notifications": "Notifications", "nav.open_main_menu": "Open main menu", "nav.pipelines": "Pipelines", "nav.plan_designer": "Plan Designer", "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", "nav.queue_monitor": "Queue Monitor", "nav.scheduled_jobs": "Scheduled Jobs", "nav.search": "Search", "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", "nav.similarity": "Similarity", "nav.skip_to_content": "Skip to main content", "nav.status": "Status", + "nav.subscription": "Subscription", "nav.toggle_dark_mode": "Toggle dark mode", "nav.toggle_nav": "Toggle navigation menu", "nav.upload": "Upload", "nav.users": "Users", + "nav.version": "Version Info", "notifications.filter_all": "All", "notifications.filter_read": "Read only", "notifications.filter_unread": "Unread only", diff --git a/frontend/translations/uk.json b/frontend/translations/uk.json index 1692114c..a0d00101 100644 --- a/frontend/translations/uk.json +++ b/frontend/translations/uk.json @@ -195,6 +195,7 @@ "common.confirm": "Confirm", "common.copied": "Copied!", "common.copy": "Copy", + "common.create": "Create", "common.created": "Created", "common.date": "Date", "common.delete": "Delete", @@ -202,6 +203,7 @@ "common.details": "Details", "common.disabled": "Disabled", "common.download": "Download", + "common.duplicate": "Duplicate", "common.edit": "Edit", "common.enabled": "Enabled", "common.error": "Error", @@ -218,6 +220,7 @@ "common.page": "Page", "common.pending": "Pending", "common.prev_page": "Previous page", + "common.previous": "Previous", "common.processing": "Processing", "common.refresh": "Refresh", "common.reset": "Reset", @@ -228,7 +231,9 @@ "common.select_placeholder": "— select —", "common.size": "Size", "common.status": "Status", + "common.submit": "Submit", "common.success": "Success", + "common.tags": "Tags", "common.type": "Type", "common.updated": "Updated", "common.upload": "Upload", @@ -236,6 +241,8 @@ "common.warning": "Warning", "common.yes": "Yes", "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", "cookie.notice_label": "Cookie notice", "cookie.policy_link": "Cookie Policy", @@ -398,6 +405,8 @@ "files.upload_modal_close": "Close upload progress", "files.upload_modal_header": "Uploading Files", "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", "footer.attributions": "Attributions", "footer.cookies": "Cookies", "footer.copyright": "DocuElevate {year}", @@ -577,6 +586,7 @@ "integrations.username_label": "Username", "language.bg": "Български", "language.ca": "Català", + "language.change_success": "Language changed to {language}", "language.changed": "Мову змінено на {language}", "language.cs": "Čeština", "language.da": "Dansk", @@ -602,6 +612,7 @@ "language.ro": "Română", "language.ru": "Русский", "language.selector": "Українська", + "language.selector_label": "Select language", "language.sk": "Slovenčina", "language.sl": "Slovenščina", "language.sv": "Svenska", @@ -610,9 +621,15 @@ "language.zh": "中文", "nav.about": "About", "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", "nav.admin_actions": "Admin actions", "nav.admin_menu": "Admin menu", "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", "nav.backup_restore": "Backup & Restore", "nav.credentials": "Credentials", "nav.dark_mode": "Dark Mode", @@ -623,25 +640,34 @@ "nav.files": "Files", "nav.help": "Help", "nav.help_center": "Help Center", + "nav.imap": "Email Import", "nav.integrations": "Integrations", "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", "nav.main_navigation": "Main navigation", "nav.notifications": "Notifications", "nav.open_main_menu": "Open main menu", "nav.pipelines": "Pipelines", "nav.plan_designer": "Plan Designer", "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", "nav.queue_monitor": "Queue Monitor", "nav.scheduled_jobs": "Scheduled Jobs", "nav.search": "Search", "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", "nav.similarity": "Similarity", "nav.skip_to_content": "Skip to main content", "nav.status": "Status", + "nav.subscription": "Subscription", "nav.toggle_dark_mode": "Toggle dark mode", "nav.toggle_nav": "Toggle navigation menu", "nav.upload": "Upload", "nav.users": "Users", + "nav.version": "Version Info", "notifications.filter_all": "All", "notifications.filter_read": "Read only", "notifications.filter_unread": "Unread only", diff --git a/frontend/translations/vi.json b/frontend/translations/vi.json new file mode 100644 index 00000000..d36160ed --- /dev/null +++ b/frontend/translations/vi.json @@ -0,0 +1,929 @@ +{ + "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", + "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.create_account": "Create account", + "auth.display_name_label": "Display Name", + "auth.email_label": "Email", + "auth.forgot_password": "Forgot Password?", + "auth.forgot_username": "Forgot username?", + "auth.login": "Log In", + "auth.login_title": "Log In", + "auth.logo_alt": "DocuElevate Logo", + "auth.logout": "Log Out", + "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.profile": "Profile", + "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_title": "Sign Up", + "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.active": "Active", + "common.all": "All", + "common.back": "Back", + "common.cancel": "Cancel", + "common.close": "Close", + "common.col_pending": "Pending", + "common.completed": "Completed", + "common.confirm": "Confirm", + "common.copied": "Copied!", + "common.copy": "Copy", + "common.create": "Create", + "common.created": "Created", + "common.date": "Date", + "common.delete": "Delete", + "common.description": "Description", + "common.details": "Details", + "common.disabled": "Disabled", + "common.download": "Download", + "common.duplicate": "Duplicate", + "common.edit": "Edit", + "common.enabled": "Enabled", + "common.error": "Error", + "common.failed": "Failed", + "common.filter": "Filter", + "common.inactive": "Inactive", + "common.info": "Info", + "common.loading": "Loading...", + "common.name": "Name", + "common.next": "Next", + "common.next_page": "Next page", + "common.no": "No", + "common.none": "None", + "common.page": "Page", + "common.pending": "Pending", + "common.prev_page": "Previous page", + "common.previous": "Previous", + "common.processing": "Processing", + "common.refresh": "Refresh", + "common.reset": "Reset", + "common.retry": "Retry", + "common.save": "Save", + "common.search": "Search", + "common.select": "Select", + "common.select_placeholder": "— select —", + "common.size": "Size", + "common.status": "Status", + "common.submit": "Submit", + "common.success": "Success", + "common.tags": "Tags", + "common.type": "Type", + "common.updated": "Updated", + "common.upload": "Upload", + "common.view": "View", + "common.warning": "Warning", + "common.yes": "Yes", + "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", + "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", + "cookie.notice_label": "Cookie notice", + "cookie.policy_link": "Cookie Policy", + "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.files_this_month": "Files This Month", + "dashboard.files_today": "Files Today", + "dashboard.ocr_processed": "OCR Processed", + "dashboard.quick_actions": "Quick Actions", + "dashboard.recent_activity": "Recent Activity", + "dashboard.storage_targets": "Storage Targets", + "dashboard.title": "Dashboard", + "dashboard.total_files": "Total Files", + "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_heading": "Oops, we couldn’t find that page!", + "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_title": "404 - Not Found", + "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_heading": "Oops! Something Went Wrong.", + "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_message": "You do not have permission to access this page.", + "error.not_found": "Page not found", + "error.not_found_message": "The page you are looking for does not exist.", + "error.server_error": "Internal Server Error", + "error.server_error_message": "Something went wrong. Please try again later.", + "error.unauthorized": "Unauthorized", + "error.unauthorized_message": "You need to log in to access this page.", + "files.action_delete": "Delete file", + "files.action_details": "View details", + "files.action_preview": "Quick preview", + "files.bulk_clear_selection": "Clear Selection", + "files.bulk_cloud_ocr": "Re-run Cloud OCR", + "files.bulk_delete": "Delete Selected", + "files.bulk_download": "Download as ZIP", + "files.bulk_reprocess": "Reprocess Selected", + "files.delete_modal_cancel": "Cancel", + "files.delete_modal_confirm": "Delete", + "files.delete_modal_message": "Are you sure you want to delete this file?", + "files.delete_modal_title": "Confirm Deletion", + "files.document_title": "Document Title", + "files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more – folders are processed recursively", + "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.filename": "Filename", + "files.files_selected": "files selected", + "files.filter_all_providers": "All Providers", + "files.filter_all_statuses": "All Statuses", + "files.filter_all_types": "All Types", + "files.filter_apply": "Apply Filters", + "files.filter_clear": "Clear", + "files.filter_date_from": "Date From", + "files.filter_date_from_aria": "Filter from date", + "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_ocr_all": "All Files", + "files.filter_ocr_good": "Good quality", + "files.filter_ocr_poor": "Poor 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_search_label": "Search Filename", + "files.filter_search_placeholder": "Enter filename...", + "files.filter_storage_provider": "Storage Provider", + "files.filter_tags_aria": "Filter by tags (comma-separated)", + "files.filter_tags_placeholder": "e.g. invoice,amazon", + "files.fulltext_search_label": "Full-Text Search (OCR text, metadata, tags)", + "files.fulltext_search_placeholder": "Search document content, sender, tags, type...", + "files.no_files": "No files found", + "files.ocr_status": "OCR Status", + "files.page_title": "File Records", + "files.pagination_files": "files", + "files.pagination_first": "First", + "files.pagination_last": "Last", + "files.pagination_nav_aria": "File list pagination", + "files.pagination_next": "Next", + "files.pagination_of": "of", + "files.pagination_previous": "Previous", + "files.pagination_showing": "Showing", + "files.preview_modal_close": "Close 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.saved_searches_empty": "No saved searches yet", + "files.saved_searches_error": "Could not load saved searches", + "files.saved_searches_label": "Saved Searches", + "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_title": "Search Results", + "files.status_duplicate": "Duplicate", + "files.table_actions": "Actions", + "files.table_aria": "File records", + "files.table_created_at": "Created At", + "files.table_empty": "No files found", + "files.table_id": "ID", + "files.table_mime_type": "MIME Type", + "files.table_original_filename": "Original Filename", + "files.table_select_all": "Select all files on this page", + "files.tags": "Tags", + "files.title": "Files", + "files.upload_modal_aria": "Upload progress", + "files.upload_modal_close": "Close upload progress", + "files.upload_modal_header": "Uploading Files", + "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", + "footer.attributions": "Attributions", + "footer.cookies": "Cookies", + "footer.copyright": "DocuElevate {year}", + "footer.imprint": "Imprint", + "footer.license": "License", + "footer.navigation": "Footer navigation", + "footer.privacy": "Privacy", + "footer.terms": "Terms", + "footer.version": "Version {version}", + "help.destinations_dropbox": "Dropbox", + "help.destinations_dropbox_desc": "OAuth-linked. Files land in your chosen folder.", + "help.destinations_email": "Email Forwarding", + "help.destinations_email_desc": "Processed files sent as SMTP attachments.", + "help.destinations_google_drive": "Google Drive", + "help.destinations_google_drive_desc": "Service account or OAuth. Supports shared drives.", + "help.destinations_heading": "Destinations – Where Documents Go", + "help.destinations_nextcloud": "Nextcloud / WebDAV", + "help.destinations_nextcloud_desc": "Self-hosted cloud storage via WebDAV.", + "help.destinations_onedrive": "OneDrive", + "help.destinations_onedrive_desc": "Microsoft Graph API integration.", + "help.destinations_paperless": "Paperless-ngx", + "help.destinations_paperless_desc": "Push documents straight into Paperless for archival.", + "help.destinations_s3": "Amazon S3", + "help.destinations_s3_desc": "Any S3-compatible bucket (AWS, MinIO, Wasabi).", + "help.destinations_sftp": "SFTP / FTP", + "help.destinations_sftp_desc": "Secure file transfer to any server.", + "help.destinations_webhook": "Webhook", + "help.destinations_webhook_desc": "POST metadata to any external endpoint.", + "help.documentation": "Documentation", + "help.faq": "Frequently Asked Questions", + "help.faq_1_a": "Navigate to the Upload page, drag-and-drop your files or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.faq_1_q": "How do I upload documents?", + "help.faq_2_a": "PDF, JPEG, PNG, TIFF, BMP, GIF, DOCX, XLSX, PPTX, ODT, ODS, TXT, RTF, and HTML. Non-PDF files are automatically converted to PDF before processing.", + "help.faq_2_q": "Which file formats are supported?", + "help.faq_3_a": "Yes. Go to Email Ingestion, add an IMAP account, and DocuElevate will poll for new messages and process attachments automatically.", + "help.faq_3_q": "Can I ingest documents from email?", + "help.faq_4_a": "Pipelines let you chain processing steps – OCR, AI extraction, format conversion – and route the result to one or more destinations. Create and manage them from the Pipelines page.", + "help.faq_4_q": "How do processing pipelines work?", + "help.faq_5_a": "DocuElevate encrypts credentials at rest, communicates over TLS, and never stores your documents longer than necessary. See the Privacy Notice for full details.", + "help.faq_5_q": "Is my data secure?", + "help.faq_heading": "Frequently Asked Questions", + "help.getting_started": "Getting Started", + "help.heading": "Help Center", + "help.page_title": "Help Center", + "help.privacy_notice": "Privacy Notice", + "help.quickstart_heading": "Quick Start", + "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_upload": "Upload Documents", + "help.quickstart_upload_desc": "Drag & drop files onto the Upload page or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.quickstart_workflows": "Automate Workflows", + "help.quickstart_workflows_desc": "Create Pipelines to define multi-step processing and routing rules. Combine OCR, AI extraction, format conversion, and delivery in a single flow.", + "help.sources_email_ingestion": "Email Ingestion (IMAP)", + "help.sources_email_ingestion_desc": "Forward documents to a dedicated mailbox. Under Email Ingestion, add one or more IMAP accounts. DocuElevate polls for new messages and processes attachments automatically.", + "help.sources_heading": "Sources – Getting Documents In", + "help.sources_rest_api": "REST API", + "help.sources_rest_api_desc": "Integrate programmatically by POST-ing files to /api/upload. Ideal for scripts, watched folders, scanners, or third-party tools like Zapier and n8n.", + "help.sources_scanner": "Scanner & Mobile", + "help.sources_scanner_desc": "Point network scanners at DocuElevate's upload endpoint or use any mobile scanning app that supports custom HTTP destinations.", + "help.sources_web_upload": "Web Upload", + "help.sources_web_upload_desc": "The fastest way to get started. Open the Upload page, drop one or more files, and DocuElevate takes care of the rest. Supported formats include PDF, JPEG, PNG, TIFF, DOCX, XLSX, and more.", + "help.subheading": "Everything you need to get the most out of DocuElevate. Browse topics below or search for what you need.", + "help.support": "Support", + "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_heading": "Contact Support", + "help.support_ticket_button": "Submit a Ticket", + "help.support_ticket_heading": "Open a Support Ticket", + "help.title": "Help Center", + "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_heading": "Workflows & Pipelines", + "help.workflows_step_1": "Convert to PDF", + "help.workflows_step_1_create": "Go to Pipelines in the main menu.", + "help.workflows_step_2": "OCR – extract text", + "help.workflows_step_2_create": "Click New Pipeline and give it a name.", + "help.workflows_step_3": "AI metadata extraction", + "help.workflows_step_3_create": "Add the processing steps you need.", + "help.workflows_step_4": "Deliver to one or more destinations", + "help.workflows_step_4_create": "Choose one or more delivery destinations.", + "help.workflows_step_5_create": "Save – new documents will be processed through this pipeline automatically.", + "help.workflows_typical_steps": "Typical Steps", + "help.workflows_what_is": "What is a Pipeline?", + "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_ingestion": "Email & URL-based document ingestion", + "index.capabilities_ocr": "OCR & metadata extraction with AI", + "index.capabilities_paperless": "Paperless-ngx integration for document management", + "index.capabilities_title": "Capabilities", + "index.capabilities_workflows": "Automated classification & routing workflows", + "index.cta_description": "Join teams already automating their document processing with DocuElevate.", + "index.cta_heading": "Ready to elevate your document workflow?", + "index.cta_pricing": "See pricing", + "index.cta_signup": "Create a free account", + "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_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_desc": "Route processed files to Dropbox, Google Drive, OneDrive, Amazon S3, Nextcloud, Paperless NGX, WebDAV, FTP/SFTP, and more.", + "index.feature_email": "Email & IMAP Ingestion", + "index.feature_email_desc": "Automatically pull documents from Gmail or any IMAP mailbox — no manual uploads needed.", + "index.feature_ocr": "OCR & Text Extraction", + "index.feature_ocr_desc": "Azure Document Intelligence converts scanned PDFs and images into fully searchable text automatically.", + "index.feature_pipelines": "Custom Pipelines", + "index.feature_pipelines_desc": "Build processing pipelines with configurable steps — OCR, AI extraction, format conversion, and storage routing in any order.", + "index.feature_search": "Full-Text Search", + "index.feature_search_desc": "Instantly find any document by content, metadata, or tags across your entire archive.", + "index.feature_section_title": "Everything you need for smart document workflows", + "index.getting_started": "Getting Started", + "index.getting_started_1": "Configure integrations via System Status", + "index.getting_started_2": "Upload your first document", + "index.getting_started_3": "Review results in Files", + "index.getting_started_learn": "Learn more about DocuElevate", + "index.hero_description": "DocuElevate ingests your documents, runs OCR, extracts metadata with AI, and routes files to Dropbox, Google Drive, OneDrive, S3, Nextcloud, and more — all in one seamless pipeline.", + "index.hero_heading": "From upload to insight — automatically.", + "index.hero_login": "Log In", + "index.hero_pricing": "View Plans & Pricing", + "index.hero_signup": "Get Started — it’s free", + "index.integrations_active": "Active integrations", + "index.integrations_storage": "Storage targets", + "index.integrations_title": "Integrations", + "index.integrations_view_status": "View system status", + "index.page_title_dashboard": "Dashboard", + "index.page_title_public": "Intelligent Document Processing", + "index.platform_overview": "Platform overview", + "index.quick_actions": "Quick Actions", + "index.quick_documents": "My Documents", + "index.quick_documents_desc": "Browse your processed files", + "index.quick_search": "Search", + "index.quick_search_desc": "Full-text search across documents", + "index.quick_subscription": "My Subscription", + "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_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_subtitle": "Intelligent document processing & management", + "index.stat_active_integrations": "Active Integrations", + "index.stat_active_users": "Active users", + "index.stat_files_month": "Files this month", + "index.stat_files_today": "Files today", + "index.stat_storage_targets": "Storage Targets", + "index.stat_total_files": "Total files", + "index.tier_plan": "Plan", + "index.tier_upgrade": "Upgrade", + "index.tier_view_details": "View full details", + "index.upgrade_daily_limits": "Higher daily & monthly limits", + "index.upgrade_description": "Unlock more documents, more destinations and priority support.", + "index.upgrade_destinations": "More storage destinations", + "index.upgrade_ocr_pages": "More OCR pages", + "index.upgrade_plan": "Upgrade your plan", + "index.upgrade_view_pricing": "View plans & pricing", + "index.usage_lifetime": "Lifetime files", + "index.usage_month": "Files this month", + "index.usage_my_usage": "My usage", + "index.usage_today": "Files today", + "index.usage_unlimited": "Unlimited", + "integrations.configure": "Configure", + "integrations.connect": "Connect", + "integrations.connected": "Connected", + "integrations.disconnect": "Disconnect", + "integrations.empty_state": "No integrations configured", + "integrations.folder_label": "Folder", + "integrations.host_label": "Host", + "integrations.imap_settings": "IMAP Settings", + "integrations.not_connected": "Not Connected", + "integrations.page_title": "Integrations", + "integrations.password_label": "Password", + "integrations.port_label": "Port", + "integrations.title": "Integrations", + "integrations.username_label": "Username", + "language.bg": "Български", + "language.ca": "Català", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", + "language.cs": "Čeština", + "language.da": "Dansk", + "language.de": "Deutsch", + "language.el": "Ελληνικά", + "language.en": "English", + "language.es": "Español", + "language.et": "Eesti", + "language.fi": "Suomi", + "language.fr": "Français", + "language.ga": "Gaeilge", + "language.hr": "Hrvatski", + "language.hu": "Magyar", + "language.is": "Íslenska", + "language.it": "Italiano", + "language.lb": "Lëtzebuergesch", + "language.lt": "Lietuvių", + "language.lv": "Latviešu", + "language.nb": "Norsk", + "language.nl": "Nederlands", + "language.pl": "Polski", + "language.pt": "Português", + "language.ro": "Română", + "language.ru": "Русский", + "language.selector": "Language", + "language.selector_label": "Select language", + "language.sk": "Slovenčina", + "language.sl": "Slovenščina", + "language.sv": "Svenska", + "language.tr": "Türkçe", + "language.uk": "Українська", + "language.zh": "中文", + "nav.about": "About", + "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", + "nav.admin_actions": "Admin actions", + "nav.admin_menu": "Admin menu", + "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", + "nav.backup_restore": "Backup & Restore", + "nav.credentials": "Credentials", + "nav.dark_mode": "Dark Mode", + "nav.dashboard": "Dashboard", + "nav.developer_docs": "Developer Docs", + "nav.duplicates": "Duplicates", + "nav.file_manager": "File Manager", + "nav.files": "Files", + "nav.help": "Help", + "nav.help_center": "Help Center", + "nav.imap": "Email Import", + "nav.integrations": "Integrations", + "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", + "nav.main_navigation": "Main navigation", + "nav.notifications": "Notifications", + "nav.open_main_menu": "Open main menu", + "nav.pipelines": "Pipelines", + "nav.plan_designer": "Plan Designer", + "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", + "nav.queue_monitor": "Queue Monitor", + "nav.scheduled_jobs": "Scheduled Jobs", + "nav.search": "Search", + "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", + "nav.similarity": "Similarity", + "nav.skip_to_content": "Skip to main content", + "nav.status": "Status", + "nav.subscription": "Subscription", + "nav.toggle_dark_mode": "Toggle dark mode", + "nav.toggle_nav": "Toggle navigation menu", + "nav.upload": "Upload", + "nav.users": "Users", + "nav.version": "Version Info", + "notifications.filter_all": "All", + "notifications.filter_read": "Read only", + "notifications.filter_unread": "Unread only", + "notifications.manage_desc": "Manage your notification inbox, targets, and event preferences", + "notifications.mark_all_read": "Mark All as Read", + "notifications.mark_all_read_btn": "Mark all read", + "notifications.mark_read": "Mark as Read", + "notifications.no_notifications": "No notifications", + "notifications.page_title": "Notifications", + "notifications.tab_inbox": "Inbox", + "notifications.tab_settings": "Settings", + "notifications.title": "Notifications", + "notifications.unread_count": "{count} unread notifications", + "pipelines.active_label": "Active", + "pipelines.add_step_btn": "Add Step", + "pipelines.create": "Create Pipeline", + "pipelines.custom_label_label": "Custom Label", + "pipelines.default_label": "Default", + "pipelines.description_label": "Description", + "pipelines.description_placeholder": "Optional description", + "pipelines.disabled_label": "Disabled", + "pipelines.edit": "Edit Pipeline", + "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.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)", + "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.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_pipeline_label": "System pipeline (visible to all users)", + "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.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_date_from": "Date From", + "search.filter_date_to": "Date To", + "search.filter_document_type": "Document Type", + "search.filter_document_type_placeholder": "e.g. Invoice", + "search.filter_language": "Language", + "search.filter_language_placeholder": "e.g. de", + "search.filter_sender": "Sender", + "search.filter_sender_placeholder": "e.g. ACME Corp", + "search.filter_tags": "Tags", + "search.filter_tags_placeholder": "e.g. amazon", + "search.filter_text_quality": "Text Quality", + "search.filter_text_quality_all": "All", + "search.filter_text_quality_high": "High", + "search.filter_text_quality_low": "Low", + "search.filter_text_quality_medium": "Medium", + "search.filter_text_quality_no_text": "No text", + "search.heading": "Document Search", + "search.input_aria_label": "Search documents", + "search.input_placeholder": "Search documents by content, sender, tags, type...", + "search.loading_indicator": "Searching…", + "search.no_results": "No results found", + "search.page_title": "Search Documents", + "search.placeholder": "Search by filename, content, tags...", + "search.result_empty": "No documents found matching your query.", + "search.results_count": "{count} results found", + "search.saved_aria_save": "Save current search", + "search.saved_button": "Save Current", + "search.saved_empty": "No saved searches yet", + "search.saved_error": "Could not load saved searches", + "search.saved_label": "Saved Searches", + "search.saved_loading": "Loading...", + "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.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_setting_title": "Save this setting", + "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.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.build_date": "Build Date", + "status.container_id": "Container ID", + "status.git_commit": "Git Commit", + "status.last_check": "Last Check", + "status.page_title": "System Status", + "status.setting_label": "Setting", + "status.value_label": "Value", + "upload.browse_button": "Browse Files", + "upload.button_processing": "Processing...", + "upload.camera_button": "Take Photo / Scan Document", + "upload.download_button": "Download and Process", + "upload.downloading": "Downloading file from URL...", + "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_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_invalid_url": "Invalid URL format", + "upload.error_url_required": "Please enter a URL", + "upload.file_size_hint": "Maximum size: 500 MB per file", + "upload.file_types": "Allowed types: PDF, Office documents (Word, Excel, PowerPoint, etc.), Images", + "upload.filename_description": "Leave empty to use filename from URL", + "upload.filename_label": "Filename (optional)", + "upload.filename_placeholder": "my-document.pdf", + "upload.max_size": "Maximum file size: {size}", + "upload.page_title": "Upload Files", + "upload.section_device": "Upload from Device", + "upload.section_url": "Upload from URL", + "upload.select_file": "Select File", + "upload.success": "File uploaded successfully", + "upload.title": "Upload Document", + "upload.uploading": "Uploading...", + "upload.url_description": "Enter a direct link to a file (PDF, Office documents, or images)", + "upload.url_label": "File URL", + "upload.url_placeholder": "https://example.com/document.pdf" +} diff --git a/frontend/translations/vls.json b/frontend/translations/vls.json new file mode 100644 index 00000000..d36160ed --- /dev/null +++ b/frontend/translations/vls.json @@ -0,0 +1,929 @@ +{ + "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", + "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.create_account": "Create account", + "auth.display_name_label": "Display Name", + "auth.email_label": "Email", + "auth.forgot_password": "Forgot Password?", + "auth.forgot_username": "Forgot username?", + "auth.login": "Log In", + "auth.login_title": "Log In", + "auth.logo_alt": "DocuElevate Logo", + "auth.logout": "Log Out", + "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.profile": "Profile", + "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_title": "Sign Up", + "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.active": "Active", + "common.all": "All", + "common.back": "Back", + "common.cancel": "Cancel", + "common.close": "Close", + "common.col_pending": "Pending", + "common.completed": "Completed", + "common.confirm": "Confirm", + "common.copied": "Copied!", + "common.copy": "Copy", + "common.create": "Create", + "common.created": "Created", + "common.date": "Date", + "common.delete": "Delete", + "common.description": "Description", + "common.details": "Details", + "common.disabled": "Disabled", + "common.download": "Download", + "common.duplicate": "Duplicate", + "common.edit": "Edit", + "common.enabled": "Enabled", + "common.error": "Error", + "common.failed": "Failed", + "common.filter": "Filter", + "common.inactive": "Inactive", + "common.info": "Info", + "common.loading": "Loading...", + "common.name": "Name", + "common.next": "Next", + "common.next_page": "Next page", + "common.no": "No", + "common.none": "None", + "common.page": "Page", + "common.pending": "Pending", + "common.prev_page": "Previous page", + "common.previous": "Previous", + "common.processing": "Processing", + "common.refresh": "Refresh", + "common.reset": "Reset", + "common.retry": "Retry", + "common.save": "Save", + "common.search": "Search", + "common.select": "Select", + "common.select_placeholder": "— select —", + "common.size": "Size", + "common.status": "Status", + "common.submit": "Submit", + "common.success": "Success", + "common.tags": "Tags", + "common.type": "Type", + "common.updated": "Updated", + "common.upload": "Upload", + "common.view": "View", + "common.warning": "Warning", + "common.yes": "Yes", + "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", + "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", + "cookie.notice_label": "Cookie notice", + "cookie.policy_link": "Cookie Policy", + "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.files_this_month": "Files This Month", + "dashboard.files_today": "Files Today", + "dashboard.ocr_processed": "OCR Processed", + "dashboard.quick_actions": "Quick Actions", + "dashboard.recent_activity": "Recent Activity", + "dashboard.storage_targets": "Storage Targets", + "dashboard.title": "Dashboard", + "dashboard.total_files": "Total Files", + "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_heading": "Oops, we couldn’t find that page!", + "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_title": "404 - Not Found", + "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_heading": "Oops! Something Went Wrong.", + "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_message": "You do not have permission to access this page.", + "error.not_found": "Page not found", + "error.not_found_message": "The page you are looking for does not exist.", + "error.server_error": "Internal Server Error", + "error.server_error_message": "Something went wrong. Please try again later.", + "error.unauthorized": "Unauthorized", + "error.unauthorized_message": "You need to log in to access this page.", + "files.action_delete": "Delete file", + "files.action_details": "View details", + "files.action_preview": "Quick preview", + "files.bulk_clear_selection": "Clear Selection", + "files.bulk_cloud_ocr": "Re-run Cloud OCR", + "files.bulk_delete": "Delete Selected", + "files.bulk_download": "Download as ZIP", + "files.bulk_reprocess": "Reprocess Selected", + "files.delete_modal_cancel": "Cancel", + "files.delete_modal_confirm": "Delete", + "files.delete_modal_message": "Are you sure you want to delete this file?", + "files.delete_modal_title": "Confirm Deletion", + "files.document_title": "Document Title", + "files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more – folders are processed recursively", + "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.filename": "Filename", + "files.files_selected": "files selected", + "files.filter_all_providers": "All Providers", + "files.filter_all_statuses": "All Statuses", + "files.filter_all_types": "All Types", + "files.filter_apply": "Apply Filters", + "files.filter_clear": "Clear", + "files.filter_date_from": "Date From", + "files.filter_date_from_aria": "Filter from date", + "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_ocr_all": "All Files", + "files.filter_ocr_good": "Good quality", + "files.filter_ocr_poor": "Poor 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_search_label": "Search Filename", + "files.filter_search_placeholder": "Enter filename...", + "files.filter_storage_provider": "Storage Provider", + "files.filter_tags_aria": "Filter by tags (comma-separated)", + "files.filter_tags_placeholder": "e.g. invoice,amazon", + "files.fulltext_search_label": "Full-Text Search (OCR text, metadata, tags)", + "files.fulltext_search_placeholder": "Search document content, sender, tags, type...", + "files.no_files": "No files found", + "files.ocr_status": "OCR Status", + "files.page_title": "File Records", + "files.pagination_files": "files", + "files.pagination_first": "First", + "files.pagination_last": "Last", + "files.pagination_nav_aria": "File list pagination", + "files.pagination_next": "Next", + "files.pagination_of": "of", + "files.pagination_previous": "Previous", + "files.pagination_showing": "Showing", + "files.preview_modal_close": "Close 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.saved_searches_empty": "No saved searches yet", + "files.saved_searches_error": "Could not load saved searches", + "files.saved_searches_label": "Saved Searches", + "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_title": "Search Results", + "files.status_duplicate": "Duplicate", + "files.table_actions": "Actions", + "files.table_aria": "File records", + "files.table_created_at": "Created At", + "files.table_empty": "No files found", + "files.table_id": "ID", + "files.table_mime_type": "MIME Type", + "files.table_original_filename": "Original Filename", + "files.table_select_all": "Select all files on this page", + "files.tags": "Tags", + "files.title": "Files", + "files.upload_modal_aria": "Upload progress", + "files.upload_modal_close": "Close upload progress", + "files.upload_modal_header": "Uploading Files", + "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", + "footer.attributions": "Attributions", + "footer.cookies": "Cookies", + "footer.copyright": "DocuElevate {year}", + "footer.imprint": "Imprint", + "footer.license": "License", + "footer.navigation": "Footer navigation", + "footer.privacy": "Privacy", + "footer.terms": "Terms", + "footer.version": "Version {version}", + "help.destinations_dropbox": "Dropbox", + "help.destinations_dropbox_desc": "OAuth-linked. Files land in your chosen folder.", + "help.destinations_email": "Email Forwarding", + "help.destinations_email_desc": "Processed files sent as SMTP attachments.", + "help.destinations_google_drive": "Google Drive", + "help.destinations_google_drive_desc": "Service account or OAuth. Supports shared drives.", + "help.destinations_heading": "Destinations – Where Documents Go", + "help.destinations_nextcloud": "Nextcloud / WebDAV", + "help.destinations_nextcloud_desc": "Self-hosted cloud storage via WebDAV.", + "help.destinations_onedrive": "OneDrive", + "help.destinations_onedrive_desc": "Microsoft Graph API integration.", + "help.destinations_paperless": "Paperless-ngx", + "help.destinations_paperless_desc": "Push documents straight into Paperless for archival.", + "help.destinations_s3": "Amazon S3", + "help.destinations_s3_desc": "Any S3-compatible bucket (AWS, MinIO, Wasabi).", + "help.destinations_sftp": "SFTP / FTP", + "help.destinations_sftp_desc": "Secure file transfer to any server.", + "help.destinations_webhook": "Webhook", + "help.destinations_webhook_desc": "POST metadata to any external endpoint.", + "help.documentation": "Documentation", + "help.faq": "Frequently Asked Questions", + "help.faq_1_a": "Navigate to the Upload page, drag-and-drop your files or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.faq_1_q": "How do I upload documents?", + "help.faq_2_a": "PDF, JPEG, PNG, TIFF, BMP, GIF, DOCX, XLSX, PPTX, ODT, ODS, TXT, RTF, and HTML. Non-PDF files are automatically converted to PDF before processing.", + "help.faq_2_q": "Which file formats are supported?", + "help.faq_3_a": "Yes. Go to Email Ingestion, add an IMAP account, and DocuElevate will poll for new messages and process attachments automatically.", + "help.faq_3_q": "Can I ingest documents from email?", + "help.faq_4_a": "Pipelines let you chain processing steps – OCR, AI extraction, format conversion – and route the result to one or more destinations. Create and manage them from the Pipelines page.", + "help.faq_4_q": "How do processing pipelines work?", + "help.faq_5_a": "DocuElevate encrypts credentials at rest, communicates over TLS, and never stores your documents longer than necessary. See the Privacy Notice for full details.", + "help.faq_5_q": "Is my data secure?", + "help.faq_heading": "Frequently Asked Questions", + "help.getting_started": "Getting Started", + "help.heading": "Help Center", + "help.page_title": "Help Center", + "help.privacy_notice": "Privacy Notice", + "help.quickstart_heading": "Quick Start", + "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_upload": "Upload Documents", + "help.quickstart_upload_desc": "Drag & drop files onto the Upload page or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", + "help.quickstart_workflows": "Automate Workflows", + "help.quickstart_workflows_desc": "Create Pipelines to define multi-step processing and routing rules. Combine OCR, AI extraction, format conversion, and delivery in a single flow.", + "help.sources_email_ingestion": "Email Ingestion (IMAP)", + "help.sources_email_ingestion_desc": "Forward documents to a dedicated mailbox. Under Email Ingestion, add one or more IMAP accounts. DocuElevate polls for new messages and processes attachments automatically.", + "help.sources_heading": "Sources – Getting Documents In", + "help.sources_rest_api": "REST API", + "help.sources_rest_api_desc": "Integrate programmatically by POST-ing files to /api/upload. Ideal for scripts, watched folders, scanners, or third-party tools like Zapier and n8n.", + "help.sources_scanner": "Scanner & Mobile", + "help.sources_scanner_desc": "Point network scanners at DocuElevate's upload endpoint or use any mobile scanning app that supports custom HTTP destinations.", + "help.sources_web_upload": "Web Upload", + "help.sources_web_upload_desc": "The fastest way to get started. Open the Upload page, drop one or more files, and DocuElevate takes care of the rest. Supported formats include PDF, JPEG, PNG, TIFF, DOCX, XLSX, and more.", + "help.subheading": "Everything you need to get the most out of DocuElevate. Browse topics below or search for what you need.", + "help.support": "Support", + "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_heading": "Contact Support", + "help.support_ticket_button": "Submit a Ticket", + "help.support_ticket_heading": "Open a Support Ticket", + "help.title": "Help Center", + "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_heading": "Workflows & Pipelines", + "help.workflows_step_1": "Convert to PDF", + "help.workflows_step_1_create": "Go to Pipelines in the main menu.", + "help.workflows_step_2": "OCR – extract text", + "help.workflows_step_2_create": "Click New Pipeline and give it a name.", + "help.workflows_step_3": "AI metadata extraction", + "help.workflows_step_3_create": "Add the processing steps you need.", + "help.workflows_step_4": "Deliver to one or more destinations", + "help.workflows_step_4_create": "Choose one or more delivery destinations.", + "help.workflows_step_5_create": "Save – new documents will be processed through this pipeline automatically.", + "help.workflows_typical_steps": "Typical Steps", + "help.workflows_what_is": "What is a Pipeline?", + "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_ingestion": "Email & URL-based document ingestion", + "index.capabilities_ocr": "OCR & metadata extraction with AI", + "index.capabilities_paperless": "Paperless-ngx integration for document management", + "index.capabilities_title": "Capabilities", + "index.capabilities_workflows": "Automated classification & routing workflows", + "index.cta_description": "Join teams already automating their document processing with DocuElevate.", + "index.cta_heading": "Ready to elevate your document workflow?", + "index.cta_pricing": "See pricing", + "index.cta_signup": "Create a free account", + "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_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_desc": "Route processed files to Dropbox, Google Drive, OneDrive, Amazon S3, Nextcloud, Paperless NGX, WebDAV, FTP/SFTP, and more.", + "index.feature_email": "Email & IMAP Ingestion", + "index.feature_email_desc": "Automatically pull documents from Gmail or any IMAP mailbox — no manual uploads needed.", + "index.feature_ocr": "OCR & Text Extraction", + "index.feature_ocr_desc": "Azure Document Intelligence converts scanned PDFs and images into fully searchable text automatically.", + "index.feature_pipelines": "Custom Pipelines", + "index.feature_pipelines_desc": "Build processing pipelines with configurable steps — OCR, AI extraction, format conversion, and storage routing in any order.", + "index.feature_search": "Full-Text Search", + "index.feature_search_desc": "Instantly find any document by content, metadata, or tags across your entire archive.", + "index.feature_section_title": "Everything you need for smart document workflows", + "index.getting_started": "Getting Started", + "index.getting_started_1": "Configure integrations via System Status", + "index.getting_started_2": "Upload your first document", + "index.getting_started_3": "Review results in Files", + "index.getting_started_learn": "Learn more about DocuElevate", + "index.hero_description": "DocuElevate ingests your documents, runs OCR, extracts metadata with AI, and routes files to Dropbox, Google Drive, OneDrive, S3, Nextcloud, and more — all in one seamless pipeline.", + "index.hero_heading": "From upload to insight — automatically.", + "index.hero_login": "Log In", + "index.hero_pricing": "View Plans & Pricing", + "index.hero_signup": "Get Started — it’s free", + "index.integrations_active": "Active integrations", + "index.integrations_storage": "Storage targets", + "index.integrations_title": "Integrations", + "index.integrations_view_status": "View system status", + "index.page_title_dashboard": "Dashboard", + "index.page_title_public": "Intelligent Document Processing", + "index.platform_overview": "Platform overview", + "index.quick_actions": "Quick Actions", + "index.quick_documents": "My Documents", + "index.quick_documents_desc": "Browse your processed files", + "index.quick_search": "Search", + "index.quick_search_desc": "Full-text search across documents", + "index.quick_subscription": "My Subscription", + "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_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_subtitle": "Intelligent document processing & management", + "index.stat_active_integrations": "Active Integrations", + "index.stat_active_users": "Active users", + "index.stat_files_month": "Files this month", + "index.stat_files_today": "Files today", + "index.stat_storage_targets": "Storage Targets", + "index.stat_total_files": "Total files", + "index.tier_plan": "Plan", + "index.tier_upgrade": "Upgrade", + "index.tier_view_details": "View full details", + "index.upgrade_daily_limits": "Higher daily & monthly limits", + "index.upgrade_description": "Unlock more documents, more destinations and priority support.", + "index.upgrade_destinations": "More storage destinations", + "index.upgrade_ocr_pages": "More OCR pages", + "index.upgrade_plan": "Upgrade your plan", + "index.upgrade_view_pricing": "View plans & pricing", + "index.usage_lifetime": "Lifetime files", + "index.usage_month": "Files this month", + "index.usage_my_usage": "My usage", + "index.usage_today": "Files today", + "index.usage_unlimited": "Unlimited", + "integrations.configure": "Configure", + "integrations.connect": "Connect", + "integrations.connected": "Connected", + "integrations.disconnect": "Disconnect", + "integrations.empty_state": "No integrations configured", + "integrations.folder_label": "Folder", + "integrations.host_label": "Host", + "integrations.imap_settings": "IMAP Settings", + "integrations.not_connected": "Not Connected", + "integrations.page_title": "Integrations", + "integrations.password_label": "Password", + "integrations.port_label": "Port", + "integrations.title": "Integrations", + "integrations.username_label": "Username", + "language.bg": "Български", + "language.ca": "Català", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", + "language.cs": "Čeština", + "language.da": "Dansk", + "language.de": "Deutsch", + "language.el": "Ελληνικά", + "language.en": "English", + "language.es": "Español", + "language.et": "Eesti", + "language.fi": "Suomi", + "language.fr": "Français", + "language.ga": "Gaeilge", + "language.hr": "Hrvatski", + "language.hu": "Magyar", + "language.is": "Íslenska", + "language.it": "Italiano", + "language.lb": "Lëtzebuergesch", + "language.lt": "Lietuvių", + "language.lv": "Latviešu", + "language.nb": "Norsk", + "language.nl": "Nederlands", + "language.pl": "Polski", + "language.pt": "Português", + "language.ro": "Română", + "language.ru": "Русский", + "language.selector": "Language", + "language.selector_label": "Select language", + "language.sk": "Slovenčina", + "language.sl": "Slovenščina", + "language.sv": "Svenska", + "language.tr": "Türkçe", + "language.uk": "Українська", + "language.zh": "中文", + "nav.about": "About", + "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", + "nav.admin_actions": "Admin actions", + "nav.admin_menu": "Admin menu", + "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", + "nav.backup_restore": "Backup & Restore", + "nav.credentials": "Credentials", + "nav.dark_mode": "Dark Mode", + "nav.dashboard": "Dashboard", + "nav.developer_docs": "Developer Docs", + "nav.duplicates": "Duplicates", + "nav.file_manager": "File Manager", + "nav.files": "Files", + "nav.help": "Help", + "nav.help_center": "Help Center", + "nav.imap": "Email Import", + "nav.integrations": "Integrations", + "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", + "nav.main_navigation": "Main navigation", + "nav.notifications": "Notifications", + "nav.open_main_menu": "Open main menu", + "nav.pipelines": "Pipelines", + "nav.plan_designer": "Plan Designer", + "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", + "nav.queue_monitor": "Queue Monitor", + "nav.scheduled_jobs": "Scheduled Jobs", + "nav.search": "Search", + "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", + "nav.similarity": "Similarity", + "nav.skip_to_content": "Skip to main content", + "nav.status": "Status", + "nav.subscription": "Subscription", + "nav.toggle_dark_mode": "Toggle dark mode", + "nav.toggle_nav": "Toggle navigation menu", + "nav.upload": "Upload", + "nav.users": "Users", + "nav.version": "Version Info", + "notifications.filter_all": "All", + "notifications.filter_read": "Read only", + "notifications.filter_unread": "Unread only", + "notifications.manage_desc": "Manage your notification inbox, targets, and event preferences", + "notifications.mark_all_read": "Mark All as Read", + "notifications.mark_all_read_btn": "Mark all read", + "notifications.mark_read": "Mark as Read", + "notifications.no_notifications": "No notifications", + "notifications.page_title": "Notifications", + "notifications.tab_inbox": "Inbox", + "notifications.tab_settings": "Settings", + "notifications.title": "Notifications", + "notifications.unread_count": "{count} unread notifications", + "pipelines.active_label": "Active", + "pipelines.add_step_btn": "Add Step", + "pipelines.create": "Create Pipeline", + "pipelines.custom_label_label": "Custom Label", + "pipelines.default_label": "Default", + "pipelines.description_label": "Description", + "pipelines.description_placeholder": "Optional description", + "pipelines.disabled_label": "Disabled", + "pipelines.edit": "Edit Pipeline", + "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.force_cloud_ocr_label": "Force cloud OCR (skip local text extraction)", + "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.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_pipeline_label": "System pipeline (visible to all users)", + "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.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_date_from": "Date From", + "search.filter_date_to": "Date To", + "search.filter_document_type": "Document Type", + "search.filter_document_type_placeholder": "e.g. Invoice", + "search.filter_language": "Language", + "search.filter_language_placeholder": "e.g. de", + "search.filter_sender": "Sender", + "search.filter_sender_placeholder": "e.g. ACME Corp", + "search.filter_tags": "Tags", + "search.filter_tags_placeholder": "e.g. amazon", + "search.filter_text_quality": "Text Quality", + "search.filter_text_quality_all": "All", + "search.filter_text_quality_high": "High", + "search.filter_text_quality_low": "Low", + "search.filter_text_quality_medium": "Medium", + "search.filter_text_quality_no_text": "No text", + "search.heading": "Document Search", + "search.input_aria_label": "Search documents", + "search.input_placeholder": "Search documents by content, sender, tags, type...", + "search.loading_indicator": "Searching…", + "search.no_results": "No results found", + "search.page_title": "Search Documents", + "search.placeholder": "Search by filename, content, tags...", + "search.result_empty": "No documents found matching your query.", + "search.results_count": "{count} results found", + "search.saved_aria_save": "Save current search", + "search.saved_button": "Save Current", + "search.saved_empty": "No saved searches yet", + "search.saved_error": "Could not load saved searches", + "search.saved_label": "Saved Searches", + "search.saved_loading": "Loading...", + "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.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_setting_title": "Save this setting", + "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.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.build_date": "Build Date", + "status.container_id": "Container ID", + "status.git_commit": "Git Commit", + "status.last_check": "Last Check", + "status.page_title": "System Status", + "status.setting_label": "Setting", + "status.value_label": "Value", + "upload.browse_button": "Browse Files", + "upload.button_processing": "Processing...", + "upload.camera_button": "Take Photo / Scan Document", + "upload.download_button": "Download and Process", + "upload.downloading": "Downloading file from URL...", + "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_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_invalid_url": "Invalid URL format", + "upload.error_url_required": "Please enter a URL", + "upload.file_size_hint": "Maximum size: 500 MB per file", + "upload.file_types": "Allowed types: PDF, Office documents (Word, Excel, PowerPoint, etc.), Images", + "upload.filename_description": "Leave empty to use filename from URL", + "upload.filename_label": "Filename (optional)", + "upload.filename_placeholder": "my-document.pdf", + "upload.max_size": "Maximum file size: {size}", + "upload.page_title": "Upload Files", + "upload.section_device": "Upload from Device", + "upload.section_url": "Upload from URL", + "upload.select_file": "Select File", + "upload.success": "File uploaded successfully", + "upload.title": "Upload Document", + "upload.uploading": "Uploading...", + "upload.url_description": "Enter a direct link to a file (PDF, Office documents, or images)", + "upload.url_label": "File URL", + "upload.url_placeholder": "https://example.com/document.pdf" +} diff --git a/frontend/translations/zh.json b/frontend/translations/zh.json index 34c2680c..d36160ed 100644 --- a/frontend/translations/zh.json +++ b/frontend/translations/zh.json @@ -106,22 +106,22 @@ "auth.email_label": "Email", "auth.forgot_password": "Forgot Password?", "auth.forgot_username": "Forgot username?", - "auth.login": "登录", + "auth.login": "Log In", "auth.login_title": "Log In", "auth.logo_alt": "DocuElevate Logo", - "auth.logout": "退出", - "auth.my_account": "我的账户", + "auth.logout": "Log Out", + "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.profile": "个人资料", + "auth.profile": "Profile", "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": "Sign Up", "auth.signup_title": "Sign Up", "auth.username_label": "Username", "auth.username_or_email": "Username or Email", @@ -184,62 +184,69 @@ "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.active": "活跃", - "common.all": "全部", - "common.back": "返回", - "common.cancel": "取消", - "common.close": "关闭", + "common.actions": "Actions", + "common.active": "Active", + "common.all": "All", + "common.back": "Back", + "common.cancel": "Cancel", + "common.close": "Close", "common.col_pending": "Pending", - "common.completed": "已完成", - "common.confirm": "确认", - "common.copied": "已复制!", - "common.copy": "复制", - "common.created": "创建时间", - "common.date": "日期", - "common.delete": "删除", - "common.description": "描述", - "common.details": "详情", - "common.disabled": "已禁用", - "common.download": "下载", - "common.edit": "编辑", - "common.enabled": "已启用", - "common.error": "错误", - "common.failed": "失败", - "common.filter": "筛选", - "common.inactive": "不活跃", - "common.info": "信息", - "common.loading": "加载中...", - "common.name": "名称", - "common.next": "下一步", + "common.completed": "Completed", + "common.confirm": "Confirm", + "common.copied": "Copied!", + "common.copy": "Copy", + "common.create": "Create", + "common.created": "Created", + "common.date": "Date", + "common.delete": "Delete", + "common.description": "Description", + "common.details": "Details", + "common.disabled": "Disabled", + "common.download": "Download", + "common.duplicate": "Duplicate", + "common.edit": "Edit", + "common.enabled": "Enabled", + "common.error": "Error", + "common.failed": "Failed", + "common.filter": "Filter", + "common.inactive": "Inactive", + "common.info": "Info", + "common.loading": "Loading...", + "common.name": "Name", + "common.next": "Next", "common.next_page": "Next page", - "common.no": "否", - "common.none": "无", + "common.no": "No", + "common.none": "None", "common.page": "Page", - "common.pending": "待处理", + "common.pending": "Pending", "common.prev_page": "Previous page", - "common.processing": "处理中", - "common.refresh": "刷新", - "common.reset": "重置", - "common.retry": "重试", - "common.save": "保存", - "common.search": "搜索", - "common.select": "选择", + "common.previous": "Previous", + "common.processing": "Processing", + "common.refresh": "Refresh", + "common.reset": "Reset", + "common.retry": "Retry", + "common.save": "Save", + "common.search": "Search", + "common.select": "Select", "common.select_placeholder": "— select —", - "common.size": "大小", - "common.status": "状态", - "common.success": "成功", - "common.type": "类型", - "common.updated": "更新时间", - "common.upload": "上传", - "common.view": "查看", - "common.warning": "警告", - "common.yes": "是", - "cookie.accept": "我知道了", - "cookie.notice": "DocuElevate 仅使用身份验证和服务运行所需的基本会话 Cookie。不使用任何跟踪或分析 Cookie。", - "cookie.notice_label": "Cookie 通知", - "cookie.policy_link": "Cookie 政策", - "cookie.privacy_link": "隐私声明", + "common.size": "Size", + "common.status": "Status", + "common.submit": "Submit", + "common.success": "Success", + "common.tags": "Tags", + "common.type": "Type", + "common.updated": "Updated", + "common.upload": "Upload", + "common.view": "View", + "common.warning": "Warning", + "common.yes": "Yes", + "cookie.accept": "Got it", + "cookie.learn_more": "Learn more", + "cookie.message": "This website uses cookies to improve your experience.", + "cookie.notice": "DocuElevate uses only essential session cookies required for authentication and service operation. No tracking or analytics cookies are used.", + "cookie.notice_label": "Cookie notice", + "cookie.policy_link": "Cookie Policy", + "cookie.privacy_link": "Privacy Notice", "credentials.col_action": "Action", "credentials.col_credential": "Credential", "credentials.col_source": "Source", @@ -263,16 +270,16 @@ "credentials.table_for": "Credentials for", "credentials.title": "Credential Audit", "credentials.total_credentials": "Total Credentials", - "dashboard.active_integrations": "活跃集成", - "dashboard.files_this_month": "本月文件", - "dashboard.files_today": "今日文件", - "dashboard.ocr_processed": "OCR 已处理", - "dashboard.quick_actions": "快捷操作", - "dashboard.recent_activity": "最近活动", - "dashboard.storage_targets": "存储目标", - "dashboard.title": "仪表盘", - "dashboard.total_files": "文件总数", - "dashboard.welcome": "欢迎使用 DocuElevate", + "dashboard.active_integrations": "Active Integrations", + "dashboard.files_this_month": "Files This Month", + "dashboard.files_today": "Files Today", + "dashboard.ocr_processed": "OCR Processed", + "dashboard.quick_actions": "Quick Actions", + "dashboard.recent_activity": "Recent Activity", + "dashboard.storage_targets": "Storage Targets", + "dashboard.title": "Dashboard", + "dashboard.total_files": "Total Files", + "dashboard.welcome": "Welcome to DocuElevate", "duplicates.file_id_label": "File ID", "duplicates.file_id_placeholder": "e.g. 42", "duplicates.find_btn": "Find", @@ -310,14 +317,14 @@ "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_message": "您没有权限访问此页面。", - "error.not_found": "页面未找到", - "error.not_found_message": "您要查找的页面不存在。", - "error.server_error": "服务器内部错误", - "error.server_error_message": "出了点问题,请稍后再试。", - "error.unauthorized": "未授权", - "error.unauthorized_message": "您需要登录才能访问此页面。", + "error.forbidden": "Forbidden", + "error.forbidden_message": "You do not have permission to access this page.", + "error.not_found": "Page not found", + "error.not_found_message": "The page you are looking for does not exist.", + "error.server_error": "Internal Server Error", + "error.server_error_message": "Something went wrong. Please try again later.", + "error.unauthorized": "Unauthorized", + "error.unauthorized_message": "You need to log in to access this page.", "files.action_delete": "Delete file", "files.action_details": "View details", "files.action_preview": "Quick preview", @@ -330,12 +337,12 @@ "files.delete_modal_confirm": "Delete", "files.delete_modal_message": "Are you sure you want to delete this file?", "files.delete_modal_title": "Confirm Deletion", - "files.document_title": "文档标题", - "files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more", + "files.document_title": "Document Title", + "files.drop_overlay_hint": "Supports PDF, Office docs, images, HTML, Markdown, and more – folders are processed recursively", "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.filename": "文件名", + "files.file_size": "File Size", + "files.filename": "Filename", "files.files_selected": "files selected", "files.filter_all_providers": "All Providers", "files.filter_all_statuses": "All Statuses", @@ -359,10 +366,10 @@ "files.filter_storage_provider": "Storage Provider", "files.filter_tags_aria": "Filter by tags (comma-separated)", "files.filter_tags_placeholder": "e.g. invoice,amazon", - "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.no_files": "未找到文件", - "files.ocr_status": "OCR 状态", + "files.no_files": "No files found", + "files.ocr_status": "OCR Status", "files.page_title": "File Records", "files.pagination_files": "files", "files.pagination_first": "First", @@ -392,21 +399,23 @@ "files.table_mime_type": "MIME Type", "files.table_original_filename": "Original Filename", "files.table_select_all": "Select all files on this page", - "files.tags": "标签", - "files.title": "文件", + "files.tags": "Tags", + "files.title": "Files", "files.upload_modal_aria": "Upload progress", "files.upload_modal_close": "Close upload progress", "files.upload_modal_header": "Uploading Files", - "files.uploaded": "已上传", - "footer.attributions": "致谢", - "footer.cookies": "Cookie", + "files.uploaded": "Uploaded", + "footer.about": "About", + "footer.attribution": "Attribution", + "footer.attributions": "Attributions", + "footer.cookies": "Cookies", "footer.copyright": "DocuElevate {year}", - "footer.imprint": "法律声明", - "footer.license": "许可", - "footer.navigation": "页脚导航", - "footer.privacy": "隐私", - "footer.terms": "条款", - "footer.version": "版本 {version}", + "footer.imprint": "Imprint", + "footer.license": "License", + "footer.navigation": "Footer navigation", + "footer.privacy": "Privacy", + "footer.terms": "Terms", + "footer.version": "Version {version}", "help.destinations_dropbox": "Dropbox", "help.destinations_dropbox_desc": "OAuth-linked. Files land in your chosen folder.", "help.destinations_email": "Email Forwarding", @@ -426,8 +435,8 @@ "help.destinations_sftp_desc": "Secure file transfer to any server.", "help.destinations_webhook": "Webhook", "help.destinations_webhook_desc": "POST metadata to any external endpoint.", - "help.documentation": "文档", - "help.faq": "常见问题", + "help.documentation": "Documentation", + "help.faq": "Frequently Asked Questions", "help.faq_1_a": "Navigate to the Upload page, drag-and-drop your files or click Choose File. DocuElevate converts images and office documents to PDF, runs OCR, and extracts metadata automatically.", "help.faq_1_q": "How do I upload documents?", "help.faq_2_a": "PDF, JPEG, PNG, TIFF, BMP, GIF, DOCX, XLSX, PPTX, ODT, ODS, TXT, RTF, and HTML. Non-PDF files are automatically converted to PDF before processing.", @@ -439,7 +448,7 @@ "help.faq_5_a": "DocuElevate encrypts credentials at rest, communicates over TLS, and never stores your documents longer than necessary. See the Privacy Notice for full details.", "help.faq_5_q": "Is my data secure?", "help.faq_heading": "Frequently Asked Questions", - "help.getting_started": "入门指南", + "help.getting_started": "Getting Started", "help.heading": "Help Center", "help.page_title": "Help Center", "help.privacy_notice": "Privacy Notice", @@ -460,13 +469,13 @@ "help.sources_web_upload": "Web Upload", "help.sources_web_upload_desc": "The fastest way to get started. Open the Upload page, drop one or more files, and DocuElevate takes care of the rest. Supported formats include PDF, JPEG, PNG, TIFF, DOCX, XLSX, and more.", "help.subheading": "Everything you need to get the most out of DocuElevate. Browse topics below or search for what you need.", - "help.support": "支持", + "help.support": "Support", "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_heading": "Contact Support", "help.support_ticket_button": "Submit a Ticket", "help.support_ticket_heading": "Open a Support Ticket", - "help.title": "帮助中心", + "help.title": "Help Center", "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_heading": "Workflows & Pipelines", @@ -561,23 +570,24 @@ "index.usage_my_usage": "My usage", "index.usage_today": "Files today", "index.usage_unlimited": "Unlimited", - "integrations.configure": "配置", - "integrations.connect": "连接", - "integrations.connected": "已连接", - "integrations.disconnect": "断开", + "integrations.configure": "Configure", + "integrations.connect": "Connect", + "integrations.connected": "Connected", + "integrations.disconnect": "Disconnect", "integrations.empty_state": "No integrations configured", "integrations.folder_label": "Folder", "integrations.host_label": "Host", "integrations.imap_settings": "IMAP Settings", - "integrations.not_connected": "未连接", + "integrations.not_connected": "Not Connected", "integrations.page_title": "Integrations", "integrations.password_label": "Password", "integrations.port_label": "Port", - "integrations.title": "集成", + "integrations.title": "Integrations", "integrations.username_label": "Username", "language.bg": "Български", "language.ca": "Català", - "language.changed": "语言已更改为{language}", + "language.change_success": "Language changed to {language}", + "language.changed": "Language changed to {language}", "language.cs": "Čeština", "language.da": "Dansk", "language.de": "Deutsch", @@ -601,69 +611,85 @@ "language.pt": "Português", "language.ro": "Română", "language.ru": "Русский", - "language.selector": "语言", + "language.selector": "Language", + "language.selector_label": "Select language", "language.sk": "Slovenčina", "language.sl": "Slovenščina", "language.sv": "Svenska", "language.tr": "Türkçe", "language.uk": "Українська", "language.zh": "中文", - "nav.about": "关于", - "nav.admin": "管理", - "nav.admin_actions": "管理操作", - "nav.admin_menu": "管理菜单", - "nav.api_docs": "API 文档", - "nav.backup_restore": "备份与恢复", - "nav.credentials": "凭据", - "nav.dark_mode": "深色模式", - "nav.dashboard": "仪表盘", - "nav.developer_docs": "开发者文档", - "nav.duplicates": "重复文件", - "nav.file_manager": "文件管理器", - "nav.files": "文件", - "nav.help": "帮助", - "nav.help_center": "帮助中心", - "nav.integrations": "集成", - "nav.light_mode": "浅色模式", - "nav.main_navigation": "主导航", - "nav.notifications": "通知", - "nav.open_main_menu": "打开主菜单", - "nav.pipelines": "处理流程", - "nav.plan_designer": "方案设计", - "nav.pricing": "价格", - "nav.queue_monitor": "队列监控", - "nav.scheduled_jobs": "计划任务", - "nav.search": "搜索", - "nav.settings": "设置", - "nav.similarity": "相似度", - "nav.skip_to_content": "跳至主要内容", - "nav.status": "状态", - "nav.toggle_dark_mode": "切换深色模式", - "nav.toggle_nav": "切换导航菜单", - "nav.upload": "上传", - "nav.users": "用户", + "nav.about": "About", + "nav.admin": "Admin", + "nav.admin.audit_logs": "Audit Logs", + "nav.admin.backups": "Backups", + "nav.admin.plans": "Plans", + "nav.admin.scheduled_jobs": "Scheduled Jobs", + "nav.admin.users": "Users", + "nav.admin_actions": "Admin actions", + "nav.admin_menu": "Admin menu", + "nav.api_docs": "API Docs", + "nav.api_tokens": "API Tokens", + "nav.backup_restore": "Backup & Restore", + "nav.credentials": "Credentials", + "nav.dark_mode": "Dark Mode", + "nav.dashboard": "Dashboard", + "nav.developer_docs": "Developer Docs", + "nav.duplicates": "Duplicates", + "nav.file_manager": "File Manager", + "nav.files": "Files", + "nav.help": "Help", + "nav.help_center": "Help Center", + "nav.imap": "Email Import", + "nav.integrations": "Integrations", + "nav.light_mode": "Light Mode", + "nav.login": "Log In", + "nav.logout": "Log Out", + "nav.main_navigation": "Main navigation", + "nav.notifications": "Notifications", + "nav.open_main_menu": "Open main menu", + "nav.pipelines": "Pipelines", + "nav.plan_designer": "Plan Designer", + "nav.pricing": "Pricing", + "nav.profile": "Profile", + "nav.queue": "Queue", + "nav.queue_monitor": "Queue Monitor", + "nav.scheduled_jobs": "Scheduled Jobs", + "nav.search": "Search", + "nav.settings": "Settings", + "nav.shared_links": "Shared Links", + "nav.signup": "Sign Up", + "nav.similarity": "Similarity", + "nav.skip_to_content": "Skip to main content", + "nav.status": "Status", + "nav.subscription": "Subscription", + "nav.toggle_dark_mode": "Toggle dark mode", + "nav.toggle_nav": "Toggle navigation menu", + "nav.upload": "Upload", + "nav.users": "Users", + "nav.version": "Version Info", "notifications.filter_all": "All", "notifications.filter_read": "Read only", "notifications.filter_unread": "Unread only", "notifications.manage_desc": "Manage your notification inbox, targets, and event preferences", - "notifications.mark_all_read": "全部标记为已读", + "notifications.mark_all_read": "Mark All as Read", "notifications.mark_all_read_btn": "Mark all read", - "notifications.mark_read": "标记为已读", - "notifications.no_notifications": "没有通知", + "notifications.mark_read": "Mark as Read", + "notifications.no_notifications": "No notifications", "notifications.page_title": "Notifications", "notifications.tab_inbox": "Inbox", "notifications.tab_settings": "Settings", - "notifications.title": "通知", - "notifications.unread_count": "{count} 条未读通知", + "notifications.title": "Notifications", + "notifications.unread_count": "{count} unread notifications", "pipelines.active_label": "Active", "pipelines.add_step_btn": "Add Step", - "pipelines.create": "创建流程", + "pipelines.create": "Create Pipeline", "pipelines.custom_label_label": "Custom Label", "pipelines.default_label": "Default", "pipelines.description_label": "Description", "pipelines.description_placeholder": "Optional description", "pipelines.disabled_label": "Disabled", - "pipelines.edit": "编辑流程", + "pipelines.edit": "Edit Pipeline", "pipelines.empty_state": "No pipelines yet", "pipelines.empty_state_hint": "Create your first pipeline to define custom document processing workflows.", "pipelines.enabled_label": "Enabled", @@ -686,7 +712,7 @@ "pipelines.subtitle_system_pre": "System pipelines (created by admins) are shown with a", "pipelines.system_label": "System", "pipelines.system_pipeline_label": "System pipeline (visible to all users)", - "pipelines.title": "处理流程", + "pipelines.title": "Processing Pipelines", "queue.active_tasks": "Active Tasks", "queue.auto_refresh_1": "Auto-refreshes every", "queue.auto_refresh_2": "seconds", @@ -736,18 +762,18 @@ "search.input_aria_label": "Search documents", "search.input_placeholder": "Search documents by content, sender, tags, type...", "search.loading_indicator": "Searching…", - "search.no_results": "未找到结果", + "search.no_results": "No results found", "search.page_title": "Search Documents", - "search.placeholder": "按文件名、内容、标签搜索...", + "search.placeholder": "Search by filename, content, tags...", "search.result_empty": "No documents found matching your query.", - "search.results_count": "找到 {count} 个结果", + "search.results_count": "{count} results found", "search.saved_aria_save": "Save current search", "search.saved_button": "Save Current", "search.saved_empty": "No saved searches yet", "search.saved_error": "Could not load saved searches", "search.saved_label": "Saved Searches", "search.saved_loading": "Loading...", - "search.title": "搜索文档", + "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", @@ -771,15 +797,15 @@ "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": "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": "设置保存失败", + "settings.save_error": "Failed to save setting", "settings.save_setting_title": "Save this setting", - "settings.save_success": "设置保存成功", + "settings.save_success": "Setting saved successfully", "settings.saving_state": "Saving…", "settings.search_aria_label": "Search settings", "settings.search_clear_aria": "Clear search", @@ -788,7 +814,7 @@ "settings.source_db_badge": "DB", "settings.source_default_badge": "DEFAULT", "settings.source_env_badge": "ENV", - "settings.title": "设置", + "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", @@ -877,11 +903,11 @@ "upload.camera_button": "Take Photo / Scan Document", "upload.download_button": "Download and Process", "upload.downloading": "Downloading file from URL...", - "upload.drag_drop": "将文件拖放到此处或点击浏览", + "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_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 failed", "upload.error_invalid_url": "Invalid URL format", "upload.error_url_required": "Please enter a URL", "upload.file_size_hint": "Maximum size: 500 MB per file", @@ -889,14 +915,14 @@ "upload.filename_description": "Leave empty to use filename from URL", "upload.filename_label": "Filename (optional)", "upload.filename_placeholder": "my-document.pdf", - "upload.max_size": "最大文件大小:{size}", + "upload.max_size": "Maximum file size: {size}", "upload.page_title": "Upload Files", "upload.section_device": "Upload from Device", "upload.section_url": "Upload from URL", - "upload.select_file": "选择文件", - "upload.success": "文件上传成功", - "upload.title": "上传文档", - "upload.uploading": "上传中...", + "upload.select_file": "Select File", + "upload.success": "File uploaded successfully", + "upload.title": "Upload Document", + "upload.uploading": "Uploading...", "upload.url_description": "Enter a direct link to a file (PDF, Office documents, or images)", "upload.url_label": "File URL", "upload.url_placeholder": "https://example.com/document.pdf" diff --git a/migrations/env.py b/migrations/env.py index 5bd09c43..a0bc2f99 100644 --- a/migrations/env.py +++ b/migrations/env.py @@ -33,6 +33,7 @@ from app.models import ( # noqa: F401 LocalUser, MobileDevice, Pipeline, + PipelineRoutingRule, PipelineStep, ProcessingLog, SavedSearch, diff --git a/migrations/versions/035_add_routing_rules.py b/migrations/versions/035_add_routing_rules.py new file mode 100644 index 00000000..d15648ea --- /dev/null +++ b/migrations/versions/035_add_routing_rules.py @@ -0,0 +1,46 @@ +"""Add pipeline_routing_rules table for conditional document routing. + +Revision ID: 035_add_routing_rules +Revises: 034_add_user_profile_settings +Create Date: 2026-03-09 +""" + +from typing import Union + +import sqlalchemy as sa +from alembic import op + +revision: str = "035_add_routing_rules" +down_revision: Union[str, None] = "034_add_user_profile_settings" +depends_on: Union[str, None] = None + + +def upgrade() -> None: + """Create pipeline_routing_rules table.""" + op.create_table( + "pipeline_routing_rules", + sa.Column("id", sa.Integer(), nullable=False), + sa.Column("owner_id", sa.String(), nullable=True), + sa.Column("name", sa.String(255), nullable=False), + sa.Column("position", sa.Integer(), nullable=False, server_default="0"), + sa.Column("field", sa.String(255), nullable=False), + sa.Column("operator", sa.String(50), nullable=False), + sa.Column("value", sa.String(1024), nullable=False), + sa.Column("target_pipeline_id", sa.Integer(), nullable=False), + sa.Column("is_active", sa.Boolean(), nullable=False, server_default="1"), + sa.Column("created_at", sa.DateTime(timezone=True), server_default=sa.func.now()), + sa.Column("updated_at", sa.DateTime(timezone=True), server_default=sa.func.now()), + sa.PrimaryKeyConstraint("id"), + sa.ForeignKeyConstraint(["target_pipeline_id"], ["pipelines.id"]), + ) + op.create_index("ix_routing_rules_id", "pipeline_routing_rules", ["id"]) + op.create_index("ix_routing_rules_owner_id", "pipeline_routing_rules", ["owner_id"]) + op.create_index("ix_routing_rules_target_pipeline_id", "pipeline_routing_rules", ["target_pipeline_id"]) + + +def downgrade() -> None: + """Drop pipeline_routing_rules table.""" + op.drop_index("ix_routing_rules_target_pipeline_id", "pipeline_routing_rules") + op.drop_index("ix_routing_rules_owner_id", "pipeline_routing_rules") + op.drop_index("ix_routing_rules_id", "pipeline_routing_rules") + op.drop_table("pipeline_routing_rules") diff --git a/tests/conftest.py b/tests/conftest.py index 6befe3d8..fef85bd9 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -66,6 +66,7 @@ from app.models import ( # noqa: F401, E402 DocumentMetadata, FileRecord, Pipeline, + PipelineRoutingRule, PipelineStep, ProcessingLog, SavedSearch, diff --git a/tests/test_routing_rules.py b/tests/test_routing_rules.py new file mode 100644 index 00000000..3598c3e0 --- /dev/null +++ b/tests/test_routing_rules.py @@ -0,0 +1,803 @@ +"""Tests for the routing rules API and routing engine. + +Covers CRUD operations for routing rules, rule evaluation (dry-run and engine), +operator logic, access control, and edge cases. +""" + +import json + +import pytest + +from app.models import FileRecord, Pipeline, PipelineRoutingRule +from app.utils.routing_engine import ( + BUILTIN_FIELDS, + VALID_OPERATORS, + _evaluate_condition, + _resolve_field, + _to_float, + build_document_properties, + evaluate_routing_rules, +) + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + + +def _make_pipeline(db_session, name="Test Pipeline", owner_id="testuser", is_active=True): + """Insert a minimal Pipeline and return it.""" + p = Pipeline(owner_id=owner_id, name=name, is_default=False, is_active=is_active) + db_session.add(p) + db_session.commit() + db_session.refresh(p) + return p + + +def _make_rule(db_session, target_pipeline_id, **kwargs): + """Insert a PipelineRoutingRule and return it.""" + defaults = { + "owner_id": "testuser", + "name": "Test Rule", + "position": 0, + "field": "file_type", + "operator": "equals", + "value": "application/pdf", + "is_active": True, + } + defaults.update(kwargs) + defaults["target_pipeline_id"] = target_pipeline_id + rule = PipelineRoutingRule(**defaults) + db_session.add(rule) + db_session.commit() + db_session.refresh(rule) + return rule + + +def _make_file_record(db_session, **kwargs): + """Insert a minimal FileRecord and return it.""" + defaults = { + "owner_id": "testuser", + "filehash": "abc123", + "original_filename": "test.pdf", + "local_filename": "/tmp/test.pdf", + "file_size": 1024, + "mime_type": "application/pdf", + } + defaults.update(kwargs) + fr = FileRecord(**defaults) + db_session.add(fr) + db_session.commit() + db_session.refresh(fr) + return fr + + +# =========================================================================== +# Unit tests – routing engine +# =========================================================================== + + +@pytest.mark.unit +class TestResolveField: + """Tests for _resolve_field().""" + + def test_builtin_field(self): + """Built-in fields are resolved directly from the dict.""" + props = {"file_type": "application/pdf", "size": 1024} + assert _resolve_field("file_type", props) == "application/pdf" + assert _resolve_field("size", props) == 1024 + + def test_category_alias(self): + """'category' is an alias for 'document_type'.""" + props = {"document_type": "Invoice"} + assert _resolve_field("category", props) == "Invoice" + + def test_metadata_field(self): + """'metadata.' resolves from the nested metadata dict.""" + props = {"metadata": {"sender": "Acme Corp", "amount": 100.50}} + assert _resolve_field("metadata.sender", props) == "Acme Corp" + assert _resolve_field("metadata.amount", props) == 100.50 + + def test_missing_metadata_key(self): + """Missing metadata key returns None.""" + props = {"metadata": {"sender": "Acme"}} + assert _resolve_field("metadata.missing_key", props) is None + + def test_missing_metadata_dict(self): + """Missing metadata dict returns None.""" + props = {} + assert _resolve_field("metadata.sender", props) is None + + def test_missing_builtin_field(self): + """Missing built-in field returns None.""" + props = {} + assert _resolve_field("file_type", props) is None + + +@pytest.mark.unit +class TestToFloat: + """Tests for _to_float().""" + + def test_int_value(self): + assert _to_float(42) == 42.0 + + def test_float_value(self): + assert _to_float(3.14) == 3.14 + + def test_string_number(self): + assert _to_float("100") == 100.0 + + def test_none_returns_none(self): + assert _to_float(None) is None + + def test_non_numeric_string_returns_none(self): + assert _to_float("not-a-number") is None + + +@pytest.mark.unit +class TestEvaluateCondition: + """Tests for _evaluate_condition().""" + + def test_equals_match(self): + assert _evaluate_condition("application/pdf", "equals", "application/pdf") is True + + def test_equals_case_insensitive(self): + assert _evaluate_condition("Application/PDF", "equals", "application/pdf") is True + + def test_equals_no_match(self): + assert _evaluate_condition("image/png", "equals", "application/pdf") is False + + def test_not_equals_match(self): + assert _evaluate_condition("image/png", "not_equals", "application/pdf") is True + + def test_not_equals_no_match(self): + assert _evaluate_condition("application/pdf", "not_equals", "application/pdf") is False + + def test_contains_match(self): + assert _evaluate_condition("invoice_2024.pdf", "contains", "invoice") is True + + def test_contains_case_insensitive(self): + assert _evaluate_condition("INVOICE_2024.PDF", "contains", "invoice") is True + + def test_contains_no_match(self): + assert _evaluate_condition("receipt.pdf", "contains", "invoice") is False + + def test_not_contains_match(self): + assert _evaluate_condition("receipt.pdf", "not_contains", "invoice") is True + + def test_not_contains_no_match(self): + assert _evaluate_condition("invoice_2024.pdf", "not_contains", "invoice") is False + + def test_regex_match(self): + assert _evaluate_condition("invoice_2024.pdf", "regex", r"invoice_\d+\.pdf") is True + + def test_regex_no_match(self): + assert _evaluate_condition("receipt.pdf", "regex", r"invoice_\d+\.pdf") is False + + def test_regex_case_insensitive(self): + assert _evaluate_condition("INVOICE_2024.PDF", "regex", r"invoice_\d+\.pdf") is True + + def test_regex_invalid_pattern(self): + """Invalid regex should return False, not raise.""" + assert _evaluate_condition("test", "regex", r"[invalid") is False + + def test_gt(self): + assert _evaluate_condition(2048, "gt", "1024") is True + assert _evaluate_condition(1024, "gt", "1024") is False + + def test_lt(self): + assert _evaluate_condition(512, "lt", "1024") is True + assert _evaluate_condition(1024, "lt", "1024") is False + + def test_gte(self): + assert _evaluate_condition(1024, "gte", "1024") is True + assert _evaluate_condition(2048, "gte", "1024") is True + assert _evaluate_condition(512, "gte", "1024") is False + + def test_lte(self): + assert _evaluate_condition(1024, "lte", "1024") is True + assert _evaluate_condition(512, "lte", "1024") is True + assert _evaluate_condition(2048, "lte", "1024") is False + + def test_none_actual_returns_false(self): + """When the actual value is None, most operators return False.""" + assert _evaluate_condition(None, "equals", "test") is False + assert _evaluate_condition(None, "contains", "test") is False + assert _evaluate_condition(None, "regex", "test") is False + assert _evaluate_condition(None, "gt", "10") is False + + def test_none_actual_not_equals_returns_true(self): + """not_equals should return True when actual is None.""" + assert _evaluate_condition(None, "not_equals", "test") is True + + def test_none_actual_not_contains_returns_true(self): + """not_contains should return True when actual is None.""" + assert _evaluate_condition(None, "not_contains", "test") is True + + def test_non_numeric_gt_returns_false(self): + """Non-numeric values should return False for numeric operators.""" + assert _evaluate_condition("abc", "gt", "100") is False + + def test_unknown_operator_returns_false(self): + """Unknown operator should return False.""" + assert _evaluate_condition("test", "unknown_op", "test") is False + + +@pytest.mark.unit +class TestBuildDocumentProperties: + """Tests for build_document_properties().""" + + def test_basic_properties(self): + """Properties are extracted from FileRecord attributes.""" + fr = _MockFileRecord( + mime_type="application/pdf", + original_filename="test.pdf", + file_size=2048, + ai_metadata=json.dumps({"document_type": "Invoice", "sender": "Acme"}), + ) + props = build_document_properties(fr) + assert props["file_type"] == "application/pdf" + assert props["filename"] == "test.pdf" + assert props["size"] == 2048 + assert props["document_type"] == "Invoice" + assert props["metadata"]["sender"] == "Acme" + + def test_no_metadata(self): + """When ai_metadata is None, metadata is an empty dict.""" + fr = _MockFileRecord(mime_type="image/png", original_filename="img.png", file_size=512, ai_metadata=None) + props = build_document_properties(fr) + assert props["metadata"] == {} + assert props["document_type"] is None + + def test_invalid_metadata_json(self): + """Invalid JSON in ai_metadata should result in empty metadata.""" + fr = _MockFileRecord( + mime_type="application/pdf", + original_filename="test.pdf", + file_size=1024, + ai_metadata="not-json", + ) + props = build_document_properties(fr) + assert props["metadata"] == {} + + +class _MockFileRecord: + """Lightweight stand-in for FileRecord in unit tests.""" + + def __init__(self, **kwargs): + for k, v in kwargs.items(): + setattr(self, k, v) + + +# =========================================================================== +# Unit tests – evaluate_routing_rules (DB-backed) +# =========================================================================== + + +@pytest.mark.unit +class TestEvaluateRoutingRules: + """Tests for evaluate_routing_rules() with a real DB session.""" + + def test_first_match_wins(self, db_session): + """The first matching rule (by position) is used.""" + p1 = _make_pipeline(db_session, name="Pipeline A") + p2 = _make_pipeline(db_session, name="Pipeline B") + + _make_rule(db_session, p1.id, position=0, field="file_type", operator="equals", value="application/pdf") + _make_rule(db_session, p2.id, position=1, field="file_type", operator="equals", value="application/pdf") + + doc = {"file_type": "application/pdf", "metadata": {}} + result = evaluate_routing_rules(db_session, "testuser", doc) + assert result is not None + assert result.id == p1.id + + def test_no_match_returns_none(self, db_session): + """When no rule matches, None is returned (caller uses default).""" + p = _make_pipeline(db_session, name="Pipeline A") + _make_rule(db_session, p.id, field="file_type", operator="equals", value="image/png") + + doc = {"file_type": "application/pdf", "metadata": {}} + result = evaluate_routing_rules(db_session, "testuser", doc) + assert result is None + + def test_inactive_rule_skipped(self, db_session): + """Inactive rules are not evaluated.""" + p = _make_pipeline(db_session, name="Pipeline A") + _make_rule(db_session, p.id, is_active=False) + + doc = {"file_type": "application/pdf", "metadata": {}} + result = evaluate_routing_rules(db_session, "testuser", doc) + assert result is None + + def test_inactive_pipeline_skipped(self, db_session): + """Matching rule with inactive target pipeline is skipped.""" + p = _make_pipeline(db_session, name="Inactive Pipeline", is_active=False) + _make_rule(db_session, p.id) + + doc = {"file_type": "application/pdf", "metadata": {}} + result = evaluate_routing_rules(db_session, "testuser", doc) + assert result is None + + def test_system_rules_evaluated_after_user_rules(self, db_session): + """System rules (owner_id=NULL) are evaluated after user-specific rules.""" + p_user = _make_pipeline(db_session, name="User Pipeline") + p_system = _make_pipeline(db_session, name="System Pipeline", owner_id=None) + + # System rule at position 0, user rule at position 1 — user should still win. + _make_rule( + db_session, + p_system.id, + owner_id=None, + position=0, + field="file_type", + operator="equals", + value="application/pdf", + name="System Rule", + ) + _make_rule( + db_session, + p_user.id, + owner_id="testuser", + position=1, + field="file_type", + operator="equals", + value="application/pdf", + name="User Rule", + ) + + doc = {"file_type": "application/pdf", "metadata": {}} + result = evaluate_routing_rules(db_session, "testuser", doc) + assert result is not None + assert result.id == p_user.id + + def test_metadata_field_routing(self, db_session): + """Rules can match on metadata.* fields.""" + p = _make_pipeline(db_session, name="Invoice Pipeline") + _make_rule( + db_session, + p.id, + field="metadata.sender", + operator="contains", + value="acme", + ) + + doc = {"file_type": "application/pdf", "metadata": {"sender": "Acme Corporation"}} + result = evaluate_routing_rules(db_session, "testuser", doc) + assert result is not None + assert result.id == p.id + + def test_size_routing(self, db_session): + """Rules can match on file size with numeric comparison.""" + p = _make_pipeline(db_session, name="Large File Pipeline") + _make_rule( + db_session, + p.id, + field="size", + operator="gt", + value="1048576", + ) + + # 2 MB file + doc = {"size": 2097152, "metadata": {}} + result = evaluate_routing_rules(db_session, "testuser", doc) + assert result is not None + assert result.id == p.id + + def test_regex_routing(self, db_session): + """Rules can match using regex on filename.""" + p = _make_pipeline(db_session, name="Invoice Pipeline") + _make_rule( + db_session, + p.id, + field="filename", + operator="regex", + value=r"invoice_\d{4}.*", + ) + + doc = {"filename": "invoice_2024_q1.pdf", "metadata": {}} + result = evaluate_routing_rules(db_session, "testuser", doc) + assert result is not None + assert result.id == p.id + + +# =========================================================================== +# API tests – operators endpoint (public) +# =========================================================================== + + +@pytest.mark.unit +class TestOperatorsEndpoint: + """Tests for the /api/routing-rules/operators catalogue endpoint.""" + + def test_operators_returns_lists(self, client): + """GET /api/routing-rules/operators returns operators and fields.""" + r = client.get("/api/routing-rules/operators") + assert r.status_code == 200 + data = r.json() + assert "operators" in data + assert "builtin_fields" in data + assert "metadata_prefix" in data + assert set(data["operators"]) == VALID_OPERATORS + assert set(data["builtin_fields"]) == BUILTIN_FIELDS + + +# =========================================================================== +# API tests – CRUD +# =========================================================================== + + +@pytest.mark.unit +class TestRoutingRuleCRUD: + """Tests for the routing rules CRUD API endpoints.""" + + def test_create_rule(self, client, db_session): + """POST /api/routing-rules creates a new rule.""" + p = _make_pipeline(db_session, name="Target Pipeline") + r = client.post( + "/api/routing-rules", + json={ + "name": "Route PDFs", + "field": "file_type", + "operator": "equals", + "value": "application/pdf", + "target_pipeline_id": p.id, + }, + ) + assert r.status_code == 201 + data = r.json() + assert data["name"] == "Route PDFs" + assert data["field"] == "file_type" + assert data["operator"] == "equals" + assert data["target_pipeline_id"] == p.id + assert data["is_active"] is True + + def test_create_rule_invalid_field(self, client, db_session): + """POST with an invalid field returns 422.""" + p = _make_pipeline(db_session, name="Target") + r = client.post( + "/api/routing-rules", + json={ + "name": "Bad field", + "field": "invalid_field", + "operator": "equals", + "value": "test", + "target_pipeline_id": p.id, + }, + ) + assert r.status_code == 422 + + def test_create_rule_invalid_operator(self, client, db_session): + """POST with an invalid operator returns 422.""" + p = _make_pipeline(db_session, name="Target") + r = client.post( + "/api/routing-rules", + json={ + "name": "Bad op", + "field": "file_type", + "operator": "invalid_op", + "value": "test", + "target_pipeline_id": p.id, + }, + ) + assert r.status_code == 422 + + def test_create_rule_missing_pipeline(self, client): + """POST referencing a nonexistent pipeline returns 404.""" + r = client.post( + "/api/routing-rules", + json={ + "name": "No pipeline", + "field": "file_type", + "operator": "equals", + "value": "application/pdf", + "target_pipeline_id": 99999, + }, + ) + assert r.status_code == 404 + + def test_list_rules(self, client, db_session): + """GET /api/routing-rules returns the user's rules.""" + p = _make_pipeline(db_session, name="Pipeline") + _make_rule(db_session, p.id, name="Rule 1", position=0, owner_id="anonymous") + _make_rule(db_session, p.id, name="Rule 2", position=1, owner_id="anonymous") + + r = client.get("/api/routing-rules") + assert r.status_code == 200 + data = r.json() + assert len(data) >= 2 + names = [d["name"] for d in data] + assert "Rule 1" in names + assert "Rule 2" in names + + def test_get_rule(self, client, db_session): + """GET /api/routing-rules/{id} returns a specific rule.""" + p = _make_pipeline(db_session, name="Pipeline") + rule = _make_rule(db_session, p.id, name="My Rule", owner_id="anonymous") + + r = client.get(f"/api/routing-rules/{rule.id}") + assert r.status_code == 200 + assert r.json()["name"] == "My Rule" + + def test_get_rule_not_found(self, client): + """GET /api/routing-rules/{id} returns 404 for nonexistent rule.""" + r = client.get("/api/routing-rules/99999") + assert r.status_code == 404 + + def test_update_rule(self, client, db_session): + """PUT /api/routing-rules/{id} updates a rule.""" + p = _make_pipeline(db_session, name="Pipeline") + rule = _make_rule(db_session, p.id, name="Old Name", owner_id="anonymous") + + r = client.put( + f"/api/routing-rules/{rule.id}", + json={"name": "New Name", "operator": "contains"}, + ) + assert r.status_code == 200 + data = r.json() + assert data["name"] == "New Name" + assert data["operator"] == "contains" + + def test_update_rule_invalid_field(self, client, db_session): + """PUT with invalid field returns 422.""" + p = _make_pipeline(db_session, name="Pipeline") + rule = _make_rule(db_session, p.id, owner_id="anonymous") + + r = client.put(f"/api/routing-rules/{rule.id}", json={"field": "bad_field"}) + assert r.status_code == 422 + + def test_update_rule_invalid_operator(self, client, db_session): + """PUT with invalid operator returns 422.""" + p = _make_pipeline(db_session, name="Pipeline") + rule = _make_rule(db_session, p.id, owner_id="anonymous") + + r = client.put(f"/api/routing-rules/{rule.id}", json={"operator": "bad_op"}) + assert r.status_code == 422 + + def test_update_rule_missing_pipeline(self, client, db_session): + """PUT with nonexistent target pipeline returns 404.""" + p = _make_pipeline(db_session, name="Pipeline") + rule = _make_rule(db_session, p.id, owner_id="anonymous") + + r = client.put(f"/api/routing-rules/{rule.id}", json={"target_pipeline_id": 99999}) + assert r.status_code == 404 + + def test_delete_rule(self, client, db_session): + """DELETE /api/routing-rules/{id} removes a rule.""" + p = _make_pipeline(db_session, name="Pipeline") + rule = _make_rule(db_session, p.id, owner_id="anonymous") + + r = client.delete(f"/api/routing-rules/{rule.id}") + assert r.status_code == 204 + + # Verify it's gone + r = client.get(f"/api/routing-rules/{rule.id}") + assert r.status_code == 404 + + def test_delete_rule_not_found(self, client): + """DELETE for nonexistent rule returns 404.""" + r = client.delete("/api/routing-rules/99999") + assert r.status_code == 404 + + +# =========================================================================== +# API tests – reorder +# =========================================================================== + + +@pytest.mark.unit +class TestReorderRoutingRules: + """Tests for the PUT /api/routing-rules/reorder endpoint.""" + + def test_reorder_rules(self, client, db_session): + """Reordering updates the position of rules.""" + p = _make_pipeline(db_session, name="Pipeline") + r1 = _make_rule(db_session, p.id, name="A", position=0, owner_id="anonymous") + r2 = _make_rule(db_session, p.id, name="B", position=1, owner_id="anonymous") + + r = client.put( + "/api/routing-rules/reorder", + json={"rule_ids": [r2.id, r1.id]}, + ) + assert r.status_code == 200 + data = r.json() + assert data[0]["id"] == r2.id + assert data[0]["position"] == 0 + assert data[1]["id"] == r1.id + assert data[1]["position"] == 1 + + def test_reorder_invalid_ids(self, client, db_session): + """Reorder with invalid IDs returns 422.""" + r = client.put( + "/api/routing-rules/reorder", + json={"rule_ids": [99999]}, + ) + assert r.status_code == 422 + + +# =========================================================================== +# API tests – evaluate (dry-run) +# =========================================================================== + + +@pytest.mark.unit +class TestEvaluateEndpoint: + """Tests for the POST /api/routing-rules/evaluate dry-run endpoint.""" + + def test_evaluate_match(self, client, db_session): + """Evaluate returns the matching rule and target pipeline.""" + p = _make_pipeline(db_session, name="Invoice Pipeline") + _make_rule( + db_session, + p.id, + name="PDF Route", + field="file_type", + operator="equals", + value="application/pdf", + owner_id="anonymous", + ) + + r = client.post( + "/api/routing-rules/evaluate", + json={"file_type": "application/pdf"}, + ) + assert r.status_code == 200 + data = r.json() + assert data["matched"] is True + assert data["rule"]["name"] == "PDF Route" + assert data["target_pipeline"]["id"] == p.id + + def test_evaluate_no_match(self, client, db_session): + """Evaluate returns matched=False when no rule applies.""" + p = _make_pipeline(db_session, name="Pipeline") + _make_rule( + db_session, + p.id, + name="PNG Route", + field="file_type", + operator="equals", + value="image/png", + owner_id="anonymous", + ) + + r = client.post( + "/api/routing-rules/evaluate", + json={"file_type": "application/pdf"}, + ) + assert r.status_code == 200 + data = r.json() + assert data["matched"] is False + assert data["rule"] is None + + def test_evaluate_with_metadata(self, client, db_session): + """Evaluate with metadata.* fields works.""" + p = _make_pipeline(db_session, name="Invoice Pipeline") + _make_rule( + db_session, + p.id, + name="Invoice Route", + field="metadata.sender", + operator="contains", + value="acme", + owner_id="anonymous", + ) + + r = client.post( + "/api/routing-rules/evaluate", + json={"metadata": {"sender": "Acme Corporation"}}, + ) + assert r.status_code == 200 + data = r.json() + assert data["matched"] is True + + def test_evaluate_with_size(self, client, db_session): + """Evaluate with size comparisons works.""" + p = _make_pipeline(db_session, name="Large Pipeline") + _make_rule( + db_session, + p.id, + name="Large Files", + field="size", + operator="gt", + value="1000000", + owner_id="anonymous", + ) + + r = client.post( + "/api/routing-rules/evaluate", + json={"size": 2000000}, + ) + assert r.status_code == 200 + assert r.json()["matched"] is True + + +# =========================================================================== +# API tests – metadata field validation +# =========================================================================== + + +@pytest.mark.unit +class TestFieldValidation: + """Tests for field validation in routing rule creation.""" + + def test_metadata_prefix_accepted(self, client, db_session): + """Fields with 'metadata.' prefix are valid.""" + p = _make_pipeline(db_session, name="Pipeline") + r = client.post( + "/api/routing-rules", + json={ + "name": "Metadata Rule", + "field": "metadata.sender", + "operator": "equals", + "value": "test", + "target_pipeline_id": p.id, + }, + ) + assert r.status_code == 201 + + def test_bare_metadata_rejected(self, client, db_session): + """Just 'metadata.' without a key suffix is invalid.""" + p = _make_pipeline(db_session, name="Pipeline") + r = client.post( + "/api/routing-rules", + json={ + "name": "Bad Metadata", + "field": "metadata.", + "operator": "equals", + "value": "test", + "target_pipeline_id": p.id, + }, + ) + assert r.status_code == 422 + + @pytest.mark.parametrize("field", sorted(BUILTIN_FIELDS)) + def test_builtin_fields_accepted(self, client, db_session, field): + """All built-in fields are accepted.""" + p = _make_pipeline(db_session, name=f"Pipeline for {field}") + r = client.post( + "/api/routing-rules", + json={ + "name": f"Rule for {field}", + "field": field, + "operator": "equals", + "value": "test", + "target_pipeline_id": p.id, + }, + ) + assert r.status_code == 201 + + +# =========================================================================== +# API tests – auto-position +# =========================================================================== + + +@pytest.mark.unit +class TestAutoPosition: + """Tests for automatic position assignment.""" + + def test_auto_position_increments(self, client, db_session): + """Rules created without position get incrementing positions.""" + p = _make_pipeline(db_session, name="Pipeline") + + r1 = client.post( + "/api/routing-rules", + json={ + "name": "First", + "field": "file_type", + "operator": "equals", + "value": "application/pdf", + "target_pipeline_id": p.id, + }, + ) + r2 = client.post( + "/api/routing-rules", + json={ + "name": "Second", + "field": "file_type", + "operator": "equals", + "value": "image/png", + "target_pipeline_id": p.id, + }, + ) + assert r1.status_code == 201 + assert r2.status_code == 201 + assert r2.json()["position"] > r1.json()["position"]