Initial commit

This commit is contained in:
2026-09-04 19:49:43 +02:00
parent 7ce9248e95
commit 30faf00ba2
47 changed files with 3946 additions and 0 deletions

View File

@@ -0,0 +1,392 @@
"""
paperless_i18n.py - Oberflächentexte in Deutsch, Englisch und Französisch.
Als Schlüssel dient der deutsche Text selbst. Das hält den Quelltext
lesbar - man sieht an der Aufrufstelle, was dort steht - und erspart eine
zweite Katalogdatei für die Ausgangssprache.
Fehlt eine Übersetzung, erscheint der deutsche Text. Das ist unschön, aber
besser als ein leerer Dialog oder ein Absturz.
Die Sprache wird aus der Einstellung von LibreOffice gelesen, nicht aus der
Umgebung des Betriebssystems - maßgeblich ist die Sprache der Oberfläche,
in der die Erweiterung erscheint.
"""
_SPRACHE = None
def sprache(ctx=None):
"""
Zweibuchstabiger Sprachcode der LibreOffice-Oberfläche.
Ermittelt über die Einstellung /org.openoffice.Setup/L10N/ooLocale,
ersatzweise über die Umgebungsvariablen. Alles außer en und fr fällt
auf Deutsch zurück, weil das die Ausgangssprache ist.
"""
global _SPRACHE
if _SPRACHE is not None:
return _SPRACHE
code = ""
if ctx is not None:
try:
import uno
from com.sun.star.beans import PropertyValue
p = PropertyValue()
p.Name, p.Value = "nodepath", "/org.openoffice.Setup/L10N"
provider = ctx.ServiceManager.createInstanceWithContext(
"com.sun.star.configuration.ConfigurationProvider", ctx)
node = provider.createInstanceWithArguments(
"com.sun.star.configuration.ConfigurationAccess", (p,))
code = str(node.getByName("ooLocale") or "")
except Exception: # noqa: BLE001
code = ""
if not code:
import os
for var in ("LANGUAGE", "LC_ALL", "LC_MESSAGES", "LANG"):
code = os.environ.get(var) or ""
if code:
break
code = code.replace("_", "-").split("-")[0].lower()
_SPRACHE = code if code in ("de", "en", "fr") else "de"
return _SPRACHE
def setze_sprache(code):
"""Nur für Prüfzwecke: Sprache fest vorgeben."""
global _SPRACHE
_SPRACHE = code
def t(text, ctx=None):
"""Übersetzt einen Text in die Oberflächensprache."""
lang = sprache(ctx)
if lang == "de":
return text
return KATALOG.get(lang, {}).get(text, text)
# ---------------------------------------------------------------------------
# Katalog. Schlüssel ist der deutsche Text, exakt wie im Quelltext.
# ---------------------------------------------------------------------------
EN = {
# -- Allgemein
"Paperless — Fehler": "Paperless — Error",
"Abbrechen": "Cancel",
"Speichern": "Save",
"Öffnen": "Open",
"Suchen": "Search",
"Suche": "Search",
"Titel": "Title",
"Erstellt": "Created",
"Format": "Format",
"Bezeichnung": "Label",
"Dokumente": "Documents",
"Versionen": "Versions",
"Nr": "No",
"ASN": "ASN",
"Schließen": "Close",
"Anlegen": "Create",
"Ablegen": "Store",
"Erzeugen": "Create",
"Ziel": "Target",
"Tags": "Tags",
"Korrespondent": "Correspondent",
"Dokumenttyp": "Document type",
"Tag": "Tag",
# -- Verbindung
"Paperless — Verbindung": "Paperless — Connection",
"Basisadresse": "Base address",
"z. B. https://dms.example.org": "e.g. https://dms.example.org",
"API-Token": "API token",
"Im Benutzerprofil von Paperless erzeugen":
"Create it in your Paperless user profile",
"TLS-Zertifikat prüfen": "Verify TLS certificate",
"Abschalten nur für Testinstanzen mit selbst ausgestelltem "
"Zertifikat. Ohne Prüfung ist die Verbindung angreifbar.":
"Disable only for test instances with a self-signed certificate. "
"Without verification the connection can be attacked.",
"Versionslabel": "Version label",
"{datum} wird ersetzt": "{datum} is replaced",
"Bitte zuerst Basisadresse und Token hinterlegen.":
"Please configure base address and token first.",
"Verbindung erfolgreich hergestellt.": "Connection established.",
"Gespeichert, aber die Verbindung schlug fehl:\n\n%s":
"Saved, but the connection failed:\n\n%s",
# -- Öffnen
"Dokument aus Paperless öffnen": "Open document from Paperless",
"Leer lassen für die zuletzt hinzugefügten Dokumente. "
"Archiv-Seriennummer funktioniert ebenfalls.":
"Leave empty for the most recently added documents. "
"The archive serial number works as well.",
"Öffnen als": "Open as",
"Bearbeitbar": "Editable",
"Schreibgeschützt": "Read-only",
"Keine Treffer.": "No matches.",
"Fehler bei der Suche: %s": "Search failed: %s",
"Versionen werden geladen …": "Loading versions …",
"Kein Zieldokument gewählt.": "No target document selected.",
"Bearbeitbar. Änderungen können als neue Version abgelegt "
"werden.":
"Editable. Changes can be stored as a new version.",
"Format nicht erkannt: %s\nBearbeitbar öffnen ist möglich — beim "
"Zurückschreiben wird ODF verwendet.":
"Format not recognised: %s\nOpening as editable is possible — "
"ODF will be used when writing back.",
"%s ist in LibreOffice nicht sinnvoll bearbeitbar.\n"
"Schreibgeschützt empfohlen — bearbeitbar ist trotzdem wählbar.":
"%s cannot reasonably be edited in LibreOffice.\n"
"Read-only recommended — editable remains available.",
"Schreibgeschützt geöffnet.\n\nZum Ablegen einer neuen Version muss "
"das Dokument bearbeitbar geöffnet werden.":
"Opened read-only.\n\nTo store a new version the document must be "
"opened as editable.",
# -- Ablegen
"In Paperless ablegen": "Store in Paperless",
"Neues Dokument anlegen": "Create a new document",
"An bestehendes Dokument anhängen": "Append to an existing document",
"Klassifizierung des geöffneten Dokuments übernehmen":
"Copy classification from the open document",
"Danach mit dem Zieldokument weiterarbeiten":
"Continue working with the target document",
"Das geöffnete Fenster wird dem Ziel zugeordnet. Weitere "
"Versionen landen dann dort.":
"The open window will be linked to the target. Further versions "
"will go there.",
"Kein Dokument geöffnet.": "No document open.",
"Als neue Version im Archiv ablegen?\n\n":
"Store as a new version in the archive?\n\n",
"Die bisherige Fassung bleibt als Version erhalten.":
"The previous state is kept as a version.",
"Neue Version abgelegt.\n\n": "New version stored.\n\n",
"Neues Dokument angelegt.\n\n": "New document created.\n\n",
"Als neue Version angehängt.\n\n": "Appended as a new version.\n\n",
"Die geöffnete Datei als neue Version anhängen?\n\n":
"Append the open file as a new version?\n\n",
"Unerwartete Antwort beim Hochladen:\n%r":
"Unexpected response while uploading:\n%r",
"Das Dokument konnte nicht zwischengespeichert werden:\n%s":
"The document could not be buffered:\n%s",
"Speichern fehlgeschlagen:\n%s": "Saving failed:\n%s",
# -- Klassifizierung
"Klassifizierung bearbeiten": "Edit classification",
"Format JJJJ-MM-TT": "Format YYYY-MM-DD",
"Mehrfachauswahl mit Strg oder Umschalt":
"Multiple selection with Ctrl or Shift",
"Klassifizierung gespeichert.": "Classification saved.",
"Stammdaten konnten nicht geladen werden:\n%s":
"Master data could not be loaded:\n%s",
# -- Teilen
"Dokument teilen": "Share document",
"Gültigkeit in Tagen": "Validity in days",
"0 = unbegrenzt gültig": "0 = valid indefinitely",
"Dateivariante": "File variant",
"Original": "Original",
"Archivfassung (PDF)": "Archived version (PDF)",
"Dokument mit einem Tag kennzeichnen": "Mark document with a tag",
"Macht geteilte Dokumente auffindbar. Ist der Tag noch nicht "
"vorhanden, wird er nach Rückfrage angelegt.":
"Makes shared documents findable. If the tag does not exist yet "
"it will be created after confirmation.",
"Freigabelink erzeugt": "Share link created",
"Nicht abgelegte Änderungen": "Unsaved changes",
"Trotzdem teilen": "Share anyway",
"Erst neue Version ablegen": "Store new version first",
# -- Status
"Paperless — Status": "Paperless — Status",
"Status anzeigen": "Show status",
# -- Nachträge
"Link (zum Kopieren markieren):": "Link (select to copy):",
"leer = Vorgabe. Nur ändern, wenn ein Proxy blockt.":
"empty = default. Change only if a proxy blocks it.",
"Dieses Dokument stammt nicht aus Paperless.\n\n"
"Es wurde keine Paperless-Kennung gefunden. Öffne es "
"über „Aus Paperless öffnen“, damit die "
"Zuordnung erhalten bleibt.":
"This document did not come from Paperless.\n\n"
"No Paperless identifier was found. Open it via "
"\u201cOpen from Paperless\u201d so the link is kept.",
"Dieses Dokument liegt noch nicht in Paperless.\n\n"
"Ein Freigabelink kann erst erzeugt werden, wenn es "
"abgelegt ist.\n\nJetzt ablegen?":
"This document is not in Paperless yet.\n\n"
"A share link can only be created once it is stored.\n\n"
"Store it now?",
"Das geöffnete Dokument enthält Änderungen, die noch nicht "
"in Paperless abgelegt sind.\n\nDer Link würde auf die "
"zuletzt abgelegte Fassung zeigen, nicht auf das, was du "
"gerade vor dir hast.":
"The open document has changes that have not been stored in "
"Paperless.\n\nThe link would point to the last stored state, "
"not to what you see in front of you.",
}
FR = {
"Paperless — Fehler": "Paperless — Erreur",
"Abbrechen": "Annuler",
"Speichern": "Enregistrer",
"Öffnen": "Ouvrir",
"Suchen": "Rechercher",
"Suche": "Recherche",
"Titel": "Titre",
"Erstellt": "Créé le",
"Format": "Format",
"Bezeichnung": "Libellé",
"Dokumente": "Documents",
"Versionen": "Versions",
"Nr": "",
"ASN": "ASN",
"Schließen": "Fermer",
"Anlegen": "Créer",
"Ablegen": "Enregistrer",
"Erzeugen": "Créer",
"Ziel": "Cible",
"Tags": "Étiquettes",
"Korrespondent": "Correspondant",
"Dokumenttyp": "Type de document",
"Tag": "Étiquette",
"Paperless — Verbindung": "Paperless — Connexion",
"Basisadresse": "Adresse de base",
"z. B. https://dms.example.org": "p. ex. https://dms.example.org",
"API-Token": "Jeton d'API",
"Im Benutzerprofil von Paperless erzeugen":
"À créer dans votre profil utilisateur Paperless",
"TLS-Zertifikat prüfen": "Vérifier le certificat TLS",
"Abschalten nur für Testinstanzen mit selbst ausgestelltem "
"Zertifikat. Ohne Prüfung ist die Verbindung angreifbar.":
"À désactiver uniquement pour une instance de test avec un "
"certificat auto-signé. Sans vérification, la connexion est "
"vulnérable.",
"Versionslabel": "Libellé de version",
"{datum} wird ersetzt": "{datum} sera remplacé",
"Bitte zuerst Basisadresse und Token hinterlegen.":
"Veuillez d'abord renseigner l'adresse de base et le jeton.",
"Verbindung erfolgreich hergestellt.": "Connexion établie.",
"Gespeichert, aber die Verbindung schlug fehl:\n\n%s":
"Enregistré, mais la connexion a échoué :\n\n%s",
"Dokument aus Paperless öffnen": "Ouvrir un document depuis Paperless",
"Leer lassen für die zuletzt hinzugefügten Dokumente. "
"Archiv-Seriennummer funktioniert ebenfalls.":
"Laisser vide pour les documents ajoutés récemment. "
"Le numéro de série d'archive fonctionne également.",
"Öffnen als": "Ouvrir en",
"Bearbeitbar": "Modifiable",
"Schreibgeschützt": "Lecture seule",
"Keine Treffer.": "Aucun résultat.",
"Fehler bei der Suche: %s": "Échec de la recherche : %s",
"Versionen werden geladen …": "Chargement des versions …",
"Kein Zieldokument gewählt.": "Aucun document cible sélectionné.",
"Bearbeitbar. Änderungen können als neue Version abgelegt "
"werden.":
"Modifiable. Les modifications peuvent être enregistrées comme "
"nouvelle version.",
"Format nicht erkannt: %s\nBearbeitbar öffnen ist möglich — beim "
"Zurückschreiben wird ODF verwendet.":
"Format non reconnu : %s\nL'ouverture en modification est "
"possible — le format ODF sera utilisé lors de l'enregistrement.",
"%s ist in LibreOffice nicht sinnvoll bearbeitbar.\n"
"Schreibgeschützt empfohlen — bearbeitbar ist trotzdem wählbar.":
"%s ne peut pas être modifié utilement dans LibreOffice.\n"
"Lecture seule recommandée — la modification reste possible.",
"Schreibgeschützt geöffnet.\n\nZum Ablegen einer neuen Version muss "
"das Dokument bearbeitbar geöffnet werden.":
"Ouvert en lecture seule.\n\nPour enregistrer une nouvelle "
"version, le document doit être ouvert en modification.",
"In Paperless ablegen": "Enregistrer dans Paperless",
"Neues Dokument anlegen": "Créer un nouveau document",
"An bestehendes Dokument anhängen": "Ajouter à un document existant",
"Klassifizierung des geöffneten Dokuments übernehmen":
"Reprendre le classement du document ouvert",
"Danach mit dem Zieldokument weiterarbeiten":
"Poursuivre ensuite avec le document cible",
"Das geöffnete Fenster wird dem Ziel zugeordnet. Weitere "
"Versionen landen dann dort.":
"La fenêtre ouverte sera associée à la cible. Les versions "
"suivantes y seront enregistrées.",
"Kein Dokument geöffnet.": "Aucun document ouvert.",
"Als neue Version im Archiv ablegen?\n\n":
"Enregistrer comme nouvelle version dans l'archive ?\n\n",
"Die bisherige Fassung bleibt als Version erhalten.":
"La version précédente est conservée.",
"Neue Version abgelegt.\n\n": "Nouvelle version enregistrée.\n\n",
"Neues Dokument angelegt.\n\n": "Nouveau document créé.\n\n",
"Als neue Version angehängt.\n\n": "Ajouté comme nouvelle version.\n\n",
"Die geöffnete Datei als neue Version anhängen?\n\n":
"Ajouter le fichier ouvert comme nouvelle version ?\n\n",
"Unerwartete Antwort beim Hochladen:\n%r":
"Réponse inattendue lors de l'envoi :\n%r",
"Das Dokument konnte nicht zwischengespeichert werden:\n%s":
"Le document n'a pas pu être mis en cache :\n%s",
"Speichern fehlgeschlagen:\n%s": "Échec de l'enregistrement :\n%s",
"Klassifizierung bearbeiten": "Modifier le classement",
"Format JJJJ-MM-TT": "Format AAAA-MM-JJ",
"Mehrfachauswahl mit Strg oder Umschalt":
"Sélection multiple avec Ctrl ou Maj",
"Klassifizierung gespeichert.": "Classement enregistré.",
"Stammdaten konnten nicht geladen werden:\n%s":
"Les données de référence n'ont pas pu être chargées :\n%s",
"Dokument teilen": "Partager le document",
"Gültigkeit in Tagen": "Validité en jours",
"0 = unbegrenzt gültig": "0 = valable sans limite",
"Dateivariante": "Variante du fichier",
"Original": "Original",
"Archivfassung (PDF)": "Version archivée (PDF)",
"Dokument mit einem Tag kennzeichnen":
"Marquer le document d'une étiquette",
"Macht geteilte Dokumente auffindbar. Ist der Tag noch nicht "
"vorhanden, wird er nach Rückfrage angelegt.":
"Permet de retrouver les documents partagés. Si l'étiquette "
"n'existe pas, elle sera créée après confirmation.",
"Freigabelink erzeugt": "Lien de partage créé",
"Nicht abgelegte Änderungen": "Modifications non enregistrées",
"Trotzdem teilen": "Partager quand même",
"Erst neue Version ablegen": "Enregistrer d'abord une nouvelle version",
"Paperless — Status": "Paperless — État",
"Status anzeigen": "Afficher l'état",
# -- Nachträge
"Link (zum Kopieren markieren):": "Lien (sélectionner pour copier) :",
"leer = Vorgabe. Nur ändern, wenn ein Proxy blockt.":
"vide = valeur par défaut. À modifier uniquement si un proxy "
"bloque.",
"Dieses Dokument stammt nicht aus Paperless.\n\n"
"Es wurde keine Paperless-Kennung gefunden. Öffne es "
"über „Aus Paperless öffnen“, damit die "
"Zuordnung erhalten bleibt.":
"Ce document ne provient pas de Paperless.\n\n"
"Aucun identifiant Paperless n'a été trouvé. Ouvrez-le via "
"\u00ab Ouvrir depuis Paperless \u00bb afin de conserver "
"l'association.",
"Dieses Dokument liegt noch nicht in Paperless.\n\n"
"Ein Freigabelink kann erst erzeugt werden, wenn es "
"abgelegt ist.\n\nJetzt ablegen?":
"Ce document n'est pas encore dans Paperless.\n\n"
"Un lien de partage ne peut être créé qu'une fois le document "
"enregistré.\n\nL'enregistrer maintenant ?",
"Das geöffnete Dokument enthält Änderungen, die noch nicht "
"in Paperless abgelegt sind.\n\nDer Link würde auf die "
"zuletzt abgelegte Fassung zeigen, nicht auf das, was du "
"gerade vor dir hast.":
"Le document ouvert contient des modifications qui n'ont pas été "
"enregistrées dans Paperless.\n\nLe lien pointerait vers le "
"dernier état enregistré, et non vers ce que vous voyez.",
}
KATALOG = {"en": EN, "fr": FR}