Initial commit
This commit is contained in:
392
pythonpath/paperless_i18n.py
Normal file
392
pythonpath/paperless_i18n.py
Normal 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": "N°",
|
||||
"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}
|
||||
Reference in New Issue
Block a user