diff --git a/extensions/amavis_quarantine/main.py b/extensions/amavis_quarantine/main.py index a3fd1fb50..79758e3dd 100644 --- a/extensions/amavis_quarantine/main.py +++ b/extensions/amavis_quarantine/main.py @@ -2,41 +2,29 @@ """ """ +from datetime import datetime +import time +import email +import re +import os from django.http import HttpResponseRedirect, HttpResponse -from django.shortcuts import get_object_or_404, render_to_response -from django.template.loader import render_to_string -from django.template import Template from django.utils import simplejson from django.conf.urls.defaults import * -from django.utils.translation import ugettext as _ +from django.utils.translation import ugettext as _, ungettext from django.core.urlresolvers import reverse -from django.core.paginator import Paginator from django.contrib.auth.decorators \ import login_required -from mailng.lib import events +from mailng.lib import events, parameters from mailng.lib import _render, _ctx_ok, _ctx_ko, decode from mailng.lib import db from mailng.admin.models import Mailbox from lib import AMrelease -from datetime import datetime -import email -import re -import os -import lxml.html -from lxml.html.clean import Cleaner +from sql_listing import * -attached_map = {} - -def map_cid(url): - map = globals()["attached_map"] - m = re.match(".*cid:([^\"]+)", url) - if m: - if map.has_key(m.group(1)): - return map[m.group(1)] - return url - def init(): events.register("UserMenuDisplay", menu) + parameters.register("amavis_quarantine", "MAX_MESSAGES_AGE", "int", 14, + help=_("Quarantine messages maximum age (in days) before deletion")) def urls(): return (r'^mailng/quarantine/', @@ -51,82 +39,27 @@ def menu(**kwargs): ] return [] -def lookup(*args): - filter = "" - for a in args: - if not a: - continue - if a[0] == "&": - filter += " AND " - else: - filter += " OR " - filter += a[1:] - conn = db.getconnection("amavis_quarantine") - status, cursor = db.execute(conn, """ -SELECT msgs.from_addr, maddr.email, msgs.subject, msgs.content, quarantine.mail_id, - msgs.time_num, msgs.content -FROM quarantine, maddr, msgrcpt, msgs -WHERE quarantine.mail_id=msgrcpt.mail_id -AND msgrcpt.rid=maddr.id -AND msgrcpt.mail_id=msgs.mail_id -AND quarantine.chunk_ind=1 -%s -ORDER BY msgs.time_num DESC -""" % filter) - return cursor - -def render_listing(request, cursor): - emails = [] - rows = cursor.fetchall() - for row in rows: - emails.append({"from" : row[0], "to" : row[1], - "subject" : row[2], "content" : row[3], - "mailid" : row[4], "time" : datetime.fromtimestamp(row[5]), - "type" : row[6]}) - paginator = Paginator(emails, 10) - try: - pagenum = int(request.GET.get('page', '1')) - except ValueError: - pagenum = 1 - page = paginator.page(pagenum) - return render_to_string("amavis_quarantine/listing.html", { - "count" : len(rows), - "emails" : page, "current_page" : pagenum, - "last_page" : paginator._get_num_pages() - }) - @login_required def index(request, message=None): + start = time.time() if not request.user.is_superuser: mb = Mailbox.objects.get(user=request.user.id) - filter = "&maddr.email='%s'" % mb.full_address + filter = ["&maddr.email='%s'" % mb.full_address] else: filter = None - cursor = lookup(filter) - - return _render(request, 'amavis_quarantine/index.html', { - "content" : render_listing(request, cursor) - }) - -@login_required -def viewmail_plain(request, content): - body = decode(content) - return (True, body) - -@login_required -def viewmail_html(request, content): - links = request.GET.has_key("links") and request.GET["links"] or "0" - html = lxml.html.fromstring(content) - if links == "0": - html.rewrite_links(lambda x: None) - else: - html.rewrite_links(map_cid) - body = lxml.html.tostring(html) - body = Template(decode(body)).render({}) - return (False, body) + try: + pageid = request.GET["page"] + if pageid == "": + pageid = 1 + except KeyError: + pageid = 1 + lst = SQLlisting(filter) + return lst.render(request, pageid=int(pageid), start=start) @login_required def getmailcontent(request, mail_id): + from mailng.lib.email_listing import Email + conn = db.getconnection("amavis_quarantine") status, cursor = db.execute(conn, """ SELECT mail_text @@ -139,41 +72,8 @@ WHERE quarantine.mail_id='%s' msg = email.message_from_string(content) links = request.GET.has_key("links") and request.GET["links"] or "0" mode = request.GET.has_key("mode") and request.GET["mode"] or "plain" - contents = {"html" : "", "plain" : ""} - for part in msg.walk(): - #print part.get_content_type() - if part.get_content_maintype() == 'multipart': - continue - if part.get_content_type() in ("text/html", "text/plain"): - contents[part.get_content_subtype()] += part.get_payload(decode=True) - if mode != "html" or links == "0": - continue - - if part.get_content_maintype() == "image": - if part.has_key("Content-Location"): - fname = part["Content-Location"] - if re.match("^http:", fname): - path = fname - else: - path = "/%s" % os.path.join("static/tmp", fname) - fp = open(path, "wb") - fp.write(part.get_payload(decode=True)) - fp.close() - m = re.match("<(.+)>", part["Content-ID"]) - if m: - attached_map[m.group(1)] = path - else: - attached_map[part["Content-ID"]] = path - - if not contents.has_key(mode) or contents[mode] == "": - if mode == "html": - mode = "plain" - else: - mode = "html" - (pre, body) = globals()["viewmail_%s" % mode](request, contents[mode]) - return _render(request, 'amavis_quarantine/getmailcontent.html', { - "body" : body, "pre" : pre - }) + mail = Email(msg, mode, links) + return mail.render(request) @login_required def viewmail(request, mail_id): @@ -224,8 +124,9 @@ def delete(request, mail_id, count=1): status, error = db.execute(conn, "DELETE FROM msgs WHERE mail_id IN (%s)" % mail_id) if status: - message = _("%(count)d message%(plural)s deleted successfully" \ - % ({"count" : count, "plural" : count > 1 and "s" or ""})) + message = ungettext("%(count)d message deleted successfully", + "%(count)d messages deleted successfully", + count) % {"count" : count} else: message = error return _redirect_to_index(request, message, count) @@ -264,8 +165,9 @@ WHERE msgrcpt.mail_id=msgs.mail_id AND msgrcpt.rid=maddr.id AND msgs.mail_id IN error = result break if not error: - message = _("%(count)d message%(plural)s released successfully" \ - % {"count" : count, "plural" : count > 1 and "s" or ""}) + message = ungettext("%(count)d message released successfully", + "%(count)d messages released successfully", + count) % {"count" : count} else: message = error return _redirect_to_index(request, message, count) @@ -309,7 +211,19 @@ def search(request): filter += " OR " filter += "msgs.%s LIKE '%%%s%%'" % (c, pattern) filter = "&(%s)" % filter - cursor = lookup(filter) - ctx = {"status" : "ok", "content" : render_listing(request, cursor)} - return HttpResponse(simplejson.dumps(ctx), - mimetype="application/json") + lst = SQLlisting([filter]) + try: + pageid = request.GET["page"] + if pageid == "": + pageid = 1 + except KeyError: + pageid = 1 + page = lst.paginator.getpage(pageid) + if page: + content = lst.fetch(page.id_start, page.id_stop).render(request) + navbar = lst.render_navbar(page) + else: + content = "Empty quarantine" + navbar = "" + ctx = {"status" : "ok", "listing" : content, "navbar" : navbar} + return HttpResponse(simplejson.dumps(ctx), mimetype="application/json") diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po new file mode 100644 index 000000000..0ca39e8f8 --- /dev/null +++ b/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,638 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-02 15:01+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Patrick Ben Koetter \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: admin/forms.py:16 templates/admin/domains.html:17 +#: templates/admin/mailboxes.html:17 +msgid "Quota" +msgstr "Quota" + +#: admin/forms.py:17 +msgid "Mailbox quota in MB (default to domain quota if blank)" +msgstr "Mailbox-Quota in MB (standardmäßig Domain-Quota wenn leer)" + +#: admin/forms.py:18 +msgid "Password" +msgstr "Passwort" + +#: admin/forms.py:19 +msgid "Password used to log in" +msgstr "Login-Passwort" + +#: admin/forms.py:20 main/forms.py:21 +msgid "Confirmation" +msgstr "Bestätigung" + +#: admin/forms.py:21 +msgid "Password confirmation" +msgstr "Passwort Bestätigung" + +#: admin/forms.py:24 +msgid "Check to activate this mailbox" +msgstr "Markieren, um die Mailbox zu aktivieren" + +#: admin/forms.py:37 main/forms.py:36 +msgid "Passwords mismatch" +msgstr "Passwörter stimmen nicht überein" + +#: admin/forms.py:56 templates/admin/domain_header.html:6 +#: templates/admin/editdomain.html:7 templates/admin/permissions.html:42 +msgid "Domain" +msgstr "Domäne" + +#: admin/forms.py:58 +msgid "Select a domain in the list" +msgstr "Wählen Sie eine Domäne aus der Liste" + +#: admin/forms.py:59 +msgid "User" +msgstr "Nutzer" + +#: admin/forms.py:60 +msgid "Select a user in the list" +msgstr "Wählen Sie einen Nutzer aus der Liste" + +#: admin/forms.py:61 +msgid "Role" +msgstr "Rolle" + +#: admin/forms.py:62 +msgid "Super administrator" +msgstr "Administrator" + +#: admin/forms.py:63 +msgid "Domain administrator" +msgstr "Domänen-Administrator" + +#: admin/forms.py:64 +msgid "Select the role you want this user to have" +msgstr "Wählen Sie die Rolle für diesen Nutzer" + +#: admin/models.py:9 admin/models.py:38 +msgid "name" +msgstr "Name" + +#: admin/models.py:10 +msgid "The domain name" +msgstr "Name der Domäne" + +#: admin/models.py:11 +msgid "Default quota in MB applied to mailboxes" +msgstr "Standard-Quota für Mailboxen (in MB)" + +#: admin/models.py:12 admin/models.py:111 main/models.py:9 +msgid "enabled" +msgstr "aktiviert" + +#: admin/models.py:13 +msgid "Check to activate this domain" +msgstr "Auswählen, um diese Domäne zu aktivieren" + +#: admin/models.py:39 +msgid "First name and last name of mailbox owner" +msgstr "Vor- und Nachname des Mailbox-Besitzers" + +#: admin/models.py:40 admin/models.py:106 +msgid "address" +msgstr "Adresse" + +#: admin/models.py:41 +msgid "Mailbox address (without the @domain.tld part)" +msgstr "Mailbox addresse (ohne den @domain.tld-Anteil)" + +#: admin/models.py:43 +msgid "password" +msgstr "Passwort" + +#: admin/models.py:107 +msgid "The alias address (without the domain part)" +msgstr "Die Alias-Adresse (ohne den @domain.tld-Anteil)" + +#: admin/models.py:109 +msgid "mailbox" +msgstr "Mailbox" + +#: admin/models.py:110 +msgid "The mailbox this alias points to" +msgstr "Mailbox auf den dieser Alias verweist" + +#: admin/models.py:112 +msgid "Check to activate this alias" +msgstr "Auswählen um den Alias zu aktivieren" + +#: admin/views.py:24 +msgid "Permission denied." +msgstr "Zugriff verweigert." + +#: admin/views.py:69 admin/views.py:99 +msgid "Domain with this name already defined" +msgstr "Es existiert bereits eine Domain mit diesem Namen" + +#: admin/views.py:78 +msgid "Failed to initialise domain, check permissions" +msgstr "" +"Domäne konnte nicht initialisiert werden. Prüfen Sie die Berechtigungen." + +#: admin/views.py:102 +msgid "Failed to rename domain, check permissions" +msgstr "Domäne konnte nicht umbenannt werden. Prüfen Sie die Berechtigungen." + +#: admin/views.py:156 admin/views.py:215 +msgid "Mailbox with this address already exists" +msgstr "Eine Mailbox mit diesem Namen existiert bereits." + +#: admin/views.py:187 +msgid "Mailbox created." +msgstr "Mailbox erstellt." + +#: admin/views.py:191 +msgid "Failed to initialise mailbox, check permissions" +msgstr "" +"Mailbox konnte nicht initialisiert werden. Prüfen Sie die Berechtigungen." + +#: admin/views.py:218 +msgid "Failed to rename mailbox, check permissions" +msgstr "Mailbox konnte nicht umbenannt werden. Prüfen Sie die Berechtigungen." + +#: admin/views.py:294 admin/views.py:324 +msgid "Alias with this address already exists" +msgstr "Ein Alias mit dieser Adresse existiert bereits" + +#: admin/views.py:397 +msgid "admin is intouchable!!" +msgstr "admin ist unantastbar!!" + +#: admin/templatetags/admin_extras.py:11 +msgid "enabled_m" +msgstr "aktiviert_m" + +#: admin/templatetags/admin_extras.py:11 +msgid "enabled_f" +msgstr "aktiviert_f" + +#: admin/templatetags/admin_extras.py:19 templates/admin/newmailbox.html:7 +msgid "New mailbox" +msgstr "Neue Mailbox" + +#: admin/templatetags/admin_extras.py:26 templates/admin/domains.html:16 +msgid "Mailboxes" +msgstr "Mailboxen" + +#: admin/templatetags/admin_extras.py:30 +msgid "Aliases" +msgstr "Aliase" + +#: admin/templatetags/admin_extras.py:37 +msgid "Properties" +msgstr "Eigenschaften" + +#: extensions/amavis_quarantine/main.py:27 +msgid "Quarantine messages maximum age (in days) before deletion" +msgstr "" + +#: extensions/amavis_quarantine/main.py:36 +#: extensions/amavis_quarantine/templates/index.html:152 +msgid "Quarantine" +msgstr "Quarantäne" + +#: extensions/amavis_quarantine/main.py:127 +#, python-format +msgid "%(count)d message deleted successfully" +msgid_plural "%(count)d messages deleted successfully" +msgstr[0] "%(count)d Nachricht erfolgreich gelöscht" +msgstr[1] "%(count)d Nachrichten erfolgreich gelöscht" + +#: extensions/amavis_quarantine/main.py:168 +#, fuzzy, python-format +msgid "%(count)d message released successfully" +msgid_plural "%(count)d messages released successfully" +msgstr[0] "%(count)d Nachicht erfolgreich freigegeben" +msgstr[1] "%(count)d Nachichten erfolgreich freigegeben" + +#: extensions/amavis_quarantine/templates/index.html:94 +msgid "Delete this selection?" +msgstr "Auswahl löschen?" + +#: extensions/amavis_quarantine/templates/index.html:101 +msgid "Release this selection?" +msgstr "Auswahl freigeben?" + +#: extensions/amavis_quarantine/templates/index.html:135 +#: extensions/amavis_quarantine/templates/index.html:157 +msgid "Search..." +msgstr "Suchen..." + +#: extensions/amavis_quarantine/templates/index.html:159 +msgid "From address" +msgstr "Absender" + +#: extensions/amavis_quarantine/templates/index.html:160 +#: extensions/amavis_quarantine/templates/listing.html:35 +msgid "Subject" +msgstr "Betreff" + +#: extensions/amavis_quarantine/templates/index.html:161 +msgid "Both" +msgstr "Beide" + +#: extensions/amavis_quarantine/templates/listing.html:4 +msgid "No messages in quarantine" +msgstr "Keine Nachrichten in Quarantäne" + +#: extensions/amavis_quarantine/templates/listing.html:13 +msgid "First" +msgstr "Erstes" + +#: extensions/amavis_quarantine/templates/listing.html:16 +msgid "Previous" +msgstr "Vorheriges" + +#: extensions/amavis_quarantine/templates/listing.html:21 +msgid "Next" +msgstr "Nächstes" + +#: extensions/amavis_quarantine/templates/listing.html:24 +msgid "Last" +msgstr "Letztes" + +#: extensions/amavis_quarantine/templates/listing.html:33 +msgid "Type" +msgstr "Typ" + +#: extensions/amavis_quarantine/templates/listing.html:34 +msgid "From" +msgstr "Von" + +#: extensions/amavis_quarantine/templates/listing.html:36 +msgid "Date" +msgstr "Datum" + +#: extensions/amavis_quarantine/templates/viewheader.html:36 +msgid "Message headers" +msgstr "Nachrichten-Header" + +#: extensions/amavis_quarantine/templates/viewmail.html:22 +msgid "Mail content" +msgstr "Inhalt der Mail" + +#: extensions/amavis_quarantine/templates/viewmail.html:31 +msgid "Message" +msgstr "Nachricht" + +#: extensions/amavis_quarantine/templatetags/amextras.py:13 +msgid "View as plain text" +msgstr "In Text-Format betrachten" + +#: extensions/amavis_quarantine/templatetags/amextras.py:17 +msgid "View as HTML" +msgstr "In HTML-Format betrachten" + +#: extensions/amavis_quarantine/templatetags/amextras.py:21 +msgid "Activate links" +msgstr "Links aktivieren" + +#: extensions/amavis_quarantine/templatetags/amextras.py:30 +msgid "Back to list" +msgstr "Zurück zur Liste" + +#: extensions/amavis_quarantine/templatetags/amextras.py:34 +msgid "View full headers" +msgstr "Alle Header ansehen" + +#: extensions/amavis_quarantine/templatetags/amextras.py:41 +#: extensions/amavis_quarantine/templatetags/amextras.py:65 +msgid "Release" +msgstr "Freigeben" + +#: extensions/amavis_quarantine/templatetags/amextras.py:42 +msgid "Release this message?" +msgstr "Diese Nachricht freigeben?" + +#: extensions/amavis_quarantine/templatetags/amextras.py:47 +#: extensions/amavis_quarantine/templatetags/amextras.py:69 +msgid "Delete" +msgstr "Löschen" + +#: extensions/amavis_quarantine/templatetags/amextras.py:48 +msgid "Delete this message?" +msgstr "Diese Nachricht löschen?" + +#: extensions/amavis_quarantine/templatetags/amextras.py:50 +msgid "Options" +msgstr "Optionen" + +#: extensions/postfix_autoreply/main.py:35 +msgid "Auto-reply message" +msgstr "Automatische Antwort" + +#: extensions/stats/grapher.py:18 +msgid "sent messages" +msgstr "Gesendete Nachrichten" + +#: extensions/stats/grapher.py:20 +msgid "received messages" +msgstr "Empfangene Nachrichten" + +#: extensions/stats/grapher.py:28 +msgid "msgs/min" +msgstr "" + +#: extensions/stats/grapher.py:32 +msgid "bounced messages" +msgstr "Zurückgeworfene Nachrichten" + +#: extensions/stats/grapher.py:34 +msgid "rejected messages" +msgstr "Abgewiesene Nachrichten" + +#: extensions/stats/grapher.py:42 +msgid "bytes/min" +msgstr "Bytes/min" + +#: extensions/stats/grapher.py:46 +msgid "received size" +msgstr "Empfangsgrösse" + +#: extensions/stats/grapher.py:48 +msgid "sent size" +msgstr "Versendegrösse" + +#: extensions/stats/main.py:32 extensions/stats/main.py:39 +msgid "Statistics" +msgstr "Statistiken" + +#: extensions/stats/main.py:68 +msgid "No Domain defined" +msgstr "Keine Domäne definiert." + +#: extensions/stats/main.py:94 extensions/stats/main.py:112 +msgid "Average normal traffic" +msgstr "Durchschnittlicher normaler Datenverkehr" + +#: extensions/stats/main.py:95 extensions/stats/main.py:113 +msgid "Average bad traffic" +msgstr "Durchschnittlicher schlechter Datenverkehr" + +#: extensions/stats/main.py:96 extensions/stats/main.py:114 +msgid "Average normal traffic size" +msgstr "Durchschnittliche Grösse normaler Datenverkehr" + +#: extensions/stats/templates/adminindex.html:31 +msgid "Global statistics" +msgstr "Globale Statistiken" + +#: extensions/stats/templates/adminindex.html:35 +msgid "Domain:" +msgstr "Domäne:" + +#: extensions/stats/templates/adminindex.html:37 +msgid "Global" +msgstr "Global" + +#: extensions/stats/templates/adminindex.html:43 +#: extensions/stats/templates/index.html:30 +msgid "Period:" +msgstr "Zeitraum:" + +#: extensions/stats/templates/graphs.html:5 +msgid "No statistics available" +msgstr "Keine Statistiken verfügbar" + +#: extensions/stats/templatetags/stats_extra.py:9 +msgid "Day" +msgstr "Tag" + +#: extensions/stats/templatetags/stats_extra.py:10 +msgid "Week" +msgstr "Woche" + +#: extensions/stats/templatetags/stats_extra.py:11 +msgid "Month" +msgstr "Monat" + +#: extensions/stats/templatetags/stats_extra.py:12 +msgid "Year" +msgstr "Jahr" + +#: main/forms.py:17 +msgid "Old password" +msgstr "Altes Passwort" + +#: main/forms.py:19 +msgid "New password" +msgstr "Neues Passwort" + +#: main/forms.py:31 +msgid "Old password mismatchs" +msgstr "Altes Passwort stimmt nicht überein" + +#: main/models.py:7 +msgid "subject" +msgstr "Betreff" + +#: main/models.py:8 +msgid "content" +msgstr "Inhalt" + +#: main/views.py:45 +msgid "Auto reply message updated successfully." +msgstr "Automatische Antwort erfolgreich aktualisiert." + +#: main/templatetags/main_extras.py:16 templates/main/chpassword.html:7 +msgid "Change password" +msgstr "Passwort ändern" + +#: templates/layout.html:45 +msgid "Admin" +msgstr "Admin" + +#: templates/layout.html:52 +msgid "Preferences" +msgstr "Einstellungen" + +#: templates/layout.html:59 +msgid "Logout" +msgstr "Logout" + +#: templates/layout.html:73 templates/admin/newdomain.html:7 +msgid "New domain" +msgstr "Neue Domäne" + +#: templates/layout.html:80 +msgid "Domains" +msgstr "Domäne" + +#: templates/layout.html:87 templates/admin/settings_header.html:6 +msgid "Settings" +msgstr "Einstellungen" + +#: templates/admin/addpermission.html:24 templates/admin/settings_menu.html:15 +msgid "Add permission" +msgstr "Berechtigung hinzufügen" + +#: templates/admin/addpermission.html:33 templates/admin/newalias.html:14 +#: templates/admin/newdomain.html:15 templates/admin/newmailbox.html:16 +msgid "Create" +msgstr "Erstellen" + +#: templates/admin/aliases.html:9 +msgid "No alias defined." +msgstr "Kein Alias definiert." + +#: templates/admin/aliases.html:13 templates/admin/domains.html:14 +#: templates/admin/mailboxes.html:14 templates/admin/permissions.html:14 +#: templates/admin/permissions.html:41 +msgid "Actions" +msgstr "Aktionen" + +#: templates/admin/aliases.html:14 templates/admin/mailboxes.html:16 +msgid "Address" +msgstr "Adresse" + +#: templates/admin/aliases.html:15 templates/admin/editmailbox.html:7 +msgid "Mailbox" +msgstr "Mailbox" + +#: templates/admin/aliases.html:16 templates/admin/domains.html:18 +#: templates/admin/permissions.html:17 templates/admin/permissions.html:44 +msgid "Enabled" +msgstr "Aktiviert" + +#: templates/admin/aliases.html:24 +msgid "Edit alias" +msgstr "Alias bearbeiten" + +#: templates/admin/aliases.html:28 +msgid "Delete alias" +msgstr "Alias löschen" + +#: templates/admin/domains.html:6 +msgid "Available domains" +msgstr "Verfügbare Domänen" + +#: templates/admin/domains.html:10 +msgid "No domain defined." +msgstr "Keine Domäne definiert." + +#: templates/admin/domains.html:15 templates/admin/mailboxes.html:15 +#: templates/admin/permissions.html:43 +msgid "Name" +msgstr "Name" + +#: templates/admin/domains.html:26 +msgid "Edit domain" +msgstr "Domäne bearbeiten" + +#: templates/admin/domains.html:30 +msgid "Delete domain" +msgstr "Domäne löschen" + +#: templates/admin/domains.html:36 templates/admin/mailboxes.html:45 +msgid "MB" +msgstr "MB" + +#: templates/admin/domains.html:37 templates/admin/mailboxes.html:46 +msgid "yes,no" +msgstr "Ja,Nein" + +#: templates/admin/editalias.html:14 templates/admin/editdomain.html:15 +#: templates/admin/editmailbox.html:16 templates/main/autoreply.html:17 +#: templates/main/chpassword.html:15 +msgid "Update" +msgstr "Aktualisieren" + +#: templates/admin/mailboxes.html:10 +msgid "No mailbox defined." +msgstr "Keine Mailbox definiert." + +#: templates/admin/mailboxes.html:26 +msgid "Edit mailbox" +msgstr "Mailbox bearbeiten" + +#: templates/admin/mailboxes.html:31 +msgid "Delete mailbox" +msgstr "Mailbox löschen" + +#: templates/admin/mailboxes.html:36 +msgid "Add new alias" +msgstr "Alias hinzufügen" + +#: templates/admin/mailboxes.html:40 +msgid "Mailbox aliases" +msgstr "Mailbox-Alias" + +#: templates/admin/newalias.html:7 +msgid "New alias" +msgstr "Neuer Alias" + +#: templates/admin/permissions.html:9 +msgid "No superuser defined?!" +msgstr "Kein Administrator definiert?!" + +#: templates/admin/permissions.html:11 +msgid "Super administrators" +msgstr "Administrator" + +#: templates/admin/permissions.html:15 +msgid "Full name" +msgstr "Voller Name" + +#: templates/admin/permissions.html:16 +msgid "User name" +msgstr "Benutzername" + +#: templates/admin/permissions.html:24 templates/admin/permissions.html:52 +msgid "Remove permission" +msgstr "Berechtigung entziehen" + +#: templates/admin/permissions.html:35 +msgid "Domain administrators" +msgstr "Domänen-Administrator" + +#: templates/admin/permissions.html:37 +msgid "No domain admin defined." +msgstr "Kein Domänen-Administrator definiert." + +#: templates/admin/settings_menu.html:7 +msgid "Permissions" +msgstr "Berechtigungen" + +#: templates/main/confirm.html:25 +msgid "Do not delete mailbox directory" +msgstr "Mailbox-Verzeichnis nicht löschen" + +#: templates/main/header.html:6 +msgid "General" +msgstr "Allgemein" + +#: templates/main/index.html:11 +msgid "Your auto-reply message is activated." +msgstr "Automatische Benachrichtigung ist aktiviert." + +#: templates/main/index.html:13 +msgid "Your auto-reply message is not activated." +msgstr "Automatische Benachrichtigung ist nicht aktiviert." + +#: templates/registration/login.html:8 +msgid "Welcome" +msgstr "Willkommen" + +#: templates/registration/login.html:11 +msgid "Your username and password didn't match. Please try again." +msgstr "" +"Ihr Benutzername und Passwort stimmen nicht überein. Bitte versuchen Sie es " +"noch einmal." diff --git a/locale/de/LC_MESSAGES/djangojs.po b/locale/de/LC_MESSAGES/djangojs.po new file mode 100644 index 000000000..0a7399d7e --- /dev/null +++ b/locale/de/LC_MESSAGES/djangojs.po @@ -0,0 +1,37 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-10-30 11:11+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: static/js/domains.js:15 +msgid "Delete this domain?" +msgstr "Diese Domäne löschen?" + +#: static/js/domains.js:22 +msgid "Delete this mailbox?" +msgstr "Diese Mailbox löschen?" + +#: static/js/domains.js:36 +msgid "Delete this alias?" +msgstr "Diesen Alias löschen?" + +#: static/js/form.js:55 +msgid "Help" +msgstr "Hilfe" + +#: static/js/settings.js:9 +msgid "Remove this permission?" +msgstr "Diese Berechtigung entziehen?" diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index b27fc70c8..f9beba823 100644 --- a/locale/fr/LC_MESSAGES/django.po +++ b/locale/fr/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-11-04 15:47+0100\n" +"POT-Creation-Date: 2010-03-02 15:01+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Antoine Nguyen \n" "Language-Team: LANGUAGE \n" @@ -200,20 +200,28 @@ msgstr "Alias" msgid "Properties" msgstr "Propriétés" -#: extensions/amavis_quarantine/main.py:48 +#: extensions/amavis_quarantine/main.py:27 +msgid "Quarantine messages maximum age (in days) before deletion" +msgstr "" + +#: extensions/amavis_quarantine/main.py:36 #: extensions/amavis_quarantine/templates/index.html:152 msgid "Quarantine" msgstr "Quarantaine" -#: extensions/amavis_quarantine/main.py:227 +#: extensions/amavis_quarantine/main.py:127 #, python-format -msgid "%(count)d message%(plural)s deleted successfully" -msgstr "%(count)d message%(plural)s supprimé correctement" +msgid "%(count)d message deleted successfully" +msgid_plural "%(count)d messages deleted successfully" +msgstr[0] "%(count)d message supprimé correctement" +msgstr[1] "%(count)d messages supprimés correctement" -#: extensions/amavis_quarantine/main.py:267 -#, fuzzy, python-format -msgid "%(count)d message%(plural)s released successfully" -msgstr "%(count)d messages relâché correctement" +#: extensions/amavis_quarantine/main.py:168 +#, python-format +msgid "%(count)d message released successfully" +msgid_plural "%(count)d messages released successfully" +msgstr[0] "%(count)d message relâché correctement" +msgstr[1] "%(count)d messages relâchés correctement" #: extensions/amavis_quarantine/templates/index.html:94 msgid "Delete this selection?" @@ -448,27 +456,27 @@ msgstr "Message de réponse auto. mis à jour." msgid "Change password" msgstr "Changer de mot de passe" -#: templates/layout.html:44 +#: templates/layout.html:45 msgid "Admin" msgstr "" -#: templates/layout.html:51 +#: templates/layout.html:52 msgid "Preferences" msgstr "Préférences" -#: templates/layout.html:58 +#: templates/layout.html:59 msgid "Logout" msgstr "Déconnexion" -#: templates/layout.html:72 templates/admin/newdomain.html:7 +#: templates/layout.html:73 templates/admin/newdomain.html:7 msgid "New domain" msgstr "Nouveau domaine" -#: templates/layout.html:79 +#: templates/layout.html:80 msgid "Domains" msgstr "Domaines" -#: templates/layout.html:86 templates/admin/settings_header.html:6 +#: templates/layout.html:87 templates/admin/settings_header.html:6 msgid "Settings" msgstr "Paramètres"