Przeglądaj źródła

i18n(de): Improve German translations (#8704)

* i18n(de): improve German translations

- Fix orthography and grammar (e.g. Authentifizierung→Authentifizierung, Kategory→Kategorie)
- Replace anglicisms with German terms (Hashtags→Tags, Icon→Symbol, Layout→Theme where appropriate)
- Improve clarity and naturalness (e.g. Archivierungsausnahmen→Bereinigungsausnahme, Trägheit→Lazy Load)
- Complete TODO translations (send_referrer_allowlist, when_same_guid_in_category, keep_adding_feed)
- Fix typos (Artikle→Artikel, EAls→Als, Aals→Als)
- Use consistent terminology (Account→Konto, Nutzername→Benutzername, Webseite→Website)

* i18n(de): revert Account→Konto, Nutzername→Benutzername, Icon→Symbol

Keep 'Account' (Konto too bank-like), 'Nutzername' (Nutzer preferred
over Benutzer), and 'Icon' (Symbol sounds dated).

---------

Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
Michael 2 tygodni temu
rodzic
commit
92e34aec6d

+ 13 - 13
app/i18n/de/admin.php

@@ -14,19 +14,19 @@ return array(
 	'auth' => array(
 		'allow_anonymous' => 'Anonymes Lesen der Artikel des Standardbenutzers (%s) erlauben',
 		'allow_anonymous_refresh' => 'Anonymes Aktualisieren der Artikel erlauben',
-		'api_enabled' => '<abbr>API</abbr>-Zugriff erlauben <small>(für mobile Apps und Benutzerabfragen benötigt)</small>',
+		'api_enabled' => '<abbr>API</abbr>-Zugriff erlauben <small>(für mobile Apps und zum Teilen von Benutzerabfragen erforderlich)</small>',
 		'form' => 'Webformular (traditionell, benötigt JavaScript)',
 		'http' => 'HTTP (fortgeschritten: vom Webserver verwaltet, OIDC, SSO…)',
 		'none' => 'Keine (gefährlich)',
 		'title' => 'Authentifizierung',
 		'token' => 'Master-Authentifizierungs-Token',
-		'token_help' => 'Zugriff auf alle vom Nutzer erstellten RSS-Feeds freigeben (inkl. Aktualisierung ohne Authenthentifizierung):',
+		'token_help' => 'Erlaubt Zugriff auf alle RSS-Ausgaben des Nutzers sowie das Aktualisieren von Feeds ohne Authentifizierung:',
 		'type' => 'Authentifizierungsmethode',
 	),
 	'extensions' => array(
 		'author' => 'Autor',
 		'community' => 'Verfügbare Community-Erweiterungen',
-		'description' => 'Beschreibungen',
+		'description' => 'Beschreibung',
 		'disabled' => 'Deaktiviert',
 		'empty_list' => 'Keine installierten Erweiterungen',
 		'empty_list_help' => 'Überprüfen Sie die Protokolle, um den Grund für die leere Erweiterungsliste zu ermitteln.',
@@ -63,10 +63,10 @@ return array(
 		'main' => 'Haupt-Statistiken',
 		'main_stream' => 'Haupt-Feeds',
 		'nb_unreads' => 'Anzahl ungelesener Artikel',
-		'no_idle' => 'Es gibt keinen inaktiven Feed!',
+		'no_idle' => 'Es gibt keine inaktiven Feeds!',
 		'number_entries' => '%d Artikel',
 		'overview' => 'Übersicht',
-		'percent_of_total' => '% Gesamt',
+		'percent_of_total' => '% der Gesamtanzahl',
 		'repartition' => 'Artikel-Verteilung: %s',
 		'status_favorites' => 'Favoriten',
 		'status_read' => 'Gelesen',
@@ -74,11 +74,11 @@ return array(
 		'status_unread' => 'Ungelesen',
 		'title' => 'Statistiken',
 		'top_feed' => 'Top 10-Feeds',
-		'unread_dates' => 'Datum mit den meisten ungelesenen Artikeln',
+		'unread_dates' => 'Tage mit den meisten ungelesenen Artikeln',
 	),
 	'system' => array(
 		'_' => 'Systemeinstellungen',
-		'auto-update-url' => 'Auto-Update URL',
+		'auto-update-url' => 'URL des Aktualisierungsservers',
 		'base-url' => array(
 			'_' => 'Base URL',	// IGNORE
 			'recommendation' => 'Automatische Empfehlung: <kbd>%s</kbd>',
@@ -86,10 +86,10 @@ return array(
 		'closed_registration_message' => 'Nachricht bei geschlossener Registrierung',
 		'cookie-duration' => array(
 			'help' => 'in Sekunden',
-			'number' => 'Eingeloggt bleiben für',
+			'number' => 'Angemeldet bleiben für',
 		),
 		'default_closed_registration_message' => 'Dieser Server akzeptiert momentan keine neuen Registrierungen.',
-		'force_email_validation' => 'E-Mail-Adressvalidierung erzwingen',
+		'force_email_validation' => 'E-Mail-Adressprüfung erzwingen',
 		'instance-name' => 'Bezeichnung',
 		'max-categories' => 'Anzahl erlaubter Kategorien pro Benutzer',
 		'max-feeds' => 'Anzahl erlaubter Feeds pro Benutzer',
@@ -100,7 +100,7 @@ return array(
 				'option' => array(
 					'noform' => 'Deaktiviert: Keine Registrierung möglich',
 					'nolimit' => 'Aktiviert: Unbegrenzte Anzahl neuer Accounts',
-					'setaccountsnumber' => 'Anzahl maximaler Benutzer-Acounts festlegen',
+					'setaccountsnumber' => 'Maximale Anzahl an Benutzer-Accounts festlegen',
 				),
 			),
 			'status' => array(
@@ -121,7 +121,7 @@ return array(
 	),
 	'update' => array(
 		'_' => 'System aktualisieren',
-		'apply' => 'Anwenden',
+		'apply' => 'Aktualisierung starten',
 		'changelog' => 'Liste der Änderungen',
 		'check' => 'Auf neue Aktualisierungen prüfen',
 		'copiedFromURL' => 'update.php wurde von %s nach ./data kopiert',
@@ -150,8 +150,8 @@ return array(
 		'language' => 'Sprache',
 		'last_user_activity' => 'Letzte Benutzeraktivität',
 		'list' => 'Benutzerliste',
-		'number' => 'Es wurde bis jetzt %d Account erstellt',
-		'numbers' => 'Es wurden bis jetzt %d Accounts erstellt',
+		'number' => 'Bisher wurde %d Account erstellt',
+		'numbers' => 'Bisher wurden %d Accounts erstellt',
 		'password_form' => 'Passwort<br /><small>(für die Anmeldemethode per Webformular)</small>',
 		'password_format' => 'mindestens 7 Zeichen',
 		'title' => 'Benutzer verwalten',

+ 4 - 4
app/i18n/de/api.php

@@ -14,17 +14,17 @@ return array(
 	'information' => array(
 		'address' => 'API-Adresse:',
 		'output' => array(
-			'encoding-support' => '⚠️ WARNUNG: Kein <code>%2F</code> Support, Einige Clients/Apps funktionieren ggf. nicht!',
+			'encoding-support' => '⚠️ WARNUNG: Keine <code>%2F</code>-Unterstützung, einige Clients/Apps funktionieren ggf. nicht!',
 			'invalid-configuration' => '⚠️ WARNUNG: Die Base URL in ./data/config.php könnte ungültig sein',
 			'pass' => '✔️ OK',
 			'unknown-error' => '❌ ',	// IGNORE
 		),
 		'test' => array(
-			'fever' => 'Prüfung der Fever API Einstellungen:',
-			'greader' => 'Prüfung der Google Reader API Einstellungen:',
+			'fever' => 'Prüfung der Fever-API-Einstellungen:',
+			'greader' => 'Prüfung der Google-Reader-API-Einstellungen:',
 		),
 		'title' => array(
-			'_' => 'FreshRSS API-Endpoints',
+			'_' => 'FreshRSS-API-Endpunkte',
 			'extension' => 'API für Erweiterungen',
 			'fever' => 'Fever kompatible API',
 			'greader' => 'Google Reader kompatible API',

+ 62 - 62
app/i18n/de/conf.php

@@ -13,19 +13,19 @@
 return array(
 	'archiving' => array(
 		'_' => 'Archivierung',
-		'exception' => 'Archivierungsausnahmen',
+		'exception' => 'Bereinigungsausnahme',
 		'help' => 'Weitere Optionen sind in den Einstellungen der individuellen Feeds verfügbar.',
-		'keep_favourites' => 'Favoritenartikel behalten',
-		'keep_labels' => 'Artikel mit Label behalten',
+		'keep_favourites' => 'Favoriten niemals löschen',
+		'keep_labels' => 'Artikel mit Label niemals löschen',
 		'keep_max' => 'Maximale Anzahl an Artikeln, die pro Feed behalten werden',
 		'keep_min_by_feed' => 'Minimale Anzahl an Artikeln, die pro Feed behalten werden',
 		'keep_period' => 'Maximales Alter der zu behaltenden Artikel',
-		'keep_unreads' => 'Ungelesene Artikel behalten',
+		'keep_unreads' => 'Ungelesene Artikel niemals löschen',
 		'maintenance' => 'Wartung',
 		'optimize' => 'Datenbank optimieren',
 		'optimize_help' => 'Sollte gelegentlich durchgeführt werden, um die Größe der Datenbank zu reduzieren.',
-		'policy' => 'Archivierungsrichtlinien',
-		'policy_warning' => 'Ohne Archivierungsrichtlinien werden alle Artikel behalten',
+		'policy' => 'Bereinigungsrichtlinien',
+		'policy_warning' => 'Ohne Bereinigungsrichtlinien werden alle Artikel behalten',
 		'purge_now' => 'Jetzt bereinigen',
 		'title' => 'Archivierung',
 		'ttl' => 'Automatisch aktualisieren nicht öfter als',
@@ -35,7 +35,7 @@ return array(
 		'darkMode' => array(
 			'_' => 'Automatischer Dunkel-Modus',
 			'auto' => 'Automatisch',
-			'help' => 'Nur für kompatible Layouts',
+			'help' => 'Nur für kompatible Themes',
 			'no' => 'Nein',
 		),
 		'icon' => array(
@@ -43,7 +43,7 @@ return array(
 			'display_authors' => 'Autoren',
 			'entry' => 'Artikel-Icon',
 			'publication_date' => 'Datum der Veröffentlichung',
-			'related_tags' => 'Hashtags',
+			'related_tags' => 'Tags',
 			'sharing' => 'Teilen',
 			'summary' => 'Zusammenfassung',
 			'top_line' => 'Kopfzeile',
@@ -53,14 +53,14 @@ return array(
 			'seconds' => 'Sekunden (0 bedeutet keine Zeitüberschreitung)',
 			'timeout' => 'Zeitüberschreitung für HTML5-Benachrichtigung',
 		),
-		'show_nav_buttons' => 'Navigations-Buttons anzeigen',
-		'show_title_unread' => 'Show number of unread articles in the title',	// TODO
+		'show_nav_buttons' => 'Navigationsschaltflächen anzeigen',
+		'show_title_unread' => 'Anzahl ungelesener Artikel im Titel anzeigen',
 		'sidebar_hidden_by_default' => 'Seitenleiste standardmäßig ausblenden',
 		'theme' => array(
 			'_' => 'Layout',
 			'deprecated' => array(
 				'_' => 'Veraltet',
-				'description' => 'Dieses Layout wird nicht mehr unterstützt und wird in einer <a href="https://freshrss.github.io/FreshRSS/en/users/05_Configuration.html#theme" target="_blank">zukünftigen Version von FreshRSS nicht mehr verfügbar sein.',
+				'description' => 'Dieses Layout wird nicht mehr unterstützt und wird in einer <a href="https://freshrss.github.io/FreshRSS/en/users/05_Configuration.html#theme" target="_blank">zukünftigen Version von FreshRSS</a> nicht mehr verfügbar sein.',
 			),
 		),
 		'theme_not_available' => 'Das Erscheinungsbild „%s“ ist nicht mehr verfügbar. Bitte ein anderes auswählen.',
@@ -76,7 +76,7 @@ return array(
 		'website' => array(
 			'full' => 'Icon und Name',
 			'icon' => 'Nur Icon',
-			'label' => 'Webseite',
+			'label' => 'Website',	// TODO
 			'name' => 'Nur Name',
 			'none' => 'Keine',
 		),
@@ -84,25 +84,25 @@ return array(
 			'content' => 'Inhaltsbreite',
 			'large' => 'Groß',
 			'medium' => 'Mittel',
-			'no_limit' => 'Gesamte Breite',
+			'no_limit' => 'Volle Breite',
 			'thin' => 'Klein',
 		),
 	),
 	'logs' => array(
 		'loglist' => array(
-			'level' => 'Log Stufe',
-			'message' => 'Log Nachricht',
+			'level' => 'Protokollstufe',
+			'message' => 'Protokollnachricht',
 			'timestamp' => 'Zeitstempel',
 		),
 		'pagination' => array(
-			'first' => 'Erste',
-			'last' => 'Letzte',
-			'next' => 'Nächste',
-			'previous' => 'Vorherige',
+			'first' => 'Erste Seite',
+			'last' => 'Letzte Seite',
+			'next' => 'Nächste Seite',
+			'previous' => 'Vorherige Seite',
 		),
 	),
 	'mark_read_button' => array(
-		'_' => '„Alle als gelesen markieren“ Button',
+		'_' => 'Schaltfläche „Alle als gelesen markieren“',
 		'big' => 'Groß',
 		'none' => 'Keiner',
 		'small' => 'Klein',
@@ -112,23 +112,23 @@ return array(
 	),
 	'notification_timeout' => array(
 		'bad' => array(
-			'label' => 'Warnbanner anzeigen',
+			'label' => 'Warnhinweis anzeigen',
 			'seconds' => 'Sekunden (mind. 1)',
 		),
 		'good' => array(
-			'label' => 'Bestätigungsbanner anzeigen',
-			'seconds' => 'Sekunden (0 für nicht gezeigt)',
+			'label' => 'Bestätigungshinweis anzeigen',
+			'seconds' => 'Sekunden (0 = wird nicht angezeigt)',
 		),
 	),
 	'privacy' => array(
 		'_' => 'Privatsphäre',
 		'retrieve_extension_list' => 'Erweiterungsliste abrufen',
-		'send_referrer_allowlist' => 'Sites allowed to see your server address (%s)',	// TODO
+		'send_referrer_allowlist' => 'Websites, die Ihre Serveradresse sehen dürfen (%s)',
 	),
 	'profile' => array(
-		'_' => 'Profil-Verwaltung',
+		'_' => 'Profilverwaltung',
 		'api' => array(
-			'_' => 'API-Verwaltung',
+			'_' => 'API-Zugriff',
 			'api_not_set' => 'API-Passwort ist nicht gesetzt',
 			'api_set' => 'API-Passwort ist gesetzt',
 			'check_link' => 'API-Status prüfen: <kbd><a href="../api/" target="_blank">%s</a></kbd>',
@@ -151,7 +151,7 @@ return array(
 	),
 	'query' => array(
 		'_' => 'Benutzerabfragen',
-		'create' => 'Create new user query',	// TODO
+		'create' => 'Neue Benutzerabfrage erstellen',
 		'deprecated' => 'Diese Abfrage ist nicht länger gültig. Die referenzierte Kategorie oder der Feed ist gelöscht worden.',
 		'description' => 'Beschreibung',
 		'filter' => array(
@@ -159,7 +159,7 @@ return array(
 			'categories' => 'Nach Kategorie filtern',
 			'feeds' => 'Nach Feed filtern',
 			'order' => 'Nach Datum sortieren',
-			'publish_labels_instead_of_tags' => '<i>feed tags</i> durch <i>user labels</i> im geteilten RSS ersetzen',
+			'publish_labels_instead_of_tags' => '<i>Feed-Tags</i> im geteilten RSS durch <i>Benutzerlabel</i> ersetzen',
 			'search' => 'Suchbegriff',
 			'shareOpml' => 'Teilen via OPML mit zugehörigen Kategorien und Feeds aktivieren',
 			'shareRss' => 'Teilen via HTML &amp; RSS aktivieren',
@@ -170,18 +170,18 @@ return array(
 		'get_A' => 'Alle Feeds anzeigen, auch die in ihrer Kategorie angezeigten',
 		'get_Z' => 'Alle Feeds anzeigen, auch archivierte',
 		'get_all' => 'Alle Artikel anzeigen',
-		'get_all_labels' => 'Alle Artikle mit beliebigem Label anzeigen',
+		'get_all_labels' => 'Alle Artikel mit beliebigem Label anzeigen',
 		'get_category' => 'Kategorie „%s“ anzeigen',
 		'get_favorite' => 'Favoriten-Artikel anzeigen',
 		'get_feed' => 'Feed „%s“ anzeigen',
-		'get_important' => 'Alle Artikel von den "Wichtige Feeds" anzeigen',
+		'get_important' => 'Alle Artikel aus „Wichtige Feeds“ anzeigen',
 		'get_label' => 'Artikel mit dem Label “%s” anzeigen',
 		'help' => 'Siehe die <a href="https://freshrss.github.io/FreshRSS/en/users/user_queries.html" target="_blank">Dokumentation für Benutzerabfragen und Teilen via HTML / RSS / OPML</a>.',
 		'image_url' => 'Bild-URL',
 		'name' => 'Name',	// IGNORE
 		'no_filter' => 'Kein Filter',
 		'no_queries' => array(
-			'_' => 'Keine Benutzerabfrage vorhanden.',
+			'_' => 'Noch keine Benutzerabfragen gespeichert.',
 			'help' => 'Siehe <a href="https://freshrss.github.io/FreshRSS/en/users/user_queries.html" target="_blank">Dokumentation</a>',
 		),
 		'number' => 'Abfrage Nr. %d',
@@ -194,11 +194,11 @@ return array(
 				'_' => 'deaktiviert',
 				'title' => 'Teilen',
 			),
-			'greader' => 'Verteilbarer Link für GReader JSON',
-			'help' => 'Diesen Link verteilen, um ihn mit Jedem zu teilen',
-			'html' => 'Verteilbarer Link zur HTML-Seite',
-			'opml' => 'Verteilbarer Link zur OPML Liste der Feeds',
-			'rss' => 'Verteilbarer Link zum RSS-Feed',
+			'greader' => 'Freigabelink zum GReader-JSON',
+			'help' => 'Diesen Link weitergeben, wenn Sie diese Abfrage teilen möchten',
+			'html' => 'Freigabelink zur HTML-Seite',
+			'opml' => 'Freigabelink zur OPML-Liste der Feeds',
+			'rss' => 'Freigabelink zum RSS-Feed',
 		),
 		'state_0' => 'Alle Artikel anzeigen',
 		'state_1' => 'Gelesene Artikel anzeigen',
@@ -232,26 +232,26 @@ return array(
 				'none' => 'Nicht anzeigen',
 			),
 			'feed_name' => array(
-				'above_title' => 'Oberhalb der Überschrit und Hashtags',
+				'above_title' => 'Oberhalb der Überschrift und Tags',
 				'none' => 'Nicht anzeigen',
 				'with_authors' => 'In der Zeile mit Autoren und Datum',
 			),
-			'feed_title' => 'Feed Titel',
+			'feed_title' => 'Feed-Titel',
 			'icons' => array(
 				'_' => 'Artikel-Icon-Position<br /><small>(Nur in der Lese-Ansicht)</small>',
 				'above_title' => 'Über dem Titel',
 				'with_authors' => 'In der Autoren- und Datumszeile',
 			),
 			'tags' => array(
-				'_' => 'Hashtags',
+				'_' => 'Tags',	// IGNORE
 				'both' => 'In Kopf- und Fußzeile',
 				'footer' => 'In Fußzeile',
 				'header' => 'In Kopfzeile',
 				'none' => 'Nicht anzeigen',
 			),
 			'tags_max' => array(
-				'_' => 'Max Anzahl von Hashtags',
-				'help' => '0 bedeutet: Alle Hashtags anzeigen und nicht einklappen',
+				'_' => 'Max. Anzahl angezeigter Tags',
+				'help' => '0 bedeutet, dass alle Tags angezeigt und nicht eingeklappt werden',
 			),
 		),
 		'articles_per_page' => 'Anzahl der Artikel pro Seite',
@@ -269,22 +269,22 @@ return array(
 			'view' => 'Ansicht',
 		),
 		'hide_read_feeds' => 'Kategorien & Feeds ohne ungelesene Artikel verstecken (funktioniert nicht mit der Einstellung „Alle Artikel zeigen“)',
-		'img_with_lazyload' => '„träges Laden“-Methode zum Laden von Bildern verwenden',
-		'jump_next' => 'springe zum nächsten ungelesenen Geschwisterelement',
+		'img_with_lazyload' => '<em>Lazy Load</em> zum Laden von Bildern verwenden',
+		'jump_next' => 'zum nächsten ungelesenen Nachbarelement springen',
 		'mark_updated_article_unread' => 'Aktualisierte Artikel als ungelesen markieren',
 		'number_divided_when_reader' => 'Geteilt durch 2 in der Lese-Ansicht.',
 		'read' => array(
-			'article_open_on_website' => 'wenn der Artikel auf der Original-Webseite geöffnet wird',
+			'article_open_on_website' => 'wenn der Artikel auf der Original-Website geöffnet wird',
 			'article_viewed' => 'wenn der Artikel angesehen wird',
-			'focus' => 'wenn angewählt (außer für "Wichtige Feeds")',
+			'focus' => 'wenn ausgewählt (außer für „Wichtige Feeds“)',
 			'keep_max_n_unread' => 'Max. Anzahl von ungelesenen Artikeln',
-			'scroll' => 'beim Scrollen bzw. Überspringen (außer für "Wichtige Feeds")',
+			'scroll' => 'beim Scrollen oder Überspringen (außer für „Wichtige Feeds“)',
 			'upon_gone' => 'wenn der Artikel nicht mehr im Feed enthalten ist',
 			'upon_reception' => 'beim Empfang des Artikels',
 			'when' => 'Artikel als gelesen markieren…',
-			'when_same_guid_in_category' => 'if an identical GUID already exists in the top <i>n</i> newest articles of the category',	// TODO
-			'when_same_title_in_category' => 'falls der identische Titel bereits in den <i>n</i> neusten Artikel in der Kategorie vorhanden ist.',
-			'when_same_title_in_feed' => 'falls der identische Titel bereits in den <i>n</i> neusten Artikel (im Feed) vorhanden ist.',
+			'when_same_guid_in_category' => 'wenn bereits eine identische GUID unter den <i>n</i> neuesten Artikeln der Kategorie vorhanden ist',
+			'when_same_title_in_category' => 'falls der identische Titel bereits in den <i>n</i> neuesten Artikeln der Kategorie vorhanden ist.',
+			'when_same_title_in_feed' => 'falls der identische Titel bereits in den <i>n</i> neuesten Artikeln des Feeds vorhanden ist.',
 		),
 		'show' => array(
 			'_' => 'Anzuzeigende Artikel',
@@ -300,7 +300,7 @@ return array(
 		'show_fav_unread_help' => 'Auch auf Labels anwenden',
 		'sides_close_article' => 'Klick außerhalb des Artikel-Textes schließt den Artikel',
 		'star' => array(
-			'when' => 'Markiere einen Artikel als Favoriten…',
+			'when' => 'Artikel als Favorit markieren…',
 		),
 		'sticky_post' => 'Wenn geöffnet, den Artikel ganz oben anheften',
 		'title' => 'Lesen',
@@ -313,19 +313,19 @@ return array(
 	),
 	'sharing' => array(
 		'_' => 'Teilen',
-		'add' => 'Einen Teilen-Dienst hinzufügen',
+		'add' => 'Einen Freigabedienst hinzufügen',
 		'bluesky' => 'Bluesky',	// IGNORE
-		'deprecated' => 'Dieser Dienst ist veraltet und wir in einer <a href="https://freshrss.github.io/FreshRSS/en/users/08_sharing_services.html" title="Open documentation for more information" target="_blank">zukünftigen FreshRSS-Version</a> entfernt.',
+		'deprecated' => 'Dieser Dienst ist veraltet und wird in einer <a href="https://freshrss.github.io/FreshRSS/en/users/08_sharing_services.html" title="Open documentation for more information" target="_blank">zukünftigen FreshRSS-Version</a> entfernt.',
 		'diaspora' => 'Diaspora*',	// IGNORE
 		'email' => 'E-Mail',
 		'facebook' => 'Facebook',	// IGNORE
 		'more_information' => 'Weitere Informationen',
 		'print' => 'Drucken',
 		'raindrop' => 'Raindrop.io',	// IGNORE
-		'remove' => 'Teilen-Dienst entfernen',
+		'remove' => 'Freigabedienst entfernen',
 		'shaarli' => 'Shaarli',	// IGNORE
-		'share_name' => 'Anzuzeigender Teilen-Name',
-		'share_url' => 'Zu verwendende Teilen-URL',
+		'share_name' => 'Anzuzeigender Freigabename',
+		'share_url' => 'Zu verwendende Freigabe-URL',
 		'title' => 'Teilen',
 		'twitter' => 'X (Twitter)',	// IGNORE
 		'wallabag' => 'wallabag',	// IGNORE
@@ -344,27 +344,27 @@ return array(
 		'javascript' => 'JavaScript muss aktiviert sein, um Tastaturkürzel benutzen zu können',
 		'last_article' => 'Zum letzten Artikel springen',
 		'load_more' => 'Weitere Artikel laden',
-		'mark_favorite' => 'Als Favorit auswählen/entfernen',
+		'mark_favorite' => 'Favoriten-Status umschalten',
 		'mark_read' => 'Als (un-)gelesen markieren',
 		'navigation' => 'Navigation',	// IGNORE
 		'navigation_help' => 'Mit der <kbd>⇧ Umschalttaste</kbd> finden die Tastenkombinationen auf Feeds Anwendung.<br/>Mit der <kbd>Alt ⎇</kbd>-Taste finden die Tastenkombinationen auf Kategorien Anwendung.',
 		'navigation_no_mod_help' => 'Die folgenden Navigationsverknüpfungen unterstützen keine Modifikatoren.',
 		'next_article' => 'Zum nächsten Artikel springen',
 		'next_unread_article' => 'Zum nächsten ungelesenen Artikel springen',
-		'non_standard' => 'Einige Tasten (<kbd>%s</kbd>) können nicht als Shortcut verwendet werden.',
+		'non_standard' => 'Einige Tasten (<kbd>%s</kbd>) können nicht als Tastenkürzel verwendet werden.',
 		'normal_view' => 'Zur normalen Ansicht wechseln',
 		'other_action' => 'Andere Aktionen',
 		'previous_article' => 'Zum vorherigen Artikel springen',
 		'reading_view' => 'Zur Lese-Ansicht wechseln',
-		'rss_view' => 'Aals RSS-Feed öffnen',
-		'see_on_website' => 'Auf der Original-Webseite ansehen',
+		'rss_view' => 'Als RSS-Feed öffnen',
+		'see_on_website' => 'Auf der Original-Website ansehen',
 		'shift_for_all_read' => '+ <kbd>Alt ⎇</kbd> um vorherige Artikel als gelesen zu markieren<br />+ <kbd>⇧ Shift</kbd> um alle Artikel als gelesen zu markieren',
-		'skip_next_article' => 'Nächsten markieren ohne zu öffnen',
-		'skip_previous_article' => 'Vorherigen markieren ohne zu öffnen',
+		'skip_next_article' => 'Zum nächsten springen, ohne zu öffnen',
+		'skip_previous_article' => 'Zum vorherigen springen, ohne zu öffnen',
 		'title' => 'Tastenkombination',
 		'toggle_aside' => 'Seitenleiste an/aus',
 		'toggle_media' => 'Medien abspielen/anhalten',
-		'user_filter' => 'Auf Benutzerabfragen zugreifen',
+		'user_filter' => 'Zu Benutzerabfragen wechseln',
 		'user_filter_help' => 'Wenn es nur eine Benutzerabfrage gibt, wird diese verwendet. Ansonsten sind die Abfragen über ihre Nummer erreichbar.',
 		'views' => 'Ansichten',
 	),

+ 10 - 10
app/i18n/de/feedback.php

@@ -35,7 +35,7 @@ return array(
 	),
 	'conf' => array(
 		'error' => 'Während der Speicherung der Konfiguration trat ein Fehler auf',
-		'query_created' => 'Abfrage „%s“ ist erstellt worden.',
+		'query_created' => 'Abfrage „%s“ wurde erstellt.',
 		'shortcuts_updated' => 'Die Tastenkombinationen sind aktualisiert worden',
 		'updated' => 'Die Konfiguration ist aktualisiert worden',
 	),
@@ -67,7 +67,7 @@ return array(
 	'profile' => array(
 		'error' => 'Ihr Profil kann nicht geändert werden',
 		'passwords_dont_match' => 'Passwörter stimmen nicht überein',
-		'updated' => 'Ihr Profil ist geändert worden',
+		'updated' => 'Ihr Profil wurde geändert',
 	),
 	'sub' => array(
 		'actualize' => 'Aktualisieren',
@@ -80,12 +80,12 @@ return array(
 			'deleted' => 'Kategorie wurde gelöscht.',
 			'emptied' => 'Kategorie wurde geleert.',
 			'error' => 'Kategorie kann nicht aktualisiert werden',
-			'name_exists' => 'Kategorie-Name existiert bereits.',
+			'name_exists' => 'Der Kategoriename existiert bereits.',
 			'no_id' => 'Sie müssen die ID der Kategorie angeben.',
-			'no_name' => 'Kategorie-Name kann nicht leer sein.',
-			'not_delete_default' => 'Sie können die Vorgabe-Kategorie nicht löschen!',
+			'no_name' => 'Der Kategoriename darf nicht leer sein.',
+			'not_delete_default' => 'Sie können die Standardkategorie nicht löschen!',
 			'not_exist' => 'Kategorie existiert nicht!',
-			'over_max' => 'Sie haben Ihr Kategorien-Limit erreicht (%d)',
+			'over_max' => 'Sie haben Ihr Kategorienlimit erreicht (%d)',
 			'updated' => 'Kategorie wurde aktualisiert.',
 		),
 		'feed' => array(
@@ -107,14 +107,14 @@ return array(
 			'no_refresh' => 'Keine Feeds zum Aktualisieren…',
 			'not_added' => '<em>%s</em> konnte nicht hinzugefügt werden',
 			'not_found' => 'Feed konnte nicht gefunden werden',
-			'over_max' => 'Sie haben Ihr Feeds-Limit erreicht (%d)',
-			'reloaded' => '<em>%s</em> wurde neugeladen',
+			'over_max' => 'Sie haben Ihr Feedlimit erreicht (%d)',
+			'reloaded' => '<em>%s</em> wurde neu geladen',
 			'selector_preview' => array(
 				'http_error' => 'Website-Inhalt konnte nicht geladen werden.',
 				'no_entries' => 'In diesem Feed gibt es keine Artikel. Um eine Vorschau zu erstellen, muss mindestens ein Artikel vorhanden sein.',
 				'no_feed' => 'Interner Fehler (Feed konnte nicht gefunden werden).',
 				'no_result' => 'Die Auswahl ergab keine Ergebnisse. Der Originaltext des Feeds wird daher angezeigt.',
-				'selector_empty' => 'Die Auswahl ist leer. Sie müssen einen definieren um eine Vorschau zu erstellen.',
+				'selector_empty' => 'Die Auswahl ist leer. Definieren Sie einen Selektor, um eine Vorschau zu erstellen.',
 			),
 			'updated' => 'Feed wurde aktualisiert',
 		),
@@ -123,7 +123,7 @@ return array(
 	'tag' => array(
 		'created' => 'Label „%s“ wurde erstellt.',
 		'error' => 'Label konnte nicht aktualisiert werden!',
-		'name_exists' => 'Label-Name existiert bereits.',
+		'name_exists' => 'Der Labelname existiert bereits.',
 		'renamed' => 'Label „%s“ wurde umbenannt in „%s“.',
 		'updated' => 'Label wurde aktualisiert.',
 	),

+ 9 - 9
app/i18n/de/gen.php

@@ -54,7 +54,7 @@ return array(
 	'auth' => array(
 		'accept_tos' => 'Ich akzeptiere die <a href="%s">Nutzungsbedingungen</a>.',
 		'email' => 'E-Mail-Adresse',
-		'keep_logged_in' => 'Eingeloggt bleiben für<small>(%s Tage)</small>',
+		'keep_logged_in' => 'Angemeldet bleiben <small>(%s Tage)</small>',
 		'login' => 'Anmelden',
 		'logout' => 'Abmelden',
 		'password' => array(
@@ -142,34 +142,34 @@ return array(
 	),
 	'interval' => array(
 		'day' => array(
-			0 => 'vor %d Tag',
+			0 => 'vor %d Tag',
 			1 => 'vor %d Tagen',
 		),
 		'hour' => array(
-			0 => 'vor %d Stunde',
+			0 => 'vor %d Stunde',
 			1 => 'vor %d Stunden',
 		),
 		'justnow' => 'gerade eben',
 		'minute' => array(
-			0 => 'vor %d Minute',
+			0 => 'vor %d Minute',
 			1 => 'vor %d Minuten',
 		),
 		'month' => array(
-			0 => 'vor %d Monat',
+			0 => 'vor %d Monat',
 			1 => 'vor %d Monaten',
 		),
 		'second' => array(
-			0 => 'vor %d Sekunde',
+			0 => 'vor %d Sekunde',
 			1 => 'vor %d Sekunden',
 		),
 		'year' => array(
-			0 => 'vor %d Jahr',
+			0 => 'vor %d Jahr',
 			1 => 'vor %d Jahren',
 		),
 	),
 	'js' => array(
-		'category_empty' => 'Kategorie leeren',
-		'confirm_action' => 'Sind Sie sicher, dass Sie diese Aktion durchführen wollen? Diese Aktion kann nicht abgebrochen werden!',
+		'category_empty' => 'Leere Kategorie',
+		'confirm_action' => 'Möchten Sie diese Aktion wirklich ausführen? Sie kann nicht rückgängig gemacht werden.',
 		'confirm_action_feed_cat' => 'Möchten Sie diese Aktion wirklich ausführen? Sie verlieren damit alle zugehörigen Favoriten und Suchanfragen. Der Vorgang kann nicht rückgängig gemacht werden!',
 		'confirm_exit_slider' => 'Sollen die nicht gespeicherten Einstellungen wirklich verworfen werden?',
 		'feedback' => array(

+ 3 - 3
app/i18n/de/index.php

@@ -27,7 +27,7 @@ return array(
 		),
 		'bugs_reports' => 'Fehlerberichte',
 		'documentation' => 'Dokumentation',
-		'freshrss_description' => 'FreshRSS ist ein selbst hostbarer RSS-Aggregator und -Reader. Damit können Sie mehrere Nachrichten-Websites auf einen Blick lesen und verfolgen, ohne von einer Website zur nächsten wechseln zu müssen. FreshRSS ist leichtgewichtig, konfigurierbar und benutzerfreundlich.',
+		'freshrss_description' => 'FreshRSS ist ein selbst gehosteter RSS-Aggregator und -Reader. Damit können Sie mehrere Nachrichten-Websites auf einen Blick lesen und verfolgen, ohne von einer Website zur nächsten wechseln zu müssen. FreshRSS ist leichtgewichtig, anpassbar und benutzerfreundlich.',
 		'github' => '<a href="https://github.com/FreshRSS/FreshRSS/issues">auf GitHub</a>',
 		'license' => 'Lizenz',
 		'project_website' => 'Projekt-Website',
@@ -109,7 +109,7 @@ return array(
 			),
 			'rand' => 'Zufällige Reihenfolge',
 			'secondary' => array(
-				'_' => 'Zusätzliches Sortierkritiserium',
+				'_' => 'Zusätzliches Sortierkriterium',
 				'help' => 'Nur relevant, wenn das Hauptsortierkriterium Kategorien oder Feed-Titel sind.',
 			),
 			'title_asc' => 'Titel A→Z',
@@ -124,7 +124,7 @@ return array(
 	),
 	'share' => 'Teilen',
 	'tag' => array(
-		'related' => 'Hashtags',
+		'related' => 'Tags',
 	),
 	'tos' => array(
 		'title' => 'Nutzungsbedingungen',

+ 21 - 21
app/i18n/de/install.php

@@ -22,11 +22,11 @@ return array(
 		'_' => 'Datenbank',
 		'conf' => array(
 			'_' => 'Datenbank-Konfiguration',
-			'ko' => 'Überprüfen Sie Ihre Datenbank-Information.',
+			'ko' => 'Überprüfen Sie Ihre Datenbankangaben.',
 			'ok' => 'Datenbank-Konfiguration wurde gespeichert.',
 		),
 		'host' => 'Host',	// IGNORE
-		'password' => 'Datenbank-Password',
+		'password' => 'Datenbank-Passwort',
 		'prefix' => 'Tabellen-Präfix',
 		'type' => 'Datenbank-Typ',
 		'username' => 'Datenbank-Benutzername',
@@ -35,8 +35,8 @@ return array(
 		'_' => 'Überprüfungen',
 		'already_installed' => 'Wir haben festgestellt, dass FreshRSS bereits installiert wurde!',
 		'cache' => array(
-			'nok' => 'Überprüfen Sie die Berechtigungen des Verzeichnisses <em>%s</em>. Der HTTP-Server muss Schreibrechte besitzen.',
-			'ok' => 'Die Berechtigungen des Verzeichnisses <em>%s</em> sind in Ordnung.',
+			'nok' => 'Überprüfen Sie die Berechtigungen des Verzeichnisses <em>%1$s</em> für den Benutzer <em>%2$s</em>. Der HTTP-Server muss Schreibrechte besitzen.',
+			'ok' => 'Die Berechtigungen des Cache-Verzeichnisses sind in Ordnung.',
 		),
 		'ctype' => array(
 			'nok' => 'Ihnen fehlt eine benötigte Bibliothek für die Überprüfung von Zeichentypen (php-ctype).',
@@ -47,8 +47,8 @@ return array(
 			'ok' => 'Sie haben die cURL-Erweiterung.',
 		),
 		'data' => array(
-			'nok' => 'Überprüfen Sie die Berechtigungen des Verzeichnisses <em>%s</em>. Der HTTP-Server muss Schreibrechte besitzen.',
-			'ok' => 'Die Berechtigungen des Verzeichnisses <em>%s</em> sind in Ordnung.',
+			'nok' => 'Überprüfen Sie die Berechtigungen des Verzeichnisses <em>%1$s</em> für den Benutzer <em>%2$s</em>. Der HTTP-Server muss Schreibrechte besitzen.',
+			'ok' => 'Die Berechtigungen des Datenverzeichnisses sind in Ordnung.',
 		),
 		'database-connection' => array(
 			'nok' => 'Fehler bei der Datenbankverbindung.',
@@ -64,12 +64,12 @@ return array(
 		),
 		'database-title' => 'Datenbank',
 		'dom' => array(
-			'nok' => 'Ihnen fehlt eine benötigte Bibliothek um DOM zu durchstöbern.',
-			'ok' => 'Sie haben die benötigte Bibliothek um DOM zu durchstöbern.',
+			'nok' => 'Ihnen fehlt die benötigte Bibliothek zum Durchsuchen des DOM.',
+			'ok' => 'Sie haben die benötigte Bibliothek zum Durchsuchen des DOM.',
 		),
 		'favicons' => array(
-			'nok' => 'Überprüfen Sie die Berechtigungen des Verzeichnisses <em>%s</em>. Der HTTP-Server muss Schreibrechte besitzen.',
-			'ok' => 'Die Berechtigungen des Verzeichnisses <em>%s</em> sind in Ordnung.',
+			'nok' => 'Überprüfen Sie die Berechtigungen des Verzeichnisses <em>%1$s</em> für den Benutzer <em>%2$s</em>. Der HTTP-Server muss Schreibrechte besitzen.',
+			'ok' => 'Die Berechtigungen des Favicons-Verzeichnisses sind in Ordnung.',
 		),
 		'fileinfo' => array(
 			'nok' => 'Die empfohlene PHP-Bibliothek „fileinfo“ (Paket „fileinfo“) kann nicht gefunden werden.',
@@ -81,8 +81,8 @@ return array(
 			'ok' => 'Sie haben die empfohlene Bibliothek php-intl für die Internationalisierung.',
 		),
 		'json' => array(
-			'nok' => 'Ihnen fehlt eine empfohlene Bibliothek um JSON zu parsen.',
-			'ok' => 'Sie haben eine empfohlene Bibliothek um JSON zu parsen.',
+			'nok' => 'Ihnen fehlt die empfohlene Bibliothek zum Parsen von JSON.',
+			'ok' => 'Sie haben die empfohlene Bibliothek zum Parsen von JSON.',
 		),
 		'mbstring' => array(
 			'nok' => 'Es fehlt die empfohlene mbstring-Bibliothek für Unicode.',
@@ -111,23 +111,23 @@ return array(
 			'nok' => 'Ihre PHP-Version ist %s aber FreshRSS benötigt mindestens Version %s.',
 			'ok' => 'Ihre PHP-Version ist %s, welche kompatibel mit FreshRSS ist.',
 		),
-		'reload' => 'Nochmal prüfen',
+		'reload' => 'Erneut prüfen',
 		'tmp' => array(
-			'nok' => 'Überprüfen Sie die Berechtigungen des Verzeichnisses <em>%s</em>. Der HTTP-Server muss Schreibrechte besitzen.',
-			'ok' => 'Die Berechtigungen des Temp Verzeichnisses sind in Ordnung.',
+			'nok' => 'Überprüfen Sie die Berechtigungen des Verzeichnisses <em>%1$s</em> für den Benutzer <em>%2$s</em>. Der HTTP-Server muss Schreibrechte besitzen.',
+			'ok' => 'Die Berechtigungen des Temp-Verzeichnisses sind in Ordnung.',
 		),
 		'tokens' => array(
 			'nok' => 'Überprüfen Sie die Berechtigungen des Verzeichnisses <em>./data/tokens</em>. Der HTTP-Server muss Schreibrechte besitzen.',
-			'ok' => 'Die Berechtigungen des Verzeichnisses <em>./data/tokens</em> sind in Ordnung.',
+			'ok' => 'Die Berechtigungen des Token-Verzeichnisses sind in Ordnung.',
 		),
 		'unknown_process_username' => 'unbekannt',
 		'users' => array(
-			'nok' => 'Überprüfen Sie die Berechtigungen des Verzeichnisses <em>%s</em>. Der HTTP-Server muss Schreibrechte besitzen.',
-			'ok' => 'Die Berechtigungen des Verzeichnisses <em>%s</em> sind in Ordnung.',
+			'nok' => 'Überprüfen Sie die Berechtigungen des Verzeichnisses <em>%1$s</em> für den Benutzer <em>%2$s</em>. Der HTTP-Server muss Schreibrechte besitzen.',
+			'ok' => 'Die Berechtigungen des Benutzerverzeichnisses sind in Ordnung.',
 		),
 		'xml' => array(
-			'nok' => 'Ihnen fehlt die benötigte Bibliothek um XML zu parsen.',
-			'ok' => 'Sie haben die benötigte Bibliothek um XML zu parsen.',
+			'nok' => 'Ihnen fehlt die benötigte Bibliothek zum Parsen von XML.',
+			'ok' => 'Sie haben die benötigte Bibliothek zum Parsen von XML.',
 		),
 		'zip' => array(
 			'nok' => 'Ihnen fehlt die ZIP-Erweiterung (Paket php-zip).',
@@ -160,6 +160,6 @@ return array(
 	),
 	'step' => 'Schritt %d',
 	'steps' => 'Schritte',
-	'this_is_the_end' => 'Das ist das Ende',
+	'this_is_the_end' => 'Das ist der letzte Schritt',
 	'title' => 'Installation · FreshRSS',	// IGNORE
 );

+ 35 - 35
app/i18n/de/sub.php

@@ -29,10 +29,10 @@ return array(
 			'help' => 'URL zu einer <a href="http://opml.org/" target="_blank">OPML Datei</a>, um die Kategorie dynamisch mit Feeds zu befüllen',
 		),
 		'empty' => 'Leere Kategorie',
-		'expand' => 'Kategory aufklappen',
+		'expand' => 'Kategorie aufklappen',
 		'information' => 'Information',	// IGNORE
-		'open' => 'Kategory öffnen',
-		'opml_url' => 'OPML-Datei URL',
+		'open' => 'Kategorie öffnen',
+		'opml_url' => 'URL der OPML-Datei',
 		'position' => 'Reihenfolge',
 		'position_help' => 'Sortierreihenfolge der Kategorien steuern',
 		'title' => 'Titel',
@@ -51,7 +51,7 @@ return array(
 			'username' => 'HTTP-Nutzername',
 		),
 		'change_favicon' => 'Ändern…',
-		'clear_cache' => 'Nicht cachen',
+		'clear_cache' => 'Immer Zwischenspeicher leeren',
 		'content_action' => array(
 			'_' => 'Inhaltsaktion beim Abrufen des Artikelinhalts',
 			'append' => 'Nach bestehendem Inhalt einfügen',
@@ -62,10 +62,10 @@ return array(
 		'css_cookie' => 'Cookies beim Abrufen des Artikelinhalts verwenden',
 		'css_cookie_help' => 'Beispiel: <kbd>foo=bar; gdpr_consent=true; cookie=value</kbd>',
 		'css_help' => 'Ruft bei gekürzten RSS-Feeds den vollständigen Artikelinhalt ab (Achtung, benötigt mehr Zeit!)',
-		'css_path' => 'CSS-Selektor des Artikelinhaltes auf der Original-Webseite',
+		'css_path' => 'CSS-Selektor des Artikelinhalts auf der Original-Website',
 		'css_path_filter' => array(
-			'_' => 'CSS-Selector für die Elemente, die entfernt werden sollen',
-			'help' => 'CSS-Selector könnte eine Liste sein, wie z.B.: <kbd>footer, aside, p[data-sanitized-class~="menu"]</kbd>',
+			'_' => 'CSS-Selektor für Elemente, die entfernt werden sollen',
+			'help' => 'Der CSS-Selektor kann eine Liste sein, z. B. <kbd>footer, aside, p[data-sanitized-class~="menu"]</kbd>',
 		),
 		'description' => 'Beschreibung',
 		'empty' => 'Dieser Feed ist leer. Bitte stellen Sie sicher, dass er noch gepflegt wird.',
@@ -73,7 +73,7 @@ return array(
 		'export-as-opml' => array(
 			'download' => 'Download',	// IGNORE
 			'help' => 'XML Datei (ausgewählte Daten. <a href="https://freshrss.github.io/FreshRSS/en/developers/OPML.html" target="_blank">Siehe Dokumentation</a>)',
-			'label' => 'EAls OPML exportieren',
+			'label' => 'Als OPML exportieren',
 		),
 		'ext_favicon' => 'Automatisch festlegen',
 		'favicon_changed_by_ext' => 'Das Icon wurde von der Erweiterung <b>%s</b> festgelegt.',
@@ -82,11 +82,11 @@ return array(
 			'help' => 'Ein Suchfilter pro Zeile. Operatoren <a href="https://freshrss.github.io/FreshRSS/en/users/10_filter.html#with-the-search-field" target="_blank">siehe Dokumentation</a>.',
 			'view_filter' => 'Filter für vorhandene Artikel in der Vorschau anzeigen (neues Fenster)',
 		),
-		'http_headers' => 'HTTP Headers',	// IGNORE
-		'http_headers_help' => 'Headers werden durch einen Zeilenumbruch getrennt. Name und Wert des Headers werden per Doppelpunkt getrennt (z.B: <kbd><code>Accept: application/atom+xml<br />Authorization: Bearer some-token</code></kbd>).',
+		'http_headers' => 'HTTP-Header',
+		'http_headers_help' => 'Header werden durch einen Zeilenumbruch getrennt. Name und Wert eines Headers werden durch einen Doppelpunkt getrennt, z. B. <kbd><code>Accept: application/atom+xml<br />Authorization: Bearer some-token</code></kbd>.',
 		'icon' => 'Icon',	// IGNORE
 		'information' => 'Informationen',
-		'keep_adding_feed' => 'Then add more feeds',	// TODO
+		'keep_adding_feed' => 'Danach weitere Feeds hinzufügen',
 		'keep_min' => 'Minimale Anzahl an Artikeln, die behalten wird',
 		'kind' => array(
 			'_' => 'Art der Feed-Quelle',
@@ -94,25 +94,25 @@ return array(
 				'_' => 'HTML + XPath + JSON Punkt-Notation (JSON in HTML)',
 				'xpath' => array(
 					'_' => 'XPath für JSON in HTML',
-					'help' => 'Beispiel: <code>normalize-space(//script[@type="application/json"])</code> (einzelnes JSON)<br />oder: <code>//script[@type="application/ld+json"]</code> (ein JSON-Objekt pro Artikel)</code>',
+					'help' => 'Beispiel: <code>normalize-space(//script[@type="application/json"])</code> (einzelnes JSON)<br />oder: <code>//script[@type="application/ld+json"]</code> (ein JSON-Objekt pro Artikel)',
 				),
 			),
 			'html_xpath' => array(
-				'_' => 'HTML + XPath (Webseite scannen)',
+				'_' => 'HTML + XPath (Website scannen)',
 				'feed_title' => array(
-					'_' => 'Feed Title',
+					'_' => 'Feed-Titel',
 					'help' => 'Beispiel: <code>//title</code> oder ein statischer Text: <code>"Mein eigener Feed"</code>',
 				),
-				'help' => '<dfn><a href="https://www.w3.org/TR/xpath-10/" target="_blank">XPath 1.0</a></dfn> ist eine standardisierte Query-Sprache für fortgeschrittene Nutzer und wird von FreshRSS genutzt, um die Webseite abzuscannen.',
+				'help' => '<dfn><a href="https://www.w3.org/TR/xpath-10/" target="_blank">XPath 1.0</a></dfn> ist eine standardisierte Abfragesprache für fortgeschrittene Nutzer und wird von FreshRSS zum Auslesen von Webseiten verwendet.',
 				'item' => array(
-					'_' => 'News <strong>Artikel</strong> finden<br /><small>(Sehr wichtig)</small>',
+					'_' => 'News-<strong>Artikel</strong> finden<br /><small>(sehr wichtig)</small>',
 					'help' => 'Beispiel: <code>//div[@class="news-artikel"]</code>',
 				),
 				'item_author' => array(
 					'_' => 'Artikel-Autor:in',
 					'help' => 'Kann auch ein statischer Text sein: <code>"Unbekannt"</code>',
 				),
-				'item_categories' => 'Artikel-(Hash)Tags',
+				'item_categories' => 'Artikel-Tags',
 				'item_content' => array(
 					'_' => 'Artikelinhalt',
 					'help' => 'Beispiel, um den vollen Artikel zu nehmen: <code>.</code>',
@@ -147,22 +147,22 @@ return array(
 			'json_dotnotation' => array(
 				'_' => 'JSON (Punktnotation)',
 				'feed_title' => array(
-					'_' => 'Feed Name',
+					'_' => 'Feed-Titel',
 					'help' => 'Beispiel: <code>meta.title</code> oder ein statischer String: <code>"Mein Feed"</code>',
 				),
-				'help' => 'JSON punktnotiert nutzt Punkte zwischen den Objekten und eckige Klammern für Arrays (e.g. <code>data.items[0].title</code>)',
+				'help' => 'JSON-Punktnotation verwendet Punkte zwischen Objekten und eckige Klammern für Arrays, z. B. <code>data.items[0].title</code>',
 				'item' => array(
-					'_' => 'News <strong>Items</strong> finden<br /><small>(sehr wichtig)</small>',
+					'_' => 'News-<strong>Einträge</strong> finden<br /><small>(sehr wichtig)</small>',
 					'help' => 'JSON-Pfad zum Array, das die Einträge enthält, z. B. <code>$</code> oder <code>newsItems</code>',
 				),
-				'item_author' => 'Item Autor',
-				'item_categories' => 'Item Hashtags',
+				'item_author' => 'Autor des Eintrags',
+				'item_categories' => 'Tags des Eintrags',
 				'item_content' => array(
-					'_' => 'Item Inhalt',
-					'help' => 'Schlüsslwort unter dem der Inhalt gefunden wird, z.B. <code>content</code>',
+					'_' => 'Inhalt des Eintrags',
+					'help' => 'Schlüssel, unter dem der Inhalt gefunden wird, z. B. <code>content</code>',
 				),
 				'item_thumbnail' => array(
-					'_' => 'Item Vorschaubild',
+					'_' => 'Vorschaubild des Eintrags',
 					'help' => 'Beispiel: <code>image</code>',
 				),
 				'item_timeFormat' => array(
@@ -170,13 +170,13 @@ return array(
 					'help' => 'Optional. Format, das von <a href="https://php.net/datetime.createfromformat" target="_blank"><code>DateTime::createFromFormat()</code></a> unterstützt wird, wie z.B. <code>d-m-Y H:i:s</code>',
 				),
 				'item_timestamp' => array(
-					'_' => 'Item Datum',
+					'_' => 'Datum des Eintrags',
 					'help' => 'Das Ergebnis wird von <a href="https://php.net/strtotime" target="_blank"><code>strtotime()</code></a> geparst.',
 				),
-				'item_title' => 'Item Titel',
-				'item_uid' => 'Item einmalige ID',
+				'item_title' => 'Titel des Eintrags',
+				'item_uid' => 'Eindeutige ID des Eintrags',
 				'item_uri' => array(
-					'_' => 'Item Link (URL)',
+					'_' => 'Link des Eintrags (URL)',
 					'help' => 'Beispiel: <code>permalink</code>',
 				),
 				'json' => 'Punktnotation für:',
@@ -198,13 +198,13 @@ return array(
 		'max_http_redir' => 'Max HTTP Umleitungen',
 		'max_http_redir_help' => '0 oder leeres Feld = deaktiviert; -1 für unendlich viele Umleitungen',
 		'method' => array(
-			'_' => 'HTTP Methode',
+			'_' => 'HTTP-Methode',
 		),
 		'method_help' => 'Der POST-Payload unterstützt automatisch <code>application/x-www-form-urlencoded</code> und <code>application/json</code>',
 		'method_postparams' => 'Payload für POST',
 		'moved_category_deleted' => 'Wenn Sie eine Kategorie entfernen, werden deren Feeds automatisch in die Kategorie <em>%s</em> eingefügt.',
 		'mute' => array(
-			'_' => 'Stumm schalten',
+			'_' => 'Stummschalten',
 			'state_is_muted' => 'Dieser Feed ist stummgeschaltet',
 		),
 		'no_selected' => 'Kein Feed ausgewählt.',
@@ -216,7 +216,7 @@ return array(
 			'category' => 'In eigener Kategorie anzeigen',
 			'feed' => 'In seinem Feed anzeigen',
 			'hidden' => 'Nicht anzeigen',
-			'important' => 'In "Wichtige Feeds" anzeigen',
+			'important' => 'In „Wichtige Feeds“ anzeigen',
 			'main_stream' => 'In Haupt-Feeds zeigen',
 		),
 		'proxy' => 'Proxy für das Abrufen dieses Feeds festlegen',
@@ -242,7 +242,7 @@ return array(
 		'ttl' => 'Automatisch aktualisieren nicht öfter als',
 		'unicityCriteria' => array(
 			'_' => 'Artikel-Eindeutigkeits-Kriterien',
-			'forced' => '<span title="Eindeutigkeitskriterien blockieren, auch wenn der Feed doppelte Artikel enthält">Erzwingen</span>',
+			'forced' => '<span title="Eindeutigkeitskriterien anwenden, auch wenn der Feed doppelte Artikel enthält">Erzwingen</span>',
 			'help' => 'Relevant für defekte Feeds.<br />⚠️ Eine Änderung der Richtlinie führt zu Duplikaten.',
 			'id' => 'Standard ID (Standardeinstellung)',
 			'link' => 'Link',	// IGNORE
@@ -257,10 +257,10 @@ return array(
 			'sha1:title_published_content' => 'Titel + Datum + Inhalt',
 		),
 		'url' => 'Feed-URL',
-		'useragent' => 'Browser User Agent für den Abruf des Feeds verwenden',
+		'useragent' => 'User-Agent des Browsers für den Abruf des Feeds verwenden',
 		'useragent_help' => 'Beispiel: <kbd>Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0)</kbd>',
 		'validator' => 'Gültigkeit des Feeds überprüfen',
-		'website' => 'Webseiten-URL',
+		'website' => 'Website-URL',
 		'websub' => 'Sofortbenachrichtigung mit WebSub',
 	),
 	'import_export' => array(

+ 3 - 3
app/i18n/de/user.php

@@ -22,7 +22,7 @@ return array(
 			'feedback' => array(
 				'email_failed' => 'Wir konnten Ihnen aufgrund einer Fehlkonfiguration des Servers keine E-Mail schicken.',
 				'email_sent' => 'Wir haben Ihnen eine E-Mail geschickt.',
-				'error' => 'Die E-Mail Adresse konnte nicht verifiziert werden.',
+				'error' => 'Die E-Mail-Adresse konnte nicht verifiziert werden.',
 				'ok' => 'Die E-Mail-Adresse wurde verifiziert',
 				'unnecessary' => 'Die E-Mail-Adresse wurde bereits verifiziert.',
 				'wrong_token' => 'Die E-Mail-Adresse konnte aufgrund eines ungültigen Sicherheitstokens nicht verifiziert werden.',
@@ -34,8 +34,8 @@ return array(
 	),
 	'mailer' => array(
 		'email_need_validation' => array(
-			'body' => 'Sie haben Sich gerade bei %s registriert und müssen nun nur noch Ihre E-Mail-Adresse verifizieren. Bitte klicken Sie hier:',
-			'title' => 'Sie müssen Ihren Account verifizieren',
+			'body' => 'Sie haben sich gerade bei %s registriert und müssen nun noch Ihre E-Mail-Adresse bestätigen. Bitte klicken Sie dazu hier:',
+			'title' => 'Sie müssen Ihren Account bestätigen',
 			'welcome' => 'Willkommen, %s,',
 		),
 	),