From 80b9316d929f71be0b4ad09f9792a5298f384c6a Mon Sep 17 00:00:00 2001
From: heikokue <74769863+heikokue@users.noreply.github.com>
Date: Fri, 12 Mar 2021 14:23:26 +0100
Subject: [PATCH] added/improved DE translation of forms (#765)
---
.../mlsentiment/locales/de/mlsentiment.json | 8 +
.../sentiment/locales/de/72-sentiment.json | 8 +
.../locales/de/datagenerator.json | 13 ++
function/random/locales/de/random.json | 13 ++
function/rbe/locales/de/rbe.json | 29 ++++
hardware/Arduino/locales/de/35-arduino.json | 42 +++++
hardware/PiGpio/locales/de/36-rpi-gpio.json | 146 +++++++++---------
hardware/PiLcd/locales/de/pilcd.json | 19 +++
hardware/pigpiod/locales/de/pi-gpiod.json | 59 +++++++
hardware/sensehat/locales/de/sensehat.json | 12 ++
io/ping/locales/de/88-ping.json | 15 ++
io/serialport/locales/de/25-serial.json | 73 +++++++++
parsers/base64/locales/de/70-base64.json | 24 +++
social/email/locales/de/61-email.json | 67 ++++++++
.../feedparser/locales/de/32-feedparse.json | 15 ++
social/irc/locales/de/91-irc.json | 44 ++++++
social/twitter/locales/de/27-twitter.json | 54 +++++++
storage/mongodb/locales/de/66-mongodb.json | 38 +++++
storage/redis/locales/de/65-redisout.json | 21 +++
storage/sqlite/locales/de/sqlite.json | 20 +++
storage/tail/locales/de/28-tail.json | 24 +++
21 files changed, 672 insertions(+), 72 deletions(-)
create mode 100644 analysis/mlsentiment/locales/de/mlsentiment.json
create mode 100644 analysis/sentiment/locales/de/72-sentiment.json
create mode 100644 function/datagenerator/locales/de/datagenerator.json
create mode 100644 function/random/locales/de/random.json
create mode 100644 function/rbe/locales/de/rbe.json
create mode 100644 hardware/Arduino/locales/de/35-arduino.json
create mode 100644 hardware/PiLcd/locales/de/pilcd.json
create mode 100644 hardware/pigpiod/locales/de/pi-gpiod.json
create mode 100644 hardware/sensehat/locales/de/sensehat.json
create mode 100644 io/ping/locales/de/88-ping.json
create mode 100644 io/serialport/locales/de/25-serial.json
create mode 100644 parsers/base64/locales/de/70-base64.json
create mode 100644 social/email/locales/de/61-email.json
create mode 100644 social/feedparser/locales/de/32-feedparse.json
create mode 100644 social/irc/locales/de/91-irc.json
create mode 100644 social/twitter/locales/de/27-twitter.json
create mode 100644 storage/mongodb/locales/de/66-mongodb.json
create mode 100644 storage/redis/locales/de/65-redisout.json
create mode 100644 storage/sqlite/locales/de/sqlite.json
create mode 100644 storage/tail/locales/de/28-tail.json
diff --git a/analysis/mlsentiment/locales/de/mlsentiment.json b/analysis/mlsentiment/locales/de/mlsentiment.json
new file mode 100644
index 00000000..5931483e
--- /dev/null
+++ b/analysis/mlsentiment/locales/de/mlsentiment.json
@@ -0,0 +1,8 @@
+{
+ "mlsentiment": {
+ "sentiment": "sentiment",
+ "label": {
+ "language": "Sprache"
+ }
+ }
+}
diff --git a/analysis/sentiment/locales/de/72-sentiment.json b/analysis/sentiment/locales/de/72-sentiment.json
new file mode 100644
index 00000000..73194069
--- /dev/null
+++ b/analysis/sentiment/locales/de/72-sentiment.json
@@ -0,0 +1,8 @@
+{
+ "sentiment": {
+ "sentiment": "sentiment",
+ "label": {
+ "language": "Sprache"
+ }
+ }
+}
diff --git a/function/datagenerator/locales/de/datagenerator.json b/function/datagenerator/locales/de/datagenerator.json
new file mode 100644
index 00000000..baed23ea
--- /dev/null
+++ b/function/datagenerator/locales/de/datagenerator.json
@@ -0,0 +1,13 @@
+{
+ "datagen": {
+ "datagen": "data generator",
+ "label": {
+ "syntax": "Rückgabe",
+ "text": "ein Text-String",
+ "json": "ein analysiertes (parsed) JSON-Objekt"
+ },
+ "errors": {
+ "json-error": "Fehler beim Versuch, String zu JSON zu analysieren (parsen)"
+ }
+ }
+}
diff --git a/function/random/locales/de/random.json b/function/random/locales/de/random.json
new file mode 100644
index 00000000..197c13d9
--- /dev/null
+++ b/function/random/locales/de/random.json
@@ -0,0 +1,13 @@
+{
+ "random": {
+ "label": {
+ "generate": "Generiere",
+ "wholeNumber": "eine Ganzzahl (integer)",
+ "realNumber": "eine reelle Zahl (floating point)",
+ "from": "Von",
+ "lowestNumber": "kleinste Zahl",
+ "to": "Bis",
+ "highestNumber": "größte Zahl"
+ }
+ }
+}
diff --git a/function/rbe/locales/de/rbe.json b/function/rbe/locales/de/rbe.json
new file mode 100644
index 00000000..afd3f688
--- /dev/null
+++ b/function/rbe/locales/de/rbe.json
@@ -0,0 +1,29 @@
+{
+ "rbe": {
+ "rbe": "rbe",
+ "label": {
+ "func": "Modus",
+ "init": "Sende Anfangswert",
+ "start": "Startwert",
+ "name": "Name",
+ "septopics": "Modus für jedes msg.topic separat anwenden"
+ },
+ "placeholder":{
+ "bandgap": "z. B. 10% oder 5%",
+ "start": "Leer lassen, um erste empfangenen Daten zu nutzen"
+ },
+ "opts": {
+ "rbe": "Blockieren bis Wertänderung",
+ "rbei": "Blockieren bis Wertänderung (Anfangswert ignorieren)",
+ "deadband": "Blockieren bis Wertänderung ist größer als",
+ "deadbandEq": "Blockieren bis Wertänderung ist größer-gleich",
+ "narrowband": "Blockieren wenn Wertänderung ist größer als",
+ "narrowbandEq": "Blockieren wenn Wertänderung ist größer-gleich",
+ "in": "verglichen mit letzten Eingangswert",
+ "out": "verglichen mit letzten gültigen Ausgangswert"
+ },
+ "warn": {
+ "nonumber": "Keine Zahl gefunden in den Nutzdaten (Payload)"
+ }
+ }
+}
diff --git a/hardware/Arduino/locales/de/35-arduino.json b/hardware/Arduino/locales/de/35-arduino.json
new file mode 100644
index 00000000..a4781c70
--- /dev/null
+++ b/hardware/Arduino/locales/de/35-arduino.json
@@ -0,0 +1,42 @@
+{
+ "arduino": {
+ "label": {
+ "pin": "Pin",
+ "type": "Typ",
+ "port": "Port"
+ },
+ "placeholder": {
+ "port": "z. B. /dev/ttyUSB0 COM1"
+ },
+ "status": {
+ "connectfirst": "Verbinde mit zuerst gefundenen Board",
+ "connect": "Verbinde mit __device__",
+ "connected": "Verbunden mit __device__",
+ "version": "Version: __version__",
+ "portclosed": "Serieller Arduino-Port geschlossen"
+ },
+ "state": {
+ "in": {
+ "digital": "Digitaler Pin",
+ "pullup": "Digitaler Pin mit Pullup",
+ "analogue": "Analoger Pin",
+ "string": "String"
+ },
+ "out": {
+ "digital": "Digital (0/1)",
+ "analogue": "Analog (0-255)",
+ "servo": "Servo (0-180)",
+ "string": "String"
+ }
+ },
+ "tip": {
+ "io": "Hinweis: Derselbe Pin kann nicht gleichzeitig als Ausgang und Eingang verwendet werden",
+ "conf": "Tipp: Zur automatischen Erkennung des seriellen Ports die Suche verwenden"
+ },
+ "errors": {
+ "portnotconf": "Port nicht konfiguriert",
+ "portnotfound": "Port nicht gefunden: __device__",
+ "devnotfound": "Device __dev__ nicht gefunden. Versuche Board zu finden."
+ }
+ }
+}
diff --git a/hardware/PiGpio/locales/de/36-rpi-gpio.json b/hardware/PiGpio/locales/de/36-rpi-gpio.json
index e1d44a8b..9024f880 100644
--- a/hardware/PiGpio/locales/de/36-rpi-gpio.json
+++ b/hardware/PiGpio/locales/de/36-rpi-gpio.json
@@ -1,73 +1,75 @@
-"rpi-gpio" : {
- "label" : {
- "gpiopin" : "GPIO",
- "selectpin" : "Auswahlstift",
- "resistor" : "Widerstand?",
- "readinitial" : "Anfangsstatus des Pins bei Implementierung/Neustart lesen?",
- "type" : "Typ",
- "initpin" : "Pin-Status initialisieren?",
- "debounce" : "Debounce",
- "freq" : "Frequenz",
- "button" : "Knopf",
- "pimouse" : "Pi-Maus",
- "pikeyboard" : "Pi-Tastatur",
- "left" : "Links",
- "right" : "Rechts",
- "middle" : "Mitte"
- },
- "resistor" : {
- "none" : "keine",
- "pullup" : "pullup",
- "pulldown" : "Pulldown"
- },
- "digout" : "Digitale Ausgabe",
- "pwmout" : "PWM-Ausgabe",
- "servo" : "Servo-Ausgabe",
- "initpin0" : "Anfangsstand des Pin-Niedrig (0)",
- "initpin1" : "Anfangsebene von Pin-High (1)",
- "left" : "links",
- "right" : "rechts",
- "middle" : "Mitte",
- "any" : "beliebig",
- "pinname" : "Pin",
- "alreadyuse" : "bereits im Gebrauch",
- "alreadyset" : "bereits festgelegt als",
- "tip" : {
- "pin" : " Verwender Pins : ",
- "in" : "Tipp: Es wird nur die digitale Eingabe unterstützt. Die Eingabe muss 0 oder 1 sein.",
- "dig" : "Tipp: Für die digitale Ausgabe muss der Wert 0 oder 1 sein.",
- "pwm" : "Tipp: Für die PWM-Ausgabe muss der Wert zwischen 0 und 100 liegen; die Einstellung der Hochfrequenz kann mehr CPU beanspruchen als erwartet.",
- "ser" : " Tipp : Für die Servo-Ausgabe muss ein Wert zwischen 0 und 100 eingegeben werden. 50 ist das Zentrum."
- },
- "types" : {
- "digout" : "digitale Ausgabe",
- "input" : "Eingabe",
- "pullup" : "Eingabe mit Pull-up",
- "pulldown" : "Eingabe mit Pull-down",
- "pwmout" : "PWM-Ausgabe",
- "servo" : "Servo-Ausgabe"
- },
- "status" : {
- "stopped" : "Gestoppt",
- "closed" : "geschlossen",
- "not-running" : "nicht aktiv",
- "not-available" : "nicht verfügbar",
- "na" : "N/A: __Wert__",
- "ok": "OK"
- },
- "errors" : {
- "ignorenode" : "Raspberry Pi-spezifische Nodes inaktiv",
- "version" : "Abrufen der Version von Pi fehlgeschlagen",
- "sawpitype" : "Saw-Pi-Typ",
- "libnotfound" : "Pi RPi.GPIO-Python-Bibliothek nicht gefunden",
- "alreadyset" : "GPIO-Stift __pin__ ist bereits als Typ festgelegt: __type__",
- "invalidpin" : "Ungültiger GPIO-Pin",
- "invalidinput" : "Ungültige Eingabe",
- "needtobeexecutable" : "__command__ muss ausführbar sein",
- "mustbeexecutable" : "nrgpio muss ausführbar sein",
- "commandnotfound" : "Befehl 'nrgpio' nicht gefunden",
- "commandnotexecutable" : "nrgpio-Befehl nicht ausführbar",
- "error" : "Fehler: __error__",
- "pythoncommandnotfound" : "Befehl 'nrgpio python' nicht aktiv"
+{
+ "rpi-gpio": {
+ "label": {
+ "gpiopin": "GPIO",
+ "selectpin": "Pinauswahl",
+ "resistor": "Widerstand",
+ "readinitial": "Initalzustand des Pins bei Übernahme/Neustart lesen",
+ "type": "Typ",
+ "initpin": "Pin-Zustand initialisieren",
+ "debounce": "Entprellung",
+ "freq": "Frequenz",
+ "button": "Taste",
+ "pimouse": "Pi-Maus",
+ "pikeyboard": "Pi-Tastatur",
+ "left": "Links",
+ "right": "Rechts",
+ "middle": "Mitte"
+ },
+ "resistor": {
+ "none": "Kein",
+ "pullup": "Pull-Up",
+ "pulldown": "Pull-Down"
+ },
+ "digout": "Digitaler Ausgang",
+ "pwmout": "PWM-Ausgang",
+ "servo": "Servo-Ausgang",
+ "initpin0": "Pin-Initalzustand low (0)",
+ "initpin1": "Pin-Initalzustand high (1)",
+ "left": "Links",
+ "right": "Rechts",
+ "middle": "Mitte",
+ "any": "Beliebig",
+ "pinname": "Pin",
+ "alreadyuse": "bereits im Gebrauch",
+ "alreadyset": "bereits festgelegt als",
+ "tip": {
+ "pin": "Verwendete Pins: ",
+ "in": "Tipp: Es werden nur die digitale Eingänge unterstützt. Der Eingang muss 0 oder 1 sein",
+ "dig": "Tipp: Für den digitalen Ausgang muss der Node-Eingangswert 0 oder 1 sein",
+ "pwm": "Tipp: Für die PWM-Ausgabe muss der Node-Eingangswert zwischen 0 und 100 liegen. Hohen Frequenzen können die CPU mehr beanspruchen als erwartet.",
+ "ser": "Tipp: Für die Servo-Ausgabe muss der Node-Eingangswert zwischen 0 und 100 eingegeben werden. 50 ist die Mitte."
+ },
+ "types": {
+ "digout": "Digitaler Ausgang",
+ "input": "Eingang",
+ "pullup": "Eingang mit Pull-Up",
+ "pulldown": "Eingabe mit Pull-Down",
+ "pwmout": "PWM-Ausgang",
+ "servo": "Servo-Ausgang"
+ },
+ "status": {
+ "stopped": "Gestoppt",
+ "closed": "Geschlossen",
+ "not-running": "Nicht aktiv",
+ "not-available": "Nicht verfügbar",
+ "na": "Nicht anwendbar: __Wert__",
+ "ok": "OK"
+ },
+ "errors": {
+ "ignorenode": "Raspberry-Pi-spezifische Nodes inaktiv gesetzt",
+ "version": "Abrufen der Version vom Pi fehlgeschlagen",
+ "sawpitype": "Saw-Pi-Typ",
+ "libnotfound": "RPi.GPIO-Python-Bibliothek nicht gefunden",
+ "alreadyset": "GPIO-Pin __pin__ ist bereits festgelegt als Typ: __type__",
+ "invalidpin": "Ungültiger GPIO-Pin",
+ "invalidinput": "Ungültige Eingabe",
+ "needtobeexecutable": "__command__ muss ausführbar sein",
+ "mustbeexecutable": "nrgpio muss ausführbar sein",
+ "commandnotfound": "nrgpio-Befehl nicht gefunden",
+ "commandnotexecutable": "nrgpio-Befehl nicht ausführbar",
+ "error": "Fehler: __error__",
+ "pythoncommandnotfound": "nrgpio-Python-Befehl nicht aktiv"
+ }
}
- }
+}
diff --git a/hardware/PiLcd/locales/de/pilcd.json b/hardware/PiLcd/locales/de/pilcd.json
new file mode 100644
index 00000000..bbadba5d
--- /dev/null
+++ b/hardware/PiLcd/locales/de/pilcd.json
@@ -0,0 +1,19 @@
+{
+ "pilcd": {
+ "label": {
+ "pins": "Pins"
+ },
+ "tip": {
+ "tip": "Tipp: Bei Pins muss eine Komma-getrennte Liste von 6 GPIO-Anschlusspin-Nummern eingetragen werden, die mit RS, E, D4, D5, D6 und D7 des LCD verbunden sind."
+ },
+ "status": {
+ "not-available": "Nicht verfügbar",
+ "na": "Nicht anwendbar: __value__"
+ },
+ "errors": {
+ "ignorenode": "Raspberry-Pi-spezifische Nodes inaktiv gesetzt",
+ "libnotfound": "RPi.GPIO-Python-Bibliothek nicht gefunden",
+ "needtobeexecutable": "__command__ muss ausführbar sein"
+ }
+ }
+}
diff --git a/hardware/pigpiod/locales/de/pi-gpiod.json b/hardware/pigpiod/locales/de/pi-gpiod.json
new file mode 100644
index 00000000..1273663b
--- /dev/null
+++ b/hardware/pigpiod/locales/de/pi-gpiod.json
@@ -0,0 +1,59 @@
+{
+ "pi-gpiod": {
+ "label": {
+ "gpiopin": "GPIO",
+ "selectpin": "Pin-Auswahl",
+ "host": "Host",
+ "resistor": "Widerstand",
+ "readinitial": "Initalzustand bei Übernahme/Neustart lesen",
+ "type": "Typ",
+ "initpin": "Pin-Zustand initialisieren",
+ "debounce": "Entprellung",
+ "limits": "Limits",
+ "min": "min.",
+ "max": "max.",
+ "freq": "Frequenz"
+ },
+ "place": {
+ "host": "Lokale oder entfernte IP",
+ "port": "Port"
+ },
+ "resistor": {
+ "none": "Kein",
+ "pullup": "Pull-Up",
+ "pulldown": "Pull-Down"
+ },
+ "digout": "Digitaler Ausgang",
+ "pwmout": "PWM-Ausgang",
+ "servo": "Servo-Ausgang",
+ "initpin0": "Initalzustand low (0)",
+ "initpin1": "Initalzustand high (1)",
+ "pinname": "Pin",
+ "tip": {
+ "pin": "Pins in Verwendung: ",
+ "in": "Nur digitaler Eingang unterstützt - Eingangszustand muss 0 oder 1 sein",
+ "dig": "Digitaler Ausgang - Node-Eingangswert muss 0 oder 1 sein",
+ "pwm": "PWM-Ausgang - Node-Eingangswert muss zwischen 0 und 100 sein",
+ "ser": "Servo-Ausgang - Node-Eingangswert muss zwischen 0 und 100 sein. 50 ist die Mitte.
Min. muss mindestens 500 µs und Max. muss 2500 µs oder weniger sein.",
+ "dual": "Blaue Pins sind mehrfach verwendbar. Es ist sicherzustellen, dass keine andere Verwendung aktiviert ist, um sie als GPIO zu verwenden."
+ },
+ "types": {
+ "digout": "Digitaler Ausgang",
+ "input": "Eingang",
+ "pullup": "Eingang mit Pull-Up",
+ "pulldown": "Eingang mit Pull-Down",
+ "pwmout": "PWM-Ausgang",
+ "servo": "Servo-Ausgang"
+ },
+ "status": {
+ "stopped": "Gestoppt",
+ "closed": "Geschlossen",
+ "not-running": "Nicht aktiv"
+ },
+ "errors": {
+ "invalidpin": "Ungültiger GPIO-Pin",
+ "invalidinput": "Ungültige Eingabe",
+ "error": "Fehler: __error__"
+ }
+ }
+}
diff --git a/hardware/sensehat/locales/de/sensehat.json b/hardware/sensehat/locales/de/sensehat.json
new file mode 100644
index 00000000..e074b248
--- /dev/null
+++ b/hardware/sensehat/locales/de/sensehat.json
@@ -0,0 +1,12 @@
+{
+ "sensehat": {
+ "label": {
+ "outputs": "Ausgänge",
+ "motionEvents": "Bewegungsereignisse",
+ "motionEventsExamples": "Beschleunigungsmesser, Gyroskop, Magnetometer, Kompass",
+ "environmentEvents": "Umgebungsereignisse",
+ "environmentEventsExamples": "Temperatur, Luftfeuchtigkeit, Luftdruck",
+ "joystickEvents": "Joystick-Ereignisse"
+ }
+ }
+}
\ No newline at end of file
diff --git a/io/ping/locales/de/88-ping.json b/io/ping/locales/de/88-ping.json
new file mode 100644
index 00000000..bf098913
--- /dev/null
+++ b/io/ping/locales/de/88-ping.json
@@ -0,0 +1,15 @@
+{
+ "ping": {
+ "ping": "ping",
+ "label": {
+ "target": "Ziel",
+ "ping": "Ping (S)",
+ "mode": "Modus",
+ "mode_option": {
+ "timed": "Zeitgesteuert",
+ "triggered": "Getriggert"
+ },
+ "tip": "Hinweis: Ziel-Eintrag leer lassen, damit über msg.payload der Hosts dynamisch gesetzt werden kann"
+ }
+ }
+}
diff --git a/io/serialport/locales/de/25-serial.json b/io/serialport/locales/de/25-serial.json
new file mode 100644
index 00000000..be757712
--- /dev/null
+++ b/io/serialport/locales/de/25-serial.json
@@ -0,0 +1,73 @@
+{
+ "serial": {
+ "status": {
+ "waiting": "Wartend",
+ "timeout": "Zeitablauf"
+ },
+ "label": {
+ "serialport": "Serieller Port",
+ "settings": "Einstellungen",
+ "baudrate": "Baudrate",
+ "databits": "Datenbits",
+ "parity": "Parität",
+ "stopbits": "Stoppbits",
+ "input": "Empfang",
+ "split": "Aufteilung",
+ "deliver": "und Ausgabe",
+ "output": "Versand",
+ "request": "Anforderung",
+ "responsetimeout": "Standardwert Antwort-Zeitablauf",
+ "ms": "ms",
+ "serial": "seriell",
+ "none": "none",
+ "start": "Optional Warten auf das Startzeichen",
+ "startor": ", dann"
+ },
+ "placeholder": {
+ "serialport": "z. B. /dev/ttyUSB0/"
+ },
+ "parity": {
+ "none": "Keine",
+ "even": "Gerade",
+ "mark": "Mark",
+ "odd": "Ungerade",
+ "space": "Space"
+ },
+ "linestates": {
+ "none": "Auto",
+ "high": "High",
+ "low": "Low"
+ },
+ "split": {
+ "character": "anhand Zeichen",
+ "timeout": "nach Zeitablauf von",
+ "silent": "nach Ruhezeit von",
+ "lengths": "in feste Längen von"
+ },
+ "output": {
+ "ascii": "als ASCII-Strings",
+ "binary": "binäre Buffer"
+ },
+ "addsplit": "Zeichen zu Ausgangsnachrichten hinzufügen",
+ "tip": {
+ "responsetimeout": "Tipp: Der Standardwert des Antwort-Zeitablaufs (default response timeout) kann durch Setzen von msg.timeout überschrieben werden",
+ "split": "Tipp: Das Aufteilungszeichen wird benutzt, um die empfangenen Daten in einzelne Nachrichten aufzuteilen. Es werden Zeichen ($), Escape-Codes (\\n) oder Hex-Codes (0x03) akzeptiert.",
+ "silent": "Tipp: Im Ruhezeit-Modus wird die Ruhezeitmessung bei jedem neu empfangenen Zeichen neu gestartet",
+ "timeout": "Tipp: Im Zeitablauf-Modus startet die Zeitmessung mit Empfang des ersten Zeichens",
+ "count": "Tipp: Im Modus der festen Längen kann msg.count die vorgegebene Anzahl überschreiben, sofern dieser Wert kleiner ist",
+ "waitfor": "Tipp: Optional. Leer lassen, um alle Daten zu empfangen. Es werden Zeichen ($), Escape-Codes (\\n) oder Hex-Codes (0x03) akzeptiert." ,
+ "addchar": "Tipp: Dieses Zeichen wird jeder über den seriellen Port gesendeten Nachricht hinzugefügt. Üblicherweise \\r oder \\n."
+ },
+ "onopen": "Seriellen Port __port__ geöffnet mit __baud__ Baud, __config__",
+ "errors": {
+ "missing-conf": "Fehlende serielle Konfiguration",
+ "serial-port": "Serieller Port",
+ "error": "Serieller Port __port__ Fehler: __error__",
+ "unexpected-close": "Serieller Port __port__ unerwartet geschlossen",
+ "disconnected": "Serieller Port __port__ getrennt",
+ "closed": "Serieller Port __port__ geschlossen",
+ "list": "Port-Auflistung fehlgeschlagen. Bitte manuell eintragen.",
+ "badbaudrate": "Ungültige Baudrate"
+ }
+ }
+}
diff --git a/parsers/base64/locales/de/70-base64.json b/parsers/base64/locales/de/70-base64.json
new file mode 100644
index 00000000..f6550c95
--- /dev/null
+++ b/parsers/base64/locales/de/70-base64.json
@@ -0,0 +1,24 @@
+{
+ "base64": {
+ "base64": "base64",
+ "label": {
+ "action": "Aktion"
+ },
+ "convert": {
+ "buffer": "Konvertierung Buffer <-> Base64",
+ "encode": "Kodierung als Base64",
+ "decode": "Konvertierung Base64 zu String"
+ },
+ "log": {
+ "nonbase64encode": "Kein Base64-String - möglicherweise soll es kodiert werden..."
+ },
+ "warn": {
+ "cannothandle": "Dieser Node kann nur Strings oder Buffer verarbeiten",
+ "noproperty": "Keine Eigenschaft zur Verarbeitung gefunden"
+ },
+ "error": {
+ "invalid": "Ungültiger Base64-String",
+ "nonbase64": "Kein Base64-String"
+ }
+ }
+}
diff --git a/social/email/locales/de/61-email.json b/social/email/locales/de/61-email.json
new file mode 100644
index 00000000..df7bac5b
--- /dev/null
+++ b/social/email/locales/de/61-email.json
@@ -0,0 +1,67 @@
+{
+ "email": {
+ "email": "email",
+ "label": {
+ "getmail":"Mailempfang",
+ "auto": "automatisch",
+ "trigger": "wenn getriggert",
+ "to": "An",
+ "server": "Server",
+ "port": "Port",
+ "useSecureConnection": "Sichere Verbindung verwenden",
+ "userid": "Benutzer-ID",
+ "password": "Passwort",
+ "repeat": "alle",
+ "seconds": "Sekunden",
+ "folder": "Verzeichnis",
+ "protocol": "Protokoll",
+ "useSSL": "SSL",
+ "useTLS": "TLS",
+ "disposition": "Behandlung",
+ "none": "Keine",
+ "read": "Gelesen markieren",
+ "delete": "Löschen",
+ "criteria": "Kriterium",
+ "criteriaFromMsg": "Gesetzt durch msg.criteria",
+ "all": "Alle",
+ "answered": "Beantwortet",
+ "flagged": "Markiert",
+ "seen": "Gesichtet",
+ "unanswered": "Unbeantwortet",
+ "unflagged": "Unmarkiert",
+ "unseen": "Ungesehen"
+ },
+ "default-message": "__description__\n\nDatei von Node-RED ist angehängt: __filename__",
+ "tip": {
+ "cred": "Hinweis: Berechtigungen von globaler emailkeys.js-Datei kopiert",
+ "recent": "Tipp: Es wird nur die letzte E-Mail abgerufen",
+ "mta": "Hinweis: Um Ports unter 1024 zu verwenden könnten höhere (root) Rechte benötigt werden. Siehe Hilfe-Seitenleiste."
+ },
+ "status": {
+ "messagesent": "Nachricht gesendet: __response__",
+ "fetching": "Rufe ab",
+ "foldererror": "Fehler bei Verzeichnisabruf",
+ "messageerror": "Fehler bei Nachrichtenabruf",
+ "message": "Nachricht #__number__",
+ "newemail": "Neue E-Mail empfangen: __topic__",
+ "duplicate": "Duplikat nicht gesendet: __topic__",
+ "inboxzero": "Posteingang leer",
+ "sending": "Sende",
+ "sendfail": "Senden fehlgeschlagen",
+ "parseerror": "Analyse der Nachricht fehlgeschlagen",
+ "connecterror": "Verbindungsfehler"
+ },
+ "errors": {
+ "nouserid": "Kein E-Mail-Benutzer-ID angegeben",
+ "nopassword": "Kein E-Mail-Passwort angegeben",
+ "nocredentials": "Keine E-Mail-Berechtigungen gefunden. Siehe Info-Anzeige.",
+ "nosmtptransport": "Kein SMTP-Transport. Siehe Info-Anzeige.",
+ "nopayload": "Keine sendbaren Nutzdaten (Payload)",
+ "fetchfail": "Verzeichnisabruf fehlgeschlagen: __folder__",
+ "parsefail": "Analyse der Nachricht fehlgeschlagen",
+ "messageerror": "Nachrichtenabruf fehlgeschlagen: __error__",
+ "refreshtoolarge": "Abrufintervall ist zu groß. Max. Limit sind 2147483 Sekunden.",
+ "invalidattachment": "Ungültiger Anhang-Inhalt. Es muss ein String oder ein Buffer sein."
+ }
+ }
+}
diff --git a/social/feedparser/locales/de/32-feedparse.json b/social/feedparser/locales/de/32-feedparse.json
new file mode 100644
index 00000000..4bbe5591
--- /dev/null
+++ b/social/feedparser/locales/de/32-feedparse.json
@@ -0,0 +1,15 @@
+{
+ "feedparse": {
+ "feedparse": "feedparser",
+ "label": {
+ "feedurl": "Feed-URL",
+ "refresh": "Aktualisierung",
+ "minutes": "Minuten"
+ },
+ "errors": {
+ "badstatuscode": "Fehler - Fehlerhafter Statuscode",
+ "invalidurl": "Ungültige URL",
+ "invalidinterval": "Aktualisierungsintervall zu groß"
+ }
+ }
+}
diff --git a/social/irc/locales/de/91-irc.json b/social/irc/locales/de/91-irc.json
new file mode 100644
index 00000000..67912eab
--- /dev/null
+++ b/social/irc/locales/de/91-irc.json
@@ -0,0 +1,44 @@
+{
+ "irc": {
+ "label": {
+ "ircserver": "IRC-Server",
+ "channel": "Kanal",
+ "action": "Aktion",
+ "port": "Port",
+ "ssl": "Sichere SSL-Verbindung",
+ "self": "Selbstausgestellte Zertifikate erlauben",
+ "nickname": "Nickname",
+ "username": "Benutzername",
+ "password": "Passwort"
+ },
+ "placeholder": {
+ "ifreq": "wenn vom Server benötigt"
+ },
+ "payload": "Sende Nutzdaten (Payload) an Kanäle",
+ "topic": "Benutze msg.topic um Nicknamen oder Kanäle vorzugeben",
+ "msg": "Sende komplettes msg-Objekt an Kanäle",
+ "tip": {
+ "in": "Der beizutretende Kanal muss mit einer # (Raute) beginnen.
Bei mehreren Kanälen müssen diese mit Kommas getrennt angegeben werden. Z. B. #chan1,#chan2,etc.",
+ "out": "Der beizutretende Kanal muss mit einer # (Raute) beginnen.
Beim Senden eines kompletten Objekt wird es zuvor in Strings umgewandelt."
+ },
+ "errors": {
+ "connect": "Verbinde",
+ "err": "Fehler",
+ "net": "NET",
+ "connected": "Verbunden",
+ "online": "Online",
+ "joined": "Beigetreten",
+ "ping": "Ping von",
+ "quit": "Quit",
+ "restart": "Neustart",
+ "connectionlost": "Verbindung verloren?",
+ "hasjoined": "ist beigetreten",
+ "sentinvite": "Sende Einladung an",
+ "hasleft": "ist ausgetreten",
+ "hasquit": "hat beendet (quit)",
+ "kickedfrom": "wurde gekickt von",
+ "rawcommand": "Rohbefehl",
+ "topicnotset": "msg.topic nicht gesetzt"
+ }
+ }
+}
diff --git a/social/twitter/locales/de/27-twitter.json b/social/twitter/locales/de/27-twitter.json
new file mode 100644
index 00000000..0d5b3b11
--- /dev/null
+++ b/social/twitter/locales/de/27-twitter.json
@@ -0,0 +1,54 @@
+{
+ "twitter": {
+ "label": {
+ "twitter-id": "Twitter-ID",
+ "search": "Suche",
+ "for": "nach",
+ "user": "Benutzer",
+ "dmslabel": "DMs",
+ "followers": "Verfolgt von",
+ "tweetslabel": "Tweets",
+ "eventslabel": "Ereignisse",
+ "create": "Eigene Applikation erstellen auf Seite",
+ "copy-consumer": "Consumer API keys vom 'Keys und Tokens' Abschnitt hierher kopieren",
+ "consumer_key": "API key",
+ "consumer_secret": "API secret key",
+ "copy-accessToken": "Neue 'Access token & access token secret' erzeugen und hierher kopieren",
+ "access_key": "Access token",
+ "access_secret": "Access token secret",
+ "enter-id": "Setze Deine Twitter-ID"
+ },
+ "placeholder": {
+ "for": "Komma-getrennte Wörter, @ids, #tags",
+ "user": "Komma-getrennte @twitter handles"
+ },
+ "search": {
+ "public": "alle öffentlichen Tweets",
+ "follow": "alle Tweets von Usern, denen ich folge",
+ "user": "Tweets bestimmter User",
+ "direct": "meine direkten Nachrichten",
+ "events": "meine Twitter-Ereignisse"
+ },
+ "tip": "Tipp: Nur Kommas ohne Leerzeichen zwischen mehreren Suchbegriffen verwenden. Komma = ODER, Leerzeichen = UND.
Die Twitter-API wird nicht 100% aller Tweets liefern.
Tweets von gefolgten Usern enthalten ihre Retweets und Favoriten.
Das nach-Feld leer lassen, um es durch msg.payload setzen zu können.",
+ "status": {
+ "using-geo": "Benutze Geo-Lokation: __location__",
+ "tweeting": "Tweeting",
+ "failed": "Fehlgeschlagen"
+ },
+ "warn": {
+ "nousers": "User-Option ausgewählt, aber keine User angegeben",
+ "waiting": "Warte auf Suchbegriff"
+ },
+ "errors": {
+ "ratelimit": "Ratenlimit erfolgt",
+ "limitrate": "Begrenze Rate",
+ "streamerror": "Stream-Fehler: __error__ (__rc__)",
+ "unexpectedend": "Stream unerwartet beendet",
+ "invalidtag": "Ungültige Tag-Eigenschaft",
+ "missingcredentials": "Fehlende Twitter-Berechtigungen",
+ "truncated": "Tweet abgeschnitten nach mehr als 280 Zeichen",
+ "sendfail": "Tweet-Senden fehlgeschlagen: __error__",
+ "nopayload": "Keine Nutzdaten (Payload) zu tweeten"
+ }
+ }
+}
diff --git a/storage/mongodb/locales/de/66-mongodb.json b/storage/mongodb/locales/de/66-mongodb.json
new file mode 100644
index 00000000..634dc889
--- /dev/null
+++ b/storage/mongodb/locales/de/66-mongodb.json
@@ -0,0 +1,38 @@
+{
+ "mongodb": {
+ "label": {
+ "host": "Host",
+ "topology":"Verbindungs- topologie",
+ "connectOptions":"Verbindungs- optionen",
+ "port": "Port",
+ "database": "Datenbank",
+ "username": "Benutzername",
+ "password": "Passwort",
+ "server": "Server",
+ "collection": "Collection",
+ "operation": "Operation",
+ "onlystore": "Nur msg.payload-Objekt speichern",
+ "createnew": "Erzeuge ein neues Dokument, wenn keine Übereinstimmung gefunden",
+ "updateall": "Aktualisiere alle übereinstimmenden Dokumente"
+ },
+ "operation": {
+ "save": "Speichern",
+ "insert": "Einfügen",
+ "update": "Aktualisieren",
+ "remove": "Entfernen",
+ "find": "Finden",
+ "count": "Zählen",
+ "aggregate": "Vereinen"
+ },
+ "status": {
+ "connecting": "Verbinde",
+ "connected": "Verbunden",
+ "error": "Fehler"
+ },
+ "tip": "Tipp: Wenn keine Collection vorgegeben ist, muss msg.collection
den Collection-Namen enthalten",
+ "errors": {
+ "nocollection": "Keine Collection angegeben",
+ "missingconfig": "Fehlende MongoDB-Konfiguration"
+ }
+ }
+}
diff --git a/storage/redis/locales/de/65-redisout.json b/storage/redis/locales/de/65-redisout.json
new file mode 100644
index 00000000..e85516d9
--- /dev/null
+++ b/storage/redis/locales/de/65-redisout.json
@@ -0,0 +1,21 @@
+{
+ "redisout": {
+ "label": {
+ "host": "Host",
+ "port": "Port",
+ "key": "Schlüssel",
+ "type": "Typ"
+ },
+ "type": {
+ "string": "String",
+ "hash": "Hash",
+ "set": "Set",
+ "list": "List"
+ },
+ "tip": "Wenn kein Schlüssel angegeben, wird der Topic als Schlüssel verwendet.
Beim Typ Hash sollten die Nutzdaten (payload) ein Objekt oder field=value string sein.",
+ "errors": {
+ "invalidpayload": "Ungültige Nutzdaten (payload) für redis-hash",
+ "nokey": "Kein Schlüssel oder Topic gesetzt"
+ }
+ }
+}
\ No newline at end of file
diff --git a/storage/sqlite/locales/de/sqlite.json b/storage/sqlite/locales/de/sqlite.json
new file mode 100644
index 00000000..00357295
--- /dev/null
+++ b/storage/sqlite/locales/de/sqlite.json
@@ -0,0 +1,20 @@
+{
+ "sqlite": {
+ "label": {
+ "database": "Datenbank",
+ "sqlQuery": "SQL-Abfrage",
+ "viaMsgTopic": "Via msg.topic",
+ "fixedStatement": "Fester Ausdruck",
+ "preparedStatement": "Vorbereiteter Ausdruck",
+ "batchWithoutResponse": "Batch ohne Antwort",
+ "sqlStatement": "SQL-Ausdruck (Statement)",
+ "mode": "Modus",
+ "readWriteCreate": "Lesen-Schreiben-Erzeugen",
+ "readWrite": "Lesen-Schreiben",
+ "readOnly": "Nur-Lesen"
+ },
+ "tips": {
+ "memoryDb": "Hinweis: Das Setzen der Datenbank auf :memory:
erzeugt eine flüchtige (nicht-persistente) Datenbank im Speicher."
+ }
+ }
+}
diff --git a/storage/tail/locales/de/28-tail.json b/storage/tail/locales/de/28-tail.json
new file mode 100644
index 00000000..75482856
--- /dev/null
+++ b/storage/tail/locales/de/28-tail.json
@@ -0,0 +1,24 @@
+{
+ "tail": {
+ "tail": "tail",
+ "label": {
+ "filename": "Dateiname",
+ "type": "Dateityp",
+ "splitlines": "Aufteilung mittels",
+ "name": "Name",
+ "regex": "Aufteilungszeichen oder regulärer Ausdruck (Regex)"
+ },
+ "action": {
+ "text": "Text (String-Rückgabe)",
+ "binary": "Binary (Buffer-Rückgabe)"
+ },
+ "errors": {
+ "windowsnotsupport": "Zurzeit nicht unterstützt unter Windows",
+ "filenotfound": "Datei nicht gefunden"
+ },
+ "state":{
+ "stopped": "Gestoppt",
+ "nofilename":"Fehlender Dateiname am Eingang"
+ }
+ }
+}