+ Install Additional Packages: Zusätzliche Pakete installieren
+ 'Workflow you are trying to load contains widgets ': 'Der Workflow, den Sie laden möchten, enthält Widgets '
+ from missing add-ons.: aus fehlenden Add-ons.
+ Would you like to install them now?: Möchten Sie diese jetzt installieren?
+ 'After installation you will have to restart the ': 'Nach der Installation müssen Sie die '
+ application and reopen the workflow.: Anwendung neu starten und den Workflow erneut öffnen.
+ Install add-ons: Add-ons installieren
+ Ignore missing widgets: Fehlende Widgets ignorieren
+ Load partial workflow by omitting missing nodes and links.: Teilweise Workflow laden, indem fehlende Knoten und Verbindungen ausgelassen werden.
+ Please Restart: Bitte neu starten
+ Please restart and reopen the file.: Bitte starten Sie die Anwendung neu und öffnen Sie die Datei erneut.
+ def `install_requirements`:
+ Install required packages: Erforderliche Pakete installieren
+ def `__title_for_scheme`:
+ untitled: ohne Titel
+ def `ask_save_changes`:
+ Do you want to save changes made to %s?: Möchten Sie die Änderungen an %s speichern?
+ Do you want to save this workflow?: Möchten Sie diesen Workflow speichern?
+ Save Changes?: Änderungen speichern?
+ Your changes will be lost if you do not save them.: Ihre Änderungen gehen verloren, wenn Sie sie nicht speichern.
+ def `save_scheme_as`:
+ Save Orange Workflow File: Orange-Workflow-Datei speichern
+ Orange Workflow (*.ows): Orange-Workflow (*.ows)
+ def `save_scheme_to`:
+ untitled: ohne Titel
+ 'An error occurred while trying to save workflow ': 'Beim Versuch, den Workflow zu speichern, ist ein Fehler aufgetreten '
+ '"%s" to "%s"': '"%s" nach "%s"'
+ Error saving %s: Fehler beim Speichern von %s
+ 'Workflow "%s" could not be saved. The path does ': 'Workflow "%s" konnte nicht gespeichert werden. Der Pfad existiert '
+ not exist: nicht
+ Choose another location.: Wählen Sie einen anderen Speicherort.
+ 'Workflow "%s" could not be saved. You do not ': 'Workflow "%s" konnte nicht gespeichert werden. Sie haben keine '
+ have write permissions.: Schreibberechtigung.
+ 'Change the file system permissions or choose ': 'Ändern Sie die Dateisystemberechtigungen oder wählen Sie '
+ another location.: einen anderen Speicherort.
+ Workflow "%s" could not be saved.: Workflow "%s" konnte nicht gespeichert werden.
+ def `ask_load_swp`:
+ Restore unsaved changes from crash?: Nicht gespeicherte Änderungen nach Absturz wiederherstellen?
+ Restore Changes?: Änderungen wiederherstellen?
+ {} seems to have crashed at some point.\n: {} scheint irgendwann abgestürzt zu sein.\n
+ Changes will be discarded if not restored now.: Änderungen gehen verloren, wenn sie jetzt nicht wiederhergestellt werden.
+ def `load_swp_from`:
+ Could not load restore data.: Wiederherstellungsdaten konnten nicht geladen werden.
+ Error: Fehler
+ def `save_as_svg`:
+ untitled.svg: ohneTitel.svg
+ Scalable Vector Graphics (*.svg): Skalierbare Vektorgrafik (*.svg)
+ def `_handle_os_write_error`:
+ Write error: Schreibfehler
+ '"%(path)s" could not be saved. You do not ': '"%(path)s" konnte nicht gespeichert werden. Sie haben keine '
+ have write permissions (%(strerror)s).: Schreibrechte (%(strerror)s).
+ 'Change the file system permissions or choose ': 'Ändern Sie die Dateisystemberechtigungen oder wählen Sie '
+ another location.: einen anderen Speicherort.
+ '"%(path)s" could not be saved.': '"%(path)s" konnte nicht gespeichert werden.'
+ def `recent_scheme`:
+ Recent Workflows: Zuletzt geöffnete Workflows
+ def `examples_dialog`:
+ Example Workflows: Beispiel-Workflows
+ def `welcome_dialog`:
+ Welcome to {}: Willkommen bei {}
+ Welcome: Willkommen
+ New: Neu
+ Open a new workflow.: Einen neuen Workflow öffnen
+ Open: Öffnen
+ Open a workflow.: Einen Workflow öffnen
+ Recent: Zuletzt
+ Browse and open a recent workflow.: Zuletzt geöffnete Workflows durchsuchen und öffnen
+ Examples: Beispiele
+ Browse example workflows.: Beispiel-Workflows durchsuchen
+ def `scheme_properties_dialog`:
+ Workflow Info: Workflow-Informationen
+ def `show_scheme_properties`:
+ Change Info: Informationen ändern
+ def `open_canvas_settings`:
+ Preferences: Einstellungen
+ def `open_addons`:
+ 'Add-ons: insufficient permissions': 'Add-ons: unzureichende Berechtigungen'
+ 'Insufficient permissions to install add-ons. Try starting {name} ': 'Unzureichende Berechtigungen zum Installieren von Add-ons. Versuchen Sie, {name} '
+ as a system administrator or install {name} in user folders.: als Administrator zu starten oder {name} im Benutzerordner zu installieren.
+ Installer: Installer
+ def `__handle_help_query_response`:
+ There is no documentation for this widget.: Für dieses Widget gibt es keine Dokumentation.
+ No help found: Keine Hilfe gefunden
+ def `render_error_details`:
+ Missing node definitions:: Fehlende Knotendefinitionen:
+ Incompatible connection types:: Inkompatible Verbindungstypen:
+ Unqualified errors:: Unqualifizierte Fehler:
+application/schemeinfo.py:
+ class `SchemeInfoEdit`:
+ def `__setupUi`:
+ untitled: ohne Titel
+ Title: Titel
+ Description: Beschreibung
+ def `setScheme`:
+ untitled: ohne Titel
+ def `commit`:
+ untitled: ohne Titel
+ class `SchemeInfoDialog`:
+ def `__setupUi`:
+ Workflow Info: Workflow-Informationen
+ Show when I make a New Workflow.: Beim Erstellen eines neuen Workflows anzeigen.
+ 'You can also edit Workflow Info later ': 'Sie können die Workflow-Informationen auch später bearbeiten '
+ (File -> Workflow Info).: (Datei -> Workflow-Informationen).
+application/settings.py:
+ class `UserSettingsDialog`:
+ def `__setupUi`:
+ General: Allgemein
+ General Options: Allgemeine Optionen
+ Changes will take effect on next application startup.: Änderungen werden beim nächsten Start der Anwendung wirksam.
+ Select the application language.: Anwendungssprache auswählen.
+ Language: Sprache
+ Enable node animations: Knotenanimiationen aktivieren
+ 'Enable shadow and ping animations for nodes ': 'Schatten- und Ping-Animationen für Knoten aktivieren '
+ in the workflow.: im Workflow.
+ Open anchors on hover: Anker beim Überfahren öffnen
+ 'Open/expand node anchors on mouse hover (if unchecked the ': 'Knotenanker beim Überfahren mit der Maus öffnen/erweitern (wenn deaktiviert, werden die '
+ anchors are expanded when Shift key is pressed).: Anker durch Drücken der Umschalttaste erweitert).
+ Nodes: Knoten
+ Show channel names between widgets: Kanalnamen zwischen Widgets anzeigen
+ 'Show source and sink channel names ': 'Quell- und Zielkanalnamen anzeigen '
+ over the links.: über den Verbindungen.
+ Links: Verbindungen
+ Open on double click: Durch Doppelklick öffnen
+ 'Open quick menu on a double click ': 'Schnellmenü durch Doppelklick öffnen '
+ on an empty spot in the canvas: auf einer freien Stelle der Arbeitsfläche
+ Open on right click: Durch Rechtsklick öffnen
+ 'Open quick menu on a right click ': 'Schnellmenü durch Rechtsklick öffnen '
+ Open on space key press: Durch Leertaste öffnen
+ 'Open quick menu on Space key press ': 'Schnellmenü durch Drücken der Leertaste öffnen '
+ while the mouse is hovering over the canvas.: während sich der Mauszeiger über der Arbeitsfläche befindet.
+ Open on any key press: Durch beliebige Taste öffnen
+ 'Open quick menu on any key press ': 'Schnellmenü durch Drücken einer beliebigen Taste öffnen '
+ Show categories: Kategorien anzeigen
+ 'In addition to searching, allow filtering ': 'Zusätzlich zur Suche das Filtern ermöglichen '
+ by categories.: nach Kategorien.
+ Quick menu: Schnellmenü
+ Show splash screen: Startbildschirm anzeigen
+ Show welcome screen: Willkommensbildschirm anzeigen
+ Load crashed scratch workflows: Abgestürzte Entwurfs-Workflows laden
+ On startup: Beim Start
+ Only one tab can be open at a time: Es kann jeweils nur ein Tab geöffnet sein
+ Tool box: Werkzeugkasten
+ &Style: &Stil
+ Application style: Anwendungsstil
+ Output: Ausgabe
+ Output Redirection: Ausgabenumleitung
+ Critical: Kritisch
+ Error: Fehler
+ Warn: Warnung
+ Info: Info
+ Debug: Debug
+ Logging: Protokollierung
+ Open in external browser: In externem Browser öffnen
+ Help window: Hilfefenster
+ Categories: Kategorien
+ Add-ons: Add-ons
+ Settings related to add-on installation: Einstellungen zur Add-on-Installation
+ Install add-ons with conda: Add-ons mit Conda installieren
+ Conda: Conda
+ Pip: Pip
+ Pip install arguments:: Pip-Installationsargumente:
+ Network: Netzwerk
+ Settings related to networking: Netzwerkeinstellungen
+ HTTP proxy:: HTTP-Proxy:
+ HTTPS proxy:: HTTPS-Proxy:
+ class `StyleConfigWidget`:
+ Windows (default): Windows (Standard)
+ macOS (default): macOS (Standard)
+ def `__init__`:
+ Default: Standard
+ Dark: Dunkel
+ Style: Stil
+ Color theme: Farbthema
+ Changes will be applied on next application startup.: Änderungen werden beim nächsten Start der Anwendung wirksam.
+application/welcomedialog.py:
+ class `WelcomeDialog`:
+ def `setupUi`:
+ Show at startup: Beim Start anzeigen
+ def `setFeedbackUrl`:
+ Help us improve!: Helfen Sie uns, Orange zu verbessern!
+application/widgettoolbox.py:
+ class `WidgetToolBox`:
+ def `__init__`:
+ Search: Suchen
+ Filter...: Filtern...
+ Filter/search the list of available widgets.: Liste der verfügbaren Widgets filtern/durchsuchen
+ Open all: Alle öffnen
+ Close all: Alle schließen
+application/utils/addons.py:
+ class `Command`:
+ Install: Installieren
+ Upgrade: Aktualisieren
+ Uninstall: Deinstallieren
+ class `Installer`:
+ def `_next`:
+ Installing {}: {} wird installiert
+ Upgrading {}: {} wird aktualisiert
+ Uninstalling {}: {} wird deinstalliert
+ 'Command failed: python {}': 'Befehl fehlgeschlagen: python {}'
+canvas/view.py:
+ class `CanvasView`:
+ def `__init__`:
+ Zoom in: Vergrößern
+ Zoom out: Verkleinern
+ Reset Zoom: Zoom zurücksetzen
+canvas/items/annotationitem.py:
+ class `TextAnnotation`:
+ def `__init__`:
+ Enter text here: Text hier eingeben
+ def `contextMenuEvent`:
+ Render as: Darstellen als
+ Plain Text: Nur-Text
+ Render contents as plain text: Inhalt als Nur-Text darstellen
+ HTML: HTML
+ Render contents as HTML: Inhalt als HTML darstellen
+ RST: RST
+ 'Render contents as RST ': 'Inhalt als RST darstellen '
+ (reStructuredText): (reStructuredText)
+ Markdown: Markdown
+ Render contents as Markdown: Inhalt als Markdown darstellen
+canvas/items/graphicstextitem.py:
+ def `createStandardContextMenu`:
+ &Undo: &Rückgängig
+ &Redo: &Wiederholen
+ Cu&t: Ausschneiden
+ &Copy: &Kopieren
+ Copy &Link Location: Linkadresse kopieren
+ &Paste: &Einfügen
+ Delete: Löschen
+ Select All: Alles auswählen
+canvas/items/nodeitem.py:
+ class `NodeItem`:
+ def `__updateTitleText`:
+ {0:.0f}%: {0:.0f}%
+ def `NodeItem_toolTipHelper`:
+ Inputs:
: Eingänge:
+ Outputs:: Ausgänge:
+ No inputs
: Keine Eingänge
+ No outputs: Keine Ausgänge
+document/commands.py:
+ class `AddNodeCommand`:
+ def `__init__`:
+ Add %s: %s hinzufügen
+ class `RemoveNodeCommand`:
+ def `__init__`:
+ Remove %s: %s entfernen
+ class `AddLinkCommand`:
+ def `__init__`:
+ Add link: Link hinzufügen
+ class `RemoveLinkCommand`:
+ def `__init__`:
+ Remove link: Link entfernen
+ class `InsertNodeCommand`:
+ def `__init__`:
+ Insert widget into link: Widget in Link einfügen
+ class `AddAnnotationCommand`:
+ def `__init__`:
+ Add annotation: Anmerkung hinzufügen
+ class `RemoveAnnotationCommand`:
+ def `__init__`:
+ Remove annotation: Anmerkung entfernen
+ class `MoveNodeCommand`:
+ def `__init__`:
+ Move: Verschieben
+ class `ResizeCommand`:
+ def `__init__`:
+ Resize: Größe ändern
+ class `ArrowChangeCommand`:
+ def `__init__`:
+ Move arrow: Pfeil verschieben
+ class `AnnotationGeometryChange`:
+ def `__init__`:
+ Change Annotation Geometry: Anmerkungsgeometrie ändern
+ class `RenameNodeCommand`:
+ def `__init__`:
+ Rename: Umbenennen
+ class `TextChangeCommand`:
+ def `__init__`:
+ Change text: Text ändern
+ class `SetAttrCommand`:
+ def `__init__`:
+ Set %r: %r festlegen
+ class `SetWindowGroupPresets`:
+ def `__init__`:
+ Set Window Presets: Fenster-Voreinstellungen festlegen
+document/editlinksdialog.py:
+ class `LinksEditWidget`:
+ def `addLink`:
+ Click to remove the link.: Klicken, um den Link zu entfernen
+ def `__updateAnchorState`:
+ Click and drag to connect widgets!: Klicken und ziehen, um Widgets zu verbinden!
+ No compatible input channel.: Kein kompatibler Eingangskanal
+ No compatible output channel.: Kein kompatibler Ausgangskanal
+document/interactions.py:
+ class `NewLinkAction`:
+ def `mousePressEvent`:
+ Create new link
: Neuen Link erstellen
+ 'Drag a link to an existing node or release on ': '
Ziehen Sie einen Link zu einem vorhandenen Knoten oder lassen Sie ihn auf '
+ an empty spot to create a new node.
: einer leeren Stelle los, um einen neuen Knoten zu erstellen.
+ 'Hold Shift when releasing the mouse button to ': '
Halten Sie die Umschalttaste gedrückt, wenn Sie die Maustaste loslassen, um '
+ edit connections.
: Verbindungen zu bearbeiten.
+ def `edit_links`:
+ Edit Links: Verbindungen bearbeiten
+ class `EditNodeLinksAction`:
+ def `edit_links`:
+ Edit Links: Verbindungen bearbeiten
+ class `NewArrowAnnotation`:
+ def `start`:
+ New arrow annotation
: Neue Pfeil-Anmerkung
+ Click and drag to create a new arrow annotation
: Klicken und ziehen, um eine neue Pfeil-Anmerkung zu erstellen
+ class `NewTextAnnotation`:
+ def `start`:
+ New text annotation
: Neue Text-Anmerkung
+ 'Click (and drag to resize) on the canvas to create ': '
Klicken (und ziehen zum Ändern der Größe) auf die Arbeitsfläche, um '
+ a new text annotation item.
: ein neues Text-Anmerkungsobjekt zu erstellen.
+ 'Right click on the annotation to change how it is ': '
Rechtsklicken Sie auf die Anmerkung, um die Darstellung zu ändern '
+ rendered (Markdown, HTML, ...).
: (Markdown, HTML, ...).
+ class `ResizeTextAnnotation`:
+ def `start`:
+ Edit Text Annotation
: Text-Anmerkung bearbeiten
+ Drag control points to resize the annotation.
: Ziehen Sie die Kontrollpunkte, um die Größe der Anmerkung zu ändern.
+ 'Right click on the annotation to change how it is ': '
Rechtsklicken Sie auf die Anmerkung, um die Darstellung zu ändern '
+ rendered (Markdown, HTML, ...).
: (Markdown, HTML, ...).
+ class `PluginDropHandler`:
+ def `doDrop`:
+ class `Title`:
+ def `createWidget`:
+ Select a widget: Wählen Sie ein Widget
+document/quickmenu.py:
+ class `SearchWidget`:
+ def `__setupUi`:
+ Search: Suchen
+ class `QuickMenu`:
+ def `__init__`:
+ Search for a widget...: Widget suchen...
+ Quick Search: Schnellsuche
+document/schemeedit.py:
+ class `SchemeEditWidget`:
+ def `__init__`:
+ &Edit: &Bearbeiten
+ Widget: Widget
+ &Widget: &Widget
+ Link: Verbindung
+ def `__setupActions`:
+ Clean Up: Aufräumen
+ Align widgets to a grid (Shift+A): Widgets am Raster ausrichten (Shift+A)
+ Text: Text
+ Add a text annotation to the workflow.: Eine Text-Anmerkung zum Workflow hinzufügen
+ Font Size: Schriftgröße
+ Arrow: Pfeil
+ Add a arrow annotation to the workflow.: Eine Pfeil-Anmerkung zum Workflow hinzufügen
+ Arrow Color: Pfeilfarbe
+ Select all: Alles auswählen
+ Select all items.: Alle Elemente auswählen
+ Open: Öffnen
+ Open selected widget: Ausgewähltes Widget öffnen
+ Remove: Entfernen
+ Remove selected items: Ausgewählte Elemente entfernen
+ Ctrl+Backspace: Strg+Rücktaste
+ Rename: Umbenennen
+ Rename selected widget: Ausgewähltes Widget umbenennen
+ Help: Hilfe
+ Show widget help: Widget-Hilfe anzeigen
+ Enabled: Aktiviert
+ Remove link.: Verbindung entfernen
+ Insert Widget: Widget einfügen
+ Insert widget.: Widget einfügen
+ Reset Signals: Signale zurücksetzen
+ Duplicate: Duplizieren
+ Copy: Kopieren
+ Paste: Einfügen
+ Window Groups: Fenstergruppen
+ Manage preset widget groups: Vorgefertigte Widget-Gruppen verwalten
+ Save Window Group...: Fenstergruppe speichern...
+ Create and save a new window group.: Neue Fenstergruppe erstellen und speichern
+ Delete All Groups: Alle Gruppen löschen
+ Delete all saved widget presets: Alle gespeicherten Widget-Presets löschen
+ Bring Widgets to Front: Widgets in den Vordergrund bringen
+ def `removeSelected`:
+ Remove: Entfernen
+ def `alignToGrid`:
+ Align To Grid: Am Raster ausrichten
+ def `sceneMouseReleaseEvent`:
+ Move: Verschieben
+ def `__onSelectionChanged`:
+ Open All: Alle öffnen
+ Open: Öffnen
+ Remove All: Alle entfernen
+ Remove: Entfernen
+ def `__showHelpFor`:
+ 'Sorry there is no documentation available for ': 'Leider steht keine Dokumentation für '
+ this widget.: dieses Widget zur Verfügung.'
+ def `__saveWindowGroup`:
+ Save Group as...: Gruppe speichern als...
+ def `store_group`:
+ Store Window Group: Fenstergruppe speichern
+ Update Window Group: Fenstergruppe aktualisieren
+ def `__clearWindowGroups`:
+ Delete All Window Groups: Alle Fenstergruppen löschen
+ class `SaveWindowGroup`:
+ def `__init__`:
+ Window Group 1: Fenstergruppe 1
+ Save As:: Speichern unter:
+ Use as default: Als Standard verwenden
+ Automatically use this preset when opening the workflow.: Dieses Preset automatisch beim Öffnen des Workflows verwenden
+ "Save the current open widgets' window arrangement to the ": 'Die aktuelle Anordnung geöffneter Widgets in den '
+ workflow view presets.: Workflow-Ansicht-Presets speichern.'
+ def `__accept_check`:
+ Confirm Overwrite: Überschreiben bestätigen
+ "The window group '{}' already exists. Do you want ": 'Die Fenstergruppe "{}" existiert bereits. Möchten Sie '
+ to replace it?: sie ersetzen?'
+ Replace: Ersetzen
+gui/utils.py:
+ def `message_critical`:
+ An unexpected error occurred.: Ein unerwarteter Fehler ist aufgetreten.
+ Error: Fehler
+ def `message_warning`:
+ Death could come at any moment.: Der Tod kann jederzeit eintreten.
+ Murphy lurks about. Remember to save frequently.: Murphy lauert. Denken Sie daran, häufig zu speichern.
+ Warning: Warnung
+ def `message_information`:
+ Information: Information
+ I am not a number.: Ich bin keine Zahl.
+ def `message`:
+ Message: Nachricht
+ I am neither a postman nor a doctor.: Ich bin weder Postbote noch Arzt.
+preview/previewbrowser.py:
+ class `PreviewBrowser`:
+ def `__update`:
+ No description.: Keine Beschreibung.
+ Untitled: Ohne Titel
+preview/previewdialog.py:
+ class `PreviewDialog`:
+ def `__setupUi`:
+ Preview: Vorschau
+preview/previewmodel.py:
+ class `PreviewItem`:
+ def `__init__`:
+ Untitled: Ohne Titel
+ No description.: Keine Beschreibung.
+registry/qt.py:
+ def `tooltip_helper`:
+ Inputs:: Eingänge:
+ No inputs: Keine Eingänge
+ Outputs:: Ausgänge:
+ No outputs: Keine Ausgänge
+scheme/widgetmanager.py:
+ class `WidgetManager`:
+ def `__add_widget_for_node`:
+ Raise Canvas to Front: Canvas in den Vordergrund bringen
+ Raise containing canvas workflow window: Enthaltendes Workflow-Fenster in den Vordergrund bringen
+ Raise Descendants: Nachkommen in den Vordergrund bringen
+ Raise all immediate descendants of this node: Alle direkten Nachkommen dieses Knotens in den Vordergrund bringen
+ Raise Ancestors: Vorgänger in den Vordergrund bringen
+ Raise all immediate ancestors of this node: Alle direkten Vorgänger dieses Knotens in den Vordergrund bringen
+utils/overlay.py:
+ class `NotificationMessageWidget`:
+ def `__init__`:
+ Ok: OK
+ No: Nein
+ class `NotificationWidget`:
+ def `__init__`:
+ Ok: OK
+ No: Nein
diff --git a/i18n/si/msgs.jaml b/i18n/si/msgs.jaml
index 03230ac8..9e482f6c 100644
--- a/i18n/si/msgs.jaml
+++ b/i18n/si/msgs.jaml
@@ -2564,7 +2564,7 @@ localization/__init__.py:
application/last-used-language: false
def `update_last_used_language`:
application/language: false
- English: true
+ English: false
application/last-used-language: false
class `Translator`:
def `__init__`:
diff --git a/i18n/trubar-config.yaml b/i18n/trubar-config.yaml
index 9ce33786..7c22247c 100644
--- a/i18n/trubar-config.yaml
+++ b/i18n/trubar-config.yaml
@@ -6,6 +6,10 @@ languages:
name: Slovenščina
international-name: Slovenian
auto-import: from orangecanvas.localization.si import plsi, plsi_sz, z_besedo # pylint: disable=wrong-import-order
+ de:
+ name: Deutsch
+ international-name: German
+ auto-import: from orangecanvas.localization.de import plde # pylint: disable=wrong-import-order
auto-import: |2
from orangecanvas.localization import Translator # pylint: disable=wrong-import-order
_tr = Translator("orangecanvas", "biolab.si", "Orange")
diff --git a/orangecanvas/localization/de.py b/orangecanvas/localization/de.py
new file mode 100644
index 00000000..f8b2cd5b
--- /dev/null
+++ b/orangecanvas/localization/de.py
@@ -0,0 +1,35 @@
+def plde(n: int, forms: str) -> str:
+ """
+ Choose a singular/plural form for German.
+
+ `forms` can contain singular and plural separated by "|",
+ e.g. pl_de(2, "Apfel|Äpfel").
+
+ Only one form may be given for words that adhere to the following rules
+ - Words ending in -e → add -n (Katze -> Katzen)
+ - Words ending in vowel → add -s
+ - Words ending in -el, -en, -er → unchanged
+ - Otherwise → add -e
+
+ Args:
+ n: number
+ forms: plural forms, separated by "|", or a single form
+ Returns:
+ form corresponding to the given number
+ """
+ plural = int(n != 1)
+
+ if "|" in forms:
+ return forms.split("|")[plural]
+
+ word = forms
+ if plural:
+ if word[-1] == "e":
+ word += "n"
+ elif word[-1] in "aiou":
+ word += "s"
+ elif word.endswith(("el", "en", "er")):
+ pass
+ else:
+ word += "e"
+ return word
\ No newline at end of file