diff --git a/.gitignore b/.gitignore
index 16e7a8c8b2234275f15fcd36090ce9e2badf7e36..81b593465a47eb6a0a9f41d7926289a7c35e471e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@ composer.lock
 build-coverage
 swagger
 .phpcs-cache
+/lang/*.mo
diff --git a/changelog.txt b/changelog.txt
index d940f97eb6528ea14c26fbb21fbd927b87be2a82..884d24116db638f5dafcea028b661ebd754e7bcc 100644
--- a/changelog.txt
+++ b/changelog.txt
@@ -1,5 +1,9 @@
 # Changelog
 
+## [3.1.0] - 2022-08-30
+### Added
+- de_DE translations
+
 ## [3.0.0] - 2022-07-19
 ### Added
 - Added strong typing to all the interfaces
diff --git a/composer.json b/composer.json
index 03b48b4c3c4904c3545fedbd94b7cb7f6ff56239..7412e02449f441a5e081026fcf4411c10de47e68 100644
--- a/composer.json
+++ b/composer.json
@@ -41,7 +41,8 @@
 		"text-domain": "wp-forms",
 		"translations-folder": "lang",
 		"po-files": {
-			"pl_PL": "pl_PL.po"
+			"pl_PL": "pl_PL.po",
+			"de_DE": "de_DE.po"
 		}
 	},
 	"scripts": {
@@ -49,5 +50,11 @@
 		"phpunit-unit-fast": "phpunit --configuration phpunit-unit.xml --no-coverage",
 		"phpunit-integration": "phpunit --configuration phpunit-integration.xml --coverage-text --colors=never",
 		"phpunit-integration-fast": "phpunit --configuration phpunit-integration.xml --no-coverage"
+	},
+	"config": {
+		"allow-plugins": {
+			"phpstan/extension-installer": true,
+			"dealerdirect/phpcodesniffer-composer-installer": true
+		}
 	}
 }
diff --git a/lang/de_DE.po b/lang/de_DE.po
new file mode 100755
index 0000000000000000000000000000000000000000..51c3f772d4e05a0f141752aa0698cdaa37f3647a
--- /dev/null
+++ b/lang/de_DE.po
@@ -0,0 +1,43 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: wp-forms\n"
+"POT-Creation-Date: 2022-08-30 09:12+0200\n"
+"PO-Revision-Date: 2022-08-30 09:12+0200\n"
+"Last-Translator: Sebastian Pisula <sebastian.pisula@gmail.com>\n"
+"Language-Team: Łukasz Spryszak <lspryszak@gmail.com>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 3.1.1\n"
+"X-Poedit-Basepath: ..\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
+"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;"
+"_n_noop:1,2;_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
+"X-Poedit-SearchPath-0: .\n"
+"X-Poedit-SearchPath-1: src\n"
+"X-Poedit-SearchPathExcluded-0: *.js\n"
+"X-Poedit-SearchPathExcluded-1: vendor\n"
+"X-Poedit-SearchPathExcluded-2: vendor_prefixed\n"
+
+#: templates/input-image.php:25
+msgid "Set image"
+msgstr "Bild einstellen"
+
+#: templates/input-image.php:32
+msgid "Remove image"
+msgstr "Bild entfernen"
+
+#: templates/input-image.php:53
+msgid "Select or Upload Media"
+msgstr "Medien auswählen oder hochladen"
+
+#: templates/input-image.php:55
+msgid "Use this media"
+msgstr "Dieses Medium verwenden"
+
+#: templates/product-select.php:13
+msgid "Search for a product&hellip;"
+msgstr "Suche nach einem Produkt&hellip;"
diff --git a/lang/pl_PL.mo b/lang/pl_PL.mo
deleted file mode 100644
index f621cb5cbf4b151eecddd0e12ca29f4eee4f51c7..0000000000000000000000000000000000000000
Binary files a/lang/pl_PL.mo and /dev/null differ