From f74e68eece143a5787af0f4e40c86589aa22e032 Mon Sep 17 00:00:00 2001 From: Michael Kessler <michi@netzpiraten.ch> Date: Thu, 29 Aug 2013 16:24:27 +0200 Subject: [PATCH 01/10] Update German client-side translations. --- config/locales/client.de.yml | 160 ++++++++++++++++++++++++++++------- 1 file changed, 130 insertions(+), 30 deletions(-) diff --git a/config/locales/client.de.yml b/config/locales/client.de.yml index 372cb2401..96e28f16c 100644 --- a/config/locales/client.de.yml +++ b/config/locales/client.de.yml @@ -20,9 +20,6 @@ de: mb: MB tb: TB dates: - short_date_no_year: "D MMM" - short_date: "D. MMM YYYY" - long_date: "D. MMMM YYYY, H:mm" tiny: half_a_minute: "< 1Min" less_than_x_seconds: @@ -43,12 +40,6 @@ de: x_days: one: "1T" other: "%{count}T" - about_x_months: - one: "1Mon" - other: "%{count}Mon" - x_months: - one: "1Mon" - other: "%{count}Mon" about_x_years: one: "1J" other: "%{count}J" @@ -93,6 +84,7 @@ de: yes_value: "Ja" of_value: "von" generic_error: "Entschuldigung, ein Fehler ist aufgetreten." + generic_error_with_reason: "Ein Fehler ist aufgetreten: %{error}" log_in: "Anmelden" age: "Alter" last_post: "Letzter Beitrag" @@ -101,10 +93,20 @@ de: show_more: "zeige mehr" links: Links faq: "FAQ" + privacy_policy: "Datenschutzrichtlinie" you: "Du" or: "oder" now: "gerade eben" read_more: 'weiterlesen' + more: "Mehr" + less: "Weniger" + never: "nie" + daily: "täglich" + weekly: "wöchentlich" + every_two_weeks: "jede zweite Woche" + character_count: + one: "{{count}} Zeichen" + other: "{{count}} Zeichen" in_n_seconds: one: "in einer Sekunde" @@ -137,6 +139,10 @@ de: saving: "Wird gespeichert..." saved: "Gespeichert!" + upload: "Hochladen" + uploading: "Hochladen..." + uploaded: "Hochgeladen!" + choose_topic: none_found: "Keine Themen gefunden." title: @@ -175,6 +181,7 @@ de: "13": "Eingänge" user: + said: "{{username}} sagte:" profile: Profil title: "Benutzer" mute: Ignorieren @@ -182,6 +189,7 @@ de: download_archive: "Archiv meiner Beiträge herunterladen" private_message: "Private Nachricht" private_messages: "Nachrichten" + private_messages_sent: "Gesendete Nachrichten" activity_stream: "Aktivität" preferences: "Einstellungen" bio: "Über mich" @@ -191,30 +199,41 @@ de: dynamic_favicon: "Zeige eingehende Nachrichten im Favicon" external_links_in_new_tab: "Öffne alle externen Links in neuen Tabs" enable_quoting: "Markierten Text bei Antwort zitieren" - + change: "ändern" moderator: "{{user}} ist Moderator" admin: "{{user}} ist Administrator" change_password: - action: "ändern" success: "(Mail gesendet)" in_progress: "(sende Mail)" error: "(Fehler)" + action: "Passwort zurücksetzten Mail senden" + + change_about: + title: "Über mich ändern" change_username: - action: "ändern" title: "Benutzername ändern" confirm: "Den Benutzernamen zu ändern kann Konsequenzen nach sich ziehen. Bist Du sicher, dass du fortfahren willst?" taken: "Entschuldige, der Benutzername ist schon vergeben." error: "Beim Ändern des Benutzernamens ist ein Fehler aufgetreten." invalid: "Dieser Benutzername ist ungültig, sie dürfen nur aus Zahlen und Buchstaben bestehen." + change_email: - action: 'ändern' title: "Mailadresse ändern" taken: "Entschuldige, diese Mailadresse ist nicht verfügbar." error: "Beim ändern der Mailadresse ist ein Fehler aufgetreten. Möglicherweise wird diese Adresse schon benutzt." success: "Eine Bestätigungsmail wurde an diese Adresse verschickt. Bitte folge den darin enthaltenen Anweisungen." + change_avatar: + title: "Ändere dein Avatar" + gravatar: "<a href='//gravatar.com/emails' target='_blank'>Gravatar</a>, basierend auf" + gravatar_title: "Wechsle dein Avatar auf der Gravatar Webseite" + uploaded_avatar: "Eigenes Bild" + uploaded_avatar_empty: "Eigenes Bild hinzufügen" + upload_title: "Lade dein Bild hoch" + image_is_not_a_square: "Achtung: wir haben den Bild angeschnitten, da es nicht rechteckig war." + email: title: "Mail" instructions: "Deine Mailadresse wird niemals öffentlich angezeigt." @@ -378,6 +397,7 @@ de: authenticating: "Authentisiere..." awaiting_confirmation: 'Dein Konto ist noch nicht aktiviert. Benutze den "Passwort vergesse"-Link um eine neue Aktivierungsmail zu erhalten.' awaiting_approval: "Dein Konto wurde noch nicht von einem Moderator bewilligt. Du bekommst eine Mail, sobald das geschehen ist." + requires_invite: "Entschuldige, der Zugriff auf dieses Forum ist nur mit einer Einladung erlaubt." not_activated: "Du kannst Dich noch nicht anmelden. Wir haben Dir kürzlich eine Aktivierungsmail an <b>{{sentTo}}</b> geschickt. Bitte folge den Anweisungen darin, um dein Konto zu aktivieren." resend_activation_email: "Klick hier, um ein neue Aktivierungsmail zu erhalten." sent_activation_email_again: "Wir haben noch eine Aktivierungsmail an <b>{{currentEmail}}</b> verschickt. Es kann einige Minuten dauern, bis sie ankommt. Im Zweifel schaue auch im Spam-Ordner nach." @@ -489,16 +509,23 @@ de: total_flagged: "total markierte Einträge" upload_selector: - title: "Bild einfügen" - from_my_computer: "von meinem Gerät" - from_the_web: "aus dem Web" + title: "Bild hochladen" + title_with_attachments: "Bild oder Datei hochladen" + from_my_computer: "Von meinem Gerät" + from_the_web: "Aus dem Web" add_title: "Bild hinzufügen" + add_title_with_attachments: "Bild oder Datei hinzufügen" remote_title: "Entferntes Bild" + remote_title_with_attachments: "Entferntes Bild oder Datei" remote_tip: "Gib die Adresse eines Bildes wie folgt ein: http://example.com/image.jpg" + remote_tip_with_attachments: "Gib die Adresse eines Bildes oder Datei wie folgt ein http://example.com/file.ext (Erlaubte Dateiendungen: {{authorized_extensions}})." local_title: "Lokales Bild" + local_title_with_attachments: "Lokales Bild oder Datei" local_tip: "Klicke hier, um ein Bild von deinem Gerät zu wählen." - upload_title: "Hochladen" - uploading: "Bild wird hochgeladen" + local_tip_with_attachments: "Klicke hier, um ein Bild oder eine Datei von deinem Gerät zu wählen (Erlaubte Dateiendungen: {{authorized_extensions}})" + upload_title: "Bild hochladen" + upload_title_with_attachments: "Bild oder Datei hochladen" + uploading: "Hochgeladen..." search: title: "Such nach Themen, Beiträgen, Nutzern oder Kategorien" @@ -745,10 +772,13 @@ de: edit: "Editing {{link}} von {{replyAvatar}} {{username}}" post_number: "Beitrag {{number}}" in_reply_to: "Antwort auf" + last_edited_on: "Antwort zuletzt bearbeitet am" reply_as_new_topic: "Mit Themenwechsel antworten" continue_discussion: "Fortsetzung des Gesprächs {{postLink}}:" - follow_quote: "Springe zu zitiertem Beitrag" - deleted_by_author: "(Beitrag vom Autor entfernt)" + follow_quote: "Springe zu dem zitiertem Beitrag" + deleted_by_author: + one: "(Antwort vom Autor zurückgezogen, wird automatisch in %{count} Stunde gelöscht falls nicht gemeldet)" + other: "(Antwort vom Autor zurückgezogen, wird automatisch in %{count} Stunden gelöscht falls nicht gemeldet)" deleted_by: "Entfernt von" expand_collapse: "mehr/weniger" @@ -760,11 +790,11 @@ de: create: "Entschuldige, es gab einen Fehler beim Anlegen des Beitrags. Bitte versuche es noch einmal." edit: "Entschuldige, es gab einen Fehler beim Bearbeiten des Beitrags. Bitte versuche es noch einmal." upload: "Entschuldige, es gab einen Fehler beim Hochladen der Datei. Bitte versuche es noch einmal." - image_too_large: "Entschuldige, das Bild, das du hochladen wolltest, ist zu groß (Maximalgröße {{max_size_kb}}kb), bitte reduziere die Dateigröße und versuche es nochmal." - image_upload_not_allowed_for_new_user: "Entschuldige, neue Benutzer dürfen keine Bilder hochladen." attachment_too_large: "Entschuldige, die Datei, die du hochladen wolltest, ist zu groß (Maximalgröße {{max_size_kb}}kb)." + image_too_large: "Entschuldige, das Bild, das du hochladen wolltest, ist zu groß (Maximalgröße {{max_size_kb}}kb), bitte reduziere die Dateigröße und versuche es nochmal." too_many_uploads: "Entschuldige, du darfst immer nur eine Datei hochladen." upload_not_authorized: "Entschuldige, die Datei, die du hochladen wolltest, ist nicht erlaubt (erlaubte Endungen: {{authorized_extensions}})." + image_upload_not_allowed_for_new_user: "Entschuldige, neue Benutzer dürfen keine Bilder hochladen." attachment_upload_not_allowed_for_new_user: "Entschuldige, neue Benutzer dürfen keine Dateien hochladen." abandon: "Willst Du diesen Beitrag wirklich verwerfen?" @@ -884,6 +914,7 @@ de: other: "Bist Du sicher, dass Du all diesen Beiträge löschen willst?" category: + can: 'kann… ' none: '(keine Kategorie)' edit: 'Bearbeiten' edit_long: "Kategorie bearbeiten" @@ -912,18 +943,19 @@ de: change_in_category_topic: "Besuche die Themen dieser Kategorie um einen Eindruck für eine gute Beschreibung zu gewinnen." hotness: "Beliebtheit" already_used: 'Diese Farbe wird bereits für eine andere Kategorie verwendet' - is_secure: "Sichere Kategorie?" - add_group: "Gruppe hinzufügen" security: "Sicherheit" - allowed_groups: "Erlaubte Gruppen:" auto_close_label: "Thema automatisch schließen nach:" - + edit_permissions: "Berechtigung bearbeiten" + add_permission: "Berechtigung hinzufügen" flagging: title: 'Aus welchem Grund meldest Du diesen Beitrag?' action: 'Beitrag melden' take_action: "Reagieren" notify_action: 'Melden' + delete_spammer: "Spammer löschen" + delete_confirm: "Du wirst <b>%{posts}</b> Beiträge und <b>%{topics}</b> Themen von diesem Benutzer löschen, das Konto entfernen und die Mail <b>%{email}</b> permanent blockieren. Bist du sicher, dass dieser Benutzer wirklich ein Spammer ist?" + yes_delete_spammer: "Ja, lösche den Spammer" cant: "Entschuldige, Du kannst diesen Beitrag augenblicklich nicht melden." custom_placeholder_notify_user: "Weshalb erfordert der Beitrag, dass du den Benutzer direkt und privat kontaktieren möchtest? Sei spezifisch, konstruktiv und immer freundlich." custom_placeholder_notify_moderators: "Warum soll ein Moderator sich diesen Beitrag ansehen? Bitte lass uns wissen, was genau Dich beunruhigt, und wenn möglich dafür relevante Links." @@ -956,6 +988,7 @@ de: views_long: "Dieses Thema wurde {{number}} aufgerufen" activity: "Aktivität" likes: "Gefällt mir" + likes_long: "es gibt {{number}} „Gefällt mir“ in diesem Thema" top_contributors: "Teilnehmer" category_title: "Kategorie" history: "Verlauf" @@ -1004,6 +1037,11 @@ de: browser_update: '<a href="http://www.discourse.org/faq/#browser">Dein Webbrowser ist leider zu alt um dieses Forum zu besuchen</a>. Bitte <a href="http://browsehappy.com">installiere einen neueren Browser</a>.' + permission_types: + full: "Erstellen / Antworten / Anschauen" + create_post: "Antworten / Anschauen" + readonly: "Anschauen" + # This section is exported to the javascript for i18n in the admin section admin_js: type_to_filter: "Tippe etwas ein, um zu filtern..." @@ -1014,6 +1052,7 @@ de: dashboard: title: "Übersicht" + last_updated: "Übersicht zuletzt aktualisiert:" version: "Version" up_to_date: "Discourse ist aktuell." critical_available: "Ein kritisches Update ist verfügbar." @@ -1065,6 +1104,7 @@ de: disagree_unhide_title: "Verwerfe alle Meldungen über diesen Beitrag (blendet verstecke Beiträge ein)" disagree: "Ablehnen" disagree_title: "Meldung ablehnen, alle Meldungen über diesen Beitrag annullieren" + delete_spammer_title: "Lösche den Benutzer und alle seine Beiträge und Themen." flagged_by: "Gemeldet von" error: "Etwas ist schief gelaufen" @@ -1145,6 +1185,48 @@ de: last_seen_user: "Letzer Benutzer:" reply_key: "Antwort-Schlüssel" + logs: + title: "Logs" + action: "Aktion" + created_at: "Erstellt" + last_match_at: "Letzte Übereinstimmung" + match_count: "Übereinstimmungen" + ip_address: "IP" + screened_actions: + block: "blockieren" + do_nothing: "nichts machen" + staff_actions: + title: "Mitarbeiter Aktion" + instructions: "Kilcke auf die Benutzernamen und Aktionen um die Liste zu filtern. Klicke den Avatar um die Benutzerseite zu sehen." + clear_filters: "Alles anzeigen" + staff_user: "Mitarbeiter" + target_user: "Zielnutzer" + subject: "Betreff" + when: "Wann" + context: "Kontext" + details: "Details" + previous_value: "Vorangehend" + new_value: "Neu" + diff: "Diff" + show: "Anzeigen" + modal_title: "Details" + no_previous: "Es gibt keinen vorgängigen Wert." + deleted: "Kein neuer Wert. Der Eintrag wurde gelöscht." + actions: + delete_user: "Benutzer löschen" + change_trust_level: "Vertrauensstufe ändern" + change_site_setting: "Seiten Einstellungen ändern" + change_site_customization: "Seiten Anpassungen ändern" + delete_site_customization: "Seiten Anpassungen löschen" + screened_emails: + title: "Geschützte Mails" + description: "Wen jemand ein Konto erstellt, werden die folgenden Mail überprüft und die Registration blockiert, oder eine andere Aktion ausgeführt." + email: "Mail Adresse" + screened_urls: + title: "Geschützte URLs" + description: "Die aufgelisteten URLs wurden in Beiträgen von identifizierten Spammen verwendet." + url: "URL" + impersonate: title: "Aus Nutzersicht betrachten" username_or_email: "Benutzername oder Mailadresse des Nutzers" @@ -1170,6 +1252,9 @@ de: approved_selected: one: "Benutzer zulassen" other: "Benutzer zulassen ({{count}})" + reject_selected: + one: "Benutzer ablehnen" + other: "Lehne ({{count}}) Benutzer ab" titles: active: 'Aktive Benutzer' new: 'Neue Benutzer' @@ -1183,12 +1268,19 @@ de: moderators: 'Moderatoren' blocked: 'Gesperrte Benutzer' banned: "Gebannte Benutzer" + reject_successful: + one: "Erfolgreich 1 Benutzer abgelehnt." + other: "Erfolgreich %{count} Benutzer abgelehnt." + reject_failures: + one: "Konnte 1 Benutzer nicht ablehnen." + other: "Konnte %{count} Benutzer nicht ablehnen." user: ban_failed: "Beim Sperren dieses Benutzers ist etwas schief gegangen {{error}}" unban_failed: "Beim Entsperren dieses Benutzers ist etwas schief gegangen {{error}}" ban_duration: "Wie lange soll dieser Benutzer gesperrt werden? (Tage)" delete_all_posts: "Lösche alle Beiträge" + delete_all_posts_confirm: "Du löschst %{posts} Beiträge und %{topics} Themen. Bist du sicher?" ban: "Sperren" unban: "Entsperren" banned: "Gesperrt?" @@ -1219,12 +1311,18 @@ de: flags_received_count: Erhaltene Meldungen approve: 'Genehmigen' approved_by: "genehmigt von" - approve_success: "Benutzer freigeschalten und Mail mit den Anweisungen zur Aktivierung gesendet." - approve_bulk_success: "Erfolg! Alle ausgewählten Benutzer wurden freigeschalten und benachrichtigt." + approve_success: "Benutzer freigeschalten und Mail mit den Anweisungen zur Aktivierung + gesendet." + approve_bulk_success: "Erfolg! Alle ausgewählten Benutzer wurden freigeschalten und + benachrichtigt." time_read: "Lesezeit" delete: Benutzer löschen - delete_forbidden: "Der Benutzer kann nicht gelöscht werden, da er noch Beiträge hat. Lösche zuerst seine Beträge." + delete_forbidden: + one: "Benutzer können nicht gelöscht werden, wenn sie sich vor mehr als %{count} Tag angemeldet oder noch Beiträge haben. Lösche zuerst seine Beträge." + other: "Benutzer können nicht gelöscht werden, wenn sie sich vor mehr als %{count} Tagen angemeldet oder noch Beiträge haben. Lösche zuerst seine Beträge." delete_confirm: "Bist du SICHER das du diesen Benutzer permanent von der Seite entfernen möchtest? Diese Aktion kann nicht rückgängig gemacht werden!" + delete_and_block: "<b>Ja</b>, und <b>blockiere</b> Anmeldungen von dieser Mail Adresse" + delete_dont_block: "<b>Ja</b>, aber <b>erlaube</b> Anmeldungen von dieser Mail Adresse" deleted: "Der Benutzer wurde gelöscht." delete_failed: "Beim Löschen des Benutzers ist ein Fehler aufgetreten. Stelle sicher, dass dieser Benutzer keine Beiträge mehr hat." send_activation_email: "Aktivierungsmail senden" @@ -1239,7 +1337,7 @@ de: deactivate_explanation: "Ein deaktivierter Benutzer muss seine E-Mail erneut bestätigen." banned_explanation: "Ein gesperrter Benutzer kann sich nicht einloggen." block_explanation: "Ein geblockter Benutzer kann keine Themen erstellen oder Beiträge veröffentlichen." - + trust_level_change_failed: "Beim Wechsel der Vertrauensstufe ist ein Fehler aufgetreten." site_content: none: "Wähle einen Inhaltstyp um mit dem Bearbeiten zu beginnen." @@ -1251,3 +1349,5 @@ de: title: 'Einstellungen' reset: 'Zurücksetzen' none: "Keine" + + From 53cc1a4730e4d93f2a86a8e2d494ee93fa674462 Mon Sep 17 00:00:00 2001 From: Michael Kessler <michi@netzpiraten.ch> Date: Thu, 29 Aug 2013 18:10:20 +0200 Subject: [PATCH 02/10] Update German server-side translations. --- config/locales/server.de.yml | 169 +++++++++++++++++++++++++++++------ 1 file changed, 141 insertions(+), 28 deletions(-) diff --git a/config/locales/server.de.yml b/config/locales/server.de.yml index 2058fc286..a2f903e88 100644 --- a/config/locales/server.de.yml +++ b/config/locales/server.de.yml @@ -5,9 +5,15 @@ # http://yamllint.com/ de: + dates: + short_date_no_year: "D MMM" + short_date: "D. MMM YYYY" + long_date: "D. MMMM YYYY, H:mm" time: formats: short: "%d. %m. %Y" + short_no_year: "%-d. %B" + date_only: "%-d. %b %Y" title: "Discourse" topics: "Themen" @@ -33,6 +39,10 @@ de: zero: "Entschuldige, neue Benutzer können Beiträge keine Bilder hinzufügen." one: "Entschuldige, neue Benutzer können Beiträgen nur ein Bild hinzufügen." other: "Entschuldige, neue Benutzer können Beiträge nur %{count} Bilde hinzufügen." + too_many_attachments: + zero: "Entschuldige, neue Benutzer können Beiträge keine Dateien hinzufügen." + one: "Entschuldige, neue Benutzer können Beiträgen nur eine Datei hinzufügen." + other: "Entschuldige, neue Benutzer können Beiträgen nur %{count} Dateien hinzufügen." too_many_links: zero: "Entschuldige, neue Benutzer können Beiträgen keine Links hinzufügen." one: "Entschuldige, neue Benutzer können Beiträgen nur einen Link hinzufügen." @@ -50,8 +60,13 @@ de: rss_topics_in_category: "RSS-Feed von Themen in der Kategorie '%{category}'" author_wrote: "%{author} schrieb:" private_message_abbrev: "PN" + rss_description: + latest: "Neuste Themen" + hot: Angesagte Themen" groups: + errors: + can_not_modify_automatic: "Du kannst eine automatische Gruppe nicht bearbeiten" default_names: admins: "admins" moderators: "moderatoren" @@ -70,8 +85,6 @@ de: 'new-topic': | Willkommen auf %{site_name} — **Danke, dass Du ein neues Thema erstellst!** - Beachte dabei bitte die Folgenden Dinge: - - Ist der Titel eines adäquate Beschreibung dessen, was ein Nutzer vorzufinden erwartet, wenn er dieses Thema aufruft? - Der erste Beitrag umschreibt das Thema: Worum geht es? Wer wäre interessiert daran? Warum ist es wichtig? Welche Arten von Antworten erhoffst Du dir von der Community? @@ -83,8 +96,6 @@ de: 'new-reply': | Willkommen auf %{site_name} — **Danke für deinen Beitrag zum Thema!** - Beachte bitte folgende Dinge während des Schreibens: - - Fügt dein Beitrag dem Gespräch etwas Neues hinzu, und sei es auch wenig? - Behandle deine Gesprächspartner mit demselben Respekt, den Du von ihnen erwartest. @@ -130,6 +141,8 @@ de: title: "Anführer" elder: title: "Ältester" + change_failed_explanation: "Du wolltest %{user_name} auf '%{new_trust_level}' zurückstufen. Jedoch ist seine Vertrauensstufe bereits '%{current_trust_level}'. %{user_name} verbleibt auf '%{current_trust_level}'" + rate_limiter: too_many_requests: "Du machst das zu häufig. Bitte warte %{time_left} vor dem nächsten Versuch." @@ -382,12 +395,17 @@ de: cas_config_warning: 'Der Server erlaubt die Anmeldung mit CAS (enable_cas_logins), aber der Hostname und die Domäne sind nicht gesetzt.' twitter_config_warning: 'Der Server erlaubt die Anmeldung mit Facebook Twitter (enable_twitter_logins), aber der Schlüssel und der Geheimcode sind nicht gesetzt. Besuche <a href="/admin/site_settings">die Einstellungen</a> um die fehlenden Einträge hinzuzufügen. <a href="https://github.com/discourse/discourse/wiki/The-Discourse-Admin-Quick-Start-Guide#enable-twitter-logins" target="_blank">Besuche den Leitfaden um mehr zu erfahren</a>.' github_config_warning: 'Der Server erlaubt die Anmeldung mit Facebook GitHub (enable_github_logins), aber die Kunden ID und der Geheimcode sind nicht gesetzt. Besuche <a href="/admin/site_settings">die Einstellungen</a> um die fehlenden Einträge hinzuzufügen. <a href="https://github.com/discourse/discourse/wiki/The-Discourse-Admin-Quick-Start-Guide" target="_blank">Besuche den Leitfaden um mehr zu erfahren</a>.' + s3_config_warning: 'Der Server wurde konfiguriert um Dateien nach s3 hochzuladen, aber mindestens der folgenden Einstellungen fehlt: s3_access_key_id, s3_secret_access_key oder s3_upload_bucket. Besuche <a href="/admin/site_settings">die Einstellungen</a> um die fehlenden Einträge hinzuzufügen. <a href="http://meta.discourse.org/t/how-to-set-up-image-uploads-to-s3/7229" target="_blank">Besuche "How to set up image uploads to S3?" um mehr zu erfahren</a>.' + image_magick_warning: 'Der Server wurde konfiguriert um Vorschaubilder von grossen Bildern zu erstellen, aber ImageMagick ist nicht installiertd. Installiere ImageMagick mit deinem bevorzugten Packetmanager oder besuche <a href="http://www.imagemagick.org/script/binary-releases.php" target="_blank">um das aktuelle Paket herunterzuladen</a>.' failing_emails_warning: 'Es konnten insgesamt %{num_failed_jobs} Mails nicht versendet werden. Bitte überprüfe die Einstellungen in config/environments/production.rb und stelle die Richtigkeit der config.action_mailer Einstellungen. <a href="/sidekiq/retries" target="_blank">Zu den Fehlern in Sidekiq</a>.' default_logo_warning: "Das Logo der Seite wurde noch nicht angepasst. Bitte bearbeite dieses in den <a href='/admin/site_settings'>Einstellungen</a> (siehe logo_url, logo_small_url und favicon_url)." contact_email_missing: "Du hast noch keine Kontaktmail für die Seite hinterlegt. Bitte hinterlege diese in den <a href='/admin/site_settings'>Einstellungen</a> (siehe contact_email)." contact_email_invalid: "Die Kontaktmail der Seite ist ungültig. Bitte bearbeite diese in den <a href='/admin/site_settings'>Einstellungen</a> (siehe contact_email)." title_nag: "Der Titel der Seite wurde noch nicht angepasst. Bitte bearbeite diesen in den <a href='/admin/site_settings'>Einstellungen</a>." consumer_email_warning: "Deine Seite verwendet Gmail um Mails zu senden. <a href='http://support.google.com/a/bin/answer.py?hl=en&answer=166852' target='_blank'>Gmail hat eine Limite zum Senden von Mails</a>. Um die Mail-Zustellung zu gewährleisten, solltest du einen anderen Mail Service in Erwägung ziehen." + access_password_removal: "Deine Seite hat die Einstellung access_password verwendet, welche entfernt wurde. Die Einstellungen login_required und must_approve_users wurden eingeschalten und werden sofort verwendet. Du kannst diese in <a href='/admin/site_settings'>den Einstellungen</a> wechseln. Stelle sicher, <a href='/admin/users/list/pending'>dass die Benutzer in der Warteliste</a> aktiviert werden. (Diese Meldung wird in 2 Tagen nicht mehr angezeigt.)" + system_username_warning: "Die Einstellung system_username ist leer. Bitte ändere diese in <a href='/admin/site_settings'>den Einstellungen</a>. Setzte einen Benutzernamen eines Administrators, welcher als Sender der Systemnachrichten verwendet werden soll." + notification_email_warning: "Die Einstellung notification_email ist leer. Bitte ändere diese in <a href='/admin/site_settings'>den Einstellungen</a>." content_types: education_new_reply: @@ -405,22 +423,30 @@ de: welcome_invite: title: "Willkommen: Eingeladener Benutzer" description: "Eine private Nachricht welche automatisch an alle eingeladenen Benutzer gesendet wird, wenn diese die Einladung annehmen." - + privacy_policy: + title: "Datenschutzrichtlinie" + description: "Die Datenschutzrichtlinie deiner Seite. Leer lassen um die Vorgabe zu verwenden." + faq: + title: "FAQ" + description: "Die FAQ deiner Seite. Leer lassen um die Vorgabe zu verwenden." login_required_welcome_message: title: "Anmeldung erforderlich: Willkommensnachricht" description: "Willkommensnachricht welche angezeigt wird wenn der Benutzer nicht angemeldet ist und die Einstellung 'login required' aktiviert ist." - tos_user_content_license: title: "Nutzungsbedingungen: Lizenz" description: "Der Text für die Lizenz-Sektion in den Nutzungsbedingungen." tos_miscellaneous: title: "Nutzungsbedingungen: Verschiedenes" description: "Der Text für die Verschiedene-Sektion in den Nutzungsbedingungen." + login_required: + title: "Anmeldung erforderlich: Hauptseite" + description: "Der Text welcher nicht angemeldeten Benutzer angezeigt wird, wenn eine Anmeldung erforderlich ist." site_settings: default_locale: "Die Standardsprache dieser Discourse-Instanz (kodiert in ISO 639-1)." min_post_length: "Minimale Beitragslänge in Zeichen." + min_private_message_post_length: "Minimale Beitragslänge in Zeichen für private Nachrichten" max_post_length: "Maximale Beitragslänge in Zeichen." min_topic_title_length: "Minimale Titellänge von Themen in Zeichen." max_topic_title_length: "Maximale Titellänge von Themen in Zeichen." @@ -441,12 +467,15 @@ de: queue_jobs: "Benutze die Sidekiq-Queue, falls falsche Queues inline sind." crawl_images: "Lade Bilder von Dritten herunter, um ihre Höhe und Breite zu bestimmen." ninja_edit_window: "Sekunden nach Empfang eines Beitrag, in denen Bearbeitungen nicht als neue Version gelten." + edit_history_visible_to_public: "Erlaube jedem vorherige Versionen eines beitrages zu sehen. Wenn deaktiviert, konnen nur Mitarbeiter die Bearbeitungshistorie anschauen." + delete_removed_posts_after: "Anzahl Stunden nach welchem Beiträge die von ihrem Author entfernt wurden endgültig gelöscht werden." max_image_width: "Maximalbreite von Bildern in einem Beitrag." + max_image_height: "Maximalhöhe von Bildern in einem Beitrag." category_featured_topics: "Zahl der angezeigten Themen je Kategorie auf der Kategorieseite /categories." add_rel_nofollow_to_user_content: "Füge mit Ausnahme interner Links allen nutzergenerierten Inhalten 'rel nofollow' hinzu (inkludiert übergeordnete Domains). Die Änderung dieser Einstellung erfordert, dass Du sämtliche Markdown-Beiträge aktualisierst." exclude_rel_nofollow_domains: "Kommaseparierte Liste aller Domains, bei denen 'nofollow' nicht hinzugefügt wird (tld.com erlaubt auch sub.tld.com)." - post_excerpt_maxlength: "Maximale Länge des Exzerpts eines Beitrags in Zeichen." + post_excerpt_maxlength: "Maximale Länge des Zitates eines Beitrags in Zeichen." post_onebox_maxlength: "Maximale Länge eines Onebox-Discourse-Beitrags." category_post_template: "Die Beitragsvorlage zur Kategoriedefinition beim erstellen einer neuen Kategorie." onebox_max_chars: "Maximale Zahl der Zeichen, die eine Onebox von einer externen Webseite in einen Beitrag lädt." @@ -457,6 +486,7 @@ de: apple_touch_icon_url: "Icon für berührungsempfindliche Apple Geräte. Empfohlene Grösse ist 144px auf 144px." notification_email: "Die Antwortadresse, die in Systemmails (zum Beispiel zur Passwortwiederherstellung, neuen Konten, etc.) eingetragen wird." + email_custom_headers: "Eine Pipe-getrennte (|) Liste von eigenen Mail Headern" use_ssl: "Soll die Seite via SSL nutzbar sein?" best_of_score_threshold: "Der Minimalscore eines Beitrags, um zu den Top Beiträgen zu zählen." best_of_posts_required: "Minimale Zahl der Beiträge zu einem Thema bevor der Modus 'Top Beiträge' aktiviert wird." @@ -476,13 +506,15 @@ de: cooldown_minutes_after_hiding_posts: "Minuten, die ein Nutzer warten muss, bevor ein Beitrag, der wegen Meldungen versteckt wurde, bearbeitet werden kann." num_flags_to_block_new_user: "Wenn ein Beitrag eines neuen Benutzers von (n) anderen Benutzern als Werbung gemeldet wird, verstecke alle Beiträge des Benutzers und erlaube keine neue Beiträge mehr. 0 stellt diese Funktion ab." num_users_to_block_new_user: "Wenn ein Beitrag eines neuen Benutzers von nderen Benutzern (n) mal als Werbung gemeldet wird, verstecke alle Beiträge des Benutzers und erlaube keine neue Beiträge mehr. 0 stellt diese Funktion ab." - + notify_mods_when_user_blocked: "Wenn ein Benutzer automatisch gesperrt wird, sende eine Mail an alle Moderatoren." traditional_markdown_linebreaks: "Traditionelle Zeilenumbrüche in Markdown, anstatt zwei nachfolgende Leerzeichen als Zeilenumbruch zu verwenden." post_undo_action_window_mins: "Sekunden, die ein Nutzer hat, um Aktionen auf Beiträgen rückgängig zu machen (Like, Meldung, etc.)." must_approve_users: "Administratoren müssen Nutzer freischalten, bevor sie Zugriff erlangen." ga_tracking_code: "Google Analytics Trackingcode, zum Beispiel: UA-12345678-9; siehe http://google.com/analytics" ga_domain_name: "Google Analytics Domänenname, zum Beispiel: mysite.com; siehe http://google.com/analytics" + enable_escaped_fragments: "Aktiviere Umgehungslösung um älteren Suchmaschinen-Webcrawler zu helfen die Seite zu indexieren. ACHTUNG: Nur aktivieren falls wirklich nötig." + enable_noscript_support: "Aktiviere standard Suchmaschinen-Webcrawler Unterstützung durch den noscript Tag" top_menu: "Bestimme, welche Navigationselemente in welcher Reihenfolge auftauchen. Beispiel: latest|hot|read|favorited|unread|new|posted|categories" post_menu: "Bestimme, welche Funktionen in welcher Reihenfolge im Beitragsmenü auftauchen. Beispiel: like|edit|flag|delete|share|bookmark|reply" share_links: "Bestimme, welche Dienste in welcher Reihenfolge im Teilen-Dialog auftauchen. Beispiel: twitter|facebook|google+|email" @@ -491,11 +523,14 @@ de: posts_per_page: "Zahl der Beiträge, die auf einer Themenseite gezeigt werden." system_username: "Benutzername des Autors für automatisch vom Forum versendete private Nachrichten." send_welcome_message: "Bekommen neue Nutzer eine Willkommensnachricht?" - suppress_reply_directly_below: "Zeige die Zahl der Antworten auf einen Beitrag nicht, falls die einzige Antwort direkt darauf folgt." + suppress_reply_directly_below: "Zeige die Zahl der Antworten auf einen Beitrag nicht, falls die einzige Antwort direkt darunter folgt." + suppress_reply_directly_above: "Zeige 'In Antwort auf' nicht, falls der Beitrag direkt über der einzigen Antwort folgt." + allow_index_in_robots_txt: "Diese Seite soll durch Suchmaschinen indiziert werden (aktualisiert robots.txt)." email_domains_blacklist: "Eine durch senkrechte Striche getrennte Liste von unerlaubten Maildomains. Beispiel: mailinator.com|trashmail.net" email_domains_whitelist: "Eine durch senkrechte Striche getrennte Liste von erlaubte Maildomains. WARNUNG: Benutzer mit Mailadressen anderer Domains können sich nicht registrieren." version_checks: "Erfrage Versionsupdate bei Discourse Hub und zeige Versionsbenachrichtigungen auf der Administratorkonsole /admin." + new_version_emails: "Sende eine Mail an contact_email Adresse wenn eine neue Version verfügbar ist." port: "NUR FÜR ENTWICKLER! ACHTUNG! Benutze diesen HTTP-Port anstatt den Standardport 80. Diese Feld leer lassen heißt 'keinen'. Dient hauptsächlich Entwicklungszwecken." force_hostname: "NUR FÜR ENTWICKLER! ACHTUNG! Spezifiziere einen Hostnamen in der URL. Dieses Feld leer lassen heißt 'keinen'. Dient hauptsächlich Entwicklungszwecken." @@ -559,6 +594,8 @@ de: s3_secret_access_key: "Der geheime Schlüssel von Amazon S3 welcher für das Hochladen verwendet wird" s3_region: "Der Name der Amazon S3 Region welche für das Hochladen verwendet wird" + enable_flash_video_onebox: "Aktiviere das Einbinden von swf und flv Links in einer Onebox. ACHTUNG: Kann eine Sicherheitsrisiko sein" + default_invitee_trust_level: "Standardwert für die Stufe eines eingeladenen Nutzers (0-4)." default_trust_level: "Standardwert für die Stufe von Nutzern (0-4)." @@ -576,10 +613,14 @@ de: newuser_max_links: "Maximale Zahl der Links, die neue Benutzer Beiträgen hinzufügen dürfen." newuser_max_images: "Maximale Zahl der Bilder, die neue Benutzer Beiträgen hinzufügen dürfen." + newuser_max_attachments: "Maximale Zahl der Dateien, die neue Benutzer Beiträgen hinzufügen dürfen." newuser_max_mentions_per_post: "Maximale Zahl der @Namens-Erwähnungen, die neue Benutzer in Beiträgen nutzen dürfen." max_mentions_per_post: "Maximale Zahl der @Namens-Erwähnungen, die man in einem Beitrag nutzen kann." + create_thumbnails: "Erstelle Vorschaubilder für Bilder in einer Lightbox" + email_time_window_mins: "Minuten Wartezeit, bevor eine Mail an Nutzer verschickt wird, um ihnen die Chance zu geben, eine Neuigkeit zuerst zu sehen." + email_posts_context: "Anzahl der Antworten welche als Konext einer Notifikations-Mail hinzugefügt werden." flush_timings_secs: "Sekunden, nach denen Zeiteinstellungen auf den Server übertragen werden." max_word_length: "Maximale Wortlänge in Zeichen in Thementiteln." title_min_entropy: "Minimal nötige Entropie (einzigartige Zeichen) in einem Thementitel." @@ -591,7 +632,9 @@ de: min_body_similar_length: "Minimale Länge eines Beitragstextes, bevor nach ähnlichen Themen gesucht wird." category_colors: "Eine durch senkrechte Striche getrennte Liste hexadezimaler Farbwerte, die als Kategoriefarben erlaubt sind." - max_image_size_kb: "Maximale Größe in Kilobytes (kB), die von Benutzern hochgeladene Bilder groß sein dürfen. Stelle sicher, dass dieser Wert auch in nginx (client_max_body_size) / apache und Proxies konfiguriert ist." + max_image_size_kb: "Maximale Größe in Kilobytes (kB), die von Benutzern hochgeladene Bilder groß sein dürfen. Stelle sicher, dass dieser Wert auch in nginx (client_max_body_size) / Apache und Proxies konfiguriert ist." + max_attachment_size_kb: "Maximale Größe in Kilobytes (kB), die von Benutzern hochgeladenen Dateien groß sein dürfen. Stelle sicher, dass dieser Wert auch in nginx (client_max_body_size) / Apache und Proxies konfiguriert ist." + authorized_extensions: "Eine Pipe-getrennte (|) Liste von Dateiendungen welche hochgeladen werden dürfen." max_similar_results: "Anzahl ähnlicher Themen, die ein Nutzer sieht, während er ein neues Thema erstellen." title_prettify: "Verhindert gängige Fehler im Titel, wie reine Grossschreibung, Kleinbuchstaben am Anfang, mehrere ! und ?, überflüssiger . am Ende, etc." @@ -600,12 +643,33 @@ de: topic_views_heat_medium: "Die Anzahl der Aufrufe bis die Popularität des Themas mittel ist." topic_views_heat_high: "Die Anzahl der Aufrufe bis die Popularität des Themas hoch ist." + faq_url: "URL zu einer externen FAQ welche Du gerne verwenden möchtest." tos_url: "URL zu einer externen Dienstleistungsbedingung welche Du gerne verwenden möchtest." privacy_policy_url: "URL zu einer externen Datenschutzrichtlinie welche Du gerne verwenden möchtest." newuser_spam_host_threshold: "Die Anzahl welche ein Frischling Beiträge mit Links auf die gleiche Seite innerhalb ihrer `newuser_spam_host_posts` veröffentlichen , bevor der Beitrag als Spam klassifiziert wird." staff_like_weight: "Zusätzlicher Gewichtungsfaktor wenn Mitglieder „Gefällt mir“ verteilen." + reply_by_email_enabled: "Erlaube das Antworten auf Themen via Mail" + reply_by_email_address: "Vorgabe der Antwort-Mail Adresse in der Form von: %{reply_key}@reply.myforum.com" + + pop3s_polling_enabled: "Antworten via POP3S anfragen" + pop3s_polling_port: "Der Port für die POP3S Anfrage" + pop3s_polling_host: "Der Host für die POP3S Anfrage" + pop3s_polling_username: "Der Benutzername für die POP3S Anfrage" + pop3s_polling_password: "Das Passwort für die POP3S Anfrage" + + minimum_topics_similar: "Wie viele Themen in der Datenbank existieren müssen, bevor ähnliche Themen angezeigt werden." + + relative_date_duration: "Anzahl von Tagen nach nach welchen das Beitragsdatum relativ und nicht absolut angezeigt wird. Beispiel: relatives Datum: 7T, absolutes Datum: 20 Feb" + delete_user_max_age: "Nach wievielen Tagen ein Benutzerkonto von einem Administrator gelöscht werden kann." + delete_all_posts_max: "Die maximale Anzahl von Beiträgen welche auf einmal gelöscht werden kann. Hat ein Benutzer mehr Beiträge, so können die Beiträge nicht auf einmal und der Benutzer nicht gelöscht werden." + username_change_period: "Wie lange neu registrierte Benutzer ihren Benutzernamen ändern können." + + allow_uploaded_avatars: "Erlaube das Hochladen eines eigenen Avatars" + allow_animated_avatars: "Erlaube den Benutzern animierte GIFs als Avatar zu benutzen" + default_digest_email_frequency: "Wie oft man Zusammenfassungen per Mail standardmässig erhält. Diese Einstellung kann von jedem geändert werden." + notification_types: mentioned: "%{display_username} hat Dich in %{link} erwähnt." liked: "%{display_username} gefällt deinen Beitrag in %{link}." @@ -633,6 +697,9 @@ de: moderator_post: one: "Ich habe einen Beitrag in ein neues Thema verschoben: %{topic_link}" other: "Ich habe %{count} Beiträge in ein neues Thema verschoben: %{topic_link}" + existing_topic_moderator_post: + one: "Ich habe den Beitrag in ein vorhandenes Thema verschoben: %{topic_link}" + other: "Ich hab %{count} Beiträge in ein vorhandenes Thema verschoben: %{topic_link}" topic_statuses: archived_enabled: "Dieses Thema ist nun archiviert. Es ist eingefroren und kann in keiner Weise mehr verändert werden." @@ -656,6 +723,7 @@ de: active: "Dein Konto ist nun freigeschaltet und einsatzbereit." activate_email: "Fast fertig! Wir haben eine Aktivierungsmail an <b>%{email}</b> verschickt. Bitte folge den Anweisungen in der Mail, um Dein Konto zu aktivieren." not_activated: "Du kannst Dich noch nicht anmelden. Wir haben Dir eine Aktivierungsmail geschickt. Bitte folge zunächst den Anweisungen aus der Mail, um Dein Konto zu aktivieren." + banned: "Du kannst dich bis am %{date} nicht mehr anmelden." errors: "%{errors}" not_available: " Nicht verfügbar. Versuche %{suggestion}?" something_already_taken: "Etwas ist schief gelaufen. Möglicherweise ist der Benutzername bereits registriert. Probiere den 'Passwort vergessen'-Link." @@ -716,6 +784,8 @@ de: Deine Freunde von %{site_name}. + :smile: + [0]: %{base_url} [1]: http://www.kitterman.com/spf/validate.html [2]: http://mxtoolbox.com/SuperTool.aspx @@ -728,6 +798,17 @@ de: <small>Am Fuß jeder Mail, die Du verschickst, sollte eine Möglichkeit zum Abbestellen gegeben werden. Hier ein Beispiel: Diese Mail wurde von Unternehmensname, Hauptstraße 55, 12345 Stadtname, Deutschland, versendet. Wenn Du zukünftig keine weiteren Mail erhalten möchtest, [klicke hier, um dich abzumelden][5].</small> + new_version_mailer: + subject_template: "[%{site_name}] neue Version verfügbar" + text_body_template: | + Eine neue Version von Discourse ist verfügbar. + + **Neue Version: %{new_version}** + + Deine Version: %{installed_version} + + Bitte aktuallisiere die Installation so bald wie möglich um die neusten Fehlerbehebungen und Funktionen zu erhalten. + system_messages: post_hidden: subject_template: "Beitrag wegen Meldungen aus der Community versteckt" @@ -839,6 +920,15 @@ de: Weitere Hilfe findest du in unserer [FAQ](%{base_url}/faq). + blocked_by_staff: + subject_template: "Konto gesperrt" + text_body_template: | + Hallo, + + Dies ist eine automatische Nachricht von %{site_name} um dich zu informierenm, dass dein Konto durch einem Moderator gesperrt wurde. + + Weitere Hilfe findest du in unserer [FAQ](%{base_url}/faq). + user_automatically_blocked: subject_template: "Benutzer %{username} wurde automatisch gesperrt" text_body_template: | @@ -846,6 +936,13 @@ de: Bitte [überprüfe die Beanstandungen](/admin/flags). Wenn %{username} nicht mehr gesperrt sein soll, schalte den Benutzer in der [Benuzeradministration](%{user_url}) wieder frei. + spam_post_blocked: + subject_template: "Spam wirde in einem Beitrag von %{username} entdeckt" + text_body_template: | + Dies ist eine automatische Nachricht um dich zu informieren, dass [%{username}](%{user_url}) versucht hat einen Beitrag mit Links zu erstellen, was aber basierend auf der Einstellung newuser_spam_host_threshold unterbunden wurde. + + Bitte [überprüfe den Benutzer](%{user_url}). + unblocked: subject_template: "Benutzerkonto entsperrt" text_body_template: | @@ -855,13 +952,28 @@ de: Du kannst nun wieder Themen erstellen und Beiträge veröffentlichen. + pending_users_reminder: + subject_template: + one: "Es gibt einen nicht freigegebenen Benutzer" + other: "Es gibt %{count} nicht freigegebene Benutzer" + text_body_template: | + Es warten neuen Benutzer auf ihre Freigabe. + + [Bitte bewerte diese im Administrationsbereich](/admin/users/list/pending). + unsubscribe_link: "Wenn Du diese Mails nicht mehr erhalten möchtest, verändere deine [Benutzereinstellungen](%{user_preferences_url})." user_notifications: + previous_discussion: "Vorangehende Antworten" unsubscribe: title: "Mails Abbestellen" description: "Nicht interessiert an diesen Mails? Kein Problem! Klicke unten um Dich abzumelden:" + reply_by_email: "Um zu Antworten, antworte auf diese Email oder besuche %{base_url}%{url} in deinem Browser." + visit_link_to_respond: "Um zu Antworten, besuche %{base_url}%{url} in deinem Browser." + + posted_by: "Erstellt von %{username} am %{post_date}" + user_invited_to_private_message: subject_template: "[%{site_name}] %{username} hat Dich zu einem privaten Gespräch eingeladen: '%{topic_title}'" text_body_template: | @@ -872,52 +984,49 @@ de: user_replied: subject_template: "[%{site_name}] %{username} hat auf deinen Beitrag '%{topic_title}' geantwortet" text_body_template: | - %{username} hat auf deinen Beitrag '%{topic_title}' auf %{site_name} geantwortet: - - --- %{message} + %{context} + --- - Um zu antworten, besuche den folgenden Link: %{base_url}%{url} + %{respond_instructions} user_quoted: subject_template: "[%{site_name}] %{username} hat Dich in '%{topic_title}' zitiert" text_body_template: | - %{username} hat Dich in '%{topic_title}' auf %{site_name} zitiert: - - --- %{message} + %{context} + --- - Um zu antworten, besuche den folgenden Link: %{base_url}%{url} + %{respond_instructions} user_mentioned: subject_template: "[%{site_name}] %{username} hat Dich in '%{topic_title}' erwähnt" text_body_template: | - %{username} hat Dich in '%{topic_title}' auf %{site_name} erwähnt: - - --- %{message} + %{context} + --- - Um zu antworten, besuche den folgenden Link: %{base_url}%{url} + %{respond_instructions} user_posted: subject_template: "[%{site_name}] %{subject_prefix}%{username} hat auf '%{topic_title}' geantwortet" text_body_template: | - %{username} hat in '%{topic_title}' auf %{site_name} geantwortet: - - --- %{message} + %{context} + --- - Um zu antworten, besuche den folgenden Link: %{base_url}%{url} + %{respond_instructions} digest: why: "Hier eine kurze Zusammenfassung, was auf %{site_link} passiert ist, seit Du das letzte Mal am %{last_seen_at} da warst." subject_template: "[%{site_name}] Forenaktivität für den %{date}" new_activity: "Neues in deinen Themen und Beiträgen:" top_topics: "Inhalte die dich vielleicht interessieren:" + other_new_topics: "Andere neue Themen:" unsubscribe: "Diese Zusammenfassung wurde Dir von %{site_link} geschickt, damit Du auf dem Laufenden bleibst, und weil wir nicht eine Weile nicht begrüßen durften.\nWenn Du diese Benachrichtigungen nicht mehr erhalten möchtest, kannst Du sie in deinen Maileinstellungen abschalten: %{unsubscribe_link}." click_here: "klicke hier" from: "%{site_name} Übersicht" @@ -992,8 +1101,12 @@ de: deleted: 'gelöscht' upload: - pasted_image_filename: "" + unauthorized: "Entschuldige, die Datei die du hochladen möchtest ist nicht erlaubt (Erlaubte Dateiendungen: %{authorized_extensions})." + pasted_image_filename: "Hinzugefügtes Bild" + attachments: + too_large: "Entschuldige, die Datei die du hochladen möchtest ist zu gross (Maximale Dateigrösse ist %{max_size_kb}%kb)." images: - fetch_failure: "Entschuldige, beim Laden des Bildes ist ein Fehler aufgetreten." + too_large: "Entschuldige, das Bild welches du hochladen möchtest ist zu gross (Maximale Dateigrösse ist %{max_size_kb}%kb), bitte verkleinere es und versuche es nochmals." + fetch_failure: "Sorry, there has been an error while fetching the image." unknown_image_type: "Entschuldige, aber die Datei die Du hochladen möchtest schein kein Bild zu sein." size_not_found: "Entschuldige, aber wir konnten die Grösse des Bildes nicht feststellen. Vielleicht ist das Bild defekt?" From 23d8f5fec7b6feab4599268cd2a221591f87659f Mon Sep 17 00:00:00 2001 From: Einar Jonsson <einar@codelette.com> Date: Fri, 30 Aug 2013 09:12:44 +0000 Subject: [PATCH 03/10] Replaced delegator methods with Forwardable def_delegator in Topic --- app/models/topic.rb | 40 ++++++++++------------------------------ 1 file changed, 10 insertions(+), 30 deletions(-) diff --git a/app/models/topic.rb b/app/models/topic.rb index 5fe6a17bd..8087c8492 100644 --- a/app/models/topic.rb +++ b/app/models/topic.rb @@ -10,6 +10,16 @@ class Topic < ActiveRecord::Base include ActionView::Helpers::SanitizeHelper include RateLimiter::OnCreateRecord include Trashable + extend Forwardable + + def_delegator :featured_users, :user_ids, :featured_user_ids + def_delegator :featured_users, :choose, :feature_topic_users + + def_delegator :notifier, :watch!, :notify_watch! + def_delegator :notifier, :tracking!, :notify_tracking! + def_delegator :notifier, :regular!, :notify_regular! + def_delegator :notifier, :muted!, :notify_muted! + def_delegator :notifier, :toggle_mute, :toggle_mute def self.max_sort_order 2**31 - 1 @@ -21,14 +31,6 @@ class Topic < ActiveRecord::Base @featured_users ||= TopicFeaturedUsers.new(self) end - def featured_user_ids - featured_users.user_ids - end - - def feature_topic_users(args={}) - featured_users.choose(args) - end - def trash!(trashed_by=nil) update_category_topic_count_by(-1) if deleted_at.nil? super(trashed_by) @@ -561,34 +563,12 @@ class Topic < ActiveRecord::Base @topic_notifier ||= TopicNotifier.new(self) end - # notification stuff - def notify_watch!(user) - notifier.watch! user - end - - def notify_tracking!(user) - notifier.tracking! user - end - - def notify_regular!(user) - notifier.regular! user - end - - def notify_muted!(user) - notifier.muted! user - end - def muted?(user) if user && user.id notifier.muted?(user.id) end end - # Enable/disable the mute on the topic - def toggle_mute(user_id) - notifier.toggle_mute user_id - end - def auto_close_days=(num_days) @ignore_category_auto_close = true set_auto_close(num_days) From 432f9bf5cfc5065dc090c16780e1c055dc890f9b Mon Sep 17 00:00:00 2001 From: Gaurish Sharma <contact@gaurishsharma.com> Date: Fri, 30 Aug 2013 18:26:59 +0530 Subject: [PATCH 04/10] Rake Commands can be chained We can run all three setup related commands in one go, making it easier for people to copy-paste. Also it would be bit faster, I would imagine. --- docs/DEVELOPER-ADVANCED.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/docs/DEVELOPER-ADVANCED.md b/docs/DEVELOPER-ADVANCED.md index 9f6be8df6..a75068dfe 100644 --- a/docs/DEVELOPER-ADVANCED.md +++ b/docs/DEVELOPER-ADVANCED.md @@ -19,11 +19,9 @@ Note: If you are developing on a Mac, you will probably want to look at [these i ## Before you start Rails 1. `bundle install` -2. `bundle exec rake db:migrate` -3. `bundle exec rake db:test:prepare` -4. `bundle exec rake db:seed_fu` -5. Try running the specs: `bundle exec rake autospec` -6. `bundle exec rails server` +2. `bundle exec rake db:migrate db:test:prepare db:seed_fu` +4. Try running the specs: `bundle exec rake autospec` +5. `bundle exec rails server` You should now be able to connect to rails on [http://localhost:3000](http://localhost:3000) - try it out! The seed data includes a pinned topic that explains how to get an admin account, so start there! Happy hacking! From df5cbf76e002c46e4b66c2e000d30eab4b448441 Mon Sep 17 00:00:00 2001 From: Robin Ward <robin.ward@gmail.com> Date: Fri, 30 Aug 2013 10:43:54 -0400 Subject: [PATCH 05/10] Move `insideGroup` into the helper, not the class for grouped each --- app/assets/javascripts/discourse/helpers/grouped_each.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/assets/javascripts/discourse/helpers/grouped_each.js b/app/assets/javascripts/discourse/helpers/grouped_each.js index f0632acae..218232aca 100644 --- a/app/assets/javascripts/discourse/helpers/grouped_each.js +++ b/app/assets/javascripts/discourse/helpers/grouped_each.js @@ -78,8 +78,6 @@ DiscourseGroupedEach.prototype = { template = this.template; data.insideEach = true; - data.insideGroup = true; - for (var i = 0; i < contentLength; i++) { template(content.objectAt(i), { data: data }); } @@ -124,5 +122,6 @@ Ember.Handlebars.registerHelper('groupedEach', function(path, options) { } options.hash.dataSourceBinding = path; + options.data.insideGroup = true; new DiscourseGroupedEach(this, path, options).render(); }); \ No newline at end of file From 63f2187d72356dedc26d5e1d727580f2ba87b132 Mon Sep 17 00:00:00 2001 From: Robin Ward <robin.ward@gmail.com> Date: Fri, 30 Aug 2013 10:56:41 -0400 Subject: [PATCH 06/10] FIX: Don't do intraword italics when prefixed by a forward slash --- app/assets/javascripts/discourse/dialects/dialect.js | 2 +- test/javascripts/components/markdown_test.js | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/discourse/dialects/dialect.js b/app/assets/javascripts/discourse/dialects/dialect.js index 302597b66..58bb55f7a 100644 --- a/app/assets/javascripts/discourse/dialects/dialect.js +++ b/app/assets/javascripts/discourse/dialects/dialect.js @@ -64,7 +64,7 @@ function invalidBoundary(args, prev) { var last = prev[prev.length - 1]; if (typeof last !== "string") { return; } - if (args.wordBoundary && (!last.match(/\W$/))) { return true; } + if (args.wordBoundary && (last.match(/(\w|\/)$/))) { return true; } if (args.spaceBoundary && (!last.match(/\s$/))) { return true; } } diff --git a/test/javascripts/components/markdown_test.js b/test/javascripts/components/markdown_test.js index ef2d5e9db..9f53d0705 100644 --- a/test/javascripts/components/markdown_test.js +++ b/test/javascripts/components/markdown_test.js @@ -23,6 +23,7 @@ test("basic cooking", function() { cooked("_trout_", "<p><em>trout</em></p>", "it italicizes text."); cooked("***hello***", "<p><strong><em>hello</em></strong></p>", "it can do bold and italics at once."); cooked("word_with_underscores", "<p>word_with_underscores</p>", "it doesn't do intraword italics"); + cooked("common/_special_font_face.html.erb", "<p>common/_special_font_face.html.erb</p>", "it doesn't intraword with a slash"); cooked("hello \\*evil\\*", "<p>hello *evil*</p>", "it supports escaping of asterisks"); cooked("hello \\_evil\\_", "<p>hello _evil_</p>", "it supports escaping of italics"); cooked("brussel sproutes are *awful*.", "<p>brussel sproutes are <em>awful</em>.</p>", "it doesn't swallow periods."); From 46efbac40ee3623449a008c40c8093968c40cc08 Mon Sep 17 00:00:00 2001 From: Robin Ward <robin.ward@gmail.com> Date: Fri, 30 Aug 2013 12:32:05 -0400 Subject: [PATCH 07/10] Add "Unread" filter to messages tab. Rename the other two views. --- .../controllers/user_activity_controller.js | 3 +- .../discourse/routes/application_routes.js | 3 +- .../discourse/routes/user_routes.js | 40 ++++++++----------- .../templates/user/activity.js.handlebars | 9 +++-- app/controllers/list_controller.rb | 8 ++++ config/locales/client.en.yml | 6 ++- config/routes.rb | 1 + lib/topic_query.rb | 5 +++ 8 files changed, 45 insertions(+), 30 deletions(-) diff --git a/app/assets/javascripts/discourse/controllers/user_activity_controller.js b/app/assets/javascripts/discourse/controllers/user_activity_controller.js index 038d786bc..e765f09fe 100644 --- a/app/assets/javascripts/discourse/controllers/user_activity_controller.js +++ b/app/assets/javascripts/discourse/controllers/user_activity_controller.js @@ -24,5 +24,6 @@ Discourse.UserActivityController = Discourse.ObjectController.extend({ }, privateMessagesActive: Em.computed.equal('pmView', 'index'), - privateMessagesSentActive: Em.computed.equal('pmView', 'sent') + privateMessagesMineActive: Em.computed.equal('pmView', 'mine'), + privateMessagesUnreadActive: Em.computed.equal('pmView', 'unread') }); diff --git a/app/assets/javascripts/discourse/routes/application_routes.js b/app/assets/javascripts/discourse/routes/application_routes.js index 663314d3f..5772dc6a3 100644 --- a/app/assets/javascripts/discourse/routes/application_routes.js +++ b/app/assets/javascripts/discourse/routes/application_routes.js @@ -50,7 +50,8 @@ Discourse.Route.buildRoutes(function() { }); this.resource('userPrivateMessages', { path: '/private-messages' }, function() { - this.route('sent', {path: '/messages-sent'}); + this.route('mine', {path: '/mine'}); + this.route('unread', {path: '/unread'}); }); this.resource('preferences', { path: '/preferences' }, function() { diff --git a/app/assets/javascripts/discourse/routes/user_routes.js b/app/assets/javascripts/discourse/routes/user_routes.js index 9ff40c4b1..ab8d8699b 100644 --- a/app/assets/javascripts/discourse/routes/user_routes.js +++ b/app/assets/javascripts/discourse/routes/user_routes.js @@ -171,33 +171,26 @@ Discourse.UserTopicListRoute = Discourse.Route.extend({ } }); -Discourse.UserPrivateMessagesIndexRoute = Discourse.UserTopicListRoute.extend({ - userActionType: Discourse.UserAction.TYPES.messages_received, +function createPMRoute(viewName, path, type) { + return Discourse.UserTopicListRoute.extend({ + userActionType: Discourse.UserAction.TYPES.messages_received, - model: function() { - return Discourse.TopicList.find('topics/private-messages/' + this.modelFor('user').get('username_lower')); - }, + model: function() { + return Discourse.TopicList.find('topics/' + path + '/' + this.modelFor('user').get('username_lower')); + }, - setupController: function(controller, model) { - this._super(controller, model); - controller.set('hideCategories', true); - this.controllerFor('userActivity').set('pmView', 'index'); - } + setupController: function(controller, model) { + this._super(controller, model); + controller.set('hideCategories', true); + this.controllerFor('userActivity').set('pmView', viewName); + } + }); +} -}); -Discourse.UserPrivateMessagesSentRoute = Discourse.UserTopicListRoute.extend({ - userActionType: Discourse.UserAction.TYPES.messages_sent, +Discourse.UserPrivateMessagesIndexRoute = createPMRoute('index', 'private-messages'); +Discourse.UserPrivateMessagesMineRoute = createPMRoute('mine', 'private-messages-sent'); +Discourse.UserPrivateMessagesUnreadRoute = createPMRoute('unread', 'private-messages-unread'); - model: function() { - return Discourse.TopicList.find('topics/private-messages-sent/' + this.modelFor('user').get('username_lower')); - }, - - setupController: function(controller, model) { - this._super(controller, model); - controller.set('hideCategories', true); - this.controllerFor('userActivity').set('pmView', 'sent'); - } -}); Discourse.UserActivityTopicsRoute = Discourse.UserTopicListRoute.extend({ userActionType: Discourse.UserAction.TYPES.topics, @@ -205,7 +198,6 @@ Discourse.UserActivityTopicsRoute = Discourse.UserTopicListRoute.extend({ model: function() { return Discourse.TopicList.find('topics/created-by/' + this.modelFor('user').get('username_lower')); } - }); Discourse.UserActivityFavoritesRoute = Discourse.UserTopicListRoute.extend({ diff --git a/app/assets/javascripts/discourse/templates/user/activity.js.handlebars b/app/assets/javascripts/discourse/templates/user/activity.js.handlebars index bdf292ff0..03cd3c61d 100644 --- a/app/assets/javascripts/discourse/templates/user/activity.js.handlebars +++ b/app/assets/javascripts/discourse/templates/user/activity.js.handlebars @@ -16,10 +16,13 @@ <ul class='action-list nav-stacked side-nav'> {{#if privateMessageView}} <li {{bindAttr class=":noGlyph privateMessagesActive:active"}}> - {{#linkTo 'userPrivateMessages.index' model}}{{i18n user.private_messages}}{{/linkTo}} + {{#linkTo 'userPrivateMessages.index' model}}{{i18n user.messages.all}}{{/linkTo}} </li> - <li {{bindAttr class=":noGlyph privateMessagesSentActive:active"}}> - {{#linkTo 'userPrivateMessages.sent' model}}{{i18n user.private_messages_sent}}{{/linkTo}} + <li {{bindAttr class=":noGlyph privateMessagesMineActive:active"}}> + {{#linkTo 'userPrivateMessages.mine' model}}{{i18n user.messages.mine}}{{/linkTo}} + </li> + <li {{bindAttr class=":noGlyph privateMessagesUnreadActive:active"}}> + {{#linkTo 'userPrivateMessages.unread' model}}{{i18n user.messages.unread}}{{/linkTo}} </li> {{else}} diff --git a/app/controllers/list_controller.rb b/app/controllers/list_controller.rb index 9dfada7b4..a46976c50 100644 --- a/app/controllers/list_controller.rb +++ b/app/controllers/list_controller.rb @@ -53,6 +53,14 @@ class ListController < ApplicationController respond(list) end + def private_messages_unread + list_opts = build_topic_list_options + list = TopicQuery.new(current_user, list_opts).list_private_messages_unread(fetch_user_from_params) + list.more_topics_url = url_for(topics_private_messages_unread_path(list_opts.merge(format: 'json', page: next_page))) + + respond(list) + end + def category query = TopicQuery.new(current_user, page: params[:page]) diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index fb6642845..d3b74cd09 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -188,7 +188,6 @@ en: download_archive: "download archive of my posts" private_message: "Private Message" private_messages: "Messages" - private_messages_sent: "Sent Messages" activity_stream: "Activity" preferences: "Preferences" bio: "About me" @@ -202,6 +201,11 @@ en: moderator: "{{user}} is a moderator" admin: "{{user}} is an admin" + messages: + all: "All" + mine: "Mine" + unread: "Unread" + change_password: success: "(email sent)" in_progress: "(sending email)" diff --git a/config/routes.rb b/config/routes.rb index e4c81d8cf..40283267c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -216,6 +216,7 @@ Discourse::Application.routes.draw do get 'topics/created-by/:username' => 'list#topics_by', as: 'topics_by', constraints: {username: USERNAME_ROUTE_FORMAT} get 'topics/private-messages/:username' => 'list#private_messages', as: 'topics_private_messages', constraints: {username: USERNAME_ROUTE_FORMAT} get 'topics/private-messages-sent/:username' => 'list#private_messages_sent', as: 'topics_private_messages_sent', constraints: {username: USERNAME_ROUTE_FORMAT} + get 'topics/private-messages-unread/:username' => 'list#private_messages_unread', as: 'topics_private_messages_unread', constraints: {username: USERNAME_ROUTE_FORMAT} # Topic routes get 't/:slug/:topic_id/wordpress' => 'topics#wordpress', constraints: {topic_id: /\d+/} diff --git a/lib/topic_query.rb b/lib/topic_query.rb index 766fb8178..a39e4293c 100644 --- a/lib/topic_query.rb +++ b/lib/topic_query.rb @@ -146,6 +146,11 @@ class TopicQuery TopicList.new(:private_messages, user, list) end + def list_private_messages_unread(user) + list = private_messages_for(user) + list = TopicQuery.unread_filter(list) + TopicList.new(:private_messages, user, list) + end def list_uncategorized create_list(:uncategorized, unordered: true) do |list| From d875a9549da2750101ef3adc22f3ab92fe33d22f Mon Sep 17 00:00:00 2001 From: Neil Lalonde <neillalonde@gmail.com> Date: Fri, 30 Aug 2013 13:41:43 -0400 Subject: [PATCH 08/10] Version bump to v0.9.6.2 --- lib/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/version.rb b/lib/version.rb index c54f87566..4b1ff0085 100644 --- a/lib/version.rb +++ b/lib/version.rb @@ -5,7 +5,7 @@ module Discourse MAJOR = 0 MINOR = 9 TINY = 6 - PRE = 1 + PRE = 2 STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.') end From 96313ce742a8695ee62ee8137333775ee788c1b8 Mon Sep 17 00:00:00 2001 From: Jeff Atwood <jatwood@discourse.org> Date: Fri, 30 Aug 2013 21:08:58 -0700 Subject: [PATCH 09/10] better copy for repeated URL blocking --- config/locales/server.en.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index 98f2bdb8b..772cf368e 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -937,9 +937,9 @@ en: Please [review the flags](/admin/flags). If %{username} was incorrectly blocked from posting, click the unblock button on [the admin page for this user](%{user_url}). spam_post_blocked: - subject_template: "Spam was detected in a post by %{username}" + subject_template: "New user %{username} is posting repeated links" text_body_template: | - This is an automated message to inform you that [%{username}](%{user_url}) tried to make a post with links, but it was stopped as spam based on the newuser_spam_host_threshold site setting. + This is an automated message to inform you that the new user [%{username}](%{user_url}) tried to create multiple posts with links to the same domain, but they were blocked based on the newuser_spam_host_threshold site setting. Please [review the user](%{user_url}). From 0089b10e25a4888c141dac9bf3e8497aa1a6789a Mon Sep 17 00:00:00 2001 From: Jeff Atwood <jatwood@discourse.org> Date: Fri, 30 Aug 2013 23:08:29 -0700 Subject: [PATCH 10/10] remove footer newline from digest emails, is ugly --- config/locales/server.en.yml | 2 +- config/locales/server.id.yml | 2 +- config/locales/server.ko.yml | 2 +- config/locales/server.sv.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index 772cf368e..69274dc08 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -1027,7 +1027,7 @@ en: new_activity: "New activity on your topics and posts:" top_topics: "Recent posts the community enjoyed:" other_new_topics: "Other New Topics:" - unsubscribe: "This summary email is sent as a courtesy notification from %{site_link} when we haven't seen you in a while.\nTo unsubscribe or change your email preferences, %{unsubscribe_link}." + unsubscribe: "This summary email is sent as a courtesy notification from %{site_link} when we haven't seen you in a while. To unsubscribe or change your email preferences, %{unsubscribe_link}." click_here: "click here" from: "%{site_name} digest" read_more: "Read More" diff --git a/config/locales/server.id.yml b/config/locales/server.id.yml index 217ab1fe6..3988ece34 100644 --- a/config/locales/server.id.yml +++ b/config/locales/server.id.yml @@ -725,7 +725,7 @@ id: subject_template: "[%{site_name}] Forum Activity for %{date}" new_activity: "New activity on your topics and posts:" new_topics: "New topics:" - unsubscribe: "This summary email is sent as a courtesy notification from %{site_link} when we haven't seen you in a while.\nTo unsubscribe or change your email preferences, %{unsubscribe_link}." + unsubscribe: "This summary email is sent as a courtesy notification from %{site_link} when we haven't seen you in a while. To unsubscribe or change your email preferences, %{unsubscribe_link}." click_here: "click here" from: "%{site_name} digest" diff --git a/config/locales/server.ko.yml b/config/locales/server.ko.yml index 165d5133f..6025c3a21 100644 --- a/config/locales/server.ko.yml +++ b/config/locales/server.ko.yml @@ -870,7 +870,7 @@ ko: subject_template: "[%{site_name}] Forum Activity for %{date}" new_activity: "New activity on your topics and posts:" new_topics: "New topics:" - unsubscribe: "This summary email is sent as a courtesy notification from %{site_link} when we haven't seen you in a while.\nTo unsubscribe or change your email preferences, %{unsubscribe_link}." + unsubscribe: "This summary email is sent as a courtesy notification from %{site_link} when we haven't seen you in a while. To unsubscribe or change your email preferences, %{unsubscribe_link}." click_here: "click here" from: "%{site_name} digest" diff --git a/config/locales/server.sv.yml b/config/locales/server.sv.yml index 7aac74e9b..5e74f96fe 100644 --- a/config/locales/server.sv.yml +++ b/config/locales/server.sv.yml @@ -783,7 +783,7 @@ sv: subject_template: "[%{site_name}] Forum Activity for %{date}" new_activity: "New activity on your topics and posts:" new_topics: "New topics:" - unsubscribe: "This summary email is sent as a courtesy notification from %{site_link} when we haven't seen you in a while.\nTo unsubscribe or change your email preferences, %{unsubscribe_link}." + unsubscribe: "This summary email is sent as a courtesy notification from %{site_link} when we haven't seen you in a while. To unsubscribe or change your email preferences, %{unsubscribe_link}." click_here: "click here" from: "%{site_name} digest"