Merge branch '1.1.x'

Conflicts:
	doc/getting_started/plugins.rst
	doc/getting_started/upgrade.rst
	modoboa/extensions/amavis/app_settings.py
	modoboa/extensions/amavis/sql_listing.py
	modoboa/extensions/amavis/templates/amavis/index.html
	modoboa/extensions/amavis/templates/amavis/main_action_bar.html
	modoboa/extensions/amavis/templatetags/amavis_tags.py
	modoboa/extensions/amavis/urls.py
	modoboa/extensions/amavis/views.py
	modoboa/extensions/stats/management/commands/logparser.py
	modoboa/extensions/stats/templates/stats/index.html
	modoboa/extensions/stats/urls.py
	modoboa/extensions/stats/views.py
	modoboa/lib/sysutils.py
This commit is contained in:
Antoine Nguyen
2014-11-10 10:56:39 +01:00
46 changed files with 4167 additions and 1709 deletions
+1 -1
View File
@@ -50,7 +50,7 @@ copyright = u'2014, Antoine Nguyen'
# The short X.Y version.
version = '1.1'
# The full version, including alpha/beta/rc tags.
release = '1.1.6'
release = '1.1.7'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
+4 -3
View File
@@ -715,10 +715,11 @@ Raised when an existing mailbox is modified.
*Callback prototype*::
def callback(newmailbox, oldmailbox): pass
def callback(mailbox): pass
* ``newmailbox`` is a ``Mailbox`` instance containing the new values
* ``oldmailbox`` is a ``Mailbox`` instance containing the old values
* ``mailbox`` is the ``Mailbox`` modified instance. It contains a
``old_full_address`` extra field to check if the address was
modified.
PasswordChange
==============
+8
View File
@@ -51,6 +51,14 @@ Then, follow the common procedure::
Eventually, restart the web server process according to the environment
you did choose. See :ref:`webservers` for more details.
1.1.7: manual learning for SpamAssassin
=======================================
A new feature allows administrators and users to manually train
SpamAssassin in order to customize its behaviour.
Check :ref:`sa_manual_learning` to know more about this feature.
1.1.6: Few bugfixes
===================
+74 -1
View File
@@ -203,7 +203,7 @@ feature:
Self-service mode
=================
The *self-service* mode let users act on quarantined messages without
The *self-service* mode lets users act on quarantined messages without
beeing authenticated. They can:
* View messages
@@ -232,3 +232,76 @@ Here is a link example::
http://<modoboa_url>/quarantine/%i/?rcpt=%R&secret_id=[:secret_id]
.. _sa_manual_learning:
Manual SpamAssassin learning
============================
It is possible to manually train `SpamAssassin
<http://spamassassin.apache.org/>`_ using the quarantine's content. By
train, we mean:
* Mark message(s) as spam (false negative(s))
* Mark message(s) as non-spam (false positive(s))
This feature is available to all users (from super administrators to
simple users) but not enabled by default.
SpamAssassin configuration
--------------------------
For better performance and to enable the per-user level, SpamAssassin
must store bayes information into a SQL database.
Create a new database and a new user/password (using your favorite
database server) and edit the default configuration file
(:file:`/etc/spamassassin/local.cf`) to add the following lines
inside:
.. sourcecode:: perl
bayes_store_module Mail::SpamAssassin::BayesStore::<Driver>
bayes_sql_dsn <DSN>
bayes_sql_username <db username>
bayes_sql_password <db password>
Replace values between ``<>`` by yours. Possible values for ``Driver``
are ``PgSQL`` or ``MySQL`` (non exhaustive list). The syntax for
``DSN`` depends on the driver you choose. Please consult the official
documentation.
Enable the feature through Modoboa
----------------------------------
Manual learning is disabled by default. You can activate it through
the administration panel (*Modoboa > Paremeters > Amavis*). There two
learning levels:
#. Global: available to administrators only. A single (global) bayes
database is shared between everyone.
#. Per domain: available to administrators and domain
administrators. Each domain can have a dedicated database.
#. Per user: each user can create its own database to customize the
way SpamAssassin will detect spam.
The domain and user levels are not activated by default, dedicated
parameters are available through the panel.
.. note::
Domain and user databases are only created the first time someone
calls the learning feature through the quarantine.
.. warning::
A bayes database needs to reach pre-defined thresholds before it
can be used by SpamAssassin. The default values are **200** spams
and **200** hams.
You will find other paramaters related to this feature. You won't need
to change them most of the time, unless SpamAssassin is hosted on a
different machine than Modoboa. (in this case, ``spamc`` will be used
instead of ``sa-learn``).
+76 -4
View File
@@ -1,11 +1,16 @@
# coding: utf-8
from django.utils.translation import ugettext_lazy as _
from django import forms
from modoboa.lib.parameters import AdminParametersForm, UserParametersForm
from django.utils.translation import ugettext_lazy as _
from modoboa.lib.formutils import SeparatorField, YesNoField, InlineRadioSelect
from modoboa.lib.parameters import AdminParametersForm, UserParametersForm
class ParametersForm(AdminParametersForm):
"""Extension settings."""
app = "amavis"
qsettings_sep = SeparatorField(label=_("Quarantine settings"))
@@ -22,7 +27,8 @@ class ParametersForm(AdminParametersForm):
released_msgs_cleanup = YesNoField(
label=_("Remove released messages"),
initial="no",
help_text=_("Remove messages marked as released while cleaning up the database")
help_text=_("Remove messages marked as released while cleaning up "
"the database")
)
am_pdp_mode = forms.ChoiceField(
@@ -73,14 +79,80 @@ class ParametersForm(AdminParametersForm):
widget=forms.TextInput(attrs={"class": "form-control"})
)
lsep = SeparatorField(label=_("Manual learning"))
manual_learning = YesNoField(
label=_("Enable manual learning"),
initial="yes",
help_text=_(
"Allow super administrators to manually train Spamassassin"
)
)
sa_is_local = YesNoField(
label=_("Is Spamassassin local?"),
initial="yes",
help_text=_(
"Tell if Spamassassin is running on the same server than modoboa"
)
)
default_user = forms.CharField(
label=_("Default user"),
initial="amavis",
help_text=_(
"Name of the user owning the default bayesian database"
)
)
spamd_address = forms.CharField(
label=_("Spamd address"),
initial="127.0.0.1",
help_text=_("The IP address where spamd can be reached")
)
spamd_port = forms.IntegerField(
label=_("Spamd port"),
initial=783,
help_text=_("The TCP port spamd is listening on")
)
domain_level_learning = YesNoField(
label=_("Enable per-domain manual learning"),
initial="no",
help_text=_(
"Allow domain administrators to train Spamassassin "
"(within dedicated per-domain databases)"
)
)
user_level_learning = YesNoField(
label=_("Enable per-user manual learning"),
initial="no",
help_text=_(
"Allow simple users to personally train Spamassassin "
"(within a dedicated database)"
)
)
visibility_rules = {
"am_pdp_host": "am_pdp_mode=inet",
"am_pdp_port": "am_pdp_mode=inet",
"am_pdp_socket": "am_pdp_mode=unix"
"am_pdp_socket": "am_pdp_mode=unix",
"sa_is_local": "manual_learning=yes",
"default_user": "manual_learning=yes",
"spamd_address": "sa_is_local=no",
"spamd_port": "sa_is_local=no",
"domain_level_learning": "manual_learning=yes",
"user_level_learning": "manual_learning=yes"
}
class UserSettings(UserParametersForm):
"""Per-user settings."""
app = "amavis"
dsep = SeparatorField(label=_("Display"))
+39 -1
View File
@@ -1,7 +1,14 @@
# coding: utf-8
"""
Amavis forms.
"""
from django import forms
from django.utils.translation import ugettext as _
from modoboa.lib import parameters
from modoboa.lib.formutils import InlineRadioSelect
from modoboa.extensions.amavis.models import Policy, Users
from .models import Policy, Users
class DomainPolicyForm(forms.ModelForm):
@@ -57,3 +64,34 @@ class DomainPolicyForm(forms.ModelForm):
u.policy = policy
policy.save()
return policy
class LearningRecipientForm(forms.Form):
"""A form to select the recipient of a learning request."""
recipient = forms.ChoiceField(
label=None, choices=[]
)
ltype = forms.ChoiceField(
label="", choices=[("spam", "spam"), ("ham", "ham")],
widget=forms.widgets.HiddenInput
)
selection = forms.CharField(
label="", widget=forms.widgets.HiddenInput)
def __init__(self, user, *args, **kwargs):
"""Constructor."""
super(LearningRecipientForm, self).__init__(*args, **kwargs)
choices = []
if user.group == "SuperAdmins":
choices.append(("global", _("Global database")))
domain_level_learning = parameters.get_admin(
"DOMAIN_LEVEL_LEARNING") == "yes"
user_level_learning = parameters.get_admin(
"USER_LEVEL_LEARNING") == "yes"
if domain_level_learning:
choices.append(("domain", _("Domain's database")))
if user_level_learning:
choices.append(("user", _("User's database")))
self.fields["recipient"].choices = choices
+59 -5
View File
@@ -8,6 +8,8 @@ from modoboa.extensions.amavis.lib import (
create_user_and_policy, update_user_and_policy, delete_user_and_policy,
create_user_and_use_policy, delete_user
)
from .lib import manual_learning_enabled
from .models import Users
@events.observe("UserMenuDisplay")
@@ -23,22 +25,27 @@ def menu(target, user):
@events.observe("DomainCreated")
def on_domain_created(user, domain):
create_user_and_policy(domain.name)
create_user_and_policy("@{0}".format(domain.name))
@events.observe("DomainModified")
def on_domain_modified(domain):
update_user_and_policy(domain.oldname, domain.name)
update_user_and_policy(
"@{0}".format(domain.oldname),
"@{0}".format(domain.name)
)
@events.observe("DomainDeleted")
def on_domain_deleted(domain):
delete_user_and_policy(domain.name)
delete_user_and_policy("@{0}".format(domain.name))
@events.observe("DomainAliasCreated")
def on_domain_alias_created(user, domainalias):
create_user_and_use_policy(domainalias.name, domainalias.target.name)
create_user_and_use_policy(
"@{0}".format(domainalias.name), domainalias.target.name
)
@events.observe("DomainAliasDeleted")
@@ -46,7 +53,54 @@ def on_domain_alias_deleted(domainaliases):
if isinstance(domainaliases, DomainAlias):
domainaliases = [domainaliases]
for domainalias in domainaliases:
delete_user(domainalias.name)
delete_user("@{0}".format(domainalias.name))
@events.observe("MailboxModified")
def on_mailbox_modified(mailbox):
"""Update amavis records if address has changed."""
if parameters.get_admin("MANUAL_LEARNING") == "no" or \
mailbox.full_address == mailbox.old_full_address:
return
user = Users.objects.select_related.get(email=mailbox.old_full_address)
full_address = mailbox.full_address
user.email = full_address
user.policy.policy_name = full_address[:32]
user.policy.sa_username = full_address
user.policy.save()
user.save()
@events.observe("MailboxDeleted")
def on_mailbox_deleted(mailbox):
"""Clean amavis database when a mailbox is removed."""
if parameters.get_admin("MANUAL_LEARNING") == "no":
return
delete_user_and_policy(mailbox.full_address)
@events.observe("MailboxAliasCreated")
def on_mailboxalias_created(user, alias):
"""Create amavis record for the new alias.
FIXME: how to deal with distibution lists ?
"""
if not manual_learning_enabled(user) or alias.type != "alias":
return
policy = Policy.objects.get(
policy_name=alias.mboxes.all()[0].full_address
)
email = alias.full_address
Users.objects.create(email=email, policy=policy, fullname=email)
@events.observe("MailboxAliasDeleted")
def on_mailboxalias_deleted(alias):
"""Clean amavis database when an alias is removed."""
if parameters.get_admin("MANUAL_LEARNING") == "no":
return
if Users.objects.exists(email=alias.fullname):
Users.objects.delete(email=alias.fullname)
@events.observe("GetStaticContent")
+167 -17
View File
@@ -1,15 +1,21 @@
# coding: utf-8
import socket
import re
import struct
import string
from functools import wraps
from django.core.urlresolvers import reverse
import re
import socket
import string
import struct
from django.utils.translation import ugettext as _
from django.core.urlresolvers import reverse
from modoboa.extensions.admin.models import Mailbox, Alias
from modoboa.lib import parameters
from modoboa.lib.emailutils import split_mailbox
from modoboa.lib.exceptions import InternalError
from modoboa.lib.sysutils import exec_cmd
from modoboa.lib.webutils import NavigationParameters
from modoboa.extensions.amavis.models import Users, Policy
from .models import Users, Policy
def selfservice(ssfunc=None):
@@ -80,6 +86,100 @@ recipient=%s
return False
class SpamassassinClient(object):
"""A stupid spamassassin client."""
def __init__(self, user, recipient_db):
"""Constructor."""
self._sa_is_local = parameters.get_admin("SA_IS_LOCAL")
self._default_username = parameters.get_admin("DEFAULT_USER")
self._recipient_db = recipient_db
self._setup_cache = {}
self._username_cache = []
if user.group == "SimpleUsers":
user_level_learning = parameters.get_admin("USER_LEVEL_LEARNING")
if user_level_learning == "yes":
self._username = user.email
else:
self._username = None
self.error = None
if self._sa_is_local == "yes":
self._learn_cmd = "sa-learn --{0} --no-sync -u {1}"
self._learn_cmd_kwargs = {}
self._expected_exit_codes = [0]
else:
self._learn_cmd = "spamc -d {0} -p {1}".format(
parameters.get_admin("SPAMD_ADDRESS"),
parameters.get_admin("SPAMD_PORT")
)
self._learn_cmd += " -L {0} -u {1}"
self._learn_cmd_kwargs = {}
self._expected_exit_codes = [5, 6]
def _get_mailbox_from_rcpt(self, rcpt):
"""Retrieve a mailbox from a recipient address."""
local_part, domname = split_mailbox(rcpt)
try:
mailbox = Mailbox.objects.select_related("domain").get(
address=local_part, domain__name=domname)
except Mailbox.DoesNotExist:
try:
alias = Alias.objects.select_related("domain").get(
address=local_part, domain__name=domname)
except Alias.DoesNotExist:
raise InternalError(_("No recipient found"))
if alias.type != "alias":
return None
mailbox = alias.mboxes.all()[0]
return mailbox
def _learn(self, rcpt, msg, mtype):
"""Internal method to call the learning command."""
if self._username is None:
if self._recipient_db == "global":
username = self._default_username
else:
mbox = self._get_mailbox_from_rcpt(rcpt)
if mbox is None:
username = self._default_username
if self._recipient_db == "domain":
username = mbox.domain.name
if username not in self._setup_cache and \
setup_manual_learning_for_domain(mbox.domain):
self._setup_cache[username] = True
else:
username = mbox.full_address
if username not in self._setup_cache and \
setup_manual_learning_for_mbox(mbox):
self._setup_cache[username] = True
else:
username = self._username
if username not in self._username_cache:
self._username_cache.append(username)
cmd = self._learn_cmd.format(mtype, username)
code, output = exec_cmd(cmd, pinput=msg, **self._learn_cmd_kwargs)
if code in self._expected_exit_codes:
return True
self.error = output
return False
def learn_spam(self, rcpt, msg):
"""Learn new spam."""
return self._learn(rcpt, msg, "spam")
def learn_ham(self, rcpt, msg):
"""Learn new ham."""
return self._learn(rcpt, msg, "ham")
def done(self):
"""Call this method at the end of the processing."""
if self._sa_is_local:
for username in self._username_cache:
exec_cmd("sa-learn -u {0} --sync".format(username),
**self._learn_cmd_kwargs)
class QuarantineNavigationParameters(NavigationParameters):
"""
Specific NavigationParameters subclass for the quarantine.
@@ -89,7 +189,10 @@ class QuarantineNavigationParameters(NavigationParameters):
request, 'quarantine_navparams'
)
self.parameters += [
('msgtype', None, False), ('viewrequests', None, False)
('pattern', '', False),
('criteria', 'from_addr', False),
('msgtype', None, False),
('viewrequests', None, False)
]
def _store_page(self):
@@ -123,22 +226,23 @@ class QuarantineNavigationParameters(NavigationParameters):
return url
def create_user_and_policy(name):
def create_user_and_policy(name, priority=7):
"""Create records.
Create two records (a user and a policy) using :keyword:`name` as
an identifier.
:param str name: name
:return: the new ``Policy`` object
"""
policy = Policy.objects.create(policy_name=name[:32])
Users.objects.create(
email="@%s" % name, fullname=name,
priority=7, policy=policy
email=name, fullname=name, priority=priority, policy=policy
)
return policy
def create_user_and_use_policy(name, policy_name):
def create_user_and_use_policy(name, policy_name, priority=7):
"""Create a *users* record and use an existing policy.
:param str name: user record name
@@ -146,8 +250,7 @@ def create_user_and_use_policy(name, policy_name):
"""
policy = Policy.objects.get(policy_name=policy_name[:32])
Users.objects.create(
email="@%s" % name, fullname=name,
priority=7, policy=policy
email=name, fullname=name, priority=priority, policy=policy
)
@@ -159,8 +262,8 @@ def update_user_and_policy(oldname, newname):
"""
if oldname == newname:
return
u = Users.objects.get(email="@%s" % oldname)
u.email = "@%s" % newname
u = Users.objects.get(email=oldname)
u.email = newname
u.fullname = newname
u.policy.policy_name = newname[:32]
u.policy.save()
@@ -173,7 +276,7 @@ def delete_user_and_policy(name):
:param str name: identifier
"""
try:
u = Users.objects.get(email="@%s" % name)
u = Users.objects.get(email=name)
except Users.DoesNotExist:
return
u.policy.delete()
@@ -186,6 +289,53 @@ def delete_user(name):
:param str name: user record name
"""
try:
Users.objects.get(email="@%s" % name).delete()
Users.objects.get(email=name).delete()
except Users.DoesNotExist:
pass
def manual_learning_enabled(user):
"""Check if manual learning is enabled or not.
Also check for :kw:`user` if necessary.
:return: True if learning is enabled, False otherwise.
"""
manual_learning = parameters.get_admin("MANUAL_LEARNING") == "yes"
if manual_learning and user.group != 'SuperAdmins':
domain_level_learning = parameters.get_admin(
"DOMAIN_LEVEL_LEARNING") == "yes"
user_level_learning = parameters.get_admin(
"USER_LEVEL_LEARNING") == "yes"
if user.has_perm("admin.view_domains"):
manual_learning = domain_level_learning or user_level_learning
else:
manual_learning = user_level_learning
return manual_learning
def setup_manual_learning_for_domain(domain):
"""Setup manual learning if necessary.
:return: True if learning has been setup, False otherwise
"""
if Policy.objects.filter(sa_username=domain.name).count():
return False
policy = Policy.objects.get(policy_name=domain.name)
policy.sa_username = domain.name
policy.save()
return True
def setup_manual_learning_for_mbox(mbox):
"""Setup manual learning if necessary.
:return: True if learning has been setup, False otherwise
"""
result = False
if not Policy.objects.filter(policy_name=mbox.full_address).exists():
policy = create_user_and_policy(mbox.full_address)
for alias in mbox.alias_addresses:
create_user_and_use_policy(alias, policy)
result = True
return result
+24 -17
View File
@@ -92,7 +92,7 @@ class SQLconnector(object):
Filters: rs, rid, content
"""
flt = Q(rs__in=[' ', 'V', 'R', 'p']) \
flt = Q(rs__in=[' ', 'V', 'R', 'p', 'S', 'H']) \
if self.navparams.get('viewrequests', '0') != '1' else Q(rs='p')
flt = self._apply_msgrcpt_filters(flt)
pattern = self.navparams.get("pattern", "")
@@ -122,7 +122,7 @@ class SQLconnector(object):
mail__in=Quarantine.objects.filter(chunk_ind=1).values("mail_id")
)
messages = Msgrcpt.objects.select_related().filter(flt)
messages = Msgrcpt.objects.select_related("mail", "rid").filter(flt)
messages = self._apply_extra_select_filters(messages)
return messages
@@ -156,21 +156,21 @@ class SQLconnector(object):
"""
emails = []
for qm in self.messages[start - 1:stop]:
m = {"from": qm["mail__from_addr"],
"to": qm["rid__email"],
"subject": qm["mail__subject"],
"mailid": qm["mail__mail_id"],
"date": datetime.datetime.fromtimestamp(qm["mail__time_num"]),
"type": qm["content"],
"score": qm["bspam_level"]}
rs = qm["rs"]
if rs == 'D':
if qm["rs"] == 'D':
continue
elif rs in ['', ' ']:
m = {
"from": qm["mail__from_addr"],
"to": qm["rid__email"],
"subject": qm["mail__subject"],
"mailid": qm["mail__mail_id"],
"date": datetime.datetime.fromtimestamp(qm["mail__time_num"]),
"type": qm["content"],
"score": qm["bspam_level"],
"status": qm["rs"]
}
if qm["rs"] in ['', ' ']:
m["class"] = "unseen"
elif rs == 'R':
m["img_rstatus"] = static_url("pics/release.png")
elif rs == 'p':
elif qm["rs"] == 'p':
m["class"] = "pending"
emails.append(m)
return emails
@@ -222,6 +222,11 @@ class PgSQLconnector(SQLconnector):
Make use of ``QuerySet.extra`` and postgres ``convert_from``
function to let the quarantine manager work as expected !
The T4 alias is not a random choice. The generated query was
dumped to found it. Be careful since it can changes with
future Django versions...
"""
def _apply_msgrcpt_filters(self, flt):
@@ -246,11 +251,13 @@ class PgSQLconnector(SQLconnector):
def _apply_extra_search_filter(self, crit, pattern):
"""Apply search filters using additional criterias.
"""
if crit == "to":
self._where.append(
"convert_from(maddr.email, 'UTF8') LIKE '%%%s%%'"
% pattern)
"convert_from(maddr.email, 'UTF8') LIKE '%%{0}%%'".format(
pattern)
)
return None
def _apply_extra_select_filters(self, messages):
@@ -93,10 +93,18 @@ Quarantine.prototype = {
$.proxy(this.release_selection, this));
$(document).on("click", "a[name=delete-multi]",
$.proxy(this.delete_selection, this));
$(document).on("click", "a[name=mark-as-spam-multi]",
$.proxy(this.mark_selection_as_spam, this));
$(document).on("click", "a[name=mark-as-ham-multi]",
$.proxy(this.mark_selection_as_ham, this));
$(document).on("click", "a[name=viewrequests]",
$.proxy(this.view_requests, this));
$(document).on("click", "a[name=release]", $.proxy(this.release, this));
$(document).on("click", "a[name=delete]", $.proxy(this.delete, this));
$(document).on("click", "a[name=mark-as-spam]",
$.proxy(this.mark_as_spam, this));
$(document).on("click", "a[name=mark-as-ham]",
$.proxy(this.mark_as_ham, this));
$(document).on("click", "a[name=headers]", $.proxy(this.headers, this));
$(document).on("click", "td[name=type] span", $.proxy(this.filter_by_type, this));
$(document).on("click", "#filters label", $.proxy(this.filter_by_type, this));
@@ -214,14 +222,12 @@ Quarantine.prototype = {
this.navobj.update();
},
_send_selection: function(e, name, message) {
var $link = $(e.target);
e.preventDefault();
if (!this.htmltable.current_selection().length ||
!confirm(message)) {
return;
}
/**
* Return the list of currently selected messages.
*
* @return {Array} - list of message IDs
*/
get_current_selection: function() {
var selection = [];
this.htmltable.current_selection().each(function() {
@@ -234,12 +240,30 @@ Quarantine.prototype = {
selection.push($tr.attr("id"));
}
});
return selection;
},
_send_selection: function(e, name, message) {
var $link = $(e.target);
e.preventDefault();
if (!this.htmltable.current_selection().length ||
!confirm(message)) {
return;
}
var selection = this.get_current_selection();
$.ajax({
url: $link.attr("href"),
data: "action=" + name + "&selection=" + selection.join(","),
type: 'POST',
dataType: 'json'
}).done($.proxy(this.action_cb, this));
}).done(
$.proxy(this.action_cb, this)
).fail(function(jqxhr) {
var data = $.parseJSON(jqxhr.responseText);
$("body").notify("error", data.message);
});
},
release_selection: function(e) {
@@ -250,6 +274,62 @@ Quarantine.prototype = {
this._send_selection(e, "delete", gettext("Delete this selection?"));
},
/**
* Show the recipient selection form inside a modal box.
*
* @param {Object} evt - event object
* @param {string} ltype - learning type (spam or ham)
*/
show_select_rcpt_form: function(evt, ltype, selection) {
if (selection === undefined) {
selection = this.get_current_selection();
}
var url = this.options.learning_recipient_url +
"?type=" + ltype + "&selection=" +
selection.join(",");
var $this = this;
modalbox(evt, null, url, function() {
$(".submit").on("click", function(evt) {
simple_ajax_form_post(evt, {
formid: "learning_recipient_form",
reload_on_success: false,
success_cb: $this.action_cb
});
});
});
},
/**
* Mark the current selection as spam.
*
* @param {Object} e - event object
*/
mark_selection_as_spam: function(e) {
if (this.options.check_learning_rcpt &&
this.htmltable.current_selection().length) {
this.show_select_rcpt_form(e, "spam");
} else {
this._send_selection(
e, "mark_as_spam", gettext("Mark this selection as spam?"));
}
},
/**
* Mark the current selection as ham.
*
* @param {Object} e - event object
*/
mark_selection_as_ham: function(e) {
if (this.options.check_learning_rcpt &&
this.htmltable.current_selection().length) {
this.show_select_rcpt_form(e, "ham");
} else {
this._send_selection(
e, "mark_as_ham", gettext("Mark this selection as non-spam?"));
}
},
_send_action: function(e, message) {
var $link = get_target(e, "a");
@@ -262,10 +342,15 @@ Quarantine.prototype = {
dataType: 'json',
type: 'POST',
data: {rcpt: get_parameter_by_name($link.attr("href"), 'rcpt')}
}).done($.proxy(this.action_cb, this));
}).done(
$.proxy(this.action_cb, this)
).fail(function(jqxhr) {
var data = $.parseJSON(jqxhr.responseText);
$("body").notify("error", data.message);
});
},
release: function(e) {
release : function(e) {
this._send_action(e, gettext("Release this message?"));
},
@@ -273,6 +358,38 @@ Quarantine.prototype = {
this._send_action(e, gettext("Delete this message?"));
},
/**
* Mark the current message as spam.
*
* @param {Object} e - event object
*/
mark_as_spam: function(e) {
if (this.options.check_learning_rcpt) {
var $link = get_target(e, "a");
var selection = get_parameter_by_name($link.attr("href"), "rcpt") +
" " + $link.attr("data-mail-id");
this.show_select_rcpt_form(e, "spam", [selection]);
} else {
this._send_action(e, gettext("Mark as spam?"));
}
},
/**
* Mark the current message as ham.
*
* @param {Object} e - event object
*/
mark_as_ham: function(e) {
if (this.options.check_learning_rcpt) {
var $link = get_target(e, "a");
var selection = get_parameter_by_name($link.attr("href"), "rcpt") +
" " + $link.attr("data-mail-id");
this.show_select_rcpt_form(e, "ham", [selection]);
} else {
this._send_action(e, gettext("Mark as non-spam?"));
}
},
show_rawheaders: function($mailcontent) {
$mailcontent.find("#rawheaders").removeClass("hidden");
$mailcontent.find("#emailheaders").addClass("hidden");
@@ -320,15 +437,13 @@ Quarantine.prototype = {
},
activate_buttons: function($tr) {
$("a[name=release-multi]").removeClass('disabled');
$("a[name=delete-multi]").removeClass('disabled');
$("a[name*=-multi]").removeClass('disabled');
$("#selectall").prop('checked', true);
},
deactivate_buttons: function($tr) {
if (!this.htmltable || !this.htmltable.current_selection().length) {
$("a[name=release-multi]").addClass('disabled');
$("a[name=delete-multi]").addClass('disabled');
$("a[name*=-multi]").addClass('disabled');
$("#selectall").prop('checked', false);
}
},
@@ -361,12 +476,13 @@ Quarantine.prototype = {
},
action_cb: function(data) {
if (data.status == "ok") {
this.navobj.parse_string(data.url, true).update(true);
$("body").notify("success", data.respmsg, 2000);
} else {
$("body").notify("error", data.respmsg);
if (data.reload) {
this.navobj.update(true);
}
if (data.url) {
this.navobj.parse_string(data.url, true).update(true);
}
$("body").notify("success", data.message, 2000);
}
};
@@ -1,4 +1,5 @@
{% load amavis_tags %}
{% load static %}
{% for email in email_list %}
<tr id="{{ email.mailid }}">
@@ -9,7 +10,13 @@
{{ email.type|msgtype_to_html }}
</td>
<td width="25px" name="rstatus">
{% if email.img_rstatus %}<img src="{{ email.img_rstatus }}" />{% endif %}
{% if email.status == 'R' %}
<img src="{% static 'pics/release.png' %}" />
{% else if email.status == 'S' %}
<span class="fa fa-thumbs-ip"></span>
{% else if email.status == 'H' %}
<span class="fa fa-thumbs-down"></span>
{% endif %}
</td>
<td class="openable {{ email.class }}" name="score">{{ email.score }}</td>
<td class="openable {{ email.class }}" name="to">{{ email.to }}</td>
@@ -22,6 +22,8 @@ $(document).ready(function() {
deflocation: "listing/?sort_order=-date&reset_page=true",
defcallback: "listing_cb",
load_page_url: "{% url 'amavis:mail_page' %}"
check_learning_rcpt: {{ check_learning_rcpt }},
learning_recipient_url: "{% url 'amavis:learning_recipient_set' %}"
});
});
</script>
@@ -29,8 +31,7 @@ $(document).ready(function() {
{% block container_content %}
<div id="menubar">
{% quar_menu %}
{% quar_menu user %}
</div>
<div id="listing"></div>
{% endblock %}
@@ -8,6 +8,7 @@
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
{% if manual_learning %}<li><a name="selectmsgs" href="C">{% trans "Clean" %}</a></li>{% endif %}
<li><a name="selectmsgs" href="S">{% trans "Spam" %}</a></li>
<li><a name="selectmsgs" href="V">{% trans "Virus" %}</a></li>
<li><a name="selectmsgs" href="H">{% trans "Bad Header" %}</a></li>
@@ -25,7 +26,19 @@
<a name="delete-multi" href="{% url 'amavis:mail_process' %}" class="btn btn-danger disabled">
<span class="fa fa-trash"></span> {% trans 'Delete' %}
</a>
</div>
</div>
{% if manual_learning %}
<div class="btn-group" title="{% trans 'Manual learning' %}">
<button class="btn btn-default dropdown-toggle" data-toggle="dropdown">
<span class="fa fa-cog"></span> <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a name="mark-as-spam-multi" href="{% url 'amavis:mail_process' %}">{% trans "Mark as spam" %}</a></li>
<li><a name="mark-as-ham-multi" href="{% url 'amavis:mail_process' %}">{% trans "Mark as non-spam" %}</a></li>
</ul>
</div>
{% endif %}
</div>
<div class="col-xs-4">
@@ -40,6 +53,11 @@
<label class="btn btn-default active">
<input type="radio" name="msgtype_all" title="{% trans 'All messages' %}" checked> {% trans "All" %}
</label>
{% if manual_learning %}
<label class="btn btn-success">
<input type="radio" name="msgtype_C" title="{% trans 'Clean only' %}"> C
</label>
{% endif %}
<label class="btn btn-danger">
<input type="radio" name="msgtype_S" title="{% trans 'Spam only' %}"> S
</label>
@@ -1,15 +1,21 @@
"""
Amavis frontend template tags.
"""
from django import template
from django.core.urlresolvers import reverse
from django.template.loader import render_to_string
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext as _
from ..lib import manual_learning_enabled
register = template.Library()
@register.simple_tag
def viewm_menu(mail_id, rcpt):
def viewm_menu(user, mail_id, rcpt):
"""Menu displayed within the viewmail action."""
entries = [
{"name": "back",
"url": "javascript:history.go(-1);",
@@ -34,6 +40,30 @@ def viewm_menu(mail_id, rcpt):
"label": _("View full headers")},
]
if manual_learning_enabled(user):
entries.insert(2, {
"name": "process",
"img": "icon-cog",
"menu": [
{"name": "mark-as-spam",
"label": _("Mark as spam"),
"url": reverse(
"amavis:mail_mark_as_spam", args=[mail_id]
) + ("?rcpt=%s" % rcpt if rcpt else ""),
"extra_attributes": {
"data-mail-id": mail_id
}},
{"name": "mark-as-ham",
"label": _("Mark as non-spam"),
"url": reverse(
"amavis:mail_mark_as_ham", args=[mail_id]
) + ("?rcpt=%s" % rcpt if rcpt else ""),
"extra_attributes": {
"data-mail-id": mail_id
}}
]
})
menu = render_to_string('common/buttons_list.html',
{"entries": entries, "extraclasses": "pull-left"})
@@ -72,22 +102,28 @@ def viewm_menu_simple(user, mail_id, rcpt, secret_id=""):
@register.simple_tag
def quar_menu():
def quar_menu(user):
"""Render the quarantine listing menu.
:rtype: str
:return: resulting HTML
"""
extraopts = [{"name": "to", "label": _("To")}]
return render_to_string('amavis/main_action_bar.html', {
'extraopts': extraopts
return render_to_string("amavis/main_action_bar.html", {
"extraopts": extraopts,
"manual_learning": manual_learning_enabled(user)
})
@register.filter
def msgtype_to_html(msgtype):
"""Transform a message type to a bootstrap label."""
color = 'danger' if msgtype in ['S', 'V'] else 'warning'
if msgtype in ["S", "V"]:
color = 'danger'
elif msgtype == "C":
color = "success"
else:
color = "warning"
return mark_safe(
'<span class="label label-%s">%s</span>' % (color, msgtype)
)
+6
View File
@@ -12,6 +12,12 @@ urlpatterns = patterns(
url(r'^delete/(?P<mail_id>[\w\-\+]+)/$', 'delete', name="mail_delete"),
url(r'^release/(?P<mail_id>[\w\-\+]+)/$', 'release',
name="mail_release"),
url(r'^markspam/(?P<mail_id>[\w\-\+]+)/$', 'mark_as_spam',
name="mail_mark_as_spam"),
url(r'^markham/(?P<mail_id>[\w\-\+]+)/$', 'mark_as_ham',
name="mail_mark_as_ham"),
url(r'^learning_recipient/$', 'learning_recipient',
name="learning_recipient_set"),
url(r'^(?P<mail_id>[\w\-\+]+)/$', 'viewmail', name="mail_detail"),
url(r'^(?P<mail_id>[\w\-\+]+)/headers/$', 'viewheaders',
name="headers_detail"),
+159 -28
View File
@@ -4,6 +4,8 @@ Amavis quarantine views.
"""
import email
import chardet
from django.shortcuts import render
from django.http import HttpResponseRedirect, Http404
from django.template import Template, Context
@@ -15,13 +17,17 @@ from modoboa.lib import parameters
from modoboa.lib.exceptions import BadRequest
from modoboa.lib.paginator import Paginator
from modoboa.lib.webutils import (
getctx, ajax_response, render_to_json_response, _render_to_string
getctx, render_to_json_response, _render_to_string
)
from modoboa.extensions.admin.models import Mailbox, Domain
from modoboa.extensions.amavis.templatetags.amavis_tags import (
quar_menu, viewm_menu
)
from .lib import selfservice, AMrelease, QuarantineNavigationParameters
from .lib import (
selfservice, AMrelease, QuarantineNavigationParameters,
SpamassassinClient, manual_learning_enabled
)
from .forms import LearningRecipientForm
from .models import Msgrcpt
from .sql_connector import get_connector
from .sql_email import SQLemail
@@ -94,7 +100,7 @@ def _listing(request):
)
del context["rows"]
if request.session.get('location', 'listing') != 'listing':
context["menu"] = quar_menu()
context["menu"] = quar_menu(request.user)
request.session["location"] = "listingx"
return render_to_json_response(context)
@@ -102,8 +108,17 @@ def _listing(request):
@login_required
def index(request):
"""Default view."""
check_learning_rcpt = "false"
if parameters.get_admin("MANUAL_LEARNING") == "yes":
if request.user.group != "SimpleUsers":
user_level_learning = parameters.get_admin(
"USER_LEVEL_LEARNING") == "yes"
domain_level_learning = parameters.get_admin(
"DOMAIN_LEVEL_LEARNING") == "yes"
if user_level_learning or domain_level_learning:
check_learning_rcpt = "true"
return render(request, "amavis/index.html", dict(
selection="quarantine"
selection="quarantine", check_learning_rcpt=check_learning_rcpt
))
@@ -152,7 +167,7 @@ def viewmail(request, mail_id):
content = Template("""
<iframe src="{{ url }}" id="mailcontent"></iframe>
""").render(Context({"url": reverse("amavis:mailcontent_get", args=[mail_id])}))
menu = viewm_menu(mail_id, rcpt)
menu = viewm_menu(request.user, mail_id, rcpt)
ctx = getctx("ok", menu=menu, listing=content)
request.session['location'] = 'viewmail'
return render_to_json_response(ctx)
@@ -160,12 +175,20 @@ def viewmail(request, mail_id):
@login_required
def viewheaders(request, mail_id):
"""Display message headers."""
content = ""
for qm in get_connector().get_mail_content(mail_id):
content += qm.mail_text
msg = email.message_from_string(content)
headers = []
for name, value in msg.items():
if value:
result = chardet.detect(value)
if result["encoding"] is not None:
value = value.decode(result["encoding"])
headers += [(name, value)]
return render(request, 'amavis/viewheader.html', {
"headers": msg.items()
"headers": headers
})
@@ -178,6 +201,21 @@ def check_mail_id(request, mail_id):
return mail_id
def get_user_valid_addresses(user):
"""Retrieve all valid addresses of a user."""
if user.group == 'SimpleUsers':
valid_addresses = user.email
try:
mb = Mailbox.objects.get(user=user)
except Mailbox.DoesNotExist:
pass
else:
valid_addresses += mb.alias_addresses
else:
valid_addresses = None
return valid_addresses
def delete_selfservice(request, mail_id):
rcpt = request.GET.get("rcpt", None)
if rcpt is None:
@@ -197,21 +235,19 @@ def delete(request, mail_id):
"""
mail_id = check_mail_id(request, mail_id)
connector = get_connector()
mb = Mailbox.objects.get(user=request.user) \
if request.user.group == 'SimpleUsers' else None
valid_addresses = get_user_valid_addresses(request.user)
for mid in mail_id:
r, i = mid.split()
if mb is not None and r != mb.full_address \
and r not in mb.alias_addresses:
if valid_addresses is not None and r not in valid_addresses:
continue
connector.set_msgrcpt_status(r, i, 'D')
message = ungettext("%(count)d message deleted successfully",
"%(count)d messages deleted successfully",
len(mail_id)) % {"count": len(mail_id)}
return ajax_response(
request, respmsg=message,
url=QuarantineNavigationParameters(request).back_to_listing()
)
return render_to_json_response({
"message": message,
"url": QuarantineNavigationParameters(request).back_to_listing()
})
def release_selfservice(request, mail_id):
@@ -249,15 +285,14 @@ def release(request, mail_id):
mail_id = check_mail_id(request, mail_id)
msgrcpts = []
connector = get_connector()
mb = Mailbox.objects.get(user=request.user) \
if request.user.group == 'SimpleUsers' else None
valid_addresses = get_user_valid_addresses(request.user)
for mid in mail_id:
r, i = mid.split()
if mb is not None and r != mb.full_address \
and r not in mb.alias_addresses:
if valid_addresses is not None and r not in valid_addresses:
continue
msgrcpts += [connector.get_recipient_message(r, i)]
if mb is not None and parameters.get_admin("USER_CAN_RELEASE") == "no":
if request.user.group == "SimpleUsers" and \
parameters.get_admin("USER_CAN_RELEASE") == "no":
for msgrcpt in msgrcpts:
connector.set_msgrcpt_status(
msgrcpt.rid.email, msgrcpt.mail.mail_id, 'p'
@@ -265,10 +300,10 @@ def release(request, mail_id):
message = ungettext("%(count)d request sent",
"%(count)d requests sent",
len(mail_id)) % {"count": len(mail_id)}
return ajax_response(
request, "ok", respmsg=message,
url=QuarantineNavigationParameters(request).back_to_listing()
)
return render_to_json_response({
"message": message,
"url": QuarantineNavigationParameters(request).back_to_listing()
})
amr = AMrelease()
error = None
@@ -288,17 +323,107 @@ def release(request, mail_id):
len(mail_id)) % {"count": len(mail_id)}
else:
message = error
return ajax_response(
request, "ko" if error else "ok", respmsg=message,
url=QuarantineNavigationParameters(request).back_to_listing()
)
status = 400 if error else 200
return render_to_json_response({
"message": message,
"url": QuarantineNavigationParameters(request).back_to_listing()
}, status=status)
def mark_messages(request, selection, mtype, recipient_db=None):
"""Mark a selection of messages as spam.
:param str selection: message unique identifier
:param str mtype: type of marking (spam or ham)
"""
if not manual_learning_enabled(request.user):
return render_to_json_response({"status": "ok"})
if recipient_db is None:
recipient_db = (
"user" if request.user.group == "SimpleUsers" else "global"
)
selection = check_mail_id(request, selection)
connector = get_connector()
saclient = SpamassassinClient(request.user, recipient_db)
for item in selection:
rcpt, mail_id = item.split()
content = "".join(
[msg.mail_text for msg in connector.get_mail_content(mail_id)]
)
result = saclient.learn_spam(rcpt, content) if mtype == "spam" \
else saclient.learn_ham(rcpt, content)
if not result:
break
connector.set_msgrcpt_status(rcpt, mail_id, mtype[0].upper())
if saclient.error is None:
saclient.done()
message = ungettext("%(count)d message processed successfully",
"%(count)d messages processed successfully",
len(selection)) % {"count": len(selection)}
else:
message = saclient.error
status = 400 if saclient.error else 200
return render_to_json_response({
"message": message, "reload": True
}, status=status)
@login_required
def learning_recipient(request):
"""A view to select the recipient database of a learning action."""
if request.method == "POST":
form = LearningRecipientForm(request.user, request.POST)
if form.is_valid():
return mark_messages(
request,
form.cleaned_data["selection"].split(","),
form.cleaned_data["ltype"],
form.cleaned_data["recipient"]
)
return render_to_json_response(
{"form_errors": form.errors}, status=400
)
ltype = request.GET.get("type", None)
selection = request.GET.get("selection", None)
if ltype is None or selection is None:
raise BadRequest
form = LearningRecipientForm(request.user)
form.fields["ltype"].initial = ltype
form.fields["selection"].initial = selection
return render(request, "common/generic_modal_form.html", {
"title": _("Select a database"),
"formid": "learning_recipient_form",
"action": reverse("modoboa.extensions.amavis.views.learning_recipient"),
"action_classes": "submit",
"action_label": _("Validate"),
"form": form
})
@login_required
def mark_as_spam(request, mail_id):
"""Mark a single message as spam."""
return mark_messages(request, mail_id, "spam")
@login_required
def mark_as_ham(request, mail_id):
"""Mark a single message as ham."""
return mark_messages(request, mail_id, "ham")
@login_required
def process(request):
"""Process a selection of messages.
The request must specify an action to execute against the
selection.
"""
action = request.POST.get("action", None)
ids = request.POST.get("selection", "")
ids = ids.split(",")
if not len(ids):
if not ids or action is None:
return HttpResponseRedirect(reverse("amavis:index"))
if request.POST["action"] == "release":
@@ -306,3 +431,9 @@ def process(request):
if request.POST["action"] == "delete":
return delete(request, ids)
if request.POST["action"] == "mark_as_spam":
return mark_messages(request, ids, "spam")
if request.POST["action"] == "mark_as_ham":
return mark_messages(request, ids, "ham")
@@ -7,24 +7,27 @@ from modoboa.extensions.amavis.lib import (
@events.observe("RelayDomainCreated")
def on_relay_domain_created(user, rdomain):
create_user_and_policy(rdomain.name)
create_user_and_policy("@{0}".format(rdomain.name))
@events.observe("RelayDomainModified")
def on_relay_domain_modified(rdomain):
update_user_and_policy(rdomain.oldname, rdomain.name)
update_user_and_policy(
"@{0}".format(rdomain.oldname), "@{0}".format(rdomain.name)
)
@events.observe("RelayDomainDeleted")
def on_relay_domain_deleted(rdomain):
delete_user_and_policy(rdomain.name)
delete_user_and_policy("@{0}".format(rdomain.name))
@events.observe("RelayDomainAliasCreated")
def on_relay_domain_alias_created(user, rdomainalias):
create_user_and_use_policy(rdomainalias.name, rdomainalias.target.name)
create_user_and_use_policy(
"@{0}".format(rdomainalias.name), rdomainalias.target.name)
@events.observe("RelayDomainAliasDeleted")
def on_relay_domain_alias_deleted(rdomainalias):
delete_user(rdomainalias.name)
delete_user("@{0}".format(rdomainalias.name))
@@ -24,13 +24,15 @@ import re
import rrdtool
import string
from optparse import make_option
from django import db
from django.core.management.base import BaseCommand
from modoboa.lib import parameters
from modoboa.core.extensions import exts_pool
from modoboa.extensions.admin.models import Domain
from modoboa.extensions.stats import Stats
from modoboa.extensions.stats.lib import date_to_timestamp
from modoboa.lib import parameters
rrdstep = 60
xpoints = 540
@@ -63,9 +65,7 @@ class LogParser(object):
self.data = {}
self.domains = []
for dom in Domain.objects.all():
self.domains += [str(dom.name)]
self.data[str(dom.name)] = {}
self._load_domain_list()
self.data["global"] = {}
self.workdict = {}
@@ -83,6 +83,24 @@ class LogParser(object):
self._prev_ho = -1
self.cur_t = 0
def _load_domain_list(self):
"""Load the list of allowed domains.
Since the relay domains feature is an extension of the admin
panel, we don't use an event to get the list of all supported
domains...
"""
for dom in Domain.objects.all():
self.domains += [str(dom.name)]
self.data[str(dom.name)] = {}
if not exts_pool.is_extension_enabled("postfix_relay_domains"):
return
from modoboa.extensions.postfix_relay_domains.models import RelayDomain
for rdom in RelayDomain.objects.all():
self.domains += [str(rdom.name)]
self.data[str(rdom.name)] = {}
def _dprint(self, msg):
"""Print a debug message if required.
@@ -18,7 +18,7 @@
$(document).ready(function() {
var stats = new Stats({
graphurl: "{% url 'stats:graph_list' %}",
domain_list_url: "{% url 'admin:domain_flat_list' %}",
domain_list_url: "{% url 'stats:domain_list' %}",
deflocation: "{{ deflocation|safe }}",
language: "{{ LANGUAGE_CODE }}"
});
+1
View File
@@ -6,4 +6,5 @@ urlpatterns = patterns(
url(r'^$', 'index', name='fullindex'),
url(r'^graphs/$', "graphs", name="graph_list"),
url(r'^domains/$', "get_domain_list", name="domain_list"),
)
+53 -16
View File
@@ -6,6 +6,8 @@ from django.utils.translation import ugettext as _
from django.contrib.auth.decorators import (
login_required, user_passes_test, permission_required
)
from modoboa.core.extensions import exts_pool
from modoboa.lib import events
from modoboa.lib.exceptions import BadRequest, PermDeniedException, NotFound
from modoboa.lib.webutils import (
@@ -44,6 +46,38 @@ def index(request):
})
def check_domain_access(user, pattern):
"""Check if an administrator can access a domain/relay domain.
If a non super administrator asks for the global view, we give him
a view on the first domain he manage instead.
:return: a domain name (str) or None.
"""
targets = [Domain]
if exts_pool.is_extension_enabled("postfix_relay_domains"):
from modoboa.extensions.postfix_relay_domains.models import RelayDomain
targets.append(RelayDomain)
if pattern in [None, "global"]:
if not user.is_superuser:
for target in targets:
if not target.objects.get_for_admin(user).count():
continue
return target.objects.get_for_admin(user)[0].name
return None
return "global"
for target in targets:
results = target.objects.filter(name__startswith=pattern)
if results.count() != 1:
continue
if not user.can_access(results[0]):
raise PermDeniedException
return results[0].name
return None
@login_required
@user_passes_test(lambda u: u.group != "SimpleUsers")
def graphs(request):
@@ -54,22 +88,11 @@ def graphs(request):
searchq = request.GET.get("searchquery", None)
period = request.GET.get("period", "day")
tplvars = dict(graphs={}, period=period)
if searchq in [None, "global"]:
if not request.user.is_superuser:
if not Domain.objects.get_for_admin(request.user).count():
return render_to_json_response({})
tplvars.update(
domain=Domain.objects.get_for_admin(request.user)[0].name
)
else:
tplvars.update(domain="global")
else:
domain = Domain.objects.filter(name__contains=searchq)
if domain.count() != 1:
return render_to_json_response({})
if not request.user.can_access(domain[0]):
raise PermDeniedException
tplvars.update(domain=domain[0].name)
domain = check_domain_access(request.user, searchq)
if domain is None:
return render_to_json_response({})
tplvars["domain"] = domain
if period == "custom":
if not "start" in request.GET or not "end" in request.GET:
raise BadRequest(_("Bad custom period"))
@@ -90,3 +113,17 @@ def graphs(request):
tplvars["end"] = end
return render_to_json_response(tplvars)
@login_required
@user_passes_test(lambda u: u.group != "SimpleUsers")
def get_domain_list(request):
"""Get the list of domains (and relay domains) the user can see."""
doms = [dom.name for dom in Domain.objects.get_for_admin(request.user)]
if exts_pool.is_extension_enabled("postfix_relay_domains"):
from modoboa.extensions.postfix_relay_domains.models import RelayDomain
doms += [
rdom.name for rdom in
RelayDomain.objects.get_for_admin(request.user)
]
return render_to_json_response(doms)
+6 -2
View File
@@ -68,9 +68,13 @@ class Email(object):
"""
fname = msg.get_filename()
if fname is not None:
if type(fname) is unicode:
fname = fname.encode("utf-8")
decoded = decode_header(fname)
value = decoded[0][1] is None and decoded[0][0] \
or unicode(decoded[0][0], decoded[0][1])
value = (
decoded[0][0] if decoded[0][1] is None
else unicode(decoded[0][0], decoded[0][1])
)
else:
value = "part_%s" % level
self.attachments[level] = value
+13 -7
View File
@@ -9,7 +9,7 @@ import inspect
import re
def exec_cmd(cmd, sudo_user=None, capture_output=True, **kwargs):
def exec_cmd(cmd, sudo_user=None, pinput=None, capture_output=True, **kwargs):
"""Execute a shell command.
Run a command using the current user. Set :keyword:`sudo_user` if
@@ -17,20 +17,26 @@ def exec_cmd(cmd, sudo_user=None, capture_output=True, **kwargs):
:param str cmd: the command to execute
:param str sudo_user: a valid system username
:param str pinput: data to send to process's stdin
:param bool capture_output: capture process output or not
:rtype: tuple
:return: return code, command output
"""
if sudo_user is not None:
cmd = "sudo -u %s %s" % (sudo_user, cmd)
kwargs["shell"] = True
if pinput is not None:
kwargs["stdin"] = subprocess.PIPE
if capture_output:
kwargs.update(stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
p = subprocess.Popen(cmd, **kwargs)
output = p.communicate()[0]
return p.returncode, output
p = subprocess.Popen(cmd, **kwargs)
p.wait()
return p.returncode, None
process = subprocess.Popen(cmd, **kwargs)
if pinput or capture_output:
c_args = [pinput] if pinput is not None else []
output = process.communicate(*c_args)[0]
else:
output = None
process.wait()
return process.returncode, output
def guess_extension_name():
+2
View File
@@ -91,6 +91,8 @@ class ImgColumn(Column):
return ""
def render(self, value):
if getattr(self, "bootstrap", False) and value.startswith("icon"):
return "<i class='%s'></i>" % value
if type(value) in [list, tuple]:
return "".join(["<img src='%s' />" % i for i in value])
return "<img src='%s' />" % value
+3 -1
View File
@@ -40,7 +40,9 @@ def render_link(linkdef, mdclass=""):
{% if link.modalcb %}modalcb="{{ link.modalcb }}"{% endif %}
{% if link.closecb %}closecb="{{ link.closecb }}"{% endif %}
class="{{ mdclass }}{% if link.class %} {{ link.class }}{% endif %}"
{% if link.confirm %} onclick="return confirm('{{ link.confirm }}')"{% endif %}>
{% if link.confirm %} onclick="return confirm('{{ link.confirm }}')"{% endif %}
{% for attr, value in link.extra_attributes.items %} {{ attr }}="{{ value }}"{% endfor %}
>
{% if link.img %}<i class="{{ link.img }}"></i>{% endif %}
{{ link.label }}</a>""")
return t.render(Context(dict(link=linkdef, mdclass=mdclass)))
+257 -133
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: modoboa-1.0.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-08-24 12:29+0200\n"
"POT-Creation-Date: 2014-11-04 11:51+0100\n"
"PO-Revision-Date: 2013-09-29 22:08+0100\n"
"Last-Translator: Miroslav Abrahám <miris@kunago.com>\n"
"Language-Team: CS <miris@kunago.com>\n"
@@ -19,8 +19,8 @@ msgstr ""
"X-Generator: Poedit 1.5.7\n"
#: core/__init__.py:52 core/__init__.py:53
#: extensions/admin/forms/account.py:326 extensions/admin/forms/domain.py:256
#: extensions/admin/views/domain.py:97 extensions/admin/views/identity.py:129
#: extensions/admin/forms/account.py:327 extensions/admin/forms/domain.py:248
#: extensions/admin/views/domain.py:97 extensions/admin/views/identity.py:133
#: extensions/postfix_autoreply/app_settings.py:11
#: extensions/postfix_relay_domains/forms.py:138
#: extensions/sievefilters/app_settings.py:50
@@ -290,8 +290,8 @@ msgstr "Neplatný požadavek"
msgid "This field is required"
msgstr "Toto pole je vyžadováno"
#: core/app_settings.py:349 extensions/amavis/app_settings.py:87
#: extensions/amavis/templates/amavis/main_action_bar.html:29
#: core/app_settings.py:349 extensions/amavis/app_settings.py:157
#: extensions/amavis/templates/amavis/main_action_bar.html:41
#: extensions/webmail/app_settings.py:73
msgid "Display"
msgstr "Zobrazení"
@@ -347,36 +347,36 @@ msgstr "Poslední přihlášení"
msgid "You can't delete your own account"
msgstr "Nemůžete smazat vlastní účet"
#: core/models.py:117
#: core/models.py:130
msgid "Failed to update password: LDAP module not installed"
msgstr "Nebylo možné změnit heslo: LDAP modul není instalován"
#: core/models.py:170
#: core/models.py:183
msgid "account"
msgstr "účet"
#: core/models.py:321 extensions/admin/models/domain.py:144
#: core/models.py:334 extensions/admin/models/domain.py:144
#: extensions/admin/models/domain_alias.py:39
#: extensions/postfix_relay_domains/models.py:134
#: extensions/postfix_relay_domains/models.py:190
msgid "Invalid line"
msgstr "Neplatný řádek"
#: core/models.py:325
#: core/models.py:338
msgid "You can't import an account with a role greater than yours"
msgstr "Nemůžete importvat účet s vyšším oprávněním, než máte vy sám"
#: core/models.py:337
#: core/models.py:350
#, python-format
msgid "The simple user '%s' must have a valid email address"
msgstr "Uživatel '%s' musí mít nastavenou platnou emailovou adresu"
#: core/models.py:341
#: core/models.py:354
#, python-format
msgid "username and email fields must not differ for '%s'"
msgstr "pole uživatelského jména a emailu se nesmí pro '%s' lišit"
#: core/models.py:410 extensions/admin/models/alias.py:35
#: core/models.py:423 extensions/admin/models/alias.py:35
#: extensions/admin/models/domain.py:32
#: extensions/admin/models/domain_alias.py:17
#: extensions/postfix_autoreply/models.py:28
@@ -385,29 +385,29 @@ msgstr "pole uživatelského jména a emailu se nesmí pro '%s' lišit"
msgid "enabled"
msgstr "povoleno"
#: core/models.py:411
#: core/models.py:424
msgid "Check to enable this extension"
msgstr "Zatrhněte pole pro povolení tohoto rozšíření"
#: core/models.py:491
#: core/models.py:504
msgid "added"
msgstr "přidáno"
#: core/models.py:494
#: core/models.py:507
msgid "modified"
msgstr "upraveno"
#: core/models.py:496 core/models.py:521
#: core/models.py:509 core/models.py:534
#, python-format
msgid "%(object)s '%(name)s' %(action)s by user %(user)s"
msgstr "%(object)s '%(name)s' %(action)s uživatelem %(user)s"
#: core/models.py:523
#: core/models.py:536
msgid "deleted"
msgstr "smazáno"
#: core/tables.py:8 core/templates/core/information.html:8
#: extensions/admin/tables.py:9 extensions/admin/forms/domain.py:187
#: extensions/admin/tables.py:9 extensions/admin/forms/domain.py:179
#: extensions/admin/templates/admin/domains_table.html:5
#: extensions/admin/templates/admin/editdomainform.html:13
#: extensions/admin/templates/admin/identities_table.html:5
@@ -523,7 +523,7 @@ msgstr "Aktualizovat osobní informace"
#: core/templates/core/user_profile.html:8
#: extensions/admin/templates/admin/forward.html:8
#: extensions/admin/views/alias.py:112 extensions/admin/views/domain.py:168
#: extensions/admin/views/identity.py:200
#: extensions/admin/views/identity.py:204
#: extensions/postfix_autoreply/templates/postfix_autoreply/autoreply.html:9
#: extensions/postfix_relay_domains/views.py:66
#: extensions/sievefilters/views.py:166 extensions/webmail/views.py:172
@@ -652,7 +652,7 @@ msgstr "Přeposlat"
msgid "Account import failed (%s): domain does not exist"
msgstr "Import účtu nebyl úspěšný (%s): doména neexistuje"
#: extensions/admin/__init__.py:172 extensions/admin/forms/account.py:196
#: extensions/admin/__init__.py:172 extensions/admin/forms/account.py:197
#, python-format
msgid "Mailbox %s already exists"
msgstr "Schránka %s již existuje"
@@ -662,6 +662,13 @@ msgstr "Schránka %s již existuje"
msgid "Account import failed (%s): wrong quota value"
msgstr "Import účtu nebyl úspěšný (%s): doména neexistuje"
#: extensions/admin/__init__.py:212 extensions/admin/forms/domain.py:75
#: extensions/postfix_relay_domains/forms.py:50
#: extensions/postfix_relay_domains/forms.py:70
#, fuzzy
msgid "domain alias"
msgstr "Doménové aliasy"
#: extensions/admin/app_settings.py:13
#: extensions/admin/templates/admin/editdomainform.html:25
#: extensions/limits/app_settings.py:31 extensions/limits/models.py:23
@@ -710,7 +717,7 @@ msgid "When a mailbox is removed, also remove the associated account"
msgstr "Když je schránka odstraněná, odstranit také přiřazený účet uživatele"
#: extensions/admin/app_settings.py:81 extensions/admin/forms/account.py:178
#: extensions/admin/forms/domain.py:56
#: extensions/admin/forms/domain.py:57
msgid "Must be a positive integer"
msgstr ""
@@ -758,7 +765,7 @@ msgstr "Nemůžete zakázat váš vlastní účet"
msgid "E-mail"
msgstr "E-mail"
#: extensions/admin/forms/account.py:113 extensions/admin/forms/domain.py:17
#: extensions/admin/forms/account.py:113 extensions/admin/forms/domain.py:18
msgid "Quota"
msgstr "Kvóta"
@@ -772,7 +779,7 @@ msgstr ""
"hodnotu domény. Ponechejte prázdné pro neomezenou kvótu (není povoleno "
"správcům domény)."
#: extensions/admin/forms/account.py:123 extensions/admin/forms/domain.py:26
#: extensions/admin/forms/account.py:123 extensions/admin/forms/domain.py:27
#: extensions/admin/templates/admin/domains_table.html:6
#: extensions/postfix_relay_domains/forms.py:12
msgid "Alias(es)"
@@ -788,25 +795,25 @@ msgstr ""
"pro vložení dalšího aliasu. Pro vytvoření doménového koše vložte '*' (např. "
"*@domena.cz)."
#: extensions/admin/forms/account.py:187 extensions/admin/forms/account.py:217
#: extensions/admin/forms/account.py:188 extensions/admin/forms/account.py:218
#: extensions/admin/forms/alias.py:65
msgid "Domain does not exist"
msgstr "Doména neexistuje"
#: extensions/admin/forms/account.py:284
#: extensions/admin/forms/account.py:285
msgid "Domain(s)"
msgstr "Doména(y)"
#: extensions/admin/forms/account.py:286
#: extensions/admin/forms/account.py:287
msgid "Domain(s) that user administrates"
msgstr "Doména(y) pod správou uživatele"
#: extensions/admin/forms/account.py:328
#: extensions/admin/views/identity.py:132
#: extensions/admin/forms/account.py:329
#: extensions/admin/views/identity.py:136
msgid "Mail"
msgstr "Mail"
#: extensions/admin/forms/account.py:330
#: extensions/admin/forms/account.py:331
msgid "Permissions"
msgstr "Oprávnění"
@@ -857,14 +864,14 @@ msgstr "Příjemce %s je již vložen"
msgid "No recipient defined"
msgstr "Nebyl určen příjemce"
#: extensions/admin/forms/domain.py:20
#: extensions/admin/forms/domain.py:21
#, fuzzy
msgid ""
"Default quota in MB applied to mailboxes. Leave empty to use the default "
"value."
msgstr "Výchozí kvóta schránek v MB"
#: extensions/admin/forms/domain.py:29
#: extensions/admin/forms/domain.py:30
msgid ""
"Alias(es) of this domain. Indicate only one name per input, press ENTER to "
"add a new input."
@@ -872,55 +879,48 @@ msgstr ""
"Alias(y) této domény. Uveďte na řádek pouze jeden alias; pro vložení dalšího "
"aliasu stiskněte po vložení ENTER."
#: extensions/admin/forms/domain.py:75
#: extensions/postfix_relay_domains/forms.py:50
#: extensions/postfix_relay_domains/forms.py:70
#, fuzzy
msgid "domain alias"
msgstr "Doménové aliasy"
#: extensions/admin/forms/domain.py:82 extensions/admin/forms/domain.py:98
#: extensions/admin/forms/domain.py:78 extensions/admin/forms/domain.py:92
#: extensions/postfix_relay_domains/forms.py:58
#: extensions/postfix_relay_domains/forms.py:78
#, fuzzy, python-format
msgid "A %s with this name already exists"
msgstr "Alias s tímto názvem již existuje"
#: extensions/admin/forms/domain.py:92
#: extensions/admin/forms/domain.py:89
#: extensions/postfix_relay_domains/forms.py:49
#: extensions/postfix_relay_domains/forms.py:71
#, fuzzy
msgid "domain"
msgstr "Domény"
#: extensions/admin/forms/domain.py:181
#: extensions/admin/forms/domain.py:173
msgid "Create a domain administrator"
msgstr "Vytvořit správce domény"
#: extensions/admin/forms/domain.py:183
#: extensions/admin/forms/domain.py:175
msgid "Automatically create an administrator for this domain"
msgstr "Automaticky vytvořit správce této domény"
#: extensions/admin/forms/domain.py:190
#: extensions/admin/forms/domain.py:182
msgid ""
"The administrator's name. Don't include the domain's name here, it will be "
"automatically appended."
msgstr ""
"Jméno správce. Nevkládejte sem název domény, název bude automaticky doplněn."
#: extensions/admin/forms/domain.py:198
#: extensions/admin/forms/domain.py:190
msgid "Create aliases"
msgstr "Vytvořit aliasy"
#: extensions/admin/forms/domain.py:200
#: extensions/admin/forms/domain.py:192
msgid "Automatically create standard aliases for this domain"
msgstr "Automaticky vytvořit běžné aliasy pro tuto doménu"
#: extensions/admin/forms/domain.py:216
#: extensions/admin/forms/domain.py:208
msgid "Invalid format"
msgstr "Neplatný formát"
#: extensions/admin/forms/domain.py:230
#: extensions/admin/forms/domain.py:222
#, python-format
msgid "User '%s' already exists"
msgstr "Uživatel '%s' již existuje"
@@ -957,7 +957,7 @@ msgstr ""
"Nemůžete nastavit přeposílání na místní adresu. Požádejte správce o "
"vytvoření aliasu."
#: extensions/admin/forms/import_.py:6 extensions/webmail/forms.py:198
#: extensions/admin/forms/import_.py:6 extensions/webmail/forms.py:200
msgid "Select a file"
msgstr "Vybrat soubor"
@@ -977,7 +977,7 @@ msgstr "Zašifrovat hesla"
msgid "Check this option if passwords contained in your file are not crypted"
msgstr "Zatrhněte toto pole, pokud hesla ve vašem souboru nejsou zašifrována"
#: extensions/admin/models/alias.py:18 extensions/admin/models/mailbox.py:62
#: extensions/admin/models/alias.py:18 extensions/admin/models/mailbox.py:74
msgid "address"
msgstr "adresa"
@@ -1076,21 +1076,21 @@ msgstr "Doména, na kterou tento alias odkazuje"
msgid "Unknown domain %s"
msgstr "Neznámá doména %s"
#: extensions/admin/models/mailbox.py:63
#: extensions/admin/models/mailbox.py:75
msgid "Mailbox address (without the @domain.tld part)"
msgstr "Adresa schránky (bez části @doména.tld)"
#: extensions/admin/models/mailbox.py:125
#: extensions/admin/models/mailbox.py:136
#, python-format
msgid "Failed to retrieve mailbox location (%s)"
msgstr "Nebylo možné zjistit umístění schránky (%s)"
#: extensions/admin/models/mailbox.py:194
#: extensions/admin/models/mailbox.py:221
#, python-format
msgid "Quota is greater than the allowed domain's limit (%dM)"
msgstr "Zvolená kvóta je větší než povolené omezení domény (%dM)"
#: extensions/admin/models/mailbox.py:199
#: extensions/admin/models/mailbox.py:227
msgid "A quota is required"
msgstr "Kvóta je vyžadována"
@@ -1163,7 +1163,7 @@ msgid "Importing..."
msgstr "Importuji..."
#: extensions/admin/templates/admin/listing.html:14
#: extensions/stats/templates/stats/index.html:28
#: extensions/stats/templates/stats/index.html:23
msgid "Filter"
msgstr "Filtr"
@@ -1265,8 +1265,8 @@ msgid "Alias with this name already exists"
msgstr "Alias s tímto názvem již existuje"
#: extensions/admin/views/alias.py:50 extensions/admin/views/domain.py:102
#: extensions/admin/views/domain.py:131 extensions/admin/views/identity.py:133
#: extensions/admin/views/identity.py:160
#: extensions/admin/views/domain.py:131 extensions/admin/views/identity.py:137
#: extensions/admin/views/identity.py:164
#: extensions/postfix_relay_domains/views.py:34
#: extensions/sievefilters/views.py:144 extensions/sievefilters/views.py:233
#: extensions/webmail/views.py:153
@@ -1309,7 +1309,7 @@ msgstr "Přeposílání upraveno"
msgid "Alias modified"
msgstr "Alias upraven"
#: extensions/admin/views/domain.py:98 extensions/admin/views/identity.py:130
#: extensions/admin/views/domain.py:98 extensions/admin/views/identity.py:134
msgid "Next"
msgstr "Další"
@@ -1317,7 +1317,7 @@ msgstr "Další"
msgid "Options"
msgstr "Možnosti"
#: extensions/admin/views/domain.py:103 extensions/admin/views/identity.py:134
#: extensions/admin/views/domain.py:103 extensions/admin/views/identity.py:138
msgid "Previous"
msgstr "Předchozí"
@@ -1352,11 +1352,11 @@ msgstr "Exportovat identity"
msgid "Export domains"
msgstr "Exportovat domény"
#: extensions/admin/views/identity.py:104
#: extensions/admin/views/identity.py:227
#: extensions/admin/views/identity.py:232 extensions/amavis/views.py:144
#: extensions/amavis/views.py:148 extensions/amavis/views.py:181
#: extensions/amavis/views.py:186 extensions/amavis/views.py:188
#: extensions/admin/views/identity.py:108
#: extensions/admin/views/identity.py:231
#: extensions/admin/views/identity.py:236 extensions/amavis/views.py:172
#: extensions/amavis/views.py:176 extensions/amavis/views.py:207
#: extensions/amavis/views.py:212 extensions/amavis/views.py:214
#: extensions/webmail/views.py:49 extensions/webmail/views.py:67
#: extensions/webmail/views.py:81 extensions/webmail/views.py:99
#: extensions/webmail/views.py:116 extensions/webmail/views.py:202
@@ -1367,19 +1367,19 @@ msgstr "Exportovat domény"
msgid "Invalid request"
msgstr "Neplatný požadavek"
#: extensions/admin/views/identity.py:151
#: extensions/admin/views/identity.py:155
msgid "Account created"
msgstr "Účet vytvořen"
#: extensions/admin/views/identity.py:157
#: extensions/admin/views/identity.py:161
msgid "New account"
msgstr "Nový účet"
#: extensions/admin/views/identity.py:193
#: extensions/admin/views/identity.py:197
msgid "Account updated"
msgstr "Účet aktualizován"
#: extensions/admin/views/identity.py:217
#: extensions/admin/views/identity.py:221
msgid "Account deleted"
msgid_plural "Accounts deleted"
msgstr[0] "Účet smazán"
@@ -1465,126 +1465,213 @@ msgstr "Přeposílání aktualizováno"
msgid "Simple amavis management frontend"
msgstr "Jednoduché rozhraní pro správu amavis"
#: extensions/amavis/__init__.py:52 extensions/amavis/general_callbacks.py:18
#: extensions/amavis/__init__.py:52 extensions/amavis/general_callbacks.py:20
msgid "Quarantine"
msgstr "Karanténa"
#: extensions/amavis/app_settings.py:11
#: extensions/amavis/app_settings.py:14
msgid "Quarantine settings"
msgstr "Nastavení karantény"
#: extensions/amavis/app_settings.py:14
#: extensions/amavis/app_settings.py:17
msgid "Maximum message age"
msgstr "Maximální stáří zprávy"
#: extensions/amavis/app_settings.py:16
#: extensions/amavis/app_settings.py:19
msgid "Quarantine messages maximum age (in days) before deletion"
msgstr "Maximální doba karantény zpráv (ve dnech) před jejich smazáním"
#: extensions/amavis/app_settings.py:19
#: extensions/amavis/app_settings.py:22
msgid "Messages releasing"
msgstr "Odblokování zpráv"
#: extensions/amavis/app_settings.py:22
#: extensions/amavis/app_settings.py:25
msgid "Remove released messages"
msgstr "Odstranit odblokované zprávy"
#: extensions/amavis/app_settings.py:24
#: extensions/amavis/app_settings.py:27
msgid "Remove messages marked as released while cleaning up the database"
msgstr ""
"Odstranit zprávy, které jsou označeny jako odblokované, při čištění databáze"
#: extensions/amavis/app_settings.py:28
#: extensions/amavis/app_settings.py:32
msgid "Amavis connection mode"
msgstr "Režim připojení amavis"
#: extensions/amavis/app_settings.py:31
#: extensions/amavis/app_settings.py:35
msgid "Mode used to access the PDP server"
msgstr "Používaný režim pro přístup k PDP serveru"
#: extensions/amavis/app_settings.py:36
#: extensions/amavis/app_settings.py:40
msgid "PDP server address"
msgstr "adresa PDP serveru"
#: extensions/amavis/app_settings.py:38
#: extensions/amavis/app_settings.py:42
msgid "PDP server address (if inet mode)"
msgstr "adresa PDP serveru (v režimu inet)"
#: extensions/amavis/app_settings.py:42
#: extensions/amavis/app_settings.py:46
msgid "PDP server port"
msgstr "port PDP serveru"
#: extensions/amavis/app_settings.py:44
#: extensions/amavis/app_settings.py:48
msgid "PDP server port (if inet mode)"
msgstr "port PDP serveru (v režimu inet)"
#: extensions/amavis/app_settings.py:48
#: extensions/amavis/app_settings.py:52
msgid "PDP server socket"
msgstr "socket PDP serveru"
#: extensions/amavis/app_settings.py:50
#: extensions/amavis/app_settings.py:54
msgid "Path to the PDP server socket (if unix mode)"
msgstr "Cesta k socketu PDP serveru (v režimu unix)"
#: extensions/amavis/app_settings.py:54
#: extensions/amavis/app_settings.py:58
msgid "Check requests interval"
msgstr "Interval kontroly požadavků"
#: extensions/amavis/app_settings.py:56
#: extensions/amavis/app_settings.py:60
msgid "Interval between two release requests checks"
msgstr ""
"Časový interval mezi jednotlivými kontrolami na požadavky pro odblokování"
#: extensions/amavis/app_settings.py:60
#: extensions/amavis/app_settings.py:64
msgid "Allow direct release"
msgstr "Umožnit přímé odbokování"
#: extensions/amavis/app_settings.py:62
#: extensions/amavis/app_settings.py:66
msgid "Allow users to directly release their messages"
msgstr "Umožnit napřímo uživatelům doblokovat jejich zprávy"
#: extensions/amavis/app_settings.py:66
#: extensions/amavis/app_settings.py:70
msgid "Enable self-service mode"
msgstr "Povolit samoobslužný režim"
#: extensions/amavis/app_settings.py:68
#: extensions/amavis/app_settings.py:72
msgid "Activate the 'self-service' mode"
msgstr "Aktivovat samoobslužný režim"
#: extensions/amavis/app_settings.py:72
#: extensions/amavis/app_settings.py:76
msgid "Notifications sender"
msgstr "Odesílatel upozornění"
#: extensions/amavis/app_settings.py:74
#: extensions/amavis/app_settings.py:78
msgid "The e-mail address used to send notitications"
msgstr "E-mailová adresa používaná k zasílání upozornění"
#: extensions/amavis/app_settings.py:91 extensions/webmail/app_settings.py:91
#: extensions/amavis/app_settings.py:81
#: extensions/amavis/templates/amavis/main_action_bar.html:28
msgid "Manual learning"
msgstr ""
#: extensions/amavis/app_settings.py:84
msgid "Enable manual learning"
msgstr ""
#: extensions/amavis/app_settings.py:87
msgid "Allow super administrators to manually train Spamassassin"
msgstr ""
#: extensions/amavis/app_settings.py:92
msgid "Is Spamassassin local?"
msgstr ""
#: extensions/amavis/app_settings.py:95
msgid "Tell if Spamassassin is running on the same server than modoboa"
msgstr ""
#: extensions/amavis/app_settings.py:100
#, fuzzy
msgid "Default user"
msgstr "Výchozí editor"
#: extensions/amavis/app_settings.py:103
msgid "Name of the user owning the default bayesian database"
msgstr ""
#: extensions/amavis/app_settings.py:108
#, fuzzy
msgid "Spamd address"
msgstr "Z adresy"
#: extensions/amavis/app_settings.py:110
msgid "The IP address where spamd can be reached"
msgstr ""
#: extensions/amavis/app_settings.py:114
#, fuzzy
msgid "Spamd port"
msgstr "Spam"
#: extensions/amavis/app_settings.py:116
msgid "The TCP port spamd is listening on"
msgstr ""
#: extensions/amavis/app_settings.py:120
msgid "Enable per-domain manual learning"
msgstr ""
#: extensions/amavis/app_settings.py:123
msgid ""
"Allow domain administrators to train Spamassassin (within dedicated per-"
"domain databases)"
msgstr ""
#: extensions/amavis/app_settings.py:129
msgid "Enable per-user manual learning"
msgstr ""
#: extensions/amavis/app_settings.py:132
msgid ""
"Allow simple users to personally train Spamassassin (within a dedicated "
"database)"
msgstr ""
#: extensions/amavis/app_settings.py:161 extensions/webmail/app_settings.py:91
msgid "Number of displayed emails per page"
msgstr "Počet zobrazených zpráv na stránce"
#: extensions/amavis/app_settings.py:92
#: extensions/amavis/app_settings.py:162
msgid "Set the maximum number of messages displayed in a page"
msgstr "Nastavit maximální počet zobrazených zpráv na stránce"
#: extensions/amavis/general_callbacks.py:82
#: extensions/amavis/forms.py:83
msgid "Global database"
msgstr ""
#: extensions/amavis/forms.py:89
#, fuzzy
msgid "Domain's database"
msgstr "Doménové aliasy"
#: extensions/amavis/forms.py:91
#, fuzzy
msgid "User's database"
msgstr "Základna struktury"
#: extensions/amavis/general_callbacks.py:136
msgid "pending requests"
msgstr "nevyřízené požadavky"
#: extensions/amavis/general_callbacks.py:125
#: extensions/amavis/general_callbacks.py:179
#, fuzzy
msgid "Pending requests"
msgstr "nevyřízené požadavky"
#: extensions/amavis/general_callbacks.py:135
#: extensions/amavis/general_callbacks.py:189
msgid "Content filter"
msgstr "Filtr obsahu"
#: extensions/amavis/lib.py:56
#: extensions/amavis/lib.py:62
#, python-format
msgid "Connection to amavis failed: %s"
msgstr "Spojení s amavis selhalo: %s"
#: extensions/amavis/lib.py:131
#, fuzzy
msgid "No recipient found"
msgstr "Nebyl určen příjemce"
#: extensions/amavis/models.py:93
msgid "Virus filter"
msgstr "Filtr virů"
@@ -1648,8 +1735,8 @@ msgid "Score"
msgstr ""
#: extensions/amavis/sql_listing.py:33
#: extensions/amavis/templatetags/amavis_tags.py:75
#: extensions/webmail/forms.py:82
#: extensions/amavis/templatetags/amavis_tags.py:106
#: extensions/webmail/forms.py:83
msgid "To"
msgstr "Komu"
@@ -1660,21 +1747,21 @@ msgid "From"
msgstr "Od"
#: extensions/amavis/sql_listing.py:40 extensions/sievefilters/forms.py:77
#: extensions/webmail/forms.py:86 extensions/webmail/lib/imapemail.py:288
#: extensions/webmail/forms.py:87 extensions/webmail/lib/imapemail.py:288
#: extensions/webmail/lib/listing.py:27 extensions/webmail/lib/tables.py:26
#: templates/common/email_searchbar.html:6
msgid "Subject"
msgstr "Předmět"
#: extensions/amavis/views.py:27
#: extensions/amavis/views.py:31
msgid "Empty quarantine"
msgstr "Vyprázdnit karanténu"
#: extensions/amavis/views.py:149
#: extensions/amavis/views.py:177
msgid "Message deleted"
msgstr "Zpráva smazána"
#: extensions/amavis/views.py:168
#: extensions/amavis/views.py:194
#, python-format
msgid "%(count)d message deleted successfully"
msgid_plural "%(count)d messages deleted successfully"
@@ -1682,15 +1769,15 @@ msgstr[0] "%(count)d zpráva úspěšně smazána"
msgstr[1] "%(count)d zprávy úspěšně smazány"
msgstr[2] "%(count)d zpráv úspěšně smazáno"
#: extensions/amavis/views.py:191
#: extensions/amavis/views.py:217
msgid "Request sent"
msgstr "Požadavek odeslán"
#: extensions/amavis/views.py:197
#: extensions/amavis/views.py:223
msgid "Message released"
msgstr "Zprávy odblokována"
#: extensions/amavis/views.py:225
#: extensions/amavis/views.py:250
#, python-format
msgid "%(count)d request sent"
msgid_plural "%(count)d requests sent"
@@ -1698,7 +1785,7 @@ msgstr[0] "%(count)d požadavek odeslán"
msgstr[1] "%(count)d požadavky odeslány"
msgstr[2] "%(count)d požadavků odesláno"
#: extensions/amavis/views.py:246
#: extensions/amavis/views.py:271
#, python-format
msgid "%(count)d message released successfully"
msgid_plural "%(count)d messages released successfully"
@@ -1706,6 +1793,23 @@ msgstr[0] "%(count)d zpráva úspěšně odblokována"
msgstr[1] "%(count)d zprávy úspěšně odblokovány"
msgstr[2] "%(count)d zpráv úspěšně odblokováno"
#: extensions/amavis/views.py:309
#, fuzzy, python-format
msgid "%(count)d message processed successfully"
msgid_plural "%(count)d messages processed successfully"
msgstr[0] "%(count)d zpráva úspěšně odblokována"
msgstr[1] "%(count)d zprávy úspěšně odblokovány"
msgstr[2] "%(count)d zpráv úspěšně odblokováno"
#: extensions/amavis/views.py:341
#, fuzzy
msgid "Select a database"
msgstr "Vybrat soubor"
#: extensions/amavis/views.py:345
msgid "Validate"
msgstr ""
#: extensions/amavis/management/commands/amnotify.py:61
msgid "[modoboa] Pending release requests"
msgstr "[modoboa] Nevyřízené požadavky na odblokování"
@@ -1732,70 +1836,90 @@ msgid "Select"
msgstr "Vybrat soubor"
#: extensions/amavis/templates/amavis/main_action_bar.html:9
msgid "Clean"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:10
msgid "Spam"
msgstr "Spam"
#: extensions/amavis/templates/amavis/main_action_bar.html:10
#: extensions/amavis/templates/amavis/main_action_bar.html:11
msgid "Virus"
msgstr "Vir"
#: extensions/amavis/templates/amavis/main_action_bar.html:11
#: extensions/amavis/templates/amavis/main_action_bar.html:12
#, fuzzy
msgid "Bad Header"
msgstr "Chybné záhlaví"
#: extensions/amavis/templates/amavis/main_action_bar.html:12
#: extensions/amavis/templates/amavis/main_action_bar.html:13
msgid "Bad MIME"
msgstr "Špatný MIME"
#: extensions/amavis/templates/amavis/main_action_bar.html:13
#: extensions/amavis/templates/amavis/main_action_bar.html:14
#, fuzzy
msgid "Banned"
msgstr "Filtr zakázané pošty"
#: extensions/amavis/templates/amavis/main_action_bar.html:18
#: extensions/amavis/templatetags/amavis_tags.py:19
#: extensions/amavis/templatetags/amavis_tags.py:54
#: extensions/amavis/templates/amavis/main_action_bar.html:19
#: extensions/amavis/templatetags/amavis_tags.py:24
#: extensions/amavis/templatetags/amavis_tags.py:85
msgid "Release"
msgstr "Odblokovat"
#: extensions/amavis/templates/amavis/main_action_bar.html:23
#: extensions/amavis/templatetags/amavis_tags.py:25
#: extensions/amavis/templatetags/amavis_tags.py:61
#: extensions/amavis/templates/amavis/main_action_bar.html:24
#: extensions/amavis/templatetags/amavis_tags.py:30
#: extensions/amavis/templatetags/amavis_tags.py:92
#: extensions/webmail/templatetags/webmail_tags.py:32
msgid "Delete"
msgstr "Smazat"
#: extensions/amavis/templates/amavis/main_action_bar.html:31
#: extensions/amavis/templates/amavis/main_action_bar.html:33
#: extensions/amavis/templatetags/amavis_tags.py:44
#, fuzzy
msgid "Mark as spam"
msgstr "Označit zprávy"
#: extensions/amavis/templates/amavis/main_action_bar.html:34
#: extensions/amavis/templatetags/amavis_tags.py:52
msgid "Mark as non-spam"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:43
#: extensions/sievefilters/forms.py:64
msgid "All messages"
msgstr "Všechny zprávy"
#: extensions/amavis/templates/amavis/main_action_bar.html:31
#: extensions/amavis/templates/amavis/main_action_bar.html:43
msgid "All"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:32
#: extensions/amavis/templates/amavis/main_action_bar.html:45
#, fuzzy
msgid "Clean only"
msgstr "Filtr zakázané pošty"
#: extensions/amavis/templates/amavis/main_action_bar.html:47
#, fuzzy
msgid "Spam only"
msgstr "Spam"
#: extensions/amavis/templates/amavis/main_action_bar.html:33
#: extensions/amavis/templates/amavis/main_action_bar.html:48
#, fuzzy
msgid "Virus only"
msgstr "Vir"
#: extensions/amavis/templates/amavis/main_action_bar.html:34
#: extensions/amavis/templates/amavis/main_action_bar.html:49
#, fuzzy
msgid "Bad Header only"
msgstr "Chybné záhlaví"
#: extensions/amavis/templates/amavis/main_action_bar.html:35
#: extensions/amavis/templates/amavis/main_action_bar.html:50
#, fuzzy
msgid "Bad MIME only"
msgstr "Špatný MIME"
#: extensions/amavis/templates/amavis/main_action_bar.html:36
#: extensions/amavis/templates/amavis/main_action_bar.html:51
#, fuzzy
msgid "Banned only"
msgstr "Filtr zakázané pošty"
@@ -1847,7 +1971,7 @@ msgstr "Úkony na zprávě:"
msgid "Please visit %(listingurl)s for a full listing."
msgstr "Navštivte stránku %(listingurl)s pro zobrazení kompletního seznamu."
#: extensions/amavis/templatetags/amavis_tags.py:28
#: extensions/amavis/templatetags/amavis_tags.py:35
msgid "View full headers"
msgstr "Zobrazit úplné záhlaví"
@@ -2302,7 +2426,7 @@ msgstr "Odesílatel"
msgid "Recipient"
msgstr "Příjemce"
#: extensions/sievefilters/forms.py:80 extensions/webmail/forms.py:83
#: extensions/sievefilters/forms.py:80 extensions/webmail/forms.py:84
msgid "Cc"
msgstr "Kopie"
@@ -2559,19 +2683,19 @@ msgstr "Nastaveno neznámé zobrazení"
msgid "Bad custom period"
msgstr "Neplatně nastavený vlastní časový interval"
#: extensions/stats/templates/stats/index.html:33
#: extensions/stats/templates/stats/index.html:28
msgid "Search a domain"
msgstr "Hledat doménu"
#: extensions/stats/templates/stats/index.html:37
#: extensions/stats/templates/stats/index.html:32
msgid "Predefined time ranges"
msgstr "Předdefinované časové intervaly"
#: extensions/stats/templates/stats/index.html:44
#: extensions/stats/templates/stats/index.html:39
msgid "Custom time range"
msgstr "Vlastní časový interval"
#: extensions/stats/templates/stats/index.html:57
#: extensions/stats/templates/stats/index.html:52
msgid "Apply"
msgstr "Uložit"
@@ -2729,7 +2853,7 @@ msgstr "Odpověď serveru"
msgid "Unknown action"
msgstr "Neznámá akce"
#: extensions/webmail/forms.py:84
#: extensions/webmail/forms.py:85
msgid "Cci"
msgstr "BCC"
@@ -2938,15 +3062,15 @@ msgstr "Ne"
msgid "Failed to update password: %s"
msgstr "Nebylo možné změnit heslo: %s"
#: lib/permissions.py:20
#: lib/permissions.py:19
msgid "Simple user"
msgstr "Uživatel"
#: lib/permissions.py:22
#: lib/permissions.py:21
msgid "Super administrator"
msgstr "Super správce"
#: lib/permissions.py:28
#: lib/permissions.py:27
msgid "Domain administrator"
msgstr "Správce domény"
+27 -9
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: modoboa-1.0.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-08-24 12:33+0200\n"
"POT-Creation-Date: 2014-10-29 20:22+0100\n"
"PO-Revision-Date: 2013-09-29 22:13+0100\n"
"Last-Translator: Miroslav Abrahám <miris@kunago.com>\n"
"Language-Team: CS <miris@kunago.com>\n"
@@ -41,33 +41,51 @@ msgstr ""
msgid "No domain administrator defined"
msgstr "Není určen správce domény"
#: extensions/admin/static/admin/js/admin.js:291
#: extensions/admin/static/admin/js/admin.js:292
msgid "Do not delete mailbox directory"
msgstr "Nemazat adresář schránky"
#: extensions/amavis/static/amavis/js/quarantine.js:180
#: extensions/amavis/static/amavis/js/quarantine.js:211
msgid "Release this selection?"
msgstr "Odblokovat tento výběr?"
#: extensions/amavis/static/amavis/js/quarantine.js:184
#: extensions/amavis/static/amavis/js/quarantine.js:215
msgid "Delete this selection?"
msgstr "Smazat tento výběr?"
#: extensions/amavis/static/amavis/js/quarantine.js:203
#: extensions/amavis/static/amavis/js/quarantine.js:255
#, fuzzy
msgid "Mark this selection as spam?"
msgstr "Odblokovat tento výběr?"
#: extensions/amavis/static/amavis/js/quarantine.js:270
#, fuzzy
msgid "Mark this selection as non-spam?"
msgstr "Odblokovat tento výběr?"
#: extensions/amavis/static/amavis/js/quarantine.js:295
#: extensions/amavis/static/amavis/js/selfservice.js:17
msgid "Release this message?"
msgstr "Odblokovat tuto zprávu?"
#: extensions/amavis/static/amavis/js/quarantine.js:207
#: extensions/amavis/static/amavis/js/quarantine.js:299
#: extensions/amavis/static/amavis/js/selfservice.js:21
msgid "Delete this message?"
msgstr "Smazat tuto zprávu?"
#: extensions/amavis/static/amavis/js/quarantine.js:224
#: extensions/amavis/static/amavis/js/quarantine.js:314
msgid "Mark as spam?"
msgstr ""
#: extensions/amavis/static/amavis/js/quarantine.js:330
msgid "Mark as non-spam?"
msgstr ""
#: extensions/amavis/static/amavis/js/quarantine.js:348
msgid "View full headers"
msgstr "Zobrazit úplné záhlaví"
#: extensions/amavis/static/amavis/js/quarantine.js:229
#: extensions/amavis/static/amavis/js/quarantine.js:353
msgid "Hide full headers"
msgstr "Skrýt záhlaví"
@@ -96,7 +114,7 @@ msgstr "Aktivovat tuto sadu filtrů?"
msgid "active"
msgstr "aktivní"
#: extensions/stats/static/stats/js/stats.js:37
#: extensions/stats/static/stats/js/stats.js:38
msgid "Search a domain"
msgstr "Vyhledat doménu"
File diff suppressed because it is too large Load Diff
+34 -13
View File
@@ -1,21 +1,22 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
#
# Translators:
# Patrick Koetter <p@state-of-mind.de>, 2010
msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-08-24 12:32+0200\n"
"POT-Creation-Date: 2014-10-29 20:22+0100\n"
"PO-Revision-Date: 2013-12-15 09:23+0000\n"
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>\n"
"Language-Team: German (http://www.transifex.com/projects/p/modoboa/language/de/)\n"
"Language-Team: German (http://www.transifex.com/projects/p/modoboa/language/"
"de/)\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: extensions/admin/static/admin/js/admin.js:32
@@ -34,39 +35,59 @@ msgstr "Diese Aktion wird ALLE mit der Domain verbundenen Daten löschen."
msgid ""
"This operation will remove all data associated to this domain, excepting "
"accounts."
msgstr "Diese Aktion wird ALLE mit der Domain verbundenen Daten löschen - ausser Mailkonten."
msgstr ""
"Diese Aktion wird ALLE mit der Domain verbundenen Daten löschen - ausser "
"Mailkonten."
#: extensions/admin/static/admin/js/admin.js:222
msgid "No domain administrator defined"
msgstr "Domain-Administrator fehlt"
#: extensions/admin/static/admin/js/admin.js:291
#: extensions/admin/static/admin/js/admin.js:292
msgid "Do not delete mailbox directory"
msgstr "Verzeichnis der Mailbox nicht löschen"
#: extensions/amavis/static/amavis/js/quarantine.js:180
#: extensions/amavis/static/amavis/js/quarantine.js:211
msgid "Release this selection?"
msgstr "Diese Auswahl freilassen?"
#: extensions/amavis/static/amavis/js/quarantine.js:184
#: extensions/amavis/static/amavis/js/quarantine.js:215
msgid "Delete this selection?"
msgstr "Diese Auswahl löschen?"
#: extensions/amavis/static/amavis/js/quarantine.js:203
#: extensions/amavis/static/amavis/js/quarantine.js:255
#, fuzzy
msgid "Mark this selection as spam?"
msgstr "Diese Auswahl freilassen?"
#: extensions/amavis/static/amavis/js/quarantine.js:270
#, fuzzy
msgid "Mark this selection as non-spam?"
msgstr "Diese Auswahl freilassen?"
#: extensions/amavis/static/amavis/js/quarantine.js:295
#: extensions/amavis/static/amavis/js/selfservice.js:17
msgid "Release this message?"
msgstr "Diese Nachricht freilassen?"
#: extensions/amavis/static/amavis/js/quarantine.js:207
#: extensions/amavis/static/amavis/js/quarantine.js:299
#: extensions/amavis/static/amavis/js/selfservice.js:21
msgid "Delete this message?"
msgstr "Diese Nachricht löschen?"
#: extensions/amavis/static/amavis/js/quarantine.js:224
#: extensions/amavis/static/amavis/js/quarantine.js:314
msgid "Mark as spam?"
msgstr ""
#: extensions/amavis/static/amavis/js/quarantine.js:330
msgid "Mark as non-spam?"
msgstr ""
#: extensions/amavis/static/amavis/js/quarantine.js:348
msgid "View full headers"
msgstr "Vollansicht Header anzeigen"
#: extensions/amavis/static/amavis/js/quarantine.js:229
#: extensions/amavis/static/amavis/js/quarantine.js:353
msgid "Hide full headers"
msgstr "Vollansicht Header ausblenden"
@@ -95,7 +116,7 @@ msgstr "Diesen Filter aktivieren?"
msgid "active"
msgstr "aktiv"
#: extensions/stats/static/stats/js/stats.js:37
#: extensions/stats/static/stats/js/stats.js:38
msgid "Search a domain"
msgstr "Domain suchen"
+246 -132
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-08-24 12:29+0200\n"
"POT-Creation-Date: 2014-11-04 11:51+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,8 +18,8 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#: core/__init__.py:52 core/__init__.py:53
#: extensions/admin/forms/account.py:326 extensions/admin/forms/domain.py:256
#: extensions/admin/views/domain.py:97 extensions/admin/views/identity.py:129
#: extensions/admin/forms/account.py:327 extensions/admin/forms/domain.py:248
#: extensions/admin/views/domain.py:97 extensions/admin/views/identity.py:133
#: extensions/postfix_autoreply/app_settings.py:11
#: extensions/postfix_relay_domains/forms.py:138
#: extensions/sievefilters/app_settings.py:50
@@ -271,8 +271,8 @@ msgstr ""
msgid "This field is required"
msgstr ""
#: core/app_settings.py:349 extensions/amavis/app_settings.py:87
#: extensions/amavis/templates/amavis/main_action_bar.html:29
#: core/app_settings.py:349 extensions/amavis/app_settings.py:157
#: extensions/amavis/templates/amavis/main_action_bar.html:41
#: extensions/webmail/app_settings.py:73
msgid "Display"
msgstr ""
@@ -326,36 +326,36 @@ msgstr ""
msgid "You can't delete your own account"
msgstr ""
#: core/models.py:117
#: core/models.py:130
msgid "Failed to update password: LDAP module not installed"
msgstr ""
#: core/models.py:170
#: core/models.py:183
msgid "account"
msgstr ""
#: core/models.py:321 extensions/admin/models/domain.py:144
#: core/models.py:334 extensions/admin/models/domain.py:144
#: extensions/admin/models/domain_alias.py:39
#: extensions/postfix_relay_domains/models.py:134
#: extensions/postfix_relay_domains/models.py:190
msgid "Invalid line"
msgstr ""
#: core/models.py:325
#: core/models.py:338
msgid "You can't import an account with a role greater than yours"
msgstr ""
#: core/models.py:337
#: core/models.py:350
#, python-format
msgid "The simple user '%s' must have a valid email address"
msgstr ""
#: core/models.py:341
#: core/models.py:354
#, python-format
msgid "username and email fields must not differ for '%s'"
msgstr ""
#: core/models.py:410 extensions/admin/models/alias.py:35
#: core/models.py:423 extensions/admin/models/alias.py:35
#: extensions/admin/models/domain.py:32
#: extensions/admin/models/domain_alias.py:17
#: extensions/postfix_autoreply/models.py:28
@@ -364,29 +364,29 @@ msgstr ""
msgid "enabled"
msgstr ""
#: core/models.py:411
#: core/models.py:424
msgid "Check to enable this extension"
msgstr ""
#: core/models.py:491
#: core/models.py:504
msgid "added"
msgstr ""
#: core/models.py:494
#: core/models.py:507
msgid "modified"
msgstr ""
#: core/models.py:496 core/models.py:521
#: core/models.py:509 core/models.py:534
#, python-format
msgid "%(object)s '%(name)s' %(action)s by user %(user)s"
msgstr ""
#: core/models.py:523
#: core/models.py:536
msgid "deleted"
msgstr ""
#: core/tables.py:8 core/templates/core/information.html:8
#: extensions/admin/tables.py:9 extensions/admin/forms/domain.py:187
#: extensions/admin/tables.py:9 extensions/admin/forms/domain.py:179
#: extensions/admin/templates/admin/domains_table.html:5
#: extensions/admin/templates/admin/editdomainform.html:13
#: extensions/admin/templates/admin/identities_table.html:5
@@ -502,7 +502,7 @@ msgstr ""
#: core/templates/core/user_profile.html:8
#: extensions/admin/templates/admin/forward.html:8
#: extensions/admin/views/alias.py:112 extensions/admin/views/domain.py:168
#: extensions/admin/views/identity.py:200
#: extensions/admin/views/identity.py:204
#: extensions/postfix_autoreply/templates/postfix_autoreply/autoreply.html:9
#: extensions/postfix_relay_domains/views.py:66
#: extensions/sievefilters/views.py:166 extensions/webmail/views.py:172
@@ -615,7 +615,7 @@ msgstr ""
msgid "Account import failed (%s): domain does not exist"
msgstr ""
#: extensions/admin/__init__.py:172 extensions/admin/forms/account.py:196
#: extensions/admin/__init__.py:172 extensions/admin/forms/account.py:197
#, python-format
msgid "Mailbox %s already exists"
msgstr ""
@@ -625,6 +625,12 @@ msgstr ""
msgid "Account import failed (%s): wrong quota value"
msgstr ""
#: extensions/admin/__init__.py:212 extensions/admin/forms/domain.py:75
#: extensions/postfix_relay_domains/forms.py:50
#: extensions/postfix_relay_domains/forms.py:70
msgid "domain alias"
msgstr ""
#: extensions/admin/app_settings.py:13
#: extensions/admin/templates/admin/editdomainform.html:25
#: extensions/limits/app_settings.py:31 extensions/limits/models.py:23
@@ -670,7 +676,7 @@ msgid "When a mailbox is removed, also remove the associated account"
msgstr ""
#: extensions/admin/app_settings.py:81 extensions/admin/forms/account.py:178
#: extensions/admin/forms/domain.py:56
#: extensions/admin/forms/domain.py:57
msgid "Must be a positive integer"
msgstr ""
@@ -716,7 +722,7 @@ msgstr ""
msgid "E-mail"
msgstr ""
#: extensions/admin/forms/account.py:113 extensions/admin/forms/domain.py:17
#: extensions/admin/forms/account.py:113 extensions/admin/forms/domain.py:18
msgid "Quota"
msgstr ""
@@ -727,7 +733,7 @@ msgid ""
"administrators)."
msgstr ""
#: extensions/admin/forms/account.py:123 extensions/admin/forms/domain.py:26
#: extensions/admin/forms/account.py:123 extensions/admin/forms/domain.py:27
#: extensions/admin/templates/admin/domains_table.html:6
#: extensions/postfix_relay_domains/forms.py:12
msgid "Alias(es)"
@@ -740,25 +746,25 @@ msgid ""
"*@domain.tld)."
msgstr ""
#: extensions/admin/forms/account.py:187 extensions/admin/forms/account.py:217
#: extensions/admin/forms/account.py:188 extensions/admin/forms/account.py:218
#: extensions/admin/forms/alias.py:65
msgid "Domain does not exist"
msgstr ""
#: extensions/admin/forms/account.py:284
#: extensions/admin/forms/account.py:285
msgid "Domain(s)"
msgstr ""
#: extensions/admin/forms/account.py:286
#: extensions/admin/forms/account.py:287
msgid "Domain(s) that user administrates"
msgstr ""
#: extensions/admin/forms/account.py:328
#: extensions/admin/views/identity.py:132
#: extensions/admin/forms/account.py:329
#: extensions/admin/views/identity.py:136
msgid "Mail"
msgstr ""
#: extensions/admin/forms/account.py:330
#: extensions/admin/forms/account.py:331
msgid "Permissions"
msgstr ""
@@ -804,64 +810,58 @@ msgstr ""
msgid "No recipient defined"
msgstr ""
#: extensions/admin/forms/domain.py:20
#: extensions/admin/forms/domain.py:21
msgid ""
"Default quota in MB applied to mailboxes. Leave empty to use the default "
"value."
msgstr ""
#: extensions/admin/forms/domain.py:29
#: extensions/admin/forms/domain.py:30
msgid ""
"Alias(es) of this domain. Indicate only one name per input, press ENTER to "
"add a new input."
msgstr ""
#: extensions/admin/forms/domain.py:75
#: extensions/postfix_relay_domains/forms.py:50
#: extensions/postfix_relay_domains/forms.py:70
msgid "domain alias"
msgstr ""
#: extensions/admin/forms/domain.py:82 extensions/admin/forms/domain.py:98
#: extensions/admin/forms/domain.py:78 extensions/admin/forms/domain.py:92
#: extensions/postfix_relay_domains/forms.py:58
#: extensions/postfix_relay_domains/forms.py:78
#, python-format
msgid "A %s with this name already exists"
msgstr ""
#: extensions/admin/forms/domain.py:92
#: extensions/admin/forms/domain.py:89
#: extensions/postfix_relay_domains/forms.py:49
#: extensions/postfix_relay_domains/forms.py:71
msgid "domain"
msgstr ""
#: extensions/admin/forms/domain.py:181
#: extensions/admin/forms/domain.py:173
msgid "Create a domain administrator"
msgstr ""
#: extensions/admin/forms/domain.py:183
#: extensions/admin/forms/domain.py:175
msgid "Automatically create an administrator for this domain"
msgstr ""
#: extensions/admin/forms/domain.py:190
#: extensions/admin/forms/domain.py:182
msgid ""
"The administrator's name. Don't include the domain's name here, it will be "
"automatically appended."
msgstr ""
#: extensions/admin/forms/domain.py:198
#: extensions/admin/forms/domain.py:190
msgid "Create aliases"
msgstr ""
#: extensions/admin/forms/domain.py:200
#: extensions/admin/forms/domain.py:192
msgid "Automatically create standard aliases for this domain"
msgstr ""
#: extensions/admin/forms/domain.py:216
#: extensions/admin/forms/domain.py:208
msgid "Invalid format"
msgstr ""
#: extensions/admin/forms/domain.py:230
#: extensions/admin/forms/domain.py:222
#, python-format
msgid "User '%s' already exists"
msgstr ""
@@ -896,7 +896,7 @@ msgid ""
"administrator to create an alias instead."
msgstr ""
#: extensions/admin/forms/import_.py:6 extensions/webmail/forms.py:198
#: extensions/admin/forms/import_.py:6 extensions/webmail/forms.py:200
msgid "Select a file"
msgstr ""
@@ -916,7 +916,7 @@ msgstr ""
msgid "Check this option if passwords contained in your file are not crypted"
msgstr ""
#: extensions/admin/models/alias.py:18 extensions/admin/models/mailbox.py:62
#: extensions/admin/models/alias.py:18 extensions/admin/models/mailbox.py:74
msgid "address"
msgstr ""
@@ -1012,21 +1012,21 @@ msgstr ""
msgid "Unknown domain %s"
msgstr ""
#: extensions/admin/models/mailbox.py:63
#: extensions/admin/models/mailbox.py:75
msgid "Mailbox address (without the @domain.tld part)"
msgstr ""
#: extensions/admin/models/mailbox.py:125
#: extensions/admin/models/mailbox.py:136
#, python-format
msgid "Failed to retrieve mailbox location (%s)"
msgstr ""
#: extensions/admin/models/mailbox.py:194
#: extensions/admin/models/mailbox.py:221
#, python-format
msgid "Quota is greater than the allowed domain's limit (%dM)"
msgstr ""
#: extensions/admin/models/mailbox.py:199
#: extensions/admin/models/mailbox.py:227
msgid "A quota is required"
msgstr ""
@@ -1098,7 +1098,7 @@ msgid "Importing..."
msgstr ""
#: extensions/admin/templates/admin/listing.html:14
#: extensions/stats/templates/stats/index.html:28
#: extensions/stats/templates/stats/index.html:23
msgid "Filter"
msgstr ""
@@ -1200,8 +1200,8 @@ msgid "Alias with this name already exists"
msgstr ""
#: extensions/admin/views/alias.py:50 extensions/admin/views/domain.py:102
#: extensions/admin/views/domain.py:131 extensions/admin/views/identity.py:133
#: extensions/admin/views/identity.py:160
#: extensions/admin/views/domain.py:131 extensions/admin/views/identity.py:137
#: extensions/admin/views/identity.py:164
#: extensions/postfix_relay_domains/views.py:34
#: extensions/sievefilters/views.py:144 extensions/sievefilters/views.py:233
#: extensions/webmail/views.py:153
@@ -1244,7 +1244,7 @@ msgstr ""
msgid "Alias modified"
msgstr ""
#: extensions/admin/views/domain.py:98 extensions/admin/views/identity.py:130
#: extensions/admin/views/domain.py:98 extensions/admin/views/identity.py:134
msgid "Next"
msgstr ""
@@ -1252,7 +1252,7 @@ msgstr ""
msgid "Options"
msgstr ""
#: extensions/admin/views/domain.py:103 extensions/admin/views/identity.py:134
#: extensions/admin/views/domain.py:103 extensions/admin/views/identity.py:138
msgid "Previous"
msgstr ""
@@ -1286,11 +1286,11 @@ msgstr ""
msgid "Export domains"
msgstr ""
#: extensions/admin/views/identity.py:104
#: extensions/admin/views/identity.py:227
#: extensions/admin/views/identity.py:232 extensions/amavis/views.py:144
#: extensions/amavis/views.py:148 extensions/amavis/views.py:181
#: extensions/amavis/views.py:186 extensions/amavis/views.py:188
#: extensions/admin/views/identity.py:108
#: extensions/admin/views/identity.py:231
#: extensions/admin/views/identity.py:236 extensions/amavis/views.py:172
#: extensions/amavis/views.py:176 extensions/amavis/views.py:207
#: extensions/amavis/views.py:212 extensions/amavis/views.py:214
#: extensions/webmail/views.py:49 extensions/webmail/views.py:67
#: extensions/webmail/views.py:81 extensions/webmail/views.py:99
#: extensions/webmail/views.py:116 extensions/webmail/views.py:202
@@ -1301,19 +1301,19 @@ msgstr ""
msgid "Invalid request"
msgstr ""
#: extensions/admin/views/identity.py:151
#: extensions/admin/views/identity.py:155
msgid "Account created"
msgstr ""
#: extensions/admin/views/identity.py:157
#: extensions/admin/views/identity.py:161
msgid "New account"
msgstr ""
#: extensions/admin/views/identity.py:193
#: extensions/admin/views/identity.py:197
msgid "Account updated"
msgstr ""
#: extensions/admin/views/identity.py:217
#: extensions/admin/views/identity.py:221
msgid "Account deleted"
msgid_plural "Accounts deleted"
msgstr[0] ""
@@ -1375,123 +1375,204 @@ msgstr ""
msgid "Simple amavis management frontend"
msgstr ""
#: extensions/amavis/__init__.py:52 extensions/amavis/general_callbacks.py:18
#: extensions/amavis/__init__.py:52 extensions/amavis/general_callbacks.py:20
msgid "Quarantine"
msgstr ""
#: extensions/amavis/app_settings.py:11
#: extensions/amavis/app_settings.py:14
msgid "Quarantine settings"
msgstr ""
#: extensions/amavis/app_settings.py:14
#: extensions/amavis/app_settings.py:17
msgid "Maximum message age"
msgstr ""
#: extensions/amavis/app_settings.py:16
#: extensions/amavis/app_settings.py:19
msgid "Quarantine messages maximum age (in days) before deletion"
msgstr ""
#: extensions/amavis/app_settings.py:19
#: extensions/amavis/app_settings.py:22
msgid "Messages releasing"
msgstr ""
#: extensions/amavis/app_settings.py:22
#: extensions/amavis/app_settings.py:25
msgid "Remove released messages"
msgstr ""
#: extensions/amavis/app_settings.py:24
#: extensions/amavis/app_settings.py:27
msgid "Remove messages marked as released while cleaning up the database"
msgstr ""
#: extensions/amavis/app_settings.py:28
#: extensions/amavis/app_settings.py:32
msgid "Amavis connection mode"
msgstr ""
#: extensions/amavis/app_settings.py:31
#: extensions/amavis/app_settings.py:35
msgid "Mode used to access the PDP server"
msgstr ""
#: extensions/amavis/app_settings.py:36
#: extensions/amavis/app_settings.py:40
msgid "PDP server address"
msgstr ""
#: extensions/amavis/app_settings.py:38
#: extensions/amavis/app_settings.py:42
msgid "PDP server address (if inet mode)"
msgstr ""
#: extensions/amavis/app_settings.py:42
#: extensions/amavis/app_settings.py:46
msgid "PDP server port"
msgstr ""
#: extensions/amavis/app_settings.py:44
#: extensions/amavis/app_settings.py:48
msgid "PDP server port (if inet mode)"
msgstr ""
#: extensions/amavis/app_settings.py:48
#: extensions/amavis/app_settings.py:52
msgid "PDP server socket"
msgstr ""
#: extensions/amavis/app_settings.py:50
#: extensions/amavis/app_settings.py:54
msgid "Path to the PDP server socket (if unix mode)"
msgstr ""
#: extensions/amavis/app_settings.py:54
#: extensions/amavis/app_settings.py:58
msgid "Check requests interval"
msgstr ""
#: extensions/amavis/app_settings.py:56
#: extensions/amavis/app_settings.py:60
msgid "Interval between two release requests checks"
msgstr ""
#: extensions/amavis/app_settings.py:60
#: extensions/amavis/app_settings.py:64
msgid "Allow direct release"
msgstr ""
#: extensions/amavis/app_settings.py:62
#: extensions/amavis/app_settings.py:66
msgid "Allow users to directly release their messages"
msgstr ""
#: extensions/amavis/app_settings.py:66
#: extensions/amavis/app_settings.py:70
msgid "Enable self-service mode"
msgstr ""
#: extensions/amavis/app_settings.py:68
#: extensions/amavis/app_settings.py:72
msgid "Activate the 'self-service' mode"
msgstr ""
#: extensions/amavis/app_settings.py:72
#: extensions/amavis/app_settings.py:76
msgid "Notifications sender"
msgstr ""
#: extensions/amavis/app_settings.py:74
#: extensions/amavis/app_settings.py:78
msgid "The e-mail address used to send notitications"
msgstr ""
#: extensions/amavis/app_settings.py:91 extensions/webmail/app_settings.py:91
msgid "Number of displayed emails per page"
#: extensions/amavis/app_settings.py:81
#: extensions/amavis/templates/amavis/main_action_bar.html:28
msgid "Manual learning"
msgstr ""
#: extensions/amavis/app_settings.py:84
msgid "Enable manual learning"
msgstr ""
#: extensions/amavis/app_settings.py:87
msgid "Allow super administrators to manually train Spamassassin"
msgstr ""
#: extensions/amavis/app_settings.py:92
msgid "Is Spamassassin local?"
msgstr ""
#: extensions/amavis/app_settings.py:95
msgid "Tell if Spamassassin is running on the same server than modoboa"
msgstr ""
#: extensions/amavis/app_settings.py:100
msgid "Default user"
msgstr ""
#: extensions/amavis/app_settings.py:103
msgid "Name of the user owning the default bayesian database"
msgstr ""
#: extensions/amavis/app_settings.py:108
msgid "Spamd address"
msgstr ""
#: extensions/amavis/app_settings.py:110
msgid "The IP address where spamd can be reached"
msgstr ""
#: extensions/amavis/app_settings.py:114
msgid "Spamd port"
msgstr ""
#: extensions/amavis/app_settings.py:116
msgid "The TCP port spamd is listening on"
msgstr ""
#: extensions/amavis/app_settings.py:120
msgid "Enable per-domain manual learning"
msgstr ""
#: extensions/amavis/app_settings.py:123
msgid ""
"Allow domain administrators to train Spamassassin (within dedicated per-"
"domain databases)"
msgstr ""
#: extensions/amavis/app_settings.py:129
msgid "Enable per-user manual learning"
msgstr ""
#: extensions/amavis/app_settings.py:132
msgid ""
"Allow simple users to personally train Spamassassin (within a dedicated "
"database)"
msgstr ""
#: extensions/amavis/app_settings.py:161 extensions/webmail/app_settings.py:91
msgid "Number of displayed emails per page"
msgstr ""
#: extensions/amavis/app_settings.py:162
msgid "Set the maximum number of messages displayed in a page"
msgstr ""
#: extensions/amavis/general_callbacks.py:82
#: extensions/amavis/forms.py:83
msgid "Global database"
msgstr ""
#: extensions/amavis/forms.py:89
msgid "Domain's database"
msgstr ""
#: extensions/amavis/forms.py:91
msgid "User's database"
msgstr ""
#: extensions/amavis/general_callbacks.py:136
msgid "pending requests"
msgstr ""
#: extensions/amavis/general_callbacks.py:125
#: extensions/amavis/general_callbacks.py:179
msgid "Pending requests"
msgstr ""
#: extensions/amavis/general_callbacks.py:135
#: extensions/amavis/general_callbacks.py:189
msgid "Content filter"
msgstr ""
#: extensions/amavis/lib.py:56
#: extensions/amavis/lib.py:62
#, python-format
msgid "Connection to amavis failed: %s"
msgstr ""
#: extensions/amavis/lib.py:131
msgid "No recipient found"
msgstr ""
#: extensions/amavis/models.py:93
msgid "Virus filter"
msgstr ""
@@ -1547,8 +1628,8 @@ msgid "Score"
msgstr ""
#: extensions/amavis/sql_listing.py:33
#: extensions/amavis/templatetags/amavis_tags.py:75
#: extensions/webmail/forms.py:82
#: extensions/amavis/templatetags/amavis_tags.py:106
#: extensions/webmail/forms.py:83
msgid "To"
msgstr ""
@@ -1559,49 +1640,64 @@ msgid "From"
msgstr ""
#: extensions/amavis/sql_listing.py:40 extensions/sievefilters/forms.py:77
#: extensions/webmail/forms.py:86 extensions/webmail/lib/imapemail.py:288
#: extensions/webmail/forms.py:87 extensions/webmail/lib/imapemail.py:288
#: extensions/webmail/lib/listing.py:27 extensions/webmail/lib/tables.py:26
#: templates/common/email_searchbar.html:6
msgid "Subject"
msgstr ""
#: extensions/amavis/views.py:27
#: extensions/amavis/views.py:31
msgid "Empty quarantine"
msgstr ""
#: extensions/amavis/views.py:149
#: extensions/amavis/views.py:177
msgid "Message deleted"
msgstr ""
#: extensions/amavis/views.py:168
#: extensions/amavis/views.py:194
#, python-format
msgid "%(count)d message deleted successfully"
msgid_plural "%(count)d messages deleted successfully"
msgstr[0] ""
msgstr[1] ""
#: extensions/amavis/views.py:191
#: extensions/amavis/views.py:217
msgid "Request sent"
msgstr ""
#: extensions/amavis/views.py:197
#: extensions/amavis/views.py:223
msgid "Message released"
msgstr ""
#: extensions/amavis/views.py:225
#: extensions/amavis/views.py:250
#, python-format
msgid "%(count)d request sent"
msgid_plural "%(count)d requests sent"
msgstr[0] ""
msgstr[1] ""
#: extensions/amavis/views.py:246
#: extensions/amavis/views.py:271
#, python-format
msgid "%(count)d message released successfully"
msgid_plural "%(count)d messages released successfully"
msgstr[0] ""
msgstr[1] ""
#: extensions/amavis/views.py:309
#, python-format
msgid "%(count)d message processed successfully"
msgid_plural "%(count)d messages processed successfully"
msgstr[0] ""
msgstr[1] ""
#: extensions/amavis/views.py:341
msgid "Select a database"
msgstr ""
#: extensions/amavis/views.py:345
msgid "Validate"
msgstr ""
#: extensions/amavis/management/commands/amnotify.py:61
msgid "[modoboa] Pending release requests"
msgstr ""
@@ -1627,64 +1723,82 @@ msgid "Select"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:9
msgid "Spam"
msgid "Clean"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:10
msgid "Virus"
msgid "Spam"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:11
msgid "Bad Header"
msgid "Virus"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:12
msgid "Bad MIME"
msgid "Bad Header"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:13
msgid "Bad MIME"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:14
msgid "Banned"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:18
#: extensions/amavis/templatetags/amavis_tags.py:19
#: extensions/amavis/templatetags/amavis_tags.py:54
#: extensions/amavis/templates/amavis/main_action_bar.html:19
#: extensions/amavis/templatetags/amavis_tags.py:24
#: extensions/amavis/templatetags/amavis_tags.py:85
msgid "Release"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:23
#: extensions/amavis/templatetags/amavis_tags.py:25
#: extensions/amavis/templatetags/amavis_tags.py:61
#: extensions/amavis/templates/amavis/main_action_bar.html:24
#: extensions/amavis/templatetags/amavis_tags.py:30
#: extensions/amavis/templatetags/amavis_tags.py:92
#: extensions/webmail/templatetags/webmail_tags.py:32
msgid "Delete"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:31
#: extensions/amavis/templates/amavis/main_action_bar.html:33
#: extensions/amavis/templatetags/amavis_tags.py:44
msgid "Mark as spam"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:34
#: extensions/amavis/templatetags/amavis_tags.py:52
msgid "Mark as non-spam"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:43
#: extensions/sievefilters/forms.py:64
msgid "All messages"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:31
#: extensions/amavis/templates/amavis/main_action_bar.html:43
msgid "All"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:32
#: extensions/amavis/templates/amavis/main_action_bar.html:45
msgid "Clean only"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:47
msgid "Spam only"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:33
#: extensions/amavis/templates/amavis/main_action_bar.html:48
msgid "Virus only"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:34
#: extensions/amavis/templates/amavis/main_action_bar.html:49
msgid "Bad Header only"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:35
#: extensions/amavis/templates/amavis/main_action_bar.html:50
msgid "Bad MIME only"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:36
#: extensions/amavis/templates/amavis/main_action_bar.html:51
msgid "Banned only"
msgstr ""
@@ -1728,7 +1842,7 @@ msgstr ""
msgid "Please visit %(listingurl)s for a full listing."
msgstr ""
#: extensions/amavis/templatetags/amavis_tags.py:28
#: extensions/amavis/templatetags/amavis_tags.py:35
msgid "View full headers"
msgstr ""
@@ -2147,7 +2261,7 @@ msgstr ""
msgid "Recipient"
msgstr ""
#: extensions/sievefilters/forms.py:80 extensions/webmail/forms.py:83
#: extensions/sievefilters/forms.py:80 extensions/webmail/forms.py:84
msgid "Cc"
msgstr ""
@@ -2400,19 +2514,19 @@ msgstr ""
msgid "Bad custom period"
msgstr ""
#: extensions/stats/templates/stats/index.html:33
#: extensions/stats/templates/stats/index.html:28
msgid "Search a domain"
msgstr ""
#: extensions/stats/templates/stats/index.html:37
#: extensions/stats/templates/stats/index.html:32
msgid "Predefined time ranges"
msgstr ""
#: extensions/stats/templates/stats/index.html:44
#: extensions/stats/templates/stats/index.html:39
msgid "Custom time range"
msgstr ""
#: extensions/stats/templates/stats/index.html:57
#: extensions/stats/templates/stats/index.html:52
msgid "Apply"
msgstr ""
@@ -2568,7 +2682,7 @@ msgstr ""
msgid "Unknown action"
msgstr ""
#: extensions/webmail/forms.py:84
#: extensions/webmail/forms.py:85
msgid "Cci"
msgstr ""
@@ -2775,15 +2889,15 @@ msgstr ""
msgid "Failed to update password: %s"
msgstr ""
#: lib/permissions.py:20
#: lib/permissions.py:19
msgid "Simple user"
msgstr ""
#: lib/permissions.py:22
#: lib/permissions.py:21
msgid "Super administrator"
msgstr ""
#: lib/permissions.py:28
#: lib/permissions.py:27
msgid "Domain administrator"
msgstr ""
+25 -9
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-08-24 12:32+0200\n"
"POT-Creation-Date: 2014-10-29 20:22+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -39,33 +39,49 @@ msgstr ""
msgid "No domain administrator defined"
msgstr ""
#: extensions/admin/static/admin/js/admin.js:291
#: extensions/admin/static/admin/js/admin.js:292
msgid "Do not delete mailbox directory"
msgstr ""
#: extensions/amavis/static/amavis/js/quarantine.js:180
#: extensions/amavis/static/amavis/js/quarantine.js:211
msgid "Release this selection?"
msgstr ""
#: extensions/amavis/static/amavis/js/quarantine.js:184
#: extensions/amavis/static/amavis/js/quarantine.js:215
msgid "Delete this selection?"
msgstr ""
#: extensions/amavis/static/amavis/js/quarantine.js:203
#: extensions/amavis/static/amavis/js/quarantine.js:255
msgid "Mark this selection as spam?"
msgstr ""
#: extensions/amavis/static/amavis/js/quarantine.js:270
msgid "Mark this selection as non-spam?"
msgstr ""
#: extensions/amavis/static/amavis/js/quarantine.js:295
#: extensions/amavis/static/amavis/js/selfservice.js:17
msgid "Release this message?"
msgstr ""
#: extensions/amavis/static/amavis/js/quarantine.js:207
#: extensions/amavis/static/amavis/js/quarantine.js:299
#: extensions/amavis/static/amavis/js/selfservice.js:21
msgid "Delete this message?"
msgstr ""
#: extensions/amavis/static/amavis/js/quarantine.js:224
#: extensions/amavis/static/amavis/js/quarantine.js:314
msgid "Mark as spam?"
msgstr ""
#: extensions/amavis/static/amavis/js/quarantine.js:330
msgid "Mark as non-spam?"
msgstr ""
#: extensions/amavis/static/amavis/js/quarantine.js:348
msgid "View full headers"
msgstr ""
#: extensions/amavis/static/amavis/js/quarantine.js:229
#: extensions/amavis/static/amavis/js/quarantine.js:353
msgid "Hide full headers"
msgstr ""
@@ -94,7 +110,7 @@ msgstr ""
msgid "active"
msgstr ""
#: extensions/stats/static/stats/js/stats.js:37
#: extensions/stats/static/stats/js/stats.js:38
msgid "Search a domain"
msgstr ""
+256 -133
View File
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-08-24 12:29+0200\n"
"POT-Creation-Date: 2014-11-04 11:51+0100\n"
"PO-Revision-Date: 2013-10-01 09:56+0000\n"
"Last-Translator: Pedro Gracia <lasarux@neuroomante.com>\n"
"Language-Team: Spanish (http://www.transifex.com/projects/p/modoboa/language/"
@@ -21,8 +21,8 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: core/__init__.py:52 core/__init__.py:53
#: extensions/admin/forms/account.py:326 extensions/admin/forms/domain.py:256
#: extensions/admin/views/domain.py:97 extensions/admin/views/identity.py:129
#: extensions/admin/forms/account.py:327 extensions/admin/forms/domain.py:248
#: extensions/admin/views/domain.py:97 extensions/admin/views/identity.py:133
#: extensions/postfix_autoreply/app_settings.py:11
#: extensions/postfix_relay_domains/forms.py:138
#: extensions/sievefilters/app_settings.py:50
@@ -289,8 +289,8 @@ msgstr "Petición inválida"
msgid "This field is required"
msgstr "Este campo es obligatorio"
#: core/app_settings.py:349 extensions/amavis/app_settings.py:87
#: extensions/amavis/templates/amavis/main_action_bar.html:29
#: core/app_settings.py:349 extensions/amavis/app_settings.py:157
#: extensions/amavis/templates/amavis/main_action_bar.html:41
#: extensions/webmail/app_settings.py:73
msgid "Display"
msgstr "Mostrar"
@@ -346,37 +346,37 @@ msgstr "Última entrada"
msgid "You can't delete your own account"
msgstr "No puede eliminar su propia cuenta"
#: core/models.py:117
#: core/models.py:130
msgid "Failed to update password: LDAP module not installed"
msgstr "Falló al actualizar la contraseña: módulo LDAP no instalado"
#: core/models.py:170
#: core/models.py:183
msgid "account"
msgstr "cuenta"
#: core/models.py:321 extensions/admin/models/domain.py:144
#: core/models.py:334 extensions/admin/models/domain.py:144
#: extensions/admin/models/domain_alias.py:39
#: extensions/postfix_relay_domains/models.py:134
#: extensions/postfix_relay_domains/models.py:190
msgid "Invalid line"
msgstr "Línea inválida"
#: core/models.py:325
#: core/models.py:338
msgid "You can't import an account with a role greater than yours"
msgstr "No puede importar una cuenta con un rol mayor que el suyo"
#: core/models.py:337
#: core/models.py:350
#, python-format
msgid "The simple user '%s' must have a valid email address"
msgstr "El usuario normal '%s' debe tener una dirección de email válida"
#: core/models.py:341
#: core/models.py:354
#, python-format
msgid "username and email fields must not differ for '%s'"
msgstr ""
"Los campos de nombre de usuario y de email no deben ser diferentes para '%s'"
#: core/models.py:410 extensions/admin/models/alias.py:35
#: core/models.py:423 extensions/admin/models/alias.py:35
#: extensions/admin/models/domain.py:32
#: extensions/admin/models/domain_alias.py:17
#: extensions/postfix_autoreply/models.py:28
@@ -385,29 +385,29 @@ msgstr ""
msgid "enabled"
msgstr "activado"
#: core/models.py:411
#: core/models.py:424
msgid "Check to enable this extension"
msgstr "Marcar para activar esta extensión"
#: core/models.py:491
#: core/models.py:504
msgid "added"
msgstr "añadido"
#: core/models.py:494
#: core/models.py:507
msgid "modified"
msgstr "modificado"
#: core/models.py:496 core/models.py:521
#: core/models.py:509 core/models.py:534
#, python-format
msgid "%(object)s '%(name)s' %(action)s by user %(user)s"
msgstr "%(object)s '%(name)s' %(action)s por el usuario %(user)s"
#: core/models.py:523
#: core/models.py:536
msgid "deleted"
msgstr "eliminado"
#: core/tables.py:8 core/templates/core/information.html:8
#: extensions/admin/tables.py:9 extensions/admin/forms/domain.py:187
#: extensions/admin/tables.py:9 extensions/admin/forms/domain.py:179
#: extensions/admin/templates/admin/domains_table.html:5
#: extensions/admin/templates/admin/editdomainform.html:13
#: extensions/admin/templates/admin/identities_table.html:5
@@ -523,7 +523,7 @@ msgstr "Actualizar su información personal"
#: core/templates/core/user_profile.html:8
#: extensions/admin/templates/admin/forward.html:8
#: extensions/admin/views/alias.py:112 extensions/admin/views/domain.py:168
#: extensions/admin/views/identity.py:200
#: extensions/admin/views/identity.py:204
#: extensions/postfix_autoreply/templates/postfix_autoreply/autoreply.html:9
#: extensions/postfix_relay_domains/views.py:66
#: extensions/sievefilters/views.py:166 extensions/webmail/views.py:172
@@ -654,7 +654,7 @@ msgstr "Siguiente"
msgid "Account import failed (%s): domain does not exist"
msgstr "Falló la importación de la cuenta (%s): el dominio no existe"
#: extensions/admin/__init__.py:172 extensions/admin/forms/account.py:196
#: extensions/admin/__init__.py:172 extensions/admin/forms/account.py:197
#, python-format
msgid "Mailbox %s already exists"
msgstr "El mailbox %s ya existe"
@@ -664,6 +664,13 @@ msgstr "El mailbox %s ya existe"
msgid "Account import failed (%s): wrong quota value"
msgstr "Falló la importación de la cuenta (%s): el dominio no existe"
#: extensions/admin/__init__.py:212 extensions/admin/forms/domain.py:75
#: extensions/postfix_relay_domains/forms.py:50
#: extensions/postfix_relay_domains/forms.py:70
#, fuzzy
msgid "domain alias"
msgstr "Alias del dominio"
#: extensions/admin/app_settings.py:13
#: extensions/admin/templates/admin/editdomainform.html:25
#: extensions/limits/app_settings.py:31 extensions/limits/models.py:23
@@ -712,7 +719,7 @@ msgid "When a mailbox is removed, also remove the associated account"
msgstr "Cuando un mailbox es eliminado, también lo es su cuenta asociada."
#: extensions/admin/app_settings.py:81 extensions/admin/forms/account.py:178
#: extensions/admin/forms/domain.py:56
#: extensions/admin/forms/domain.py:57
msgid "Must be a positive integer"
msgstr ""
@@ -760,7 +767,7 @@ msgstr "No puede deshabilitar su propia cuenta"
msgid "E-mail"
msgstr "Email"
#: extensions/admin/forms/account.py:113 extensions/admin/forms/domain.py:17
#: extensions/admin/forms/account.py:113 extensions/admin/forms/domain.py:18
msgid "Quota"
msgstr "Cuota"
@@ -774,7 +781,7 @@ msgstr ""
"dominio por defecto. Déjelo vacío para definir un valor ilimitado (no "
"permitido para los administradores del dominio)"
#: extensions/admin/forms/account.py:123 extensions/admin/forms/domain.py:26
#: extensions/admin/forms/account.py:123 extensions/admin/forms/domain.py:27
#: extensions/admin/templates/admin/domains_table.html:6
#: extensions/postfix_relay_domains/forms.py:12
msgid "Alias(es)"
@@ -790,25 +797,25 @@ msgstr ""
"ENTER para añadir una nueva entrada. Use el carácter '*' para crear una "
"dirección 'catchall' (recogerlos todos, ej. *@domain.tld)"
#: extensions/admin/forms/account.py:187 extensions/admin/forms/account.py:217
#: extensions/admin/forms/account.py:188 extensions/admin/forms/account.py:218
#: extensions/admin/forms/alias.py:65
msgid "Domain does not exist"
msgstr "El dominio no existe"
#: extensions/admin/forms/account.py:284
#: extensions/admin/forms/account.py:285
msgid "Domain(s)"
msgstr "Dominio(s)"
#: extensions/admin/forms/account.py:286
#: extensions/admin/forms/account.py:287
msgid "Domain(s) that user administrates"
msgstr "Dominio(s) que el usuario administra"
#: extensions/admin/forms/account.py:328
#: extensions/admin/views/identity.py:132
#: extensions/admin/forms/account.py:329
#: extensions/admin/views/identity.py:136
msgid "Mail"
msgstr "Correo"
#: extensions/admin/forms/account.py:330
#: extensions/admin/forms/account.py:331
msgid "Permissions"
msgstr "Permisos"
@@ -858,14 +865,14 @@ msgstr "EL destinatario %s ya existe"
msgid "No recipient defined"
msgstr "No ha puesto destinatario"
#: extensions/admin/forms/domain.py:20
#: extensions/admin/forms/domain.py:21
#, fuzzy
msgid ""
"Default quota in MB applied to mailboxes. Leave empty to use the default "
"value."
msgstr "Cuota por defecto en MB que se aplicará a los mailboxes"
#: extensions/admin/forms/domain.py:29
#: extensions/admin/forms/domain.py:30
msgid ""
"Alias(es) of this domain. Indicate only one name per input, press ENTER to "
"add a new input."
@@ -873,36 +880,29 @@ msgstr ""
"Alia(s) de este dominio. Indique únicamente un nombre por entrada, presione "
"ENTER para añadir una nueva entrada."
#: extensions/admin/forms/domain.py:75
#: extensions/postfix_relay_domains/forms.py:50
#: extensions/postfix_relay_domains/forms.py:70
#, fuzzy
msgid "domain alias"
msgstr "Alias del dominio"
#: extensions/admin/forms/domain.py:82 extensions/admin/forms/domain.py:98
#: extensions/admin/forms/domain.py:78 extensions/admin/forms/domain.py:92
#: extensions/postfix_relay_domains/forms.py:58
#: extensions/postfix_relay_domains/forms.py:78
#, fuzzy, python-format
msgid "A %s with this name already exists"
msgstr "Ya existe un alias con este nombre"
#: extensions/admin/forms/domain.py:92
#: extensions/admin/forms/domain.py:89
#: extensions/postfix_relay_domains/forms.py:49
#: extensions/postfix_relay_domains/forms.py:71
#, fuzzy
msgid "domain"
msgstr "Dominios"
#: extensions/admin/forms/domain.py:181
#: extensions/admin/forms/domain.py:173
msgid "Create a domain administrator"
msgstr "Crear un administrador del dominio"
#: extensions/admin/forms/domain.py:183
#: extensions/admin/forms/domain.py:175
msgid "Automatically create an administrator for this domain"
msgstr "Automáticamente crear una administrador para este dominio"
#: extensions/admin/forms/domain.py:190
#: extensions/admin/forms/domain.py:182
msgid ""
"The administrator's name. Don't include the domain's name here, it will be "
"automatically appended."
@@ -910,19 +910,19 @@ msgstr ""
"El nombre del administrador. No incluya el nombre del dominio aquí, será "
"añadido automáticamente."
#: extensions/admin/forms/domain.py:198
#: extensions/admin/forms/domain.py:190
msgid "Create aliases"
msgstr "Crear alias"
#: extensions/admin/forms/domain.py:200
#: extensions/admin/forms/domain.py:192
msgid "Automatically create standard aliases for this domain"
msgstr "Automáticamente crear alias estándar para este dominio"
#: extensions/admin/forms/domain.py:216
#: extensions/admin/forms/domain.py:208
msgid "Invalid format"
msgstr "Formato inválido"
#: extensions/admin/forms/domain.py:230
#: extensions/admin/forms/domain.py:222
#, python-format
msgid "User '%s' already exists"
msgstr "El usuario '%s' ya existe"
@@ -959,7 +959,7 @@ msgstr ""
"No puede definir un reenvío a un destino local. Por favor, pregunte a su "
"administrador para crear un alias en su lugar."
#: extensions/admin/forms/import_.py:6 extensions/webmail/forms.py:198
#: extensions/admin/forms/import_.py:6 extensions/webmail/forms.py:200
msgid "Select a file"
msgstr "Seleccione un fichero"
@@ -981,7 +981,7 @@ msgstr ""
"Marque esta opción si las contraseñas que contiene su fichero no están "
"cifradas"
#: extensions/admin/models/alias.py:18 extensions/admin/models/mailbox.py:62
#: extensions/admin/models/alias.py:18 extensions/admin/models/mailbox.py:74
msgid "address"
msgstr "dirección"
@@ -1080,21 +1080,21 @@ msgstr "El dominio al que este alias apunta"
msgid "Unknown domain %s"
msgstr "Dominio desconocido %s"
#: extensions/admin/models/mailbox.py:63
#: extensions/admin/models/mailbox.py:75
msgid "Mailbox address (without the @domain.tld part)"
msgstr "Dirección del mailbox (sin la parte @dominio.tld)"
#: extensions/admin/models/mailbox.py:125
#: extensions/admin/models/mailbox.py:136
#, python-format
msgid "Failed to retrieve mailbox location (%s)"
msgstr "Fallo al recuperar la localización del mailbox (%s)"
#: extensions/admin/models/mailbox.py:194
#: extensions/admin/models/mailbox.py:221
#, python-format
msgid "Quota is greater than the allowed domain's limit (%dM)"
msgstr "La cuota es mayor que el límite permitido para el dominio (%dM)"
#: extensions/admin/models/mailbox.py:199
#: extensions/admin/models/mailbox.py:227
msgid "A quota is required"
msgstr "Una cuota es obligatoria"
@@ -1167,7 +1167,7 @@ msgid "Importing..."
msgstr "Importando..."
#: extensions/admin/templates/admin/listing.html:14
#: extensions/stats/templates/stats/index.html:28
#: extensions/stats/templates/stats/index.html:23
msgid "Filter"
msgstr "FIltro"
@@ -1269,8 +1269,8 @@ msgid "Alias with this name already exists"
msgstr "Ya existe un alias con este nombre"
#: extensions/admin/views/alias.py:50 extensions/admin/views/domain.py:102
#: extensions/admin/views/domain.py:131 extensions/admin/views/identity.py:133
#: extensions/admin/views/identity.py:160
#: extensions/admin/views/domain.py:131 extensions/admin/views/identity.py:137
#: extensions/admin/views/identity.py:164
#: extensions/postfix_relay_domains/views.py:34
#: extensions/sievefilters/views.py:144 extensions/sievefilters/views.py:233
#: extensions/webmail/views.py:153
@@ -1313,7 +1313,7 @@ msgstr "Reenvío modificado"
msgid "Alias modified"
msgstr "Alias modificado"
#: extensions/admin/views/domain.py:98 extensions/admin/views/identity.py:130
#: extensions/admin/views/domain.py:98 extensions/admin/views/identity.py:134
msgid "Next"
msgstr "Siguiente"
@@ -1321,7 +1321,7 @@ msgstr "Siguiente"
msgid "Options"
msgstr "Opciones"
#: extensions/admin/views/domain.py:103 extensions/admin/views/identity.py:134
#: extensions/admin/views/domain.py:103 extensions/admin/views/identity.py:138
msgid "Previous"
msgstr "Anterior"
@@ -1355,11 +1355,11 @@ msgstr "Exportar identidades"
msgid "Export domains"
msgstr "Exportar dominios"
#: extensions/admin/views/identity.py:104
#: extensions/admin/views/identity.py:227
#: extensions/admin/views/identity.py:232 extensions/amavis/views.py:144
#: extensions/amavis/views.py:148 extensions/amavis/views.py:181
#: extensions/amavis/views.py:186 extensions/amavis/views.py:188
#: extensions/admin/views/identity.py:108
#: extensions/admin/views/identity.py:231
#: extensions/admin/views/identity.py:236 extensions/amavis/views.py:172
#: extensions/amavis/views.py:176 extensions/amavis/views.py:207
#: extensions/amavis/views.py:212 extensions/amavis/views.py:214
#: extensions/webmail/views.py:49 extensions/webmail/views.py:67
#: extensions/webmail/views.py:81 extensions/webmail/views.py:99
#: extensions/webmail/views.py:116 extensions/webmail/views.py:202
@@ -1370,19 +1370,19 @@ msgstr "Exportar dominios"
msgid "Invalid request"
msgstr "Petición inválida"
#: extensions/admin/views/identity.py:151
#: extensions/admin/views/identity.py:155
msgid "Account created"
msgstr "Cuenta creada"
#: extensions/admin/views/identity.py:157
#: extensions/admin/views/identity.py:161
msgid "New account"
msgstr "Nueva cuenta"
#: extensions/admin/views/identity.py:193
#: extensions/admin/views/identity.py:197
msgid "Account updated"
msgstr "Cuenta actualizada"
#: extensions/admin/views/identity.py:217
#: extensions/admin/views/identity.py:221
msgid "Account deleted"
msgid_plural "Accounts deleted"
msgstr[0] "Cuenta eliminada"
@@ -1464,128 +1464,215 @@ msgstr "Reenvío actualizado"
msgid "Simple amavis management frontend"
msgstr "Panel de gestión sencilla para amavis"
#: extensions/amavis/__init__.py:52 extensions/amavis/general_callbacks.py:18
#: extensions/amavis/__init__.py:52 extensions/amavis/general_callbacks.py:20
msgid "Quarantine"
msgstr "Cuarentena"
#: extensions/amavis/app_settings.py:11
#: extensions/amavis/app_settings.py:14
msgid "Quarantine settings"
msgstr "Configuración de la cuarentena"
#: extensions/amavis/app_settings.py:14
#: extensions/amavis/app_settings.py:17
msgid "Maximum message age"
msgstr "Tiempo máximo del mensaje"
#: extensions/amavis/app_settings.py:16
#: extensions/amavis/app_settings.py:19
msgid "Quarantine messages maximum age (in days) before deletion"
msgstr ""
"Máxima edad (en días) de los mensajes de cuarentena antes de proceder a su "
"eliminación"
#: extensions/amavis/app_settings.py:19
#: extensions/amavis/app_settings.py:22
msgid "Messages releasing"
msgstr "Publicando mensajes"
#: extensions/amavis/app_settings.py:22
#: extensions/amavis/app_settings.py:25
msgid "Remove released messages"
msgstr "Eliminar mensajes publicados"
#: extensions/amavis/app_settings.py:24
#: extensions/amavis/app_settings.py:27
msgid "Remove messages marked as released while cleaning up the database"
msgstr ""
"Eliminar los mensajes marcados como publicados cuando se haga limpieza de la "
"base de datos"
#: extensions/amavis/app_settings.py:28
#: extensions/amavis/app_settings.py:32
msgid "Amavis connection mode"
msgstr "Modo de conexión con Amavis"
#: extensions/amavis/app_settings.py:31
#: extensions/amavis/app_settings.py:35
msgid "Mode used to access the PDP server"
msgstr "Modo usado para acceder al servidor PDP"
#: extensions/amavis/app_settings.py:36
#: extensions/amavis/app_settings.py:40
msgid "PDP server address"
msgstr "Dirección del servidor PDP"
#: extensions/amavis/app_settings.py:38
#: extensions/amavis/app_settings.py:42
msgid "PDP server address (if inet mode)"
msgstr "Dirección del servidor de PDP (si está en modo inet)"
#: extensions/amavis/app_settings.py:42
#: extensions/amavis/app_settings.py:46
msgid "PDP server port"
msgstr "Puerto del servidor PDP"
#: extensions/amavis/app_settings.py:44
#: extensions/amavis/app_settings.py:48
msgid "PDP server port (if inet mode)"
msgstr "Puerto del servidor de PDP (si está en modo inet)"
#: extensions/amavis/app_settings.py:48
#: extensions/amavis/app_settings.py:52
msgid "PDP server socket"
msgstr "socket del servidor PDP"
#: extensions/amavis/app_settings.py:50
#: extensions/amavis/app_settings.py:54
msgid "Path to the PDP server socket (if unix mode)"
msgstr "Dirección del socket del servidor de PDP (si están en modo unix)"
#: extensions/amavis/app_settings.py:54
#: extensions/amavis/app_settings.py:58
msgid "Check requests interval"
msgstr "Intervalo de las peticiones de chequeo"
#: extensions/amavis/app_settings.py:56
#: extensions/amavis/app_settings.py:60
msgid "Interval between two release requests checks"
msgstr "Intervalo entre dos peticiones de chequeo"
#: extensions/amavis/app_settings.py:60
#: extensions/amavis/app_settings.py:64
msgid "Allow direct release"
msgstr "Permitir publicación directa"
#: extensions/amavis/app_settings.py:62
#: extensions/amavis/app_settings.py:66
msgid "Allow users to directly release their messages"
msgstr "Permitir a los usuarios enviar directamente sus mensajes"
#: extensions/amavis/app_settings.py:66
#: extensions/amavis/app_settings.py:70
msgid "Enable self-service mode"
msgstr "Activar modo de autoservicio"
#: extensions/amavis/app_settings.py:68
#: extensions/amavis/app_settings.py:72
msgid "Activate the 'self-service' mode"
msgstr "Activar el modo 'auto-servicio'"
#: extensions/amavis/app_settings.py:72
#: extensions/amavis/app_settings.py:76
msgid "Notifications sender"
msgstr "Notificaciones al remitente"
#: extensions/amavis/app_settings.py:74
#: extensions/amavis/app_settings.py:78
msgid "The e-mail address used to send notitications"
msgstr "La dirección de correo usada para enviar notificaciones"
#: extensions/amavis/app_settings.py:91 extensions/webmail/app_settings.py:91
#: extensions/amavis/app_settings.py:81
#: extensions/amavis/templates/amavis/main_action_bar.html:28
msgid "Manual learning"
msgstr ""
#: extensions/amavis/app_settings.py:84
msgid "Enable manual learning"
msgstr ""
#: extensions/amavis/app_settings.py:87
msgid "Allow super administrators to manually train Spamassassin"
msgstr ""
#: extensions/amavis/app_settings.py:92
msgid "Is Spamassassin local?"
msgstr ""
#: extensions/amavis/app_settings.py:95
msgid "Tell if Spamassassin is running on the same server than modoboa"
msgstr ""
#: extensions/amavis/app_settings.py:100
#, fuzzy
msgid "Default user"
msgstr "Editor por defecto"
#: extensions/amavis/app_settings.py:103
msgid "Name of the user owning the default bayesian database"
msgstr ""
#: extensions/amavis/app_settings.py:108
#, fuzzy
msgid "Spamd address"
msgstr "De la dirección"
#: extensions/amavis/app_settings.py:110
msgid "The IP address where spamd can be reached"
msgstr ""
#: extensions/amavis/app_settings.py:114
#, fuzzy
msgid "Spamd port"
msgstr "Correo basura"
#: extensions/amavis/app_settings.py:116
msgid "The TCP port spamd is listening on"
msgstr ""
#: extensions/amavis/app_settings.py:120
msgid "Enable per-domain manual learning"
msgstr ""
#: extensions/amavis/app_settings.py:123
msgid ""
"Allow domain administrators to train Spamassassin (within dedicated per-"
"domain databases)"
msgstr ""
#: extensions/amavis/app_settings.py:129
msgid "Enable per-user manual learning"
msgstr ""
#: extensions/amavis/app_settings.py:132
msgid ""
"Allow simple users to personally train Spamassassin (within a dedicated "
"database)"
msgstr ""
#: extensions/amavis/app_settings.py:161 extensions/webmail/app_settings.py:91
msgid "Number of displayed emails per page"
msgstr "Número de emails mostrados por página"
#: extensions/amavis/app_settings.py:92
#: extensions/amavis/app_settings.py:162
msgid "Set the maximum number of messages displayed in a page"
msgstr "Fijar el número máxima de mensajes mostrados en una página"
#: extensions/amavis/general_callbacks.py:82
#: extensions/amavis/forms.py:83
msgid "Global database"
msgstr ""
#: extensions/amavis/forms.py:89
#, fuzzy
msgid "Domain's database"
msgstr "Alias del dominio"
#: extensions/amavis/forms.py:91
#, fuzzy
msgid "User's database"
msgstr "Buscar base"
#: extensions/amavis/general_callbacks.py:136
msgid "pending requests"
msgstr "Peticiones pendientes"
#: extensions/amavis/general_callbacks.py:125
#: extensions/amavis/general_callbacks.py:179
#, fuzzy
msgid "Pending requests"
msgstr "Peticiones pendientes"
#: extensions/amavis/general_callbacks.py:135
#: extensions/amavis/general_callbacks.py:189
msgid "Content filter"
msgstr "Filtro de contenido"
#: extensions/amavis/lib.py:56
#: extensions/amavis/lib.py:62
#, python-format
msgid "Connection to amavis failed: %s"
msgstr "La conexión con amavis falló: %s"
#: extensions/amavis/lib.py:131
#, fuzzy
msgid "No recipient found"
msgstr "No ha puesto destinatario"
#: extensions/amavis/models.py:93
msgid "Virus filter"
msgstr "Filtro de virus"
@@ -1649,8 +1736,8 @@ msgid "Score"
msgstr ""
#: extensions/amavis/sql_listing.py:33
#: extensions/amavis/templatetags/amavis_tags.py:75
#: extensions/webmail/forms.py:82
#: extensions/amavis/templatetags/amavis_tags.py:106
#: extensions/webmail/forms.py:83
msgid "To"
msgstr "A"
@@ -1661,49 +1748,65 @@ msgid "From"
msgstr "Desde"
#: extensions/amavis/sql_listing.py:40 extensions/sievefilters/forms.py:77
#: extensions/webmail/forms.py:86 extensions/webmail/lib/imapemail.py:288
#: extensions/webmail/forms.py:87 extensions/webmail/lib/imapemail.py:288
#: extensions/webmail/lib/listing.py:27 extensions/webmail/lib/tables.py:26
#: templates/common/email_searchbar.html:6
msgid "Subject"
msgstr "Tema"
#: extensions/amavis/views.py:27
#: extensions/amavis/views.py:31
msgid "Empty quarantine"
msgstr "Vaciar cuarentena"
#: extensions/amavis/views.py:149
#: extensions/amavis/views.py:177
msgid "Message deleted"
msgstr "Mensaje eliminado"
#: extensions/amavis/views.py:168
#: extensions/amavis/views.py:194
#, python-format
msgid "%(count)d message deleted successfully"
msgid_plural "%(count)d messages deleted successfully"
msgstr[0] "%(count)d mensaje eliminado correctamente"
msgstr[1] "%(count)d mensajes eliminados correctamente"
#: extensions/amavis/views.py:191
#: extensions/amavis/views.py:217
msgid "Request sent"
msgstr "Petición enviada"
#: extensions/amavis/views.py:197
#: extensions/amavis/views.py:223
msgid "Message released"
msgstr "Mensaje publicado"
#: extensions/amavis/views.py:225
#: extensions/amavis/views.py:250
#, python-format
msgid "%(count)d request sent"
msgid_plural "%(count)d requests sent"
msgstr[0] "%(count)d petición enviada"
msgstr[1] "%(count)d peticiones enviadas"
#: extensions/amavis/views.py:246
#: extensions/amavis/views.py:271
#, python-format
msgid "%(count)d message released successfully"
msgid_plural "%(count)d messages released successfully"
msgstr[0] "%(count)d mensaje publicado correctamente"
msgstr[1] "%(count)d mensajes publicados correctamente"
#: extensions/amavis/views.py:309
#, fuzzy, python-format
msgid "%(count)d message processed successfully"
msgid_plural "%(count)d messages processed successfully"
msgstr[0] "%(count)d mensaje publicado correctamente"
msgstr[1] "%(count)d mensajes publicados correctamente"
#: extensions/amavis/views.py:341
#, fuzzy
msgid "Select a database"
msgstr "Seleccione un fichero"
#: extensions/amavis/views.py:345
msgid "Validate"
msgstr ""
#: extensions/amavis/management/commands/amnotify.py:61
msgid "[modoboa] Pending release requests"
msgstr "[modoboa] Pendiente de publicar las peticiones"
@@ -1730,70 +1833,90 @@ msgid "Select"
msgstr "Seleccione un fichero"
#: extensions/amavis/templates/amavis/main_action_bar.html:9
msgid "Clean"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:10
msgid "Spam"
msgstr "Correo basura"
#: extensions/amavis/templates/amavis/main_action_bar.html:10
#: extensions/amavis/templates/amavis/main_action_bar.html:11
msgid "Virus"
msgstr "Virus"
#: extensions/amavis/templates/amavis/main_action_bar.html:11
#: extensions/amavis/templates/amavis/main_action_bar.html:12
#, fuzzy
msgid "Bad Header"
msgstr "Mala cabecera"
#: extensions/amavis/templates/amavis/main_action_bar.html:12
#: extensions/amavis/templates/amavis/main_action_bar.html:13
msgid "Bad MIME"
msgstr "Mal MIME"
#: extensions/amavis/templates/amavis/main_action_bar.html:13
#: extensions/amavis/templates/amavis/main_action_bar.html:14
#, fuzzy
msgid "Banned"
msgstr "Filtro de expulsados"
#: extensions/amavis/templates/amavis/main_action_bar.html:18
#: extensions/amavis/templatetags/amavis_tags.py:19
#: extensions/amavis/templatetags/amavis_tags.py:54
#: extensions/amavis/templates/amavis/main_action_bar.html:19
#: extensions/amavis/templatetags/amavis_tags.py:24
#: extensions/amavis/templatetags/amavis_tags.py:85
msgid "Release"
msgstr "Publicar"
#: extensions/amavis/templates/amavis/main_action_bar.html:23
#: extensions/amavis/templatetags/amavis_tags.py:25
#: extensions/amavis/templatetags/amavis_tags.py:61
#: extensions/amavis/templates/amavis/main_action_bar.html:24
#: extensions/amavis/templatetags/amavis_tags.py:30
#: extensions/amavis/templatetags/amavis_tags.py:92
#: extensions/webmail/templatetags/webmail_tags.py:32
msgid "Delete"
msgstr "Eliminar"
#: extensions/amavis/templates/amavis/main_action_bar.html:31
#: extensions/amavis/templates/amavis/main_action_bar.html:33
#: extensions/amavis/templatetags/amavis_tags.py:44
#, fuzzy
msgid "Mark as spam"
msgstr "Marcar mensajes"
#: extensions/amavis/templates/amavis/main_action_bar.html:34
#: extensions/amavis/templatetags/amavis_tags.py:52
msgid "Mark as non-spam"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:43
#: extensions/sievefilters/forms.py:64
msgid "All messages"
msgstr "Todos los mensajes"
#: extensions/amavis/templates/amavis/main_action_bar.html:31
#: extensions/amavis/templates/amavis/main_action_bar.html:43
msgid "All"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:32
#: extensions/amavis/templates/amavis/main_action_bar.html:45
#, fuzzy
msgid "Clean only"
msgstr "Filtro de expulsados"
#: extensions/amavis/templates/amavis/main_action_bar.html:47
#, fuzzy
msgid "Spam only"
msgstr "Correo basura"
#: extensions/amavis/templates/amavis/main_action_bar.html:33
#: extensions/amavis/templates/amavis/main_action_bar.html:48
#, fuzzy
msgid "Virus only"
msgstr "Virus"
#: extensions/amavis/templates/amavis/main_action_bar.html:34
#: extensions/amavis/templates/amavis/main_action_bar.html:49
#, fuzzy
msgid "Bad Header only"
msgstr "Mala cabecera"
#: extensions/amavis/templates/amavis/main_action_bar.html:35
#: extensions/amavis/templates/amavis/main_action_bar.html:50
#, fuzzy
msgid "Bad MIME only"
msgstr "Mal MIME"
#: extensions/amavis/templates/amavis/main_action_bar.html:36
#: extensions/amavis/templates/amavis/main_action_bar.html:51
#, fuzzy
msgid "Banned only"
msgstr "Filtro de expulsados"
@@ -1842,7 +1965,7 @@ msgstr "Actuar sobre este mensaje"
msgid "Please visit %(listingurl)s for a full listing."
msgstr "Por favor, visite %(listingurl)s para un listado completo."
#: extensions/amavis/templatetags/amavis_tags.py:28
#: extensions/amavis/templatetags/amavis_tags.py:35
msgid "View full headers"
msgstr "Ver todas las cabeceras"
@@ -2295,7 +2418,7 @@ msgstr "Remitente"
msgid "Recipient"
msgstr "Destinatario"
#: extensions/sievefilters/forms.py:80 extensions/webmail/forms.py:83
#: extensions/sievefilters/forms.py:80 extensions/webmail/forms.py:84
msgid "Cc"
msgstr "Cc"
@@ -2551,19 +2674,19 @@ msgstr "Conjunto gráfico desconocido"
msgid "Bad custom period"
msgstr "Período elegido erróneo"
#: extensions/stats/templates/stats/index.html:33
#: extensions/stats/templates/stats/index.html:28
msgid "Search a domain"
msgstr "Buscar un dominio"
#: extensions/stats/templates/stats/index.html:37
#: extensions/stats/templates/stats/index.html:32
msgid "Predefined time ranges"
msgstr "Rangos de tiempo predefinidos"
#: extensions/stats/templates/stats/index.html:44
#: extensions/stats/templates/stats/index.html:39
msgid "Custom time range"
msgstr "Rango de tiempo definido"
#: extensions/stats/templates/stats/index.html:57
#: extensions/stats/templates/stats/index.html:52
msgid "Apply"
msgstr "Aplicar"
@@ -2720,7 +2843,7 @@ msgstr "Respuesta del servidor"
msgid "Unknown action"
msgstr "Acción desconocida"
#: extensions/webmail/forms.py:84
#: extensions/webmail/forms.py:85
msgid "Cci"
msgstr "Cco"
@@ -2927,15 +3050,15 @@ msgstr "No "
msgid "Failed to update password: %s"
msgstr "Falló la actualización de la contraseña: %s"
#: lib/permissions.py:20
#: lib/permissions.py:19
msgid "Simple user"
msgstr "Usuario normal"
#: lib/permissions.py:22
#: lib/permissions.py:21
msgid "Super administrator"
msgstr "Super administrador"
#: lib/permissions.py:28
#: lib/permissions.py:27
msgid "Domain administrator"
msgstr "Administrador de dominio"
+27 -9
View File
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-08-24 12:32+0200\n"
"POT-Creation-Date: 2014-10-29 20:22+0100\n"
"PO-Revision-Date: 2013-06-03 16:32+0000\n"
"Last-Translator: Pedro Gracia <lasarux@neuroomante.com>\n"
"Language-Team: Spanish (http://www.transifex.com/projects/p/modoboa/language/"
@@ -44,33 +44,51 @@ msgstr ""
msgid "No domain administrator defined"
msgstr "No hay un administrador de dominio definido"
#: extensions/admin/static/admin/js/admin.js:291
#: extensions/admin/static/admin/js/admin.js:292
msgid "Do not delete mailbox directory"
msgstr "No eliminar el directorio del mailbox"
#: extensions/amavis/static/amavis/js/quarantine.js:180
#: extensions/amavis/static/amavis/js/quarantine.js:211
msgid "Release this selection?"
msgstr "¿Publicar esta selección?"
#: extensions/amavis/static/amavis/js/quarantine.js:184
#: extensions/amavis/static/amavis/js/quarantine.js:215
msgid "Delete this selection?"
msgstr "¿Eliminar esta selección?"
#: extensions/amavis/static/amavis/js/quarantine.js:203
#: extensions/amavis/static/amavis/js/quarantine.js:255
#, fuzzy
msgid "Mark this selection as spam?"
msgstr "¿Publicar esta selección?"
#: extensions/amavis/static/amavis/js/quarantine.js:270
#, fuzzy
msgid "Mark this selection as non-spam?"
msgstr "¿Publicar esta selección?"
#: extensions/amavis/static/amavis/js/quarantine.js:295
#: extensions/amavis/static/amavis/js/selfservice.js:17
msgid "Release this message?"
msgstr "¿Publicar este mensaje?"
#: extensions/amavis/static/amavis/js/quarantine.js:207
#: extensions/amavis/static/amavis/js/quarantine.js:299
#: extensions/amavis/static/amavis/js/selfservice.js:21
msgid "Delete this message?"
msgstr "¿Eliminar este mensaje?"
#: extensions/amavis/static/amavis/js/quarantine.js:224
#: extensions/amavis/static/amavis/js/quarantine.js:314
msgid "Mark as spam?"
msgstr ""
#: extensions/amavis/static/amavis/js/quarantine.js:330
msgid "Mark as non-spam?"
msgstr ""
#: extensions/amavis/static/amavis/js/quarantine.js:348
msgid "View full headers"
msgstr "Ver todas las cabeceras"
#: extensions/amavis/static/amavis/js/quarantine.js:229
#: extensions/amavis/static/amavis/js/quarantine.js:353
msgid "Hide full headers"
msgstr "Esconder todas las cabeceras"
@@ -99,7 +117,7 @@ msgstr "¿Activar este conjunto de filtros?"
msgid "active"
msgstr "activo"
#: extensions/stats/static/stats/js/stats.js:37
#: extensions/stats/static/stats/js/stats.js:38
msgid "Search a domain"
msgstr "Buscar un dominio"
+258 -139
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: modoboa-1.1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-08-24 12:29+0200\n"
"POT-Creation-Date: 2014-11-04 11:51+0100\n"
"PO-Revision-Date: 2011-01-07 10:00+100\n"
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>\n"
"Language-Team: FR <tonio@ngyn.org>\n"
@@ -18,8 +18,8 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: core/__init__.py:52 core/__init__.py:53
#: extensions/admin/forms/account.py:326 extensions/admin/forms/domain.py:256
#: extensions/admin/views/domain.py:97 extensions/admin/views/identity.py:129
#: extensions/admin/forms/account.py:327 extensions/admin/forms/domain.py:248
#: extensions/admin/views/domain.py:97 extensions/admin/views/identity.py:133
#: extensions/postfix_autoreply/app_settings.py:11
#: extensions/postfix_relay_domains/forms.py:138
#: extensions/sievefilters/app_settings.py:50
@@ -243,8 +243,8 @@ msgid ""
"Automatically create a domain and a mailbox when a new user is created just "
"after the first successful authentication."
msgstr ""
"Créer automatiquement un domaine et une boite aux lettres quand un "
"nouvel utilisateur est créé après la première authenfication réussie."
"Créer automatiquement un domaine et une boite aux lettres quand un nouvel "
"utilisateur est créé après la première authenfication réussie."
#: core/app_settings.py:201
#: extensions/admin/templates/admin/editdomainform.html:7
@@ -292,8 +292,8 @@ msgstr "Nombre invalide de tours"
msgid "This field is required"
msgstr "Ce champ est requis"
#: core/app_settings.py:349 extensions/amavis/app_settings.py:87
#: extensions/amavis/templates/amavis/main_action_bar.html:29
#: core/app_settings.py:349 extensions/amavis/app_settings.py:157
#: extensions/amavis/templates/amavis/main_action_bar.html:41
#: extensions/webmail/app_settings.py:73
msgid "Display"
msgstr "Afficher"
@@ -347,37 +347,37 @@ msgstr "dernière connexion"
msgid "You can't delete your own account"
msgstr "Vous ne pouvez pas supprimer votre propre compte"
#: core/models.py:117
#: core/models.py:130
msgid "Failed to update password: LDAP module not installed"
msgstr ""
"Echec de la mise à jour du mot de passe : le module LDAP n'est pas installé"
#: core/models.py:170
#: core/models.py:183
msgid "account"
msgstr "compte"
#: core/models.py:321 extensions/admin/models/domain.py:144
#: core/models.py:334 extensions/admin/models/domain.py:144
#: extensions/admin/models/domain_alias.py:39
#: extensions/postfix_relay_domains/models.py:134
#: extensions/postfix_relay_domains/models.py:190
msgid "Invalid line"
msgstr "Ligne invalide"
#: core/models.py:325
#: core/models.py:338
msgid "You can't import an account with a role greater than yours"
msgstr "Vous ne pouvez pas importer un compte avec un rôle supérieur au votre"
#: core/models.py:337
#: core/models.py:350
#, python-format
msgid "The simple user '%s' must have a valid email address"
msgstr "L'utilisateur simple '%s' doit avoir une adresse email valide"
#: core/models.py:341
#: core/models.py:354
#, python-format
msgid "username and email fields must not differ for '%s'"
msgstr "Les champs username et email de '%s' ne doivent pas différer"
#: core/models.py:410 extensions/admin/models/alias.py:35
#: core/models.py:423 extensions/admin/models/alias.py:35
#: extensions/admin/models/domain.py:32
#: extensions/admin/models/domain_alias.py:17
#: extensions/postfix_autoreply/models.py:28
@@ -386,29 +386,29 @@ msgstr "Les champs username et email de '%s' ne doivent pas différer"
msgid "enabled"
msgstr "Activé"
#: core/models.py:411
#: core/models.py:424
msgid "Check to enable this extension"
msgstr "Cocher pour activer cette extension"
#: core/models.py:491
#: core/models.py:504
msgid "added"
msgstr "ajouté"
#: core/models.py:494
#: core/models.py:507
msgid "modified"
msgstr "modifié"
#: core/models.py:496 core/models.py:521
#: core/models.py:509 core/models.py:534
#, python-format
msgid "%(object)s '%(name)s' %(action)s by user %(user)s"
msgstr "%(object)s '%(name)s' %(action)s par l'utilisateur %(user)s"
#: core/models.py:523
#: core/models.py:536
msgid "deleted"
msgstr "Supprimé"
#: core/tables.py:8 core/templates/core/information.html:8
#: extensions/admin/tables.py:9 extensions/admin/forms/domain.py:187
#: extensions/admin/tables.py:9 extensions/admin/forms/domain.py:179
#: extensions/admin/templates/admin/domains_table.html:5
#: extensions/admin/templates/admin/editdomainform.html:13
#: extensions/admin/templates/admin/identities_table.html:5
@@ -524,7 +524,7 @@ msgstr "Mettez à jour vos informations personnelles"
#: core/templates/core/user_profile.html:8
#: extensions/admin/templates/admin/forward.html:8
#: extensions/admin/views/alias.py:112 extensions/admin/views/domain.py:168
#: extensions/admin/views/identity.py:200
#: extensions/admin/views/identity.py:204
#: extensions/postfix_autoreply/templates/postfix_autoreply/autoreply.html:9
#: extensions/postfix_relay_domains/views.py:66
#: extensions/sievefilters/views.py:166 extensions/webmail/views.py:172
@@ -653,7 +653,7 @@ msgstr "Transfert"
msgid "Account import failed (%s): domain does not exist"
msgstr "L'import du compte a échoué (%s): le domaine n'existe pas"
#: extensions/admin/__init__.py:172 extensions/admin/forms/account.py:196
#: extensions/admin/__init__.py:172 extensions/admin/forms/account.py:197
#, python-format
msgid "Mailbox %s already exists"
msgstr "La boite %s existe déjà"
@@ -663,6 +663,12 @@ msgstr "La boite %s existe déjà"
msgid "Account import failed (%s): wrong quota value"
msgstr "L'import du compte a échoué (%s): mauvais quota"
#: extensions/admin/__init__.py:212 extensions/admin/forms/domain.py:75
#: extensions/postfix_relay_domains/forms.py:50
#: extensions/postfix_relay_domains/forms.py:70
msgid "domain alias"
msgstr "alias de domaine"
#: extensions/admin/app_settings.py:13
#: extensions/admin/templates/admin/editdomainform.html:25
#: extensions/limits/app_settings.py:31 extensions/limits/models.py:23
@@ -714,7 +720,7 @@ msgstr ""
"même temps"
#: extensions/admin/app_settings.py:81 extensions/admin/forms/account.py:178
#: extensions/admin/forms/domain.py:56
#: extensions/admin/forms/domain.py:57
msgid "Must be a positive integer"
msgstr "Doit être un entier positif"
@@ -762,7 +768,7 @@ msgstr "Vous ne pouvez pas désactiver votre propre compte"
msgid "E-mail"
msgstr "E-mail"
#: extensions/admin/forms/account.py:113 extensions/admin/forms/domain.py:17
#: extensions/admin/forms/account.py:113 extensions/admin/forms/domain.py:18
msgid "Quota"
msgstr "Quota"
@@ -776,7 +782,7 @@ msgstr ""
"valeur par défaut du domaine. Laisser vide pour définir une valeur illimitée "
"(interdit pour les admins. de domaine)."
#: extensions/admin/forms/account.py:123 extensions/admin/forms/domain.py:26
#: extensions/admin/forms/account.py:123 extensions/admin/forms/domain.py:27
#: extensions/admin/templates/admin/domains_table.html:6
#: extensions/postfix_relay_domains/forms.py:12
msgid "Alias(es)"
@@ -792,25 +798,25 @@ msgstr ""
"ENTREE pour ajouter un nouveau champ. Utiliser le caractère '*' pour créer "
"une adresse 'attrape tout' (ex: *@domain.tld)."
#: extensions/admin/forms/account.py:187 extensions/admin/forms/account.py:217
#: extensions/admin/forms/account.py:188 extensions/admin/forms/account.py:218
#: extensions/admin/forms/alias.py:65
msgid "Domain does not exist"
msgstr "Domain inexistant"
msgstr "Domaine inexistant"
#: extensions/admin/forms/account.py:284
#: extensions/admin/forms/account.py:285
msgid "Domain(s)"
msgstr "Domaine(s)"
#: extensions/admin/forms/account.py:286
#: extensions/admin/forms/account.py:287
msgid "Domain(s) that user administrates"
msgstr "Domaine(s) que cet utilisateur administre"
#: extensions/admin/forms/account.py:328
#: extensions/admin/views/identity.py:132
#: extensions/admin/forms/account.py:329
#: extensions/admin/views/identity.py:136
msgid "Mail"
msgstr "Courrier"
#: extensions/admin/forms/account.py:330
#: extensions/admin/forms/account.py:331
msgid "Permissions"
msgstr "Permissions"
@@ -860,7 +866,7 @@ msgstr "Destinataire %s déjà présent"
msgid "No recipient defined"
msgstr "Aucune destinataire défini"
#: extensions/admin/forms/domain.py:20
#: extensions/admin/forms/domain.py:21
msgid ""
"Default quota in MB applied to mailboxes. Leave empty to use the default "
"value."
@@ -868,7 +874,7 @@ msgstr ""
"Quota par défaut en Mo appliqué aux boites aux lettres. Laisser vide pour "
"utiliser la valeur par défaut."
#: extensions/admin/forms/domain.py:29
#: extensions/admin/forms/domain.py:30
msgid ""
"Alias(es) of this domain. Indicate only one name per input, press ENTER to "
"add a new input."
@@ -876,34 +882,28 @@ msgstr ""
"Alias de ce domaine. Indiquer seulement un nom par champ, appuyer sur ENTREE "
"pour ajouter un nouveau champ."
#: extensions/admin/forms/domain.py:75
#: extensions/postfix_relay_domains/forms.py:50
#: extensions/postfix_relay_domains/forms.py:70
msgid "domain alias"
msgstr "alias de domaine"
#: extensions/admin/forms/domain.py:82 extensions/admin/forms/domain.py:98
#: extensions/admin/forms/domain.py:78 extensions/admin/forms/domain.py:92
#: extensions/postfix_relay_domains/forms.py:58
#: extensions/postfix_relay_domains/forms.py:78
#, python-format
msgid "A %s with this name already exists"
msgstr "Un %s de ce nom existe déjà"
#: extensions/admin/forms/domain.py:92
#: extensions/admin/forms/domain.py:89
#: extensions/postfix_relay_domains/forms.py:49
#: extensions/postfix_relay_domains/forms.py:71
msgid "domain"
msgstr "domaine"
#: extensions/admin/forms/domain.py:181
#: extensions/admin/forms/domain.py:173
msgid "Create a domain administrator"
msgstr "Créer un administrateur de domaine"
#: extensions/admin/forms/domain.py:183
#: extensions/admin/forms/domain.py:175
msgid "Automatically create an administrator for this domain"
msgstr "Créer automatiquement un administrateur pour ce domaine"
#: extensions/admin/forms/domain.py:190
#: extensions/admin/forms/domain.py:182
msgid ""
"The administrator's name. Don't include the domain's name here, it will be "
"automatically appended."
@@ -911,19 +911,19 @@ msgstr ""
"Le nom de l'administrateur. Ne pas include un nom de domaine ici, il sera "
"ajouté automatiquement."
#: extensions/admin/forms/domain.py:198
#: extensions/admin/forms/domain.py:190
msgid "Create aliases"
msgstr "Créer des alias"
#: extensions/admin/forms/domain.py:200
#: extensions/admin/forms/domain.py:192
msgid "Automatically create standard aliases for this domain"
msgstr "Créer automatiquement des alias standard pour ce domaine"
#: extensions/admin/forms/domain.py:216
#: extensions/admin/forms/domain.py:208
msgid "Invalid format"
msgstr "Format invalide"
#: extensions/admin/forms/domain.py:230
#: extensions/admin/forms/domain.py:222
#, python-format
msgid "User '%s' already exists"
msgstr "L'utilisateur '%s' existe déjà"
@@ -960,7 +960,7 @@ msgstr ""
"Vous ne pouvez pas définir un transfert vers une destination locale. "
"Veuillez plutôt demander à votre administrateur de créer un alias"
#: extensions/admin/forms/import_.py:6 extensions/webmail/forms.py:198
#: extensions/admin/forms/import_.py:6 extensions/webmail/forms.py:200
msgid "Select a file"
msgstr "Sélectionner un fichier"
@@ -982,7 +982,7 @@ msgstr ""
"Cocher cette option si les mots de passe contenus dans votre fichier ne sont "
"pas chiffrés"
#: extensions/admin/models/alias.py:18 extensions/admin/models/mailbox.py:62
#: extensions/admin/models/alias.py:18 extensions/admin/models/mailbox.py:74
msgid "address"
msgstr "Adresse"
@@ -1032,7 +1032,7 @@ msgstr "Ligne invalide : %s"
#: extensions/admin/models/alias.py:157
#, python-format
msgid "Domain '%s' does not exist"
msgstr "Domain '%s' inexistant"
msgstr "Domaine '%s' inexistant"
#: extensions/admin/models/domain.py:28
#: extensions/admin/models/domain_alias.py:10
@@ -1078,23 +1078,23 @@ msgstr "Le domaine vers lequel cet alias pointe"
#: extensions/admin/models/domain_alias.py:52
#, python-format
msgid "Unknown domain %s"
msgstr "Domain %s inconnu"
msgstr "Domaine %s inconnu"
#: extensions/admin/models/mailbox.py:63
#: extensions/admin/models/mailbox.py:75
msgid "Mailbox address (without the @domain.tld part)"
msgstr "Adresse de la boite aux lettres (sans la partie @domain.tld)"
#: extensions/admin/models/mailbox.py:125
#: extensions/admin/models/mailbox.py:136
#, python-format
msgid "Failed to retrieve mailbox location (%s)"
msgstr "Impossible de récuperer l'emplacement de la boite (%s)"
#: extensions/admin/models/mailbox.py:194
#: extensions/admin/models/mailbox.py:221
#, python-format
msgid "Quota is greater than the allowed domain's limit (%dM)"
msgstr "Le quota est supérieur à la limité autorisée pour le domaine (%dM)"
#: extensions/admin/models/mailbox.py:199
#: extensions/admin/models/mailbox.py:227
msgid "A quota is required"
msgstr "Un quota est requis"
@@ -1166,7 +1166,7 @@ msgid "Importing..."
msgstr "Import en cours..."
#: extensions/admin/templates/admin/listing.html:14
#: extensions/stats/templates/stats/index.html:28
#: extensions/stats/templates/stats/index.html:23
msgid "Filter"
msgstr "Filter"
@@ -1268,8 +1268,8 @@ msgid "Alias with this name already exists"
msgstr "Un alias de ce nom existe déjà"
#: extensions/admin/views/alias.py:50 extensions/admin/views/domain.py:102
#: extensions/admin/views/domain.py:131 extensions/admin/views/identity.py:133
#: extensions/admin/views/identity.py:160
#: extensions/admin/views/domain.py:131 extensions/admin/views/identity.py:137
#: extensions/admin/views/identity.py:164
#: extensions/postfix_relay_domains/views.py:34
#: extensions/sievefilters/views.py:144 extensions/sievefilters/views.py:233
#: extensions/webmail/views.py:153
@@ -1312,17 +1312,17 @@ msgstr "Transfert modifié"
msgid "Alias modified"
msgstr "Alias modifié"
#: extensions/admin/views/domain.py:98 extensions/admin/views/identity.py:130
#: extensions/admin/views/domain.py:98 extensions/admin/views/identity.py:134
msgid "Next"
msgstr "Suivante"
msgstr "Suivant"
#: extensions/admin/views/domain.py:101
msgid "Options"
msgstr "Options"
#: extensions/admin/views/domain.py:103 extensions/admin/views/identity.py:134
#: extensions/admin/views/domain.py:103 extensions/admin/views/identity.py:138
msgid "Previous"
msgstr "Précédente"
msgstr "Précédent"
#: extensions/admin/views/domain.py:125
msgid "Domain created"
@@ -1354,11 +1354,11 @@ msgstr "Export d'identités"
msgid "Export domains"
msgstr "Export de domaines"
#: extensions/admin/views/identity.py:104
#: extensions/admin/views/identity.py:227
#: extensions/admin/views/identity.py:232 extensions/amavis/views.py:144
#: extensions/amavis/views.py:148 extensions/amavis/views.py:181
#: extensions/amavis/views.py:186 extensions/amavis/views.py:188
#: extensions/admin/views/identity.py:108
#: extensions/admin/views/identity.py:231
#: extensions/admin/views/identity.py:236 extensions/amavis/views.py:172
#: extensions/amavis/views.py:176 extensions/amavis/views.py:207
#: extensions/amavis/views.py:212 extensions/amavis/views.py:214
#: extensions/webmail/views.py:49 extensions/webmail/views.py:67
#: extensions/webmail/views.py:81 extensions/webmail/views.py:99
#: extensions/webmail/views.py:116 extensions/webmail/views.py:202
@@ -1369,19 +1369,19 @@ msgstr "Export de domaines"
msgid "Invalid request"
msgstr "Requête invalide"
#: extensions/admin/views/identity.py:151
#: extensions/admin/views/identity.py:155
msgid "Account created"
msgstr "Compte créé"
#: extensions/admin/views/identity.py:157
#: extensions/admin/views/identity.py:161
msgid "New account"
msgstr "Nouveau compte"
#: extensions/admin/views/identity.py:193
#: extensions/admin/views/identity.py:197
msgid "Account updated"
msgstr "Compte mis à jour"
#: extensions/admin/views/identity.py:217
#: extensions/admin/views/identity.py:221
msgid "Account deleted"
msgid_plural "Accounts deleted"
msgstr[0] "Compte supprimé"
@@ -1464,125 +1464,211 @@ msgstr "Transfert mis à jour"
msgid "Simple amavis management frontend"
msgstr "Interface simplifiée pour la gestion d'amavis"
#: extensions/amavis/__init__.py:52 extensions/amavis/general_callbacks.py:18
#: extensions/amavis/__init__.py:52 extensions/amavis/general_callbacks.py:20
msgid "Quarantine"
msgstr "Quarantaine"
#: extensions/amavis/app_settings.py:11
#: extensions/amavis/app_settings.py:14
msgid "Quarantine settings"
msgstr "Paramètres de quarantaine"
#: extensions/amavis/app_settings.py:14
#: extensions/amavis/app_settings.py:17
msgid "Maximum message age"
msgstr "Age maximal des messages"
#: extensions/amavis/app_settings.py:16
#: extensions/amavis/app_settings.py:19
msgid "Quarantine messages maximum age (in days) before deletion"
msgstr "Age maximum (en jours) des messages en quarantaine avant suppression"
#: extensions/amavis/app_settings.py:19
#: extensions/amavis/app_settings.py:22
msgid "Messages releasing"
msgstr "Libération des messages"
#: extensions/amavis/app_settings.py:22
#: extensions/amavis/app_settings.py:25
msgid "Remove released messages"
msgstr "Supprimer les messages libérés"
#: extensions/amavis/app_settings.py:24
#: extensions/amavis/app_settings.py:27
msgid "Remove messages marked as released while cleaning up the database"
msgstr ""
"Supprimer les messages marqués comme relâchés pendant le nettoyage de la "
"base de données"
#: extensions/amavis/app_settings.py:28
#: extensions/amavis/app_settings.py:32
msgid "Amavis connection mode"
msgstr "Mode de connexion à Amavis"
#: extensions/amavis/app_settings.py:31
#: extensions/amavis/app_settings.py:35
msgid "Mode used to access the PDP server"
msgstr "Mode utilisé pour accéder au serveur PDP"
#: extensions/amavis/app_settings.py:36
#: extensions/amavis/app_settings.py:40
msgid "PDP server address"
msgstr "Adresse du serveur PDP"
#: extensions/amavis/app_settings.py:38
#: extensions/amavis/app_settings.py:42
msgid "PDP server address (if inet mode)"
msgstr "Adresse du serveur PDP (en mode inet)"
#: extensions/amavis/app_settings.py:42
#: extensions/amavis/app_settings.py:46
msgid "PDP server port"
msgstr "Port du serveur PDP"
#: extensions/amavis/app_settings.py:44
#: extensions/amavis/app_settings.py:48
msgid "PDP server port (if inet mode)"
msgstr "Port du serveur PDP (en mode inet)"
#: extensions/amavis/app_settings.py:48
#: extensions/amavis/app_settings.py:52
msgid "PDP server socket"
msgstr "Socket du serveur PDP"
#: extensions/amavis/app_settings.py:50
#: extensions/amavis/app_settings.py:54
msgid "Path to the PDP server socket (if unix mode)"
msgstr "Emplacement de la socket du serveur PDP (en mode unix)"
#: extensions/amavis/app_settings.py:54
#: extensions/amavis/app_settings.py:58
msgid "Check requests interval"
msgstr "Intervalle entre deux requêtes de vérification"
#: extensions/amavis/app_settings.py:56
#: extensions/amavis/app_settings.py:60
msgid "Interval between two release requests checks"
msgstr "Intervalle entre deux vérifications de requêtes en attente"
#: extensions/amavis/app_settings.py:60
#: extensions/amavis/app_settings.py:64
msgid "Allow direct release"
msgstr "Autoriser la libération directe"
#: extensions/amavis/app_settings.py:62
#: extensions/amavis/app_settings.py:66
msgid "Allow users to directly release their messages"
msgstr "Autoriser les utilisateurs à relâcher directement leurs messages"
#: extensions/amavis/app_settings.py:66
#: extensions/amavis/app_settings.py:70
msgid "Enable self-service mode"
msgstr "Activer le mode 'libre service'"
#: extensions/amavis/app_settings.py:68
#: extensions/amavis/app_settings.py:72
msgid "Activate the 'self-service' mode"
msgstr "Activer le mode 'libre service'"
#: extensions/amavis/app_settings.py:72
#: extensions/amavis/app_settings.py:76
msgid "Notifications sender"
msgstr "Emetteur des notifications"
#: extensions/amavis/app_settings.py:74
#: extensions/amavis/app_settings.py:78
msgid "The e-mail address used to send notitications"
msgstr "L'adresse e-mail utilisée pour envoyer les notifications"
#: extensions/amavis/app_settings.py:91 extensions/webmail/app_settings.py:91
#: extensions/amavis/app_settings.py:81
#: extensions/amavis/templates/amavis/main_action_bar.html:28
msgid "Manual learning"
msgstr "Apprentissage manuel"
#: extensions/amavis/app_settings.py:84
msgid "Enable manual learning"
msgstr "Activer l'apprentissage manuel"
#: extensions/amavis/app_settings.py:87
msgid "Allow super administrators to manually train Spamassassin"
msgstr ""
"Autorise les super administrateurs à entrainer manuellement Spamassassin"
#: extensions/amavis/app_settings.py:92
msgid "Is Spamassassin local?"
msgstr "Spamassassin est il local?"
#: extensions/amavis/app_settings.py:95
msgid "Tell if Spamassassin is running on the same server than modoboa"
msgstr "Indique si Spamassassin tourne sur le même serveur que Modoboa"
#: extensions/amavis/app_settings.py:100
msgid "Default user"
msgstr "Utilisateur par défaut"
#: extensions/amavis/app_settings.py:103
msgid "Name of the user owning the default bayesian database"
msgstr "Nom de l'utilisateur possédant la base bayesienne par défaut"
#: extensions/amavis/app_settings.py:108
msgid "Spamd address"
msgstr "Adresse de spamd"
#: extensions/amavis/app_settings.py:110
msgid "The IP address where spamd can be reached"
msgstr "L'adresse IP à laquelle spamd peut etre joint"
#: extensions/amavis/app_settings.py:114
msgid "Spamd port"
msgstr "Port de spamd"
#: extensions/amavis/app_settings.py:116
msgid "The TCP port spamd is listening on"
msgstr "Le port TCP sur lequel écoute spamd"
#: extensions/amavis/app_settings.py:120
msgid "Enable per-domain manual learning"
msgstr "Activer l'apprentissage manuel niveau domaine"
#: extensions/amavis/app_settings.py:123
msgid ""
"Allow domain administrators to train Spamassassin (within dedicated per-"
"domain databases)"
msgstr ""
"Autorise les administrateurs de domaine à entrainer Spamassassin (au sein de "
"bases dédiées par domaine)"
#: extensions/amavis/app_settings.py:129
msgid "Enable per-user manual learning"
msgstr "Activer l'apprentissage manuel par utilisateur"
#: extensions/amavis/app_settings.py:132
msgid ""
"Allow simple users to personally train Spamassassin (within a dedicated "
"database)"
msgstr ""
"Autorise les utilisateur à entrainer personnellement Spamassassin (au sein "
"d'une base dédiée)"
#: extensions/amavis/app_settings.py:161 extensions/webmail/app_settings.py:91
msgid "Number of displayed emails per page"
msgstr "Nombre d'emails affichés par page"
#: extensions/amavis/app_settings.py:92
#: extensions/amavis/app_settings.py:162
msgid "Set the maximum number of messages displayed in a page"
msgstr "Définir le nombre maximal de messages affichés dans une page"
#: extensions/amavis/general_callbacks.py:82
#: extensions/amavis/forms.py:83
msgid "Global database"
msgstr "Base globale"
#: extensions/amavis/forms.py:89
msgid "Domain's database"
msgstr "Base du domaine"
#: extensions/amavis/forms.py:91
msgid "User's database"
msgstr "Base de l'utilisateur"
#: extensions/amavis/general_callbacks.py:136
msgid "pending requests"
msgstr "requêtes en attente"
#: extensions/amavis/general_callbacks.py:125
#: extensions/amavis/general_callbacks.py:179
msgid "Pending requests"
msgstr "Requêtes en attente"
#: extensions/amavis/general_callbacks.py:135
#: extensions/amavis/general_callbacks.py:189
msgid "Content filter"
msgstr "Filtrage de contenu"
#: extensions/amavis/lib.py:56
#: extensions/amavis/lib.py:62
#, python-format
msgid "Connection to amavis failed: %s"
msgstr "La connexion avec amavis a échoué : %s"
#: extensions/amavis/lib.py:131
msgid "No recipient found"
msgstr "Aucun destinataire trouvé"
#: extensions/amavis/models.py:93
msgid "Virus filter"
msgstr "Filtrage des virus"
@@ -1646,8 +1732,8 @@ msgid "Score"
msgstr "Score"
#: extensions/amavis/sql_listing.py:33
#: extensions/amavis/templatetags/amavis_tags.py:75
#: extensions/webmail/forms.py:82
#: extensions/amavis/templatetags/amavis_tags.py:106
#: extensions/webmail/forms.py:83
msgid "To"
msgstr "A"
@@ -1658,49 +1744,64 @@ msgid "From"
msgstr "De"
#: extensions/amavis/sql_listing.py:40 extensions/sievefilters/forms.py:77
#: extensions/webmail/forms.py:86 extensions/webmail/lib/imapemail.py:288
#: extensions/webmail/forms.py:87 extensions/webmail/lib/imapemail.py:288
#: extensions/webmail/lib/listing.py:27 extensions/webmail/lib/tables.py:26
#: templates/common/email_searchbar.html:6
msgid "Subject"
msgstr "Sujet"
#: extensions/amavis/views.py:27
#: extensions/amavis/views.py:31
msgid "Empty quarantine"
msgstr "Quarantaine vide"
#: extensions/amavis/views.py:149
#: extensions/amavis/views.py:177
msgid "Message deleted"
msgstr "Message supprimé"
#: extensions/amavis/views.py:168
#: extensions/amavis/views.py:194
#, python-format
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/views.py:191
#: extensions/amavis/views.py:217
msgid "Request sent"
msgstr "Requête envoyée"
#: extensions/amavis/views.py:197
#: extensions/amavis/views.py:223
msgid "Message released"
msgstr "Message relâché"
#: extensions/amavis/views.py:225
#: extensions/amavis/views.py:250
#, python-format
msgid "%(count)d request sent"
msgid_plural "%(count)d requests sent"
msgstr[0] "%(count)d requête envoyée"
msgstr[1] "%(count)d requêtes envoyées"
#: extensions/amavis/views.py:246
#: extensions/amavis/views.py:271
#, 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/views.py:309
#, python-format
msgid "%(count)d message processed successfully"
msgid_plural "%(count)d messages processed successfully"
msgstr[0] "%(count)d message traité correctement"
msgstr[1] "%(count)d messages traités correctement"
#: extensions/amavis/views.py:341
msgid "Select a database"
msgstr "Sélectionner une base"
#: extensions/amavis/views.py:345
msgid "Validate"
msgstr "Valider"
#: extensions/amavis/management/commands/amnotify.py:61
msgid "[modoboa] Pending release requests"
msgstr "[modoboa] requêtes de libération en attente"
@@ -1726,64 +1827,82 @@ msgid "Select"
msgstr "Sélectionner"
#: extensions/amavis/templates/amavis/main_action_bar.html:9
msgid "Clean"
msgstr "Propre"
#: extensions/amavis/templates/amavis/main_action_bar.html:10
msgid "Spam"
msgstr "Spam"
#: extensions/amavis/templates/amavis/main_action_bar.html:10
#: extensions/amavis/templates/amavis/main_action_bar.html:11
msgid "Virus"
msgstr "Virus"
#: extensions/amavis/templates/amavis/main_action_bar.html:11
#: extensions/amavis/templates/amavis/main_action_bar.html:12
msgid "Bad Header"
msgstr "Mauvais entête"
#: extensions/amavis/templates/amavis/main_action_bar.html:12
#: extensions/amavis/templates/amavis/main_action_bar.html:13
msgid "Bad MIME"
msgstr "Mauvais type MIME"
#: extensions/amavis/templates/amavis/main_action_bar.html:13
#: extensions/amavis/templates/amavis/main_action_bar.html:14
msgid "Banned"
msgstr "Banni"
#: extensions/amavis/templates/amavis/main_action_bar.html:18
#: extensions/amavis/templatetags/amavis_tags.py:19
#: extensions/amavis/templatetags/amavis_tags.py:54
#: extensions/amavis/templates/amavis/main_action_bar.html:19
#: extensions/amavis/templatetags/amavis_tags.py:24
#: extensions/amavis/templatetags/amavis_tags.py:85
msgid "Release"
msgstr "Relâcher"
#: extensions/amavis/templates/amavis/main_action_bar.html:23
#: extensions/amavis/templatetags/amavis_tags.py:25
#: extensions/amavis/templatetags/amavis_tags.py:61
#: extensions/amavis/templates/amavis/main_action_bar.html:24
#: extensions/amavis/templatetags/amavis_tags.py:30
#: extensions/amavis/templatetags/amavis_tags.py:92
#: extensions/webmail/templatetags/webmail_tags.py:32
msgid "Delete"
msgstr "Supprimer"
#: extensions/amavis/templates/amavis/main_action_bar.html:31
#: extensions/amavis/templates/amavis/main_action_bar.html:33
#: extensions/amavis/templatetags/amavis_tags.py:44
msgid "Mark as spam"
msgstr "Marquer comme spam"
#: extensions/amavis/templates/amavis/main_action_bar.html:34
#: extensions/amavis/templatetags/amavis_tags.py:52
msgid "Mark as non-spam"
msgstr "Marquer comme non-spam"
#: extensions/amavis/templates/amavis/main_action_bar.html:43
#: extensions/sievefilters/forms.py:64
msgid "All messages"
msgstr "Tous les messages"
#: extensions/amavis/templates/amavis/main_action_bar.html:31
#: extensions/amavis/templates/amavis/main_action_bar.html:43
msgid "All"
msgstr "Tout"
#: extensions/amavis/templates/amavis/main_action_bar.html:32
#: extensions/amavis/templates/amavis/main_action_bar.html:45
msgid "Clean only"
msgstr "Seulement les propres"
#: extensions/amavis/templates/amavis/main_action_bar.html:47
msgid "Spam only"
msgstr "Seulement le spam"
#: extensions/amavis/templates/amavis/main_action_bar.html:33
#: extensions/amavis/templates/amavis/main_action_bar.html:48
msgid "Virus only"
msgstr "Seulement les virus"
#: extensions/amavis/templates/amavis/main_action_bar.html:34
#: extensions/amavis/templates/amavis/main_action_bar.html:49
msgid "Bad Header only"
msgstr "Seulement les mauvais entêtes"
#: extensions/amavis/templates/amavis/main_action_bar.html:35
#: extensions/amavis/templates/amavis/main_action_bar.html:50
msgid "Bad MIME only"
msgstr "Seulement les mauvais types MIME"
#: extensions/amavis/templates/amavis/main_action_bar.html:36
#: extensions/amavis/templates/amavis/main_action_bar.html:51
msgid "Banned only"
msgstr "Seulement les bannis"
@@ -1831,7 +1950,7 @@ msgstr "Agir sur ce message :"
msgid "Please visit %(listingurl)s for a full listing."
msgstr "Veuillez visiter %(listingurl)s pour une liste complète."
#: extensions/amavis/templatetags/amavis_tags.py:28
#: extensions/amavis/templatetags/amavis_tags.py:35
msgid "View full headers"
msgstr "Afficher tous les entêtes"
@@ -2269,7 +2388,7 @@ msgstr "Expéditeur"
msgid "Recipient"
msgstr "Destinataire"
#: extensions/sievefilters/forms.py:80 extensions/webmail/forms.py:83
#: extensions/sievefilters/forms.py:80 extensions/webmail/forms.py:84
msgid "Cc"
msgstr "Cc"
@@ -2526,19 +2645,19 @@ msgstr "Jeu de graphiques inconnu"
msgid "Bad custom period"
msgstr "Mauvaise période personnalisée"
#: extensions/stats/templates/stats/index.html:33
#: extensions/stats/templates/stats/index.html:28
msgid "Search a domain"
msgstr "Chercher un domaine"
#: extensions/stats/templates/stats/index.html:37
#: extensions/stats/templates/stats/index.html:32
msgid "Predefined time ranges"
msgstr "Période de temps pré-définie"
#: extensions/stats/templates/stats/index.html:44
#: extensions/stats/templates/stats/index.html:39
msgid "Custom time range"
msgstr "Période de temps personnalisée"
#: extensions/stats/templates/stats/index.html:57
#: extensions/stats/templates/stats/index.html:52
msgid "Apply"
msgstr "Appliquer"
@@ -2694,7 +2813,7 @@ msgstr "Réponse du serveur"
msgid "Unknown action"
msgstr "Action inconnue"
#: extensions/webmail/forms.py:84
#: extensions/webmail/forms.py:85
msgid "Cci"
msgstr "Cci"
@@ -2901,15 +3020,15 @@ msgstr "Non"
msgid "Failed to update password: %s"
msgstr "Echec de la mise à jour du mot de passe : %s"
#: lib/permissions.py:20
#: lib/permissions.py:19
msgid "Simple user"
msgstr "Utilisateur simple"
#: lib/permissions.py:22
#: lib/permissions.py:21
msgid "Super administrator"
msgstr "Super administrateur"
#: lib/permissions.py:28
#: lib/permissions.py:27
msgid "Domain administrator"
msgstr "Administrateur de domaine"
+27 -11
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: modoboa-1.0.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-08-24 12:33+0200\n"
"POT-Creation-Date: 2014-10-29 20:22+0100\n"
"PO-Revision-Date: 2011-01-07 10:00+0100\n"
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>\n"
"Language-Team: FR <tonio@ngyn.org>\n"
@@ -41,33 +41,49 @@ msgstr ""
msgid "No domain administrator defined"
msgstr "Aucun administrateur de domaine défini"
#: extensions/admin/static/admin/js/admin.js:291
#: extensions/admin/static/admin/js/admin.js:292
msgid "Do not delete mailbox directory"
msgstr "Ne pas supprimer le répertoire de la boite aux lettres"
#: extensions/amavis/static/amavis/js/quarantine.js:180
#: extensions/amavis/static/amavis/js/quarantine.js:211
msgid "Release this selection?"
msgstr "Relâcher cette sélection?"
#: extensions/amavis/static/amavis/js/quarantine.js:184
#: extensions/amavis/static/amavis/js/quarantine.js:215
msgid "Delete this selection?"
msgstr "Supprimer cette sélection?"
#: extensions/amavis/static/amavis/js/quarantine.js:203
#: extensions/amavis/static/amavis/js/quarantine.js:255
msgid "Mark this selection as spam?"
msgstr "Marquer cette sélection comme étant du spam?"
#: extensions/amavis/static/amavis/js/quarantine.js:270
msgid "Mark this selection as non-spam?"
msgstr "Marquer cette sélection comme n'étant pas du spam?"
#: extensions/amavis/static/amavis/js/quarantine.js:295
#: extensions/amavis/static/amavis/js/selfservice.js:17
msgid "Release this message?"
msgstr "Relâcher cette message?"
#: extensions/amavis/static/amavis/js/quarantine.js:207
#: extensions/amavis/static/amavis/js/quarantine.js:299
#: extensions/amavis/static/amavis/js/selfservice.js:21
msgid "Delete this message?"
msgstr "Supprimer ce message?"
#: extensions/amavis/static/amavis/js/quarantine.js:224
msgid "View full headers"
msgstr "Voir les entêtes complets"
#: extensions/amavis/static/amavis/js/quarantine.js:314
msgid "Mark as spam?"
msgstr "Marquer comme spam?"
#: extensions/amavis/static/amavis/js/quarantine.js:229
#: extensions/amavis/static/amavis/js/quarantine.js:330
msgid "Mark as non-spam?"
msgstr "Marquer comme non-spam?"
#: extensions/amavis/static/amavis/js/quarantine.js:348
msgid "View full headers"
msgstr "Afficher tous les entêtes"
#: extensions/amavis/static/amavis/js/quarantine.js:353
msgid "Hide full headers"
msgstr "Cacher les entêtes complets"
@@ -96,7 +112,7 @@ msgstr "Activer ce jeu de filtres?"
msgid "active"
msgstr "actif"
#: extensions/stats/static/stats/js/stats.js:37
#: extensions/stats/static/stats/js/stats.js:38
msgid "Search a domain"
msgstr "Checher un domaine"
+255 -132
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-08-24 12:29+0200\n"
"POT-Creation-Date: 2014-11-04 11:51+0100\n"
"PO-Revision-Date: 2013-12-23 00:56+0100\n"
"Last-Translator: Alberto Berti <alberto@metapensiero.it>\n"
"Language-Team: ITALIANO <LL@li.org>\n"
@@ -18,8 +18,8 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: core/__init__.py:52 core/__init__.py:53
#: extensions/admin/forms/account.py:326 extensions/admin/forms/domain.py:256
#: extensions/admin/views/domain.py:97 extensions/admin/views/identity.py:129
#: extensions/admin/forms/account.py:327 extensions/admin/forms/domain.py:248
#: extensions/admin/views/domain.py:97 extensions/admin/views/identity.py:133
#: extensions/postfix_autoreply/app_settings.py:11
#: extensions/postfix_relay_domains/forms.py:138
#: extensions/sievefilters/app_settings.py:50
@@ -291,8 +291,8 @@ msgstr "Numero di cicli non valido"
msgid "This field is required"
msgstr "Questo campo è obbligatorio"
#: core/app_settings.py:349 extensions/amavis/app_settings.py:87
#: extensions/amavis/templates/amavis/main_action_bar.html:29
#: core/app_settings.py:349 extensions/amavis/app_settings.py:157
#: extensions/amavis/templates/amavis/main_action_bar.html:41
#: extensions/webmail/app_settings.py:73
msgid "Display"
msgstr "Mostra"
@@ -346,36 +346,36 @@ msgstr "ultimo login"
msgid "You can't delete your own account"
msgstr "Non puoi cancellare il tuo account"
#: core/models.py:117
#: core/models.py:130
msgid "Failed to update password: LDAP module not installed"
msgstr "Aggiornamento della password fallito: il modulo LDAP non è installato"
#: core/models.py:170
#: core/models.py:183
msgid "account"
msgstr "account"
#: core/models.py:321 extensions/admin/models/domain.py:144
#: core/models.py:334 extensions/admin/models/domain.py:144
#: extensions/admin/models/domain_alias.py:39
#: extensions/postfix_relay_domains/models.py:134
#: extensions/postfix_relay_domains/models.py:190
msgid "Invalid line"
msgstr "Riga non valida"
#: core/models.py:325
#: core/models.py:338
msgid "You can't import an account with a role greater than yours"
msgstr "Non puoi importare un account con un ruolo superiore al tuo"
#: core/models.py:337
#: core/models.py:350
#, python-format
msgid "The simple user '%s' must have a valid email address"
msgstr "L'utente '%s' deve avere un indirizzo email valido"
#: core/models.py:341
#: core/models.py:354
#, python-format
msgid "username and email fields must not differ for '%s'"
msgstr "I campi nome utente e email di '%s' devono avere lo stesso valore"
#: core/models.py:410 extensions/admin/models/alias.py:35
#: core/models.py:423 extensions/admin/models/alias.py:35
#: extensions/admin/models/domain.py:32
#: extensions/admin/models/domain_alias.py:17
#: extensions/postfix_autoreply/models.py:28
@@ -384,29 +384,29 @@ msgstr "I campi nome utente e email di '%s' devono avere lo stesso valore"
msgid "enabled"
msgstr "Attivato"
#: core/models.py:411
#: core/models.py:424
msgid "Check to enable this extension"
msgstr "Seleziona per abilitare questa estensione"
#: core/models.py:491
#: core/models.py:504
msgid "added"
msgstr "aggiunto"
#: core/models.py:494
#: core/models.py:507
msgid "modified"
msgstr "modificato"
#: core/models.py:496 core/models.py:521
#: core/models.py:509 core/models.py:534
#, python-format
msgid "%(object)s '%(name)s' %(action)s by user %(user)s"
msgstr "%(object)s '%(name)s' %(action)s dell'utente %(user)s"
#: core/models.py:523
#: core/models.py:536
msgid "deleted"
msgstr "cancellato"
#: core/tables.py:8 core/templates/core/information.html:8
#: extensions/admin/tables.py:9 extensions/admin/forms/domain.py:187
#: extensions/admin/tables.py:9 extensions/admin/forms/domain.py:179
#: extensions/admin/templates/admin/domains_table.html:5
#: extensions/admin/templates/admin/editdomainform.html:13
#: extensions/admin/templates/admin/identities_table.html:5
@@ -522,7 +522,7 @@ msgstr "Aggiorna le informazioni personali"
#: core/templates/core/user_profile.html:8
#: extensions/admin/templates/admin/forward.html:8
#: extensions/admin/views/alias.py:112 extensions/admin/views/domain.py:168
#: extensions/admin/views/identity.py:200
#: extensions/admin/views/identity.py:204
#: extensions/postfix_autoreply/templates/postfix_autoreply/autoreply.html:9
#: extensions/postfix_relay_domains/views.py:66
#: extensions/sievefilters/views.py:166 extensions/webmail/views.py:172
@@ -650,7 +650,7 @@ msgstr "Inoltra"
msgid "Account import failed (%s): domain does not exist"
msgstr "Importazione dell'account fallito (%s): il dominio non esiste"
#: extensions/admin/__init__.py:172 extensions/admin/forms/account.py:196
#: extensions/admin/__init__.py:172 extensions/admin/forms/account.py:197
#, python-format
msgid "Mailbox %s already exists"
msgstr "La casella di posta %s esiste già"
@@ -660,6 +660,12 @@ msgstr "La casella di posta %s esiste già"
msgid "Account import failed (%s): wrong quota value"
msgstr "Importazione dell'account fallito (%s): il dominio non esiste"
#: extensions/admin/__init__.py:212 extensions/admin/forms/domain.py:75
#: extensions/postfix_relay_domains/forms.py:50
#: extensions/postfix_relay_domains/forms.py:70
msgid "domain alias"
msgstr "alias del dominio"
#: extensions/admin/app_settings.py:13
#: extensions/admin/templates/admin/editdomainform.html:25
#: extensions/limits/app_settings.py:31 extensions/limits/models.py:23
@@ -710,7 +716,7 @@ msgstr ""
"Quando una casella postale viene rimossa rimuovi anche l'account associato"
#: extensions/admin/app_settings.py:81 extensions/admin/forms/account.py:178
#: extensions/admin/forms/domain.py:56
#: extensions/admin/forms/domain.py:57
msgid "Must be a positive integer"
msgstr "Dev'essere un intero positivo"
@@ -759,7 +765,7 @@ msgstr "Tu non puoi disabilitare il tuo account"
msgid "E-mail"
msgstr "E-mail"
#: extensions/admin/forms/account.py:113 extensions/admin/forms/domain.py:17
#: extensions/admin/forms/account.py:113 extensions/admin/forms/domain.py:18
msgid "Quota"
msgstr "Quota"
@@ -773,7 +779,7 @@ msgstr ""
"quello predefinito. Lasciare vuoto per non impostare limiti (non consentito "
"per gli amministratori di dominio)."
#: extensions/admin/forms/account.py:123 extensions/admin/forms/domain.py:26
#: extensions/admin/forms/account.py:123 extensions/admin/forms/domain.py:27
#: extensions/admin/templates/admin/domains_table.html:6
#: extensions/postfix_relay_domains/forms.py:12
msgid "Alias(es)"
@@ -789,25 +795,25 @@ msgstr ""
"premere INVIO per aggiungere un nuovo elemento. Utilizzare il carattere '*' "
"per creare un alias 'prenditutto' (p.es.: *@dominio.org)."
#: extensions/admin/forms/account.py:187 extensions/admin/forms/account.py:217
#: extensions/admin/forms/account.py:188 extensions/admin/forms/account.py:218
#: extensions/admin/forms/alias.py:65
msgid "Domain does not exist"
msgstr "Il dominio non esiste"
#: extensions/admin/forms/account.py:284
#: extensions/admin/forms/account.py:285
msgid "Domain(s)"
msgstr "Dominio(i)"
#: extensions/admin/forms/account.py:286
#: extensions/admin/forms/account.py:287
msgid "Domain(s) that user administrates"
msgstr "Dominio(i) amministrato(i) dall'utente"
#: extensions/admin/forms/account.py:328
#: extensions/admin/views/identity.py:132
#: extensions/admin/forms/account.py:329
#: extensions/admin/views/identity.py:136
msgid "Mail"
msgstr "Posta"
#: extensions/admin/forms/account.py:330
#: extensions/admin/forms/account.py:331
msgid "Permissions"
msgstr "Permessi"
@@ -855,7 +861,7 @@ msgstr "Il destinatario %s è già esistente"
msgid "No recipient defined"
msgstr "Non è stato definito un destinatario"
#: extensions/admin/forms/domain.py:20
#: extensions/admin/forms/domain.py:21
msgid ""
"Default quota in MB applied to mailboxes. Leave empty to use the default "
"value."
@@ -863,7 +869,7 @@ msgstr ""
"Quota in MB predefinita applicata alle caselle di posta. Lascialo vuoto se "
"vuoi applicare il valore predefinito."
#: extensions/admin/forms/domain.py:29
#: extensions/admin/forms/domain.py:30
msgid ""
"Alias(es) of this domain. Indicate only one name per input, press ENTER to "
"add a new input."
@@ -871,34 +877,28 @@ msgstr ""
"Alias per questo dominio. Inserire un solo nome alla volta, premere INVIO "
"per aggiungere un nuovo elemento"
#: extensions/admin/forms/domain.py:75
#: extensions/postfix_relay_domains/forms.py:50
#: extensions/postfix_relay_domains/forms.py:70
msgid "domain alias"
msgstr "alias del dominio"
#: extensions/admin/forms/domain.py:82 extensions/admin/forms/domain.py:98
#: extensions/admin/forms/domain.py:78 extensions/admin/forms/domain.py:92
#: extensions/postfix_relay_domains/forms.py:58
#: extensions/postfix_relay_domains/forms.py:78
#, python-format
msgid "A %s with this name already exists"
msgstr "Un %s con questo nome esiste già"
#: extensions/admin/forms/domain.py:92
#: extensions/admin/forms/domain.py:89
#: extensions/postfix_relay_domains/forms.py:49
#: extensions/postfix_relay_domains/forms.py:71
msgid "domain"
msgstr "dominio"
#: extensions/admin/forms/domain.py:181
#: extensions/admin/forms/domain.py:173
msgid "Create a domain administrator"
msgstr "Crea un amministratore di dominio"
#: extensions/admin/forms/domain.py:183
#: extensions/admin/forms/domain.py:175
msgid "Automatically create an administrator for this domain"
msgstr "Crea automaticamente un amministratore per questo dominio"
#: extensions/admin/forms/domain.py:190
#: extensions/admin/forms/domain.py:182
msgid ""
"The administrator's name. Don't include the domain's name here, it will be "
"automatically appended."
@@ -906,19 +906,19 @@ msgstr ""
"Il nome dell'amministratore. Non includere il nome del dominio, verrà "
"aggiunto automaticamente."
#: extensions/admin/forms/domain.py:198
#: extensions/admin/forms/domain.py:190
msgid "Create aliases"
msgstr "Crea alias"
#: extensions/admin/forms/domain.py:200
#: extensions/admin/forms/domain.py:192
msgid "Automatically create standard aliases for this domain"
msgstr "Crea automaticamente gli alias standard per questo dominio"
#: extensions/admin/forms/domain.py:216
#: extensions/admin/forms/domain.py:208
msgid "Invalid format"
msgstr "Formato non valido"
#: extensions/admin/forms/domain.py:230
#: extensions/admin/forms/domain.py:222
#, python-format
msgid "User '%s' already exists"
msgstr "L'utente '%s' esiste già"
@@ -956,7 +956,7 @@ msgstr ""
"Non puoi definire l'inoltro con destinazione una cartella locale. Chiedi "
"piuttosto all'amministratore di creare un alias."
#: extensions/admin/forms/import_.py:6 extensions/webmail/forms.py:198
#: extensions/admin/forms/import_.py:6 extensions/webmail/forms.py:200
msgid "Select a file"
msgstr "Seleziona un file"
@@ -977,7 +977,7 @@ msgid "Check this option if passwords contained in your file are not crypted"
msgstr ""
"Seleziona questa opzione se le password contenute nel file non sono criptate"
#: extensions/admin/models/alias.py:18 extensions/admin/models/mailbox.py:62
#: extensions/admin/models/alias.py:18 extensions/admin/models/mailbox.py:74
msgid "address"
msgstr "indirizzo"
@@ -1075,21 +1075,21 @@ msgstr "Il dominio a cui punta questo alias"
msgid "Unknown domain %s"
msgstr "Dominio sconosciuto %s"
#: extensions/admin/models/mailbox.py:63
#: extensions/admin/models/mailbox.py:75
msgid "Mailbox address (without the @domain.tld part)"
msgstr "Indirizzo della casella di posta (senza la parte @dominio.org)"
#: extensions/admin/models/mailbox.py:125
#: extensions/admin/models/mailbox.py:136
#, python-format
msgid "Failed to retrieve mailbox location (%s)"
msgstr "Impossibile recuperare la posizione della casella di posta (%s)"
#: extensions/admin/models/mailbox.py:194
#: extensions/admin/models/mailbox.py:221
#, python-format
msgid "Quota is greater than the allowed domain's limit (%dM)"
msgstr "La quota è maggiore del limite stabilito per il dominio (%dM)"
#: extensions/admin/models/mailbox.py:199
#: extensions/admin/models/mailbox.py:227
msgid "A quota is required"
msgstr "È richiesta una quota"
@@ -1161,7 +1161,7 @@ msgid "Importing..."
msgstr "Importazione..."
#: extensions/admin/templates/admin/listing.html:14
#: extensions/stats/templates/stats/index.html:28
#: extensions/stats/templates/stats/index.html:23
msgid "Filter"
msgstr "Filtro"
@@ -1263,8 +1263,8 @@ msgid "Alias with this name already exists"
msgstr "Un alias con questo nome esiste già"
#: extensions/admin/views/alias.py:50 extensions/admin/views/domain.py:102
#: extensions/admin/views/domain.py:131 extensions/admin/views/identity.py:133
#: extensions/admin/views/identity.py:160
#: extensions/admin/views/domain.py:131 extensions/admin/views/identity.py:137
#: extensions/admin/views/identity.py:164
#: extensions/postfix_relay_domains/views.py:34
#: extensions/sievefilters/views.py:144 extensions/sievefilters/views.py:233
#: extensions/webmail/views.py:153
@@ -1307,7 +1307,7 @@ msgstr "Inoltro modificato"
msgid "Alias modified"
msgstr "Alias modificato"
#: extensions/admin/views/domain.py:98 extensions/admin/views/identity.py:130
#: extensions/admin/views/domain.py:98 extensions/admin/views/identity.py:134
msgid "Next"
msgstr "Successivo"
@@ -1315,7 +1315,7 @@ msgstr "Successivo"
msgid "Options"
msgstr "Opzioni"
#: extensions/admin/views/domain.py:103 extensions/admin/views/identity.py:134
#: extensions/admin/views/domain.py:103 extensions/admin/views/identity.py:138
msgid "Previous"
msgstr "Precedente"
@@ -1349,11 +1349,11 @@ msgstr "Identità di esportazione"
msgid "Export domains"
msgstr "Esporta domini"
#: extensions/admin/views/identity.py:104
#: extensions/admin/views/identity.py:227
#: extensions/admin/views/identity.py:232 extensions/amavis/views.py:144
#: extensions/amavis/views.py:148 extensions/amavis/views.py:181
#: extensions/amavis/views.py:186 extensions/amavis/views.py:188
#: extensions/admin/views/identity.py:108
#: extensions/admin/views/identity.py:231
#: extensions/admin/views/identity.py:236 extensions/amavis/views.py:172
#: extensions/amavis/views.py:176 extensions/amavis/views.py:207
#: extensions/amavis/views.py:212 extensions/amavis/views.py:214
#: extensions/webmail/views.py:49 extensions/webmail/views.py:67
#: extensions/webmail/views.py:81 extensions/webmail/views.py:99
#: extensions/webmail/views.py:116 extensions/webmail/views.py:202
@@ -1364,19 +1364,19 @@ msgstr "Esporta domini"
msgid "Invalid request"
msgstr "Richiesta non valida"
#: extensions/admin/views/identity.py:151
#: extensions/admin/views/identity.py:155
msgid "Account created"
msgstr "Account creato"
#: extensions/admin/views/identity.py:157
#: extensions/admin/views/identity.py:161
msgid "New account"
msgstr "Nuovo account"
#: extensions/admin/views/identity.py:193
#: extensions/admin/views/identity.py:197
msgid "Account updated"
msgstr "Account aggiornato"
#: extensions/admin/views/identity.py:217
#: extensions/admin/views/identity.py:221
msgid "Account deleted"
msgid_plural "Accounts deleted"
msgstr[0] "Account cancellato"
@@ -1461,124 +1461,211 @@ msgstr "Inoltro aggiornato"
msgid "Simple amavis management frontend"
msgstr "Interfaccia di gestione amavis semplice"
#: extensions/amavis/__init__.py:52 extensions/amavis/general_callbacks.py:18
#: extensions/amavis/__init__.py:52 extensions/amavis/general_callbacks.py:20
msgid "Quarantine"
msgstr "Quarantena"
#: extensions/amavis/app_settings.py:11
#: extensions/amavis/app_settings.py:14
msgid "Quarantine settings"
msgstr "Impostazioni quarantena"
#: extensions/amavis/app_settings.py:14
#: extensions/amavis/app_settings.py:17
msgid "Maximum message age"
msgstr "Età massima dei messaggi"
#: extensions/amavis/app_settings.py:16
#: extensions/amavis/app_settings.py:19
msgid "Quarantine messages maximum age (in days) before deletion"
msgstr "Età massima dei messaggi in quarantena"
#: extensions/amavis/app_settings.py:19
#: extensions/amavis/app_settings.py:22
msgid "Messages releasing"
msgstr "Rilascio messaggi"
#: extensions/amavis/app_settings.py:22
#: extensions/amavis/app_settings.py:25
msgid "Remove released messages"
msgstr "Rimozione dei messaggi rilasciati"
#: extensions/amavis/app_settings.py:24
#: extensions/amavis/app_settings.py:27
msgid "Remove messages marked as released while cleaning up the database"
msgstr ""
"Rimuovi i messaggi marcati come rilasciati durante la pulizia del database"
#: extensions/amavis/app_settings.py:28
#: extensions/amavis/app_settings.py:32
msgid "Amavis connection mode"
msgstr "Modalità di connessione Amavis"
#: extensions/amavis/app_settings.py:31
#: extensions/amavis/app_settings.py:35
msgid "Mode used to access the PDP server"
msgstr "Modalità utilizzata per accedere al server PDP"
#: extensions/amavis/app_settings.py:36
#: extensions/amavis/app_settings.py:40
msgid "PDP server address"
msgstr "Indirizzo del server PDP"
#: extensions/amavis/app_settings.py:38
#: extensions/amavis/app_settings.py:42
msgid "PDP server address (if inet mode)"
msgstr "Indirizzo del server PDP (se in modalità inet)"
#: extensions/amavis/app_settings.py:42
#: extensions/amavis/app_settings.py:46
msgid "PDP server port"
msgstr "Porta del server PDP"
#: extensions/amavis/app_settings.py:44
#: extensions/amavis/app_settings.py:48
msgid "PDP server port (if inet mode)"
msgstr "Porta del server PDP (se in modalità inet)"
#: extensions/amavis/app_settings.py:48
#: extensions/amavis/app_settings.py:52
msgid "PDP server socket"
msgstr "Socket del server PDP"
#: extensions/amavis/app_settings.py:50
#: extensions/amavis/app_settings.py:54
msgid "Path to the PDP server socket (if unix mode)"
msgstr "Percorso al socket del server PDP (se in modalità UNIX)"
#: extensions/amavis/app_settings.py:54
#: extensions/amavis/app_settings.py:58
msgid "Check requests interval"
msgstr "Intervallo di controllo delle request "
#: extensions/amavis/app_settings.py:56
#: extensions/amavis/app_settings.py:60
msgid "Interval between two release requests checks"
msgstr "Intervallo tra due controlli delle request di rilascio "
#: extensions/amavis/app_settings.py:60
#: extensions/amavis/app_settings.py:64
msgid "Allow direct release"
msgstr "Consenti il rilascio diretto"
#: extensions/amavis/app_settings.py:62
#: extensions/amavis/app_settings.py:66
msgid "Allow users to directly release their messages"
msgstr "Consenti agli utenti di rilasciare direttamente i loro messaggi"
#: extensions/amavis/app_settings.py:66
#: extensions/amavis/app_settings.py:70
msgid "Enable self-service mode"
msgstr "Attiva la modalità self-service"
#: extensions/amavis/app_settings.py:68
#: extensions/amavis/app_settings.py:72
msgid "Activate the 'self-service' mode"
msgstr "Attivazione della modalità 'self-service'"
#: extensions/amavis/app_settings.py:72
#: extensions/amavis/app_settings.py:76
msgid "Notifications sender"
msgstr "Spedizione notifiche"
#: extensions/amavis/app_settings.py:74
#: extensions/amavis/app_settings.py:78
msgid "The e-mail address used to send notitications"
msgstr "L'indirizzo e-mail utilizzato per l'invio di notifiche"
#: extensions/amavis/app_settings.py:91 extensions/webmail/app_settings.py:91
#: extensions/amavis/app_settings.py:81
#: extensions/amavis/templates/amavis/main_action_bar.html:28
msgid "Manual learning"
msgstr ""
#: extensions/amavis/app_settings.py:84
msgid "Enable manual learning"
msgstr ""
#: extensions/amavis/app_settings.py:87
msgid "Allow super administrators to manually train Spamassassin"
msgstr ""
#: extensions/amavis/app_settings.py:92
msgid "Is Spamassassin local?"
msgstr ""
#: extensions/amavis/app_settings.py:95
msgid "Tell if Spamassassin is running on the same server than modoboa"
msgstr ""
#: extensions/amavis/app_settings.py:100
#, fuzzy
msgid "Default user"
msgstr "Editor predefinito"
#: extensions/amavis/app_settings.py:103
msgid "Name of the user owning the default bayesian database"
msgstr ""
#: extensions/amavis/app_settings.py:108
#, fuzzy
msgid "Spamd address"
msgstr "Mittente"
#: extensions/amavis/app_settings.py:110
msgid "The IP address where spamd can be reached"
msgstr ""
#: extensions/amavis/app_settings.py:114
#, fuzzy
msgid "Spamd port"
msgstr "Solo messaggi di spam"
#: extensions/amavis/app_settings.py:116
msgid "The TCP port spamd is listening on"
msgstr ""
#: extensions/amavis/app_settings.py:120
msgid "Enable per-domain manual learning"
msgstr ""
#: extensions/amavis/app_settings.py:123
msgid ""
"Allow domain administrators to train Spamassassin (within dedicated per-"
"domain databases)"
msgstr ""
#: extensions/amavis/app_settings.py:129
msgid "Enable per-user manual learning"
msgstr ""
#: extensions/amavis/app_settings.py:132
msgid ""
"Allow simple users to personally train Spamassassin (within a dedicated "
"database)"
msgstr ""
#: extensions/amavis/app_settings.py:161 extensions/webmail/app_settings.py:91
msgid "Number of displayed emails per page"
msgstr "Numero di e-mail mostrate in ogni pagina"
#: extensions/amavis/app_settings.py:92
#: extensions/amavis/app_settings.py:162
msgid "Set the maximum number of messages displayed in a page"
msgstr "Imposta il numero massimo di messaggi mostrati in una pagina"
#: extensions/amavis/general_callbacks.py:82
#: extensions/amavis/forms.py:83
msgid "Global database"
msgstr ""
#: extensions/amavis/forms.py:89
#, fuzzy
msgid "Domain's database"
msgstr "Alias del dominio"
#: extensions/amavis/forms.py:91
#, fuzzy
msgid "User's database"
msgstr "Base ricerca per gli utenti"
#: extensions/amavis/general_callbacks.py:136
msgid "pending requests"
msgstr "richieste in sospeso"
#: extensions/amavis/general_callbacks.py:125
#: extensions/amavis/general_callbacks.py:179
msgid "Pending requests"
msgstr "Richieste in sospeso"
#: extensions/amavis/general_callbacks.py:135
#: extensions/amavis/general_callbacks.py:189
msgid "Content filter"
msgstr "Filtro sui contenuti"
#: extensions/amavis/lib.py:56
#: extensions/amavis/lib.py:62
#, python-format
msgid "Connection to amavis failed: %s"
msgstr "Connessione ad amavis fallita: %s"
#: extensions/amavis/lib.py:131
#, fuzzy
msgid "No recipient found"
msgstr "Non è stato definito un destinatario"
#: extensions/amavis/models.py:93
msgid "Virus filter"
msgstr "Filtro virus"
@@ -1642,8 +1729,8 @@ msgid "Score"
msgstr "Punteggio"
#: extensions/amavis/sql_listing.py:33
#: extensions/amavis/templatetags/amavis_tags.py:75
#: extensions/webmail/forms.py:82
#: extensions/amavis/templatetags/amavis_tags.py:106
#: extensions/webmail/forms.py:83
msgid "To"
msgstr "A"
@@ -1654,49 +1741,65 @@ msgid "From"
msgstr "Da"
#: extensions/amavis/sql_listing.py:40 extensions/sievefilters/forms.py:77
#: extensions/webmail/forms.py:86 extensions/webmail/lib/imapemail.py:288
#: extensions/webmail/forms.py:87 extensions/webmail/lib/imapemail.py:288
#: extensions/webmail/lib/listing.py:27 extensions/webmail/lib/tables.py:26
#: templates/common/email_searchbar.html:6
msgid "Subject"
msgstr "Oggetto"
#: extensions/amavis/views.py:27
#: extensions/amavis/views.py:31
msgid "Empty quarantine"
msgstr "Svuota quarantena"
#: extensions/amavis/views.py:149
#: extensions/amavis/views.py:177
msgid "Message deleted"
msgstr "Messaggio eliminato"
#: extensions/amavis/views.py:168
#: extensions/amavis/views.py:194
#, python-format
msgid "%(count)d message deleted successfully"
msgid_plural "%(count)d messages deleted successfully"
msgstr[0] "%(count)d messaggio eliminato con successo"
msgstr[1] "%(count)d messaggi eliminati con successo"
#: extensions/amavis/views.py:191
#: extensions/amavis/views.py:217
msgid "Request sent"
msgstr "Request inviata"
#: extensions/amavis/views.py:197
#: extensions/amavis/views.py:223
msgid "Message released"
msgstr "Messaggio rilasciato"
#: extensions/amavis/views.py:225
#: extensions/amavis/views.py:250
#, python-format
msgid "%(count)d request sent"
msgid_plural "%(count)d requests sent"
msgstr[0] "%(count)d request inviata"
msgstr[1] "%(count)d request inviate"
#: extensions/amavis/views.py:246
#: extensions/amavis/views.py:271
#, python-format
msgid "%(count)d message released successfully"
msgid_plural "%(count)d messages released successfully"
msgstr[0] "%(count)d messaggio rilasciato con successo"
msgstr[1] "%(count)d messaggi rilasciati con successo "
#: extensions/amavis/views.py:309
#, fuzzy, python-format
msgid "%(count)d message processed successfully"
msgid_plural "%(count)d messages processed successfully"
msgstr[0] "%(count)d messaggio rilasciato con successo"
msgstr[1] "%(count)d messaggi rilasciati con successo "
#: extensions/amavis/views.py:341
#, fuzzy
msgid "Select a database"
msgstr "Seleziona un file"
#: extensions/amavis/views.py:345
msgid "Validate"
msgstr ""
#: extensions/amavis/management/commands/amnotify.py:61
msgid "[modoboa] Pending release requests"
msgstr "[modoboa] Richieste di rilascio in sospeso"
@@ -1722,64 +1825,84 @@ msgid "Select"
msgstr "Seleziona"
#: extensions/amavis/templates/amavis/main_action_bar.html:9
msgid "Clean"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:10
msgid "Spam"
msgstr "Spam"
#: extensions/amavis/templates/amavis/main_action_bar.html:10
#: extensions/amavis/templates/amavis/main_action_bar.html:11
msgid "Virus"
msgstr "Virus"
#: extensions/amavis/templates/amavis/main_action_bar.html:11
#: extensions/amavis/templates/amavis/main_action_bar.html:12
msgid "Bad Header"
msgstr "Intestazione errata"
#: extensions/amavis/templates/amavis/main_action_bar.html:12
#: extensions/amavis/templates/amavis/main_action_bar.html:13
msgid "Bad MIME"
msgstr "MIME errato"
#: extensions/amavis/templates/amavis/main_action_bar.html:13
#: extensions/amavis/templates/amavis/main_action_bar.html:14
msgid "Banned"
msgstr "Banditi"
#: extensions/amavis/templates/amavis/main_action_bar.html:18
#: extensions/amavis/templatetags/amavis_tags.py:19
#: extensions/amavis/templatetags/amavis_tags.py:54
#: extensions/amavis/templates/amavis/main_action_bar.html:19
#: extensions/amavis/templatetags/amavis_tags.py:24
#: extensions/amavis/templatetags/amavis_tags.py:85
msgid "Release"
msgstr "Rilascia"
#: extensions/amavis/templates/amavis/main_action_bar.html:23
#: extensions/amavis/templatetags/amavis_tags.py:25
#: extensions/amavis/templatetags/amavis_tags.py:61
#: extensions/amavis/templates/amavis/main_action_bar.html:24
#: extensions/amavis/templatetags/amavis_tags.py:30
#: extensions/amavis/templatetags/amavis_tags.py:92
#: extensions/webmail/templatetags/webmail_tags.py:32
msgid "Delete"
msgstr "Elimina"
#: extensions/amavis/templates/amavis/main_action_bar.html:31
#: extensions/amavis/templates/amavis/main_action_bar.html:33
#: extensions/amavis/templatetags/amavis_tags.py:44
#, fuzzy
msgid "Mark as spam"
msgstr "Contrassegna i messaggi"
#: extensions/amavis/templates/amavis/main_action_bar.html:34
#: extensions/amavis/templatetags/amavis_tags.py:52
msgid "Mark as non-spam"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:43
#: extensions/sievefilters/forms.py:64
msgid "All messages"
msgstr "Tutti i messaggi"
#: extensions/amavis/templates/amavis/main_action_bar.html:31
#: extensions/amavis/templates/amavis/main_action_bar.html:43
msgid "All"
msgstr "Tutti"
#: extensions/amavis/templates/amavis/main_action_bar.html:32
#: extensions/amavis/templates/amavis/main_action_bar.html:45
#, fuzzy
msgid "Clean only"
msgstr "Solo messaggi banditi"
#: extensions/amavis/templates/amavis/main_action_bar.html:47
msgid "Spam only"
msgstr "Solo messaggi di spam"
#: extensions/amavis/templates/amavis/main_action_bar.html:33
#: extensions/amavis/templates/amavis/main_action_bar.html:48
msgid "Virus only"
msgstr "Solo messaggi con virus"
#: extensions/amavis/templates/amavis/main_action_bar.html:34
#: extensions/amavis/templates/amavis/main_action_bar.html:49
msgid "Bad Header only"
msgstr "Solo messaggi con intestazione errata"
#: extensions/amavis/templates/amavis/main_action_bar.html:35
#: extensions/amavis/templates/amavis/main_action_bar.html:50
msgid "Bad MIME only"
msgstr "Solo messaggi con struttura MIME errata"
#: extensions/amavis/templates/amavis/main_action_bar.html:36
#: extensions/amavis/templates/amavis/main_action_bar.html:51
msgid "Banned only"
msgstr "Solo messaggi banditi"
@@ -1827,7 +1950,7 @@ msgstr "Agisci su questo messaggio:"
msgid "Please visit %(listingurl)s for a full listing."
msgstr "Per un elenco completo prova a visitare %(listingurl)s"
#: extensions/amavis/templatetags/amavis_tags.py:28
#: extensions/amavis/templatetags/amavis_tags.py:35
msgid "View full headers"
msgstr "Visualizza tutte le intestazioni"
@@ -2271,7 +2394,7 @@ msgstr "Mittente"
msgid "Recipient"
msgstr "Destinatario"
#: extensions/sievefilters/forms.py:80 extensions/webmail/forms.py:83
#: extensions/sievefilters/forms.py:80 extensions/webmail/forms.py:84
msgid "Cc"
msgstr "Cc"
@@ -2528,19 +2651,19 @@ msgstr "Impostazione grafica sconosciuta"
msgid "Bad custom period"
msgstr "Periodo personalizzato sbagliato"
#: extensions/stats/templates/stats/index.html:33
#: extensions/stats/templates/stats/index.html:28
msgid "Search a domain"
msgstr "Ricerca un dominio"
#: extensions/stats/templates/stats/index.html:37
#: extensions/stats/templates/stats/index.html:32
msgid "Predefined time ranges"
msgstr "Intervalli di tempo predefiniti"
#: extensions/stats/templates/stats/index.html:44
#: extensions/stats/templates/stats/index.html:39
msgid "Custom time range"
msgstr "Intervallo di tempo personalizzato"
#: extensions/stats/templates/stats/index.html:57
#: extensions/stats/templates/stats/index.html:52
msgid "Apply"
msgstr "Applica"
@@ -2698,7 +2821,7 @@ msgstr "Risposta del server"
msgid "Unknown action"
msgstr "Azione sconosciuta"
#: extensions/webmail/forms.py:84
#: extensions/webmail/forms.py:85
msgid "Cci"
msgstr "Cci"
@@ -2905,15 +3028,15 @@ msgstr "No"
msgid "Failed to update password: %s"
msgstr "Aggiornamento della password fallito: %s"
#: lib/permissions.py:20
#: lib/permissions.py:19
msgid "Simple user"
msgstr "Utente semplice"
#: lib/permissions.py:22
#: lib/permissions.py:21
msgid "Super administrator"
msgstr "Super amministratore"
#: lib/permissions.py:28
#: lib/permissions.py:27
msgid "Domain administrator"
msgstr "Amministratore di domini"
+27 -9
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-08-24 12:32+0200\n"
"POT-Creation-Date: 2014-10-29 20:22+0100\n"
"PO-Revision-Date: 2013-12-23 00:58+0100\n"
"Last-Translator: Alberto Berti <alberto@metapensiero.it>\n"
"Language-Team: Italiano <LL@li.org>\n"
@@ -41,33 +41,51 @@ msgstr ""
msgid "No domain administrator defined"
msgstr "Non è stato definito un amministratore di dominio"
#: extensions/admin/static/admin/js/admin.js:291
#: extensions/admin/static/admin/js/admin.js:292
msgid "Do not delete mailbox directory"
msgstr "Non eliminare la cartella della casella posta"
#: extensions/amavis/static/amavis/js/quarantine.js:180
#: extensions/amavis/static/amavis/js/quarantine.js:211
msgid "Release this selection?"
msgstr "Rilasciare questa selezione?"
#: extensions/amavis/static/amavis/js/quarantine.js:184
#: extensions/amavis/static/amavis/js/quarantine.js:215
msgid "Delete this selection?"
msgstr "Eliminare questa selezione?"
#: extensions/amavis/static/amavis/js/quarantine.js:203
#: extensions/amavis/static/amavis/js/quarantine.js:255
#, fuzzy
msgid "Mark this selection as spam?"
msgstr "Rilasciare questa selezione?"
#: extensions/amavis/static/amavis/js/quarantine.js:270
#, fuzzy
msgid "Mark this selection as non-spam?"
msgstr "Rilasciare questa selezione?"
#: extensions/amavis/static/amavis/js/quarantine.js:295
#: extensions/amavis/static/amavis/js/selfservice.js:17
msgid "Release this message?"
msgstr "Rilasciare questo messaggio?"
#: extensions/amavis/static/amavis/js/quarantine.js:207
#: extensions/amavis/static/amavis/js/quarantine.js:299
#: extensions/amavis/static/amavis/js/selfservice.js:21
msgid "Delete this message?"
msgstr "Eliminare questo messaggio?"
#: extensions/amavis/static/amavis/js/quarantine.js:224
#: extensions/amavis/static/amavis/js/quarantine.js:314
msgid "Mark as spam?"
msgstr ""
#: extensions/amavis/static/amavis/js/quarantine.js:330
msgid "Mark as non-spam?"
msgstr ""
#: extensions/amavis/static/amavis/js/quarantine.js:348
msgid "View full headers"
msgstr "Visualizza tutte le intestazioni"
#: extensions/amavis/static/amavis/js/quarantine.js:229
#: extensions/amavis/static/amavis/js/quarantine.js:353
msgid "Hide full headers"
msgstr "Nascondi le intestazioni"
@@ -96,7 +114,7 @@ msgstr "Attivare il gruppo di filtri?"
msgid "active"
msgstr "attivo"
#: extensions/stats/static/stats/js/stats.js:37
#: extensions/stats/static/stats/js/stats.js:38
msgid "Search a domain"
msgstr "Cerca un dominio"
File diff suppressed because it is too large Load Diff
+37 -14
View File
@@ -1,7 +1,7 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
#
# Translators:
# TuxBrother <vrijwilligerswerk@wij.rs>, 2014
# TuxBrother <vrijwilligerswerk@wij.rs>, 2014
@@ -9,14 +9,15 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-08-24 12:32+0200\n"
"POT-Creation-Date: 2014-10-29 20:22+0100\n"
"PO-Revision-Date: 2014-04-16 12:58+0000\n"
"Last-Translator: TuxBrother <vrijwilligerswerk@wij.rs>\n"
"Language-Team: Dutch (Netherlands) (http://www.transifex.com/projects/p/modoboa/language/nl_NL/)\n"
"Language-Team: Dutch (Netherlands) (http://www.transifex.com/projects/p/"
"modoboa/language/nl_NL/)\n"
"Language: nl_NL\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: nl_NL\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: extensions/admin/static/admin/js/admin.js:32
@@ -29,45 +30,67 @@ msgstr "De map van dit domein niet verwijderen (Zal de data ervan behouden)"
#: extensions/admin/static/admin/js/admin.js:173
msgid "This operation will remove ALL data associated to this domain."
msgstr "Deze actie zal ALLE data verwijderen die bij dit domein hoort. Wilt u doorgaan?"
msgstr ""
"Deze actie zal ALLE data verwijderen die bij dit domein hoort. Wilt u "
"doorgaan?"
#: extensions/admin/static/admin/js/admin.js:174
msgid ""
"This operation will remove all data associated to this domain, excepting "
"accounts."
msgstr "Deze actie zal alle data die bij dit domein hoort verwijderen, behalve de gebruikers."
msgstr ""
"Deze actie zal alle data die bij dit domein hoort verwijderen, behalve de "
"gebruikers."
#: extensions/admin/static/admin/js/admin.js:222
msgid "No domain administrator defined"
msgstr "Geen administrator toegewezen"
#: extensions/admin/static/admin/js/admin.js:291
#: extensions/admin/static/admin/js/admin.js:292
msgid "Do not delete mailbox directory"
msgstr "Verwijder de map van deze mailbox niet (zal de data ervan behouden)"
#: extensions/amavis/static/amavis/js/quarantine.js:180
#: extensions/amavis/static/amavis/js/quarantine.js:211
msgid "Release this selection?"
msgstr "Wilt u deze selectie loslaten?"
#: extensions/amavis/static/amavis/js/quarantine.js:184
#: extensions/amavis/static/amavis/js/quarantine.js:215
msgid "Delete this selection?"
msgstr "Selectie verwijderen?"
#: extensions/amavis/static/amavis/js/quarantine.js:203
#: extensions/amavis/static/amavis/js/quarantine.js:255
#, fuzzy
msgid "Mark this selection as spam?"
msgstr "Wilt u deze selectie loslaten?"
#: extensions/amavis/static/amavis/js/quarantine.js:270
#, fuzzy
msgid "Mark this selection as non-spam?"
msgstr "Wilt u deze selectie loslaten?"
#: extensions/amavis/static/amavis/js/quarantine.js:295
#: extensions/amavis/static/amavis/js/selfservice.js:17
msgid "Release this message?"
msgstr "Dit bericht loslaten?"
#: extensions/amavis/static/amavis/js/quarantine.js:207
#: extensions/amavis/static/amavis/js/quarantine.js:299
#: extensions/amavis/static/amavis/js/selfservice.js:21
msgid "Delete this message?"
msgstr "Dit bericht verwijderen?"
#: extensions/amavis/static/amavis/js/quarantine.js:224
#: extensions/amavis/static/amavis/js/quarantine.js:314
msgid "Mark as spam?"
msgstr ""
#: extensions/amavis/static/amavis/js/quarantine.js:330
msgid "Mark as non-spam?"
msgstr ""
#: extensions/amavis/static/amavis/js/quarantine.js:348
msgid "View full headers"
msgstr "Volledige headers weergeven"
#: extensions/amavis/static/amavis/js/quarantine.js:229
#: extensions/amavis/static/amavis/js/quarantine.js:353
msgid "Hide full headers"
msgstr "Volledige headers verbergen"
@@ -96,7 +119,7 @@ msgstr "Wilt u deze filterset activeren?"
msgid "active"
msgstr "activeren"
#: extensions/stats/static/stats/js/stats.js:37
#: extensions/stats/static/stats/js/stats.js:38
msgid "Search a domain"
msgstr "Zoek een domein"
+253 -132
View File
@@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-08-24 12:29+0200\n"
"POT-Creation-Date: 2014-11-04 11:51+0100\n"
"PO-Revision-Date: 2013-12-23 11:25+0000\n"
"Last-Translator: lusitan <lusitan@hushmail.com>\n"
"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/"
@@ -25,8 +25,8 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: core/__init__.py:52 core/__init__.py:53
#: extensions/admin/forms/account.py:326 extensions/admin/forms/domain.py:256
#: extensions/admin/views/domain.py:97 extensions/admin/views/identity.py:129
#: extensions/admin/forms/account.py:327 extensions/admin/forms/domain.py:248
#: extensions/admin/views/domain.py:97 extensions/admin/views/identity.py:133
#: extensions/postfix_autoreply/app_settings.py:11
#: extensions/postfix_relay_domains/forms.py:138
#: extensions/sievefilters/app_settings.py:50
@@ -288,8 +288,8 @@ msgstr ""
msgid "This field is required"
msgstr "Este campo é obrigatório"
#: core/app_settings.py:349 extensions/amavis/app_settings.py:87
#: extensions/amavis/templates/amavis/main_action_bar.html:29
#: core/app_settings.py:349 extensions/amavis/app_settings.py:157
#: extensions/amavis/templates/amavis/main_action_bar.html:41
#: extensions/webmail/app_settings.py:73
msgid "Display"
msgstr "Exibir"
@@ -343,38 +343,38 @@ msgstr ""
msgid "You can't delete your own account"
msgstr "Não pode apagar a sua própria conta"
#: core/models.py:117
#: core/models.py:130
msgid "Failed to update password: LDAP module not installed"
msgstr "Falha ao actualizar password: Modulo LDAP não instalado"
#: core/models.py:170
#: core/models.py:183
msgid "account"
msgstr "conta"
#: core/models.py:321 extensions/admin/models/domain.py:144
#: core/models.py:334 extensions/admin/models/domain.py:144
#: extensions/admin/models/domain_alias.py:39
#: extensions/postfix_relay_domains/models.py:134
#: extensions/postfix_relay_domains/models.py:190
msgid "Invalid line"
msgstr "Linha inválida"
#: core/models.py:325
#: core/models.py:338
msgid "You can't import an account with a role greater than yours"
msgstr "Não é possível importa uma conta com permissões superiores"
#: core/models.py:337
#: core/models.py:350
#, python-format
msgid "The simple user '%s' must have a valid email address"
msgstr "O simple utilizador '%s' deve ter endereço de e-mail válido"
#: core/models.py:341
#: core/models.py:354
#, python-format
msgid "username and email fields must not differ for '%s'"
msgstr ""
"Os campos nome de utilizador e endereço de email não deve ser diferente para "
"'%s'"
#: core/models.py:410 extensions/admin/models/alias.py:35
#: core/models.py:423 extensions/admin/models/alias.py:35
#: extensions/admin/models/domain.py:32
#: extensions/admin/models/domain_alias.py:17
#: extensions/postfix_autoreply/models.py:28
@@ -383,29 +383,29 @@ msgstr ""
msgid "enabled"
msgstr "ativo"
#: core/models.py:411
#: core/models.py:424
msgid "Check to enable this extension"
msgstr "Marque para ativar esta extensão"
#: core/models.py:491
#: core/models.py:504
msgid "added"
msgstr "acrescentado"
#: core/models.py:494
#: core/models.py:507
msgid "modified"
msgstr "modificado"
#: core/models.py:496 core/models.py:521
#: core/models.py:509 core/models.py:534
#, python-format
msgid "%(object)s '%(name)s' %(action)s by user %(user)s"
msgstr "%(object)s '%(name)s' %(action)s pelo utilizador %(user)s"
#: core/models.py:523
#: core/models.py:536
msgid "deleted"
msgstr "apagado"
#: core/tables.py:8 core/templates/core/information.html:8
#: extensions/admin/tables.py:9 extensions/admin/forms/domain.py:187
#: extensions/admin/tables.py:9 extensions/admin/forms/domain.py:179
#: extensions/admin/templates/admin/domains_table.html:5
#: extensions/admin/templates/admin/editdomainform.html:13
#: extensions/admin/templates/admin/identities_table.html:5
@@ -521,7 +521,7 @@ msgstr "Atualizar o sua informação pessoal"
#: core/templates/core/user_profile.html:8
#: extensions/admin/templates/admin/forward.html:8
#: extensions/admin/views/alias.py:112 extensions/admin/views/domain.py:168
#: extensions/admin/views/identity.py:200
#: extensions/admin/views/identity.py:204
#: extensions/postfix_autoreply/templates/postfix_autoreply/autoreply.html:9
#: extensions/postfix_relay_domains/views.py:66
#: extensions/sievefilters/views.py:166 extensions/webmail/views.py:172
@@ -648,7 +648,7 @@ msgstr "Reencaminhar"
msgid "Account import failed (%s): domain does not exist"
msgstr "Importação da conta falhou (%s): domínio não existe"
#: extensions/admin/__init__.py:172 extensions/admin/forms/account.py:196
#: extensions/admin/__init__.py:172 extensions/admin/forms/account.py:197
#, python-format
msgid "Mailbox %s already exists"
msgstr "Caixa de correio %s já existe"
@@ -658,6 +658,12 @@ msgstr "Caixa de correio %s já existe"
msgid "Account import failed (%s): wrong quota value"
msgstr "Importação da conta falhou (%s): domínio não existe"
#: extensions/admin/__init__.py:212 extensions/admin/forms/domain.py:75
#: extensions/postfix_relay_domains/forms.py:50
#: extensions/postfix_relay_domains/forms.py:70
msgid "domain alias"
msgstr ""
#: extensions/admin/app_settings.py:13
#: extensions/admin/templates/admin/editdomainform.html:25
#: extensions/limits/app_settings.py:31 extensions/limits/models.py:23
@@ -706,7 +712,7 @@ msgstr ""
"Ao remover uma caixa de correio estará também a remover a conta associada"
#: extensions/admin/app_settings.py:81 extensions/admin/forms/account.py:178
#: extensions/admin/forms/domain.py:56
#: extensions/admin/forms/domain.py:57
msgid "Must be a positive integer"
msgstr ""
@@ -752,7 +758,7 @@ msgstr "Não pode desativar a sua própria conta"
msgid "E-mail"
msgstr "E-mail"
#: extensions/admin/forms/account.py:113 extensions/admin/forms/domain.py:17
#: extensions/admin/forms/account.py:113 extensions/admin/forms/domain.py:18
msgid "Quota"
msgstr "Quota"
@@ -766,7 +772,7 @@ msgstr ""
"usar o valor predefinido pelo domínio. Deixar em branco para definir uma "
"valor ilimitado (não permitido para administradores do domínio)."
#: extensions/admin/forms/account.py:123 extensions/admin/forms/domain.py:26
#: extensions/admin/forms/account.py:123 extensions/admin/forms/domain.py:27
#: extensions/admin/templates/admin/domains_table.html:6
#: extensions/postfix_relay_domains/forms.py:12
msgid "Alias(es)"
@@ -782,25 +788,25 @@ msgstr ""
"clique ENTER para adicionar uma nova entrada. Use o '*' para criar um alias "
"'catchall' (ex: *@domain.tld)."
#: extensions/admin/forms/account.py:187 extensions/admin/forms/account.py:217
#: extensions/admin/forms/account.py:188 extensions/admin/forms/account.py:218
#: extensions/admin/forms/alias.py:65
msgid "Domain does not exist"
msgstr "O domínio não existe"
#: extensions/admin/forms/account.py:284
#: extensions/admin/forms/account.py:285
msgid "Domain(s)"
msgstr "Domínio(s)"
#: extensions/admin/forms/account.py:286
#: extensions/admin/forms/account.py:287
msgid "Domain(s) that user administrates"
msgstr "Domínio(s) administrado pelo utilizador"
#: extensions/admin/forms/account.py:328
#: extensions/admin/views/identity.py:132
#: extensions/admin/forms/account.py:329
#: extensions/admin/views/identity.py:136
msgid "Mail"
msgstr "Correio"
#: extensions/admin/forms/account.py:330
#: extensions/admin/forms/account.py:331
msgid "Permissions"
msgstr "Permissões"
@@ -850,13 +856,13 @@ msgstr "O destinatário %s já existe"
msgid "No recipient defined"
msgstr "Sem destinatário definido"
#: extensions/admin/forms/domain.py:20
#: extensions/admin/forms/domain.py:21
msgid ""
"Default quota in MB applied to mailboxes. Leave empty to use the default "
"value."
msgstr ""
#: extensions/admin/forms/domain.py:29
#: extensions/admin/forms/domain.py:30
msgid ""
"Alias(es) of this domain. Indicate only one name per input, press ENTER to "
"add a new input."
@@ -864,34 +870,28 @@ msgstr ""
"Alias(es) deste domínio. Indicar apenas um nome por entrada, pressionar "
"ENTER para acrescentar uma nova entrada."
#: extensions/admin/forms/domain.py:75
#: extensions/postfix_relay_domains/forms.py:50
#: extensions/postfix_relay_domains/forms.py:70
msgid "domain alias"
msgstr ""
#: extensions/admin/forms/domain.py:82 extensions/admin/forms/domain.py:98
#: extensions/admin/forms/domain.py:78 extensions/admin/forms/domain.py:92
#: extensions/postfix_relay_domains/forms.py:58
#: extensions/postfix_relay_domains/forms.py:78
#, python-format
msgid "A %s with this name already exists"
msgstr ""
#: extensions/admin/forms/domain.py:92
#: extensions/admin/forms/domain.py:89
#: extensions/postfix_relay_domains/forms.py:49
#: extensions/postfix_relay_domains/forms.py:71
msgid "domain"
msgstr ""
#: extensions/admin/forms/domain.py:181
#: extensions/admin/forms/domain.py:173
msgid "Create a domain administrator"
msgstr "Criar um administrador de domínio"
#: extensions/admin/forms/domain.py:183
#: extensions/admin/forms/domain.py:175
msgid "Automatically create an administrator for this domain"
msgstr "Criar automaticamente um administrador para este domínio"
#: extensions/admin/forms/domain.py:190
#: extensions/admin/forms/domain.py:182
msgid ""
"The administrator's name. Don't include the domain's name here, it will be "
"automatically appended."
@@ -899,19 +899,19 @@ msgstr ""
"O nome do administrador. Não inclua o nome do domínio já que este será "
"automaticamente anexado."
#: extensions/admin/forms/domain.py:198
#: extensions/admin/forms/domain.py:190
msgid "Create aliases"
msgstr " Criar aliases"
#: extensions/admin/forms/domain.py:200
#: extensions/admin/forms/domain.py:192
msgid "Automatically create standard aliases for this domain"
msgstr "Criar automaticamente aliases para este domínio"
#: extensions/admin/forms/domain.py:216
#: extensions/admin/forms/domain.py:208
msgid "Invalid format"
msgstr "Formato inválido"
#: extensions/admin/forms/domain.py:230
#: extensions/admin/forms/domain.py:222
#, python-format
msgid "User '%s' already exists"
msgstr "O utilizador '%s' já existe"
@@ -949,7 +949,7 @@ msgstr ""
"Não é possível definir um reencaminhamento para um destino local. Por favor "
"informe-se junto de um administrador para criar um alias."
#: extensions/admin/forms/import_.py:6 extensions/webmail/forms.py:198
#: extensions/admin/forms/import_.py:6 extensions/webmail/forms.py:200
msgid "Select a file"
msgstr "Escolha um ficheiro"
@@ -969,7 +969,7 @@ msgstr "Passwords encriptadas"
msgid "Check this option if passwords contained in your file are not crypted"
msgstr "Marque esta opção se as senhas contidas no arquivo não são encriptadas"
#: extensions/admin/models/alias.py:18 extensions/admin/models/mailbox.py:62
#: extensions/admin/models/alias.py:18 extensions/admin/models/mailbox.py:74
msgid "address"
msgstr "endereços"
@@ -1067,21 +1067,21 @@ msgstr "O domínio para o qual este alias irá apontar"
msgid "Unknown domain %s"
msgstr "Domínio desconhecido: %s"
#: extensions/admin/models/mailbox.py:63
#: extensions/admin/models/mailbox.py:75
msgid "Mailbox address (without the @domain.tld part)"
msgstr "Endereços das caixas de correio (sem a parte @domain.tld)"
#: extensions/admin/models/mailbox.py:125
#: extensions/admin/models/mailbox.py:136
#, python-format
msgid "Failed to retrieve mailbox location (%s)"
msgstr "Falha ao recuperar a localização da caixa de correio (%s)"
#: extensions/admin/models/mailbox.py:194
#: extensions/admin/models/mailbox.py:221
#, python-format
msgid "Quota is greater than the allowed domain's limit (%dM)"
msgstr "A quota excede o limite permitido pelo domínio (%dM)"
#: extensions/admin/models/mailbox.py:199
#: extensions/admin/models/mailbox.py:227
msgid "A quota is required"
msgstr "É necessário uma quota"
@@ -1153,7 +1153,7 @@ msgid "Importing..."
msgstr "A importar..."
#: extensions/admin/templates/admin/listing.html:14
#: extensions/stats/templates/stats/index.html:28
#: extensions/stats/templates/stats/index.html:23
msgid "Filter"
msgstr "Filtro"
@@ -1255,8 +1255,8 @@ msgid "Alias with this name already exists"
msgstr "Já existe um 'alias' com este nome"
#: extensions/admin/views/alias.py:50 extensions/admin/views/domain.py:102
#: extensions/admin/views/domain.py:131 extensions/admin/views/identity.py:133
#: extensions/admin/views/identity.py:160
#: extensions/admin/views/domain.py:131 extensions/admin/views/identity.py:137
#: extensions/admin/views/identity.py:164
#: extensions/postfix_relay_domains/views.py:34
#: extensions/sievefilters/views.py:144 extensions/sievefilters/views.py:233
#: extensions/webmail/views.py:153
@@ -1299,7 +1299,7 @@ msgstr "Reencaminhamento modificado"
msgid "Alias modified"
msgstr "'Alias' modificado"
#: extensions/admin/views/domain.py:98 extensions/admin/views/identity.py:130
#: extensions/admin/views/domain.py:98 extensions/admin/views/identity.py:134
msgid "Next"
msgstr "Seguinte"
@@ -1307,7 +1307,7 @@ msgstr "Seguinte"
msgid "Options"
msgstr "Opções"
#: extensions/admin/views/domain.py:103 extensions/admin/views/identity.py:134
#: extensions/admin/views/domain.py:103 extensions/admin/views/identity.py:138
msgid "Previous"
msgstr "Anterior"
@@ -1341,11 +1341,11 @@ msgstr "Exportar identidades"
msgid "Export domains"
msgstr "Exportar domínios"
#: extensions/admin/views/identity.py:104
#: extensions/admin/views/identity.py:227
#: extensions/admin/views/identity.py:232 extensions/amavis/views.py:144
#: extensions/amavis/views.py:148 extensions/amavis/views.py:181
#: extensions/amavis/views.py:186 extensions/amavis/views.py:188
#: extensions/admin/views/identity.py:108
#: extensions/admin/views/identity.py:231
#: extensions/admin/views/identity.py:236 extensions/amavis/views.py:172
#: extensions/amavis/views.py:176 extensions/amavis/views.py:207
#: extensions/amavis/views.py:212 extensions/amavis/views.py:214
#: extensions/webmail/views.py:49 extensions/webmail/views.py:67
#: extensions/webmail/views.py:81 extensions/webmail/views.py:99
#: extensions/webmail/views.py:116 extensions/webmail/views.py:202
@@ -1356,19 +1356,19 @@ msgstr "Exportar domínios"
msgid "Invalid request"
msgstr "Pedido inválido"
#: extensions/admin/views/identity.py:151
#: extensions/admin/views/identity.py:155
msgid "Account created"
msgstr "Conta criada"
#: extensions/admin/views/identity.py:157
#: extensions/admin/views/identity.py:161
msgid "New account"
msgstr "Nova conta"
#: extensions/admin/views/identity.py:193
#: extensions/admin/views/identity.py:197
msgid "Account updated"
msgstr "Conta actualizada"
#: extensions/admin/views/identity.py:217
#: extensions/admin/views/identity.py:221
msgid "Account deleted"
msgid_plural "Accounts deleted"
msgstr[0] "Conta eliminada"
@@ -1430,127 +1430,213 @@ msgstr "Reencaminhamento atualizado"
msgid "Simple amavis management frontend"
msgstr "Interface de gestão básica do amavis"
#: extensions/amavis/__init__.py:52 extensions/amavis/general_callbacks.py:18
#: extensions/amavis/__init__.py:52 extensions/amavis/general_callbacks.py:20
msgid "Quarantine"
msgstr "Quarentena"
#: extensions/amavis/app_settings.py:11
#: extensions/amavis/app_settings.py:14
msgid "Quarantine settings"
msgstr "Definições de quarentena"
#: extensions/amavis/app_settings.py:14
#: extensions/amavis/app_settings.py:17
msgid "Maximum message age"
msgstr "Idade maxima da messagem"
#: extensions/amavis/app_settings.py:16
#: extensions/amavis/app_settings.py:19
msgid "Quarantine messages maximum age (in days) before deletion"
msgstr ""
"Tempo máximo que as mensagens ficam na quarentena (em dias) até serem "
"eliminadas"
#: extensions/amavis/app_settings.py:19
#: extensions/amavis/app_settings.py:22
msgid "Messages releasing"
msgstr "Libertar mensagens"
#: extensions/amavis/app_settings.py:22
#: extensions/amavis/app_settings.py:25
msgid "Remove released messages"
msgstr "Remover mensagens libertadas"
#: extensions/amavis/app_settings.py:24
#: extensions/amavis/app_settings.py:27
msgid "Remove messages marked as released while cleaning up the database"
msgstr ""
"Remova as mensagens, marcadas como enviadas, durante a limpeza da base de "
"dados"
#: extensions/amavis/app_settings.py:28
#: extensions/amavis/app_settings.py:32
msgid "Amavis connection mode"
msgstr "Modo de ligação ao amavis"
#: extensions/amavis/app_settings.py:31
#: extensions/amavis/app_settings.py:35
msgid "Mode used to access the PDP server"
msgstr "Método usado para aceder ao servidor PDP"
#: extensions/amavis/app_settings.py:36
#: extensions/amavis/app_settings.py:40
msgid "PDP server address"
msgstr "Endereço do servidor PDP"
#: extensions/amavis/app_settings.py:38
#: extensions/amavis/app_settings.py:42
msgid "PDP server address (if inet mode)"
msgstr "Endereço do servidor PDP (método inet)"
#: extensions/amavis/app_settings.py:42
#: extensions/amavis/app_settings.py:46
msgid "PDP server port"
msgstr "Porta do servidor PDP"
#: extensions/amavis/app_settings.py:44
#: extensions/amavis/app_settings.py:48
msgid "PDP server port (if inet mode)"
msgstr "Porta do servidor PDP (método inet)"
#: extensions/amavis/app_settings.py:48
#: extensions/amavis/app_settings.py:52
msgid "PDP server socket"
msgstr "Socket do servidor PDP"
#: extensions/amavis/app_settings.py:50
#: extensions/amavis/app_settings.py:54
msgid "Path to the PDP server socket (if unix mode)"
msgstr "Caminho para a socket do servidor PDP (método unix)"
#: extensions/amavis/app_settings.py:54
#: extensions/amavis/app_settings.py:58
msgid "Check requests interval"
msgstr "Intervalo de verificação de pedidos"
#: extensions/amavis/app_settings.py:56
#: extensions/amavis/app_settings.py:60
msgid "Interval between two release requests checks"
msgstr "Intervalo entre dois pedidos "
#: extensions/amavis/app_settings.py:60
#: extensions/amavis/app_settings.py:64
msgid "Allow direct release"
msgstr "Permitir envio direto"
#: extensions/amavis/app_settings.py:62
#: extensions/amavis/app_settings.py:66
msgid "Allow users to directly release their messages"
msgstr "Permitir que aos utilizadores libertar mensagens diretamente"
#: extensions/amavis/app_settings.py:66
#: extensions/amavis/app_settings.py:70
msgid "Enable self-service mode"
msgstr "Ativar o modo de self-service"
#: extensions/amavis/app_settings.py:68
#: extensions/amavis/app_settings.py:72
msgid "Activate the 'self-service' mode"
msgstr "Ativar o modo 'self-service'"
#: extensions/amavis/app_settings.py:72
#: extensions/amavis/app_settings.py:76
msgid "Notifications sender"
msgstr "Notificações de remetente"
#: extensions/amavis/app_settings.py:74
#: extensions/amavis/app_settings.py:78
msgid "The e-mail address used to send notitications"
msgstr "O endereço de e-mail usado para enviar notificações"
#: extensions/amavis/app_settings.py:91 extensions/webmail/app_settings.py:91
#: extensions/amavis/app_settings.py:81
#: extensions/amavis/templates/amavis/main_action_bar.html:28
msgid "Manual learning"
msgstr ""
#: extensions/amavis/app_settings.py:84
msgid "Enable manual learning"
msgstr ""
#: extensions/amavis/app_settings.py:87
msgid "Allow super administrators to manually train Spamassassin"
msgstr ""
#: extensions/amavis/app_settings.py:92
msgid "Is Spamassassin local?"
msgstr ""
#: extensions/amavis/app_settings.py:95
msgid "Tell if Spamassassin is running on the same server than modoboa"
msgstr ""
#: extensions/amavis/app_settings.py:100
#, fuzzy
msgid "Default user"
msgstr "Editor predefinido"
#: extensions/amavis/app_settings.py:103
msgid "Name of the user owning the default bayesian database"
msgstr ""
#: extensions/amavis/app_settings.py:108
#, fuzzy
msgid "Spamd address"
msgstr "Do endereço"
#: extensions/amavis/app_settings.py:110
msgid "The IP address where spamd can be reached"
msgstr ""
#: extensions/amavis/app_settings.py:114
#, fuzzy
msgid "Spamd port"
msgstr "Importar"
#: extensions/amavis/app_settings.py:116
msgid "The TCP port spamd is listening on"
msgstr ""
#: extensions/amavis/app_settings.py:120
msgid "Enable per-domain manual learning"
msgstr ""
#: extensions/amavis/app_settings.py:123
msgid ""
"Allow domain administrators to train Spamassassin (within dedicated per-"
"domain databases)"
msgstr ""
#: extensions/amavis/app_settings.py:129
msgid "Enable per-user manual learning"
msgstr ""
#: extensions/amavis/app_settings.py:132
msgid ""
"Allow simple users to personally train Spamassassin (within a dedicated "
"database)"
msgstr ""
#: extensions/amavis/app_settings.py:161 extensions/webmail/app_settings.py:91
msgid "Number of displayed emails per page"
msgstr "Número de e-mails a visíveis por página"
#: extensions/amavis/app_settings.py:92
#: extensions/amavis/app_settings.py:162
msgid "Set the maximum number of messages displayed in a page"
msgstr "Definir o número máximo de mensagens apresentadas por página"
#: extensions/amavis/general_callbacks.py:82
#: extensions/amavis/forms.py:83
msgid "Global database"
msgstr ""
#: extensions/amavis/forms.py:89
#, fuzzy
msgid "Domain's database"
msgstr "Aliases de domínio"
#: extensions/amavis/forms.py:91
msgid "User's database"
msgstr ""
#: extensions/amavis/general_callbacks.py:136
msgid "pending requests"
msgstr "pedidos pendentes"
#: extensions/amavis/general_callbacks.py:125
#: extensions/amavis/general_callbacks.py:179
msgid "Pending requests"
msgstr ""
#: extensions/amavis/general_callbacks.py:135
#: extensions/amavis/general_callbacks.py:189
msgid "Content filter"
msgstr "Filtro de conteúdo"
#: extensions/amavis/lib.py:56
#: extensions/amavis/lib.py:62
#, python-format
msgid "Connection to amavis failed: %s"
msgstr "Não foi possível estabelecer ligação com o amavis: %s"
#: extensions/amavis/lib.py:131
#, fuzzy
msgid "No recipient found"
msgstr "Sem destinatário definido"
#: extensions/amavis/models.py:93
msgid "Virus filter"
msgstr "Filtro de vírus"
@@ -1614,8 +1700,8 @@ msgid "Score"
msgstr ""
#: extensions/amavis/sql_listing.py:33
#: extensions/amavis/templatetags/amavis_tags.py:75
#: extensions/webmail/forms.py:82
#: extensions/amavis/templatetags/amavis_tags.py:106
#: extensions/webmail/forms.py:83
msgid "To"
msgstr "Para"
@@ -1626,49 +1712,65 @@ msgid "From"
msgstr "De"
#: extensions/amavis/sql_listing.py:40 extensions/sievefilters/forms.py:77
#: extensions/webmail/forms.py:86 extensions/webmail/lib/imapemail.py:288
#: extensions/webmail/forms.py:87 extensions/webmail/lib/imapemail.py:288
#: extensions/webmail/lib/listing.py:27 extensions/webmail/lib/tables.py:26
#: templates/common/email_searchbar.html:6
msgid "Subject"
msgstr "Assunto"
#: extensions/amavis/views.py:27
#: extensions/amavis/views.py:31
msgid "Empty quarantine"
msgstr "Quarentena vazia"
#: extensions/amavis/views.py:149
#: extensions/amavis/views.py:177
msgid "Message deleted"
msgstr "Mensagem apagada"
#: extensions/amavis/views.py:168
#: extensions/amavis/views.py:194
#, python-format
msgid "%(count)d message deleted successfully"
msgid_plural "%(count)d messages deleted successfully"
msgstr[0] "%(count)d mensagem eliminada com sucesso"
msgstr[1] "%(count)d mensagens eliminadas com sucesso"
#: extensions/amavis/views.py:191
#: extensions/amavis/views.py:217
msgid "Request sent"
msgstr "Pedido enviado"
#: extensions/amavis/views.py:197
#: extensions/amavis/views.py:223
msgid "Message released"
msgstr "Mensagem libertada"
#: extensions/amavis/views.py:225
#: extensions/amavis/views.py:250
#, python-format
msgid "%(count)d request sent"
msgid_plural "%(count)d requests sent"
msgstr[0] "%(count)d pedido enviado"
msgstr[1] "%(count)d pedidos enviados"
#: extensions/amavis/views.py:246
#: extensions/amavis/views.py:271
#, python-format
msgid "%(count)d message released successfully"
msgid_plural "%(count)d messages released successfully"
msgstr[0] "%(count)d mensagem libertada com sucesso"
msgstr[1] "%(count)d mensagens libertadas com sucesso"
#: extensions/amavis/views.py:309
#, fuzzy, python-format
msgid "%(count)d message processed successfully"
msgid_plural "%(count)d messages processed successfully"
msgstr[0] "%(count)d mensagem libertada com sucesso"
msgstr[1] "%(count)d mensagens libertadas com sucesso"
#: extensions/amavis/views.py:341
#, fuzzy
msgid "Select a database"
msgstr "Escolha um ficheiro"
#: extensions/amavis/views.py:345
msgid "Validate"
msgstr ""
#: extensions/amavis/management/commands/amnotify.py:61
msgid "[modoboa] Pending release requests"
msgstr "[modoboa] Pedidos de laçamento pendentes"
@@ -1694,64 +1796,83 @@ msgid "Select"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:9
msgid "Clean"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:10
msgid "Spam"
msgstr "Spam"
#: extensions/amavis/templates/amavis/main_action_bar.html:10
#: extensions/amavis/templates/amavis/main_action_bar.html:11
msgid "Virus"
msgstr "Vírus"
#: extensions/amavis/templates/amavis/main_action_bar.html:11
#: extensions/amavis/templates/amavis/main_action_bar.html:12
msgid "Bad Header"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:12
#: extensions/amavis/templates/amavis/main_action_bar.html:13
msgid "Bad MIME"
msgstr "Formato MIME inválido"
#: extensions/amavis/templates/amavis/main_action_bar.html:13
#: extensions/amavis/templates/amavis/main_action_bar.html:14
msgid "Banned"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:18
#: extensions/amavis/templatetags/amavis_tags.py:19
#: extensions/amavis/templatetags/amavis_tags.py:54
#: extensions/amavis/templates/amavis/main_action_bar.html:19
#: extensions/amavis/templatetags/amavis_tags.py:24
#: extensions/amavis/templatetags/amavis_tags.py:85
msgid "Release"
msgstr "Libertar"
#: extensions/amavis/templates/amavis/main_action_bar.html:23
#: extensions/amavis/templatetags/amavis_tags.py:25
#: extensions/amavis/templatetags/amavis_tags.py:61
#: extensions/amavis/templates/amavis/main_action_bar.html:24
#: extensions/amavis/templatetags/amavis_tags.py:30
#: extensions/amavis/templatetags/amavis_tags.py:92
#: extensions/webmail/templatetags/webmail_tags.py:32
msgid "Delete"
msgstr "Eliminar"
#: extensions/amavis/templates/amavis/main_action_bar.html:31
#: extensions/amavis/templates/amavis/main_action_bar.html:33
#: extensions/amavis/templatetags/amavis_tags.py:44
#, fuzzy
msgid "Mark as spam"
msgstr "Marcar mensagens"
#: extensions/amavis/templates/amavis/main_action_bar.html:34
#: extensions/amavis/templatetags/amavis_tags.py:52
msgid "Mark as non-spam"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:43
#: extensions/sievefilters/forms.py:64
msgid "All messages"
msgstr "Todas as mensagens"
#: extensions/amavis/templates/amavis/main_action_bar.html:31
#: extensions/amavis/templates/amavis/main_action_bar.html:43
msgid "All"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:32
#: extensions/amavis/templates/amavis/main_action_bar.html:45
msgid "Clean only"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:47
msgid "Spam only"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:33
#: extensions/amavis/templates/amavis/main_action_bar.html:48
msgid "Virus only"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:34
#: extensions/amavis/templates/amavis/main_action_bar.html:49
msgid "Bad Header only"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:35
#: extensions/amavis/templates/amavis/main_action_bar.html:50
msgid "Bad MIME only"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:36
#: extensions/amavis/templates/amavis/main_action_bar.html:51
msgid "Banned only"
msgstr ""
@@ -1799,7 +1920,7 @@ msgstr "Atuar nesta mensagem:"
msgid "Please visit %(listingurl)s for a full listing."
msgstr "Por favor visitar %(listingurl)s para uma listagem completa."
#: extensions/amavis/templatetags/amavis_tags.py:28
#: extensions/amavis/templatetags/amavis_tags.py:35
msgid "View full headers"
msgstr "Ver todos os cabeçalhos"
@@ -2225,7 +2346,7 @@ msgstr "Remetente"
msgid "Recipient"
msgstr "Destinatário"
#: extensions/sievefilters/forms.py:80 extensions/webmail/forms.py:83
#: extensions/sievefilters/forms.py:80 extensions/webmail/forms.py:84
msgid "Cc"
msgstr "Cc"
@@ -2480,19 +2601,19 @@ msgstr "Conjunto de gráficos desconhecido"
msgid "Bad custom period"
msgstr "Período personalizado inválido"
#: extensions/stats/templates/stats/index.html:33
#: extensions/stats/templates/stats/index.html:28
msgid "Search a domain"
msgstr "Procurar um domínio"
#: extensions/stats/templates/stats/index.html:37
#: extensions/stats/templates/stats/index.html:32
msgid "Predefined time ranges"
msgstr "Intervalos de tempo pré-definidos"
#: extensions/stats/templates/stats/index.html:44
#: extensions/stats/templates/stats/index.html:39
msgid "Custom time range"
msgstr "Intervalo de tempo personalizado"
#: extensions/stats/templates/stats/index.html:57
#: extensions/stats/templates/stats/index.html:52
msgid "Apply"
msgstr "Aplicar"
@@ -2648,7 +2769,7 @@ msgstr "Resposta do servidor"
msgid "Unknown action"
msgstr "Acção desconhecida"
#: extensions/webmail/forms.py:84
#: extensions/webmail/forms.py:85
msgid "Cci"
msgstr "Cci"
@@ -2855,15 +2976,15 @@ msgstr "Não"
msgid "Failed to update password: %s"
msgstr "Falha ao actualizar a password: %s"
#: lib/permissions.py:20
#: lib/permissions.py:19
msgid "Simple user"
msgstr "Utilizador simples"
#: lib/permissions.py:22
#: lib/permissions.py:21
msgid "Super administrator"
msgstr "Super Administrador"
#: lib/permissions.py:28
#: lib/permissions.py:27
msgid "Domain administrator"
msgstr "Administrador de domínio"
+27 -9
View File
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-08-24 12:33+0200\n"
"POT-Creation-Date: 2014-10-29 20:23+0100\n"
"PO-Revision-Date: 2013-12-23 11:22+0000\n"
"Last-Translator: lusitan <lusitan@hushmail.com>\n"
"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/"
@@ -45,33 +45,51 @@ msgstr ""
msgid "No domain administrator defined"
msgstr "Não está definido nenhum administrador para o domínio"
#: extensions/admin/static/admin/js/admin.js:291
#: extensions/admin/static/admin/js/admin.js:292
msgid "Do not delete mailbox directory"
msgstr "Não excluir o diretório da caixa de correio"
#: extensions/amavis/static/amavis/js/quarantine.js:180
#: extensions/amavis/static/amavis/js/quarantine.js:211
msgid "Release this selection?"
msgstr "Libertar itens seleccionados?"
#: extensions/amavis/static/amavis/js/quarantine.js:184
#: extensions/amavis/static/amavis/js/quarantine.js:215
msgid "Delete this selection?"
msgstr "Eliminar itens seleccionados?"
#: extensions/amavis/static/amavis/js/quarantine.js:203
#: extensions/amavis/static/amavis/js/quarantine.js:255
#, fuzzy
msgid "Mark this selection as spam?"
msgstr "Libertar itens seleccionados?"
#: extensions/amavis/static/amavis/js/quarantine.js:270
#, fuzzy
msgid "Mark this selection as non-spam?"
msgstr "Libertar itens seleccionados?"
#: extensions/amavis/static/amavis/js/quarantine.js:295
#: extensions/amavis/static/amavis/js/selfservice.js:17
msgid "Release this message?"
msgstr "Libertar esta mensagem?"
#: extensions/amavis/static/amavis/js/quarantine.js:207
#: extensions/amavis/static/amavis/js/quarantine.js:299
#: extensions/amavis/static/amavis/js/selfservice.js:21
msgid "Delete this message?"
msgstr "Eliminar esta mensagem?"
#: extensions/amavis/static/amavis/js/quarantine.js:224
#: extensions/amavis/static/amavis/js/quarantine.js:314
msgid "Mark as spam?"
msgstr ""
#: extensions/amavis/static/amavis/js/quarantine.js:330
msgid "Mark as non-spam?"
msgstr ""
#: extensions/amavis/static/amavis/js/quarantine.js:348
msgid "View full headers"
msgstr "Ver cabeçalho completo"
#: extensions/amavis/static/amavis/js/quarantine.js:229
#: extensions/amavis/static/amavis/js/quarantine.js:353
msgid "Hide full headers"
msgstr "Esconder cabeçalho completo"
@@ -100,7 +118,7 @@ msgstr "Activar estes filtros?"
msgid "active"
msgstr "activo"
#: extensions/stats/static/stats/js/stats.js:37
#: extensions/stats/static/stats/js/stats.js:38
msgid "Search a domain"
msgstr "Pesquisar domínio"
+254 -132
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-08-24 12:28+0200\n"
"POT-Creation-Date: 2014-11-04 11:51+0100\n"
"PO-Revision-Date: 2013-12-03 09:35+0000\n"
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>\n"
"Language-Team: Russian (http://www.transifex.com/projects/p/modoboa/language/"
@@ -20,8 +20,8 @@ msgstr ""
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: core/__init__.py:52 core/__init__.py:53
#: extensions/admin/forms/account.py:326 extensions/admin/forms/domain.py:256
#: extensions/admin/views/domain.py:97 extensions/admin/views/identity.py:129
#: extensions/admin/forms/account.py:327 extensions/admin/forms/domain.py:248
#: extensions/admin/views/domain.py:97 extensions/admin/views/identity.py:133
#: extensions/postfix_autoreply/app_settings.py:11
#: extensions/postfix_relay_domains/forms.py:138
#: extensions/sievefilters/app_settings.py:50
@@ -280,8 +280,8 @@ msgstr ""
msgid "This field is required"
msgstr "Это поле обязательно для заполнеия"
#: core/app_settings.py:349 extensions/amavis/app_settings.py:87
#: extensions/amavis/templates/amavis/main_action_bar.html:29
#: core/app_settings.py:349 extensions/amavis/app_settings.py:157
#: extensions/amavis/templates/amavis/main_action_bar.html:41
#: extensions/webmail/app_settings.py:73
msgid "Display"
msgstr "Отображение"
@@ -335,36 +335,36 @@ msgstr ""
msgid "You can't delete your own account"
msgstr "Вы не можете удалить собственный аккаунт"
#: core/models.py:117
#: core/models.py:130
msgid "Failed to update password: LDAP module not installed"
msgstr "Ошибка обновления пароля: модуль LDAP не установлен"
#: core/models.py:170
#: core/models.py:183
msgid "account"
msgstr "Аккаунт"
#: core/models.py:321 extensions/admin/models/domain.py:144
#: core/models.py:334 extensions/admin/models/domain.py:144
#: extensions/admin/models/domain_alias.py:39
#: extensions/postfix_relay_domains/models.py:134
#: extensions/postfix_relay_domains/models.py:190
msgid "Invalid line"
msgstr "Ошибочная строка"
#: core/models.py:325
#: core/models.py:338
msgid "You can't import an account with a role greater than yours"
msgstr "Вы не можете импортировать аккаунт с ролью старше чем у вас"
#: core/models.py:337
#: core/models.py:350
#, python-format
msgid "The simple user '%s' must have a valid email address"
msgstr "Пользователь '%s' должен иметь действительный почтовый адрес"
#: core/models.py:341
#: core/models.py:354
#, python-format
msgid "username and email fields must not differ for '%s'"
msgstr "Имя пользователя и адрес не должны отличатся для пользователя '%s'"
#: core/models.py:410 extensions/admin/models/alias.py:35
#: core/models.py:423 extensions/admin/models/alias.py:35
#: extensions/admin/models/domain.py:32
#: extensions/admin/models/domain_alias.py:17
#: extensions/postfix_autoreply/models.py:28
@@ -373,29 +373,29 @@ msgstr "Имя пользователя и адрес не должны отли
msgid "enabled"
msgstr "Разрешен"
#: core/models.py:411
#: core/models.py:424
msgid "Check to enable this extension"
msgstr "Отметить для разрешения этого расширения"
#: core/models.py:491
#: core/models.py:504
msgid "added"
msgstr "добавлено"
#: core/models.py:494
#: core/models.py:507
msgid "modified"
msgstr "изменено"
#: core/models.py:496 core/models.py:521
#: core/models.py:509 core/models.py:534
#, python-format
msgid "%(object)s '%(name)s' %(action)s by user %(user)s"
msgstr "%(object)s '%(name)s' %(action)s пользователем %(user)s"
#: core/models.py:523
#: core/models.py:536
msgid "deleted"
msgstr "удалено"
#: core/tables.py:8 core/templates/core/information.html:8
#: extensions/admin/tables.py:9 extensions/admin/forms/domain.py:187
#: extensions/admin/tables.py:9 extensions/admin/forms/domain.py:179
#: extensions/admin/templates/admin/domains_table.html:5
#: extensions/admin/templates/admin/editdomainform.html:13
#: extensions/admin/templates/admin/identities_table.html:5
@@ -511,7 +511,7 @@ msgstr "Обновить личную информацию"
#: core/templates/core/user_profile.html:8
#: extensions/admin/templates/admin/forward.html:8
#: extensions/admin/views/alias.py:112 extensions/admin/views/domain.py:168
#: extensions/admin/views/identity.py:200
#: extensions/admin/views/identity.py:204
#: extensions/postfix_autoreply/templates/postfix_autoreply/autoreply.html:9
#: extensions/postfix_relay_domains/views.py:66
#: extensions/sievefilters/views.py:166 extensions/webmail/views.py:172
@@ -637,7 +637,7 @@ msgstr "Перенаправленые"
msgid "Account import failed (%s): domain does not exist"
msgstr "Ошибка импорта аккаунта (%s): домен должен существовать "
#: extensions/admin/__init__.py:172 extensions/admin/forms/account.py:196
#: extensions/admin/__init__.py:172 extensions/admin/forms/account.py:197
#, python-format
msgid "Mailbox %s already exists"
msgstr "Почтовый ящик %s существует"
@@ -647,6 +647,12 @@ msgstr "Почтовый ящик %s существует"
msgid "Account import failed (%s): wrong quota value"
msgstr "Ошибка импорта аккаунта (%s): домен должен существовать "
#: extensions/admin/__init__.py:212 extensions/admin/forms/domain.py:75
#: extensions/postfix_relay_domains/forms.py:50
#: extensions/postfix_relay_domains/forms.py:70
msgid "domain alias"
msgstr ""
#: extensions/admin/app_settings.py:13
#: extensions/admin/templates/admin/editdomainform.html:25
#: extensions/limits/app_settings.py:31 extensions/limits/models.py:23
@@ -694,7 +700,7 @@ msgid "When a mailbox is removed, also remove the associated account"
msgstr "При удалении почтового ящика, так же удалять и аккаунт владельца"
#: extensions/admin/app_settings.py:81 extensions/admin/forms/account.py:178
#: extensions/admin/forms/domain.py:56
#: extensions/admin/forms/domain.py:57
msgid "Must be a positive integer"
msgstr ""
@@ -740,7 +746,7 @@ msgstr "Вы не можете запретить собственный акк
msgid "E-mail"
msgstr "Е-майл"
#: extensions/admin/forms/account.py:113 extensions/admin/forms/domain.py:17
#: extensions/admin/forms/account.py:113 extensions/admin/forms/domain.py:18
msgid "Quota"
msgstr "Квота"
@@ -755,7 +761,7 @@ msgstr ""
"Оставьте пустым для неограниченного значения. (Не разрешено администраторам "
"домена)"
#: extensions/admin/forms/account.py:123 extensions/admin/forms/domain.py:26
#: extensions/admin/forms/account.py:123 extensions/admin/forms/domain.py:27
#: extensions/admin/templates/admin/domains_table.html:6
#: extensions/postfix_relay_domains/forms.py:12
msgid "Alias(es)"
@@ -770,25 +776,25 @@ msgstr ""
"Синонимы этого почтового ящика. Вводите один адрес за раз. Нажмите ENTER для "
"добавления. Используйте '*' для создания синонима 'для всех' (*@domain.tld)"
#: extensions/admin/forms/account.py:187 extensions/admin/forms/account.py:217
#: extensions/admin/forms/account.py:188 extensions/admin/forms/account.py:218
#: extensions/admin/forms/alias.py:65
msgid "Domain does not exist"
msgstr "Домен не существует"
#: extensions/admin/forms/account.py:284
#: extensions/admin/forms/account.py:285
msgid "Domain(s)"
msgstr "Домен(ы)"
#: extensions/admin/forms/account.py:286
#: extensions/admin/forms/account.py:287
msgid "Domain(s) that user administrates"
msgstr "Домен(ы) администрируемые пользователем"
#: extensions/admin/forms/account.py:328
#: extensions/admin/views/identity.py:132
#: extensions/admin/forms/account.py:329
#: extensions/admin/views/identity.py:136
msgid "Mail"
msgstr "Почта"
#: extensions/admin/forms/account.py:330
#: extensions/admin/forms/account.py:331
msgid "Permissions"
msgstr "Права"
@@ -838,13 +844,13 @@ msgstr "Получатель %s уже присутвует"
msgid "No recipient defined"
msgstr "Получатель не определен"
#: extensions/admin/forms/domain.py:20
#: extensions/admin/forms/domain.py:21
msgid ""
"Default quota in MB applied to mailboxes. Leave empty to use the default "
"value."
msgstr ""
#: extensions/admin/forms/domain.py:29
#: extensions/admin/forms/domain.py:30
msgid ""
"Alias(es) of this domain. Indicate only one name per input, press ENTER to "
"add a new input."
@@ -852,34 +858,28 @@ msgstr ""
"Синоним(ы) этого домена. Вводите одно имя за раз. Нажмите ENTER для "
"добавления."
#: extensions/admin/forms/domain.py:75
#: extensions/postfix_relay_domains/forms.py:50
#: extensions/postfix_relay_domains/forms.py:70
msgid "domain alias"
msgstr ""
#: extensions/admin/forms/domain.py:82 extensions/admin/forms/domain.py:98
#: extensions/admin/forms/domain.py:78 extensions/admin/forms/domain.py:92
#: extensions/postfix_relay_domains/forms.py:58
#: extensions/postfix_relay_domains/forms.py:78
#, python-format
msgid "A %s with this name already exists"
msgstr ""
#: extensions/admin/forms/domain.py:92
#: extensions/admin/forms/domain.py:89
#: extensions/postfix_relay_domains/forms.py:49
#: extensions/postfix_relay_domains/forms.py:71
msgid "domain"
msgstr ""
#: extensions/admin/forms/domain.py:181
#: extensions/admin/forms/domain.py:173
msgid "Create a domain administrator"
msgstr "Создание администратора домена"
#: extensions/admin/forms/domain.py:183
#: extensions/admin/forms/domain.py:175
msgid "Automatically create an administrator for this domain"
msgstr "Автоматически создаст администратора для этого домена"
#: extensions/admin/forms/domain.py:190
#: extensions/admin/forms/domain.py:182
msgid ""
"The administrator's name. Don't include the domain's name here, it will be "
"automatically appended."
@@ -887,19 +887,19 @@ msgstr ""
"Имя администратора. Не включайте имя домена оно будет добавлено "
"автоматически."
#: extensions/admin/forms/domain.py:198
#: extensions/admin/forms/domain.py:190
msgid "Create aliases"
msgstr "Создание синонимов"
#: extensions/admin/forms/domain.py:200
#: extensions/admin/forms/domain.py:192
msgid "Automatically create standard aliases for this domain"
msgstr "Автоматически создает стандартные синонимы для этого домена"
#: extensions/admin/forms/domain.py:216
#: extensions/admin/forms/domain.py:208
msgid "Invalid format"
msgstr "Неверный формат"
#: extensions/admin/forms/domain.py:230
#: extensions/admin/forms/domain.py:222
#, python-format
msgid "User '%s' already exists"
msgstr "Пользователь '%s' уже существует"
@@ -938,7 +938,7 @@ msgstr ""
"Вы не можете определить перенаправление на локальный адрес. Пожалуйста, "
"попросите администратора создать синоним"
#: extensions/admin/forms/import_.py:6 extensions/webmail/forms.py:198
#: extensions/admin/forms/import_.py:6 extensions/webmail/forms.py:200
msgid "Select a file"
msgstr "Выберите файл"
@@ -958,7 +958,7 @@ msgstr "Шифровать пароль"
msgid "Check this option if passwords contained in your file are not crypted"
msgstr "Выберите эту опцию если пароль в вашем файле не зашифрован "
#: extensions/admin/models/alias.py:18 extensions/admin/models/mailbox.py:62
#: extensions/admin/models/alias.py:18 extensions/admin/models/mailbox.py:74
msgid "address"
msgstr "адрес"
@@ -1056,21 +1056,21 @@ msgstr "Домен этого синонима указывает на"
msgid "Unknown domain %s"
msgstr "Неизвестный домен %s"
#: extensions/admin/models/mailbox.py:63
#: extensions/admin/models/mailbox.py:75
msgid "Mailbox address (without the @domain.tld part)"
msgstr "Адрес почтового ящика (без @domain.tld)"
#: extensions/admin/models/mailbox.py:125
#: extensions/admin/models/mailbox.py:136
#, python-format
msgid "Failed to retrieve mailbox location (%s)"
msgstr "Ошибка получения места находжения почтового ящика (%s)"
#: extensions/admin/models/mailbox.py:194
#: extensions/admin/models/mailbox.py:221
#, python-format
msgid "Quota is greater than the allowed domain's limit (%dM)"
msgstr "Квота больше чем разрешено на уровне домена (%dM)"
#: extensions/admin/models/mailbox.py:199
#: extensions/admin/models/mailbox.py:227
msgid "A quota is required"
msgstr "Требуется квота"
@@ -1142,7 +1142,7 @@ msgid "Importing..."
msgstr "Импорт..."
#: extensions/admin/templates/admin/listing.html:14
#: extensions/stats/templates/stats/index.html:28
#: extensions/stats/templates/stats/index.html:23
msgid "Filter"
msgstr "Фильтр"
@@ -1244,8 +1244,8 @@ msgid "Alias with this name already exists"
msgstr "Синоним с таким именем уже есть"
#: extensions/admin/views/alias.py:50 extensions/admin/views/domain.py:102
#: extensions/admin/views/domain.py:131 extensions/admin/views/identity.py:133
#: extensions/admin/views/identity.py:160
#: extensions/admin/views/domain.py:131 extensions/admin/views/identity.py:137
#: extensions/admin/views/identity.py:164
#: extensions/postfix_relay_domains/views.py:34
#: extensions/sievefilters/views.py:144 extensions/sievefilters/views.py:233
#: extensions/webmail/views.py:153
@@ -1288,7 +1288,7 @@ msgstr "Пересылка изменена"
msgid "Alias modified"
msgstr "Синоним изменен"
#: extensions/admin/views/domain.py:98 extensions/admin/views/identity.py:130
#: extensions/admin/views/domain.py:98 extensions/admin/views/identity.py:134
msgid "Next"
msgstr "Следующая"
@@ -1296,7 +1296,7 @@ msgstr "Следующая"
msgid "Options"
msgstr "Опции"
#: extensions/admin/views/domain.py:103 extensions/admin/views/identity.py:134
#: extensions/admin/views/domain.py:103 extensions/admin/views/identity.py:138
msgid "Previous"
msgstr "Предыдущая"
@@ -1331,11 +1331,11 @@ msgstr "Экспорт пользователя"
msgid "Export domains"
msgstr "Экспорт доменов"
#: extensions/admin/views/identity.py:104
#: extensions/admin/views/identity.py:227
#: extensions/admin/views/identity.py:232 extensions/amavis/views.py:144
#: extensions/amavis/views.py:148 extensions/amavis/views.py:181
#: extensions/amavis/views.py:186 extensions/amavis/views.py:188
#: extensions/admin/views/identity.py:108
#: extensions/admin/views/identity.py:231
#: extensions/admin/views/identity.py:236 extensions/amavis/views.py:172
#: extensions/amavis/views.py:176 extensions/amavis/views.py:207
#: extensions/amavis/views.py:212 extensions/amavis/views.py:214
#: extensions/webmail/views.py:49 extensions/webmail/views.py:67
#: extensions/webmail/views.py:81 extensions/webmail/views.py:99
#: extensions/webmail/views.py:116 extensions/webmail/views.py:202
@@ -1346,19 +1346,19 @@ msgstr "Экспорт доменов"
msgid "Invalid request"
msgstr "Ошибочный запрос"
#: extensions/admin/views/identity.py:151
#: extensions/admin/views/identity.py:155
msgid "Account created"
msgstr "Аккаунт создан"
#: extensions/admin/views/identity.py:157
#: extensions/admin/views/identity.py:161
msgid "New account"
msgstr "Новый аккаунт"
#: extensions/admin/views/identity.py:193
#: extensions/admin/views/identity.py:197
msgid "Account updated"
msgstr "аккаунт изменен"
#: extensions/admin/views/identity.py:217
#: extensions/admin/views/identity.py:221
msgid "Account deleted"
msgid_plural "Accounts deleted"
msgstr[0] "Аккаунт удален"
@@ -1421,125 +1421,211 @@ msgstr "Перенаправление обновлено"
msgid "Simple amavis management frontend"
msgstr "Простой интерфейс управления AMaViS"
#: extensions/amavis/__init__.py:52 extensions/amavis/general_callbacks.py:18
#: extensions/amavis/__init__.py:52 extensions/amavis/general_callbacks.py:20
msgid "Quarantine"
msgstr "Карантин"
#: extensions/amavis/app_settings.py:11
#: extensions/amavis/app_settings.py:14
msgid "Quarantine settings"
msgstr "Настройки карантина"
#: extensions/amavis/app_settings.py:14
#: extensions/amavis/app_settings.py:17
msgid "Maximum message age"
msgstr "Максимальное время жизни сообщения"
#: extensions/amavis/app_settings.py:16
#: extensions/amavis/app_settings.py:19
msgid "Quarantine messages maximum age (in days) before deletion"
msgstr ""
"Максимальный срок хранения сообщений в карантине (в днях) перед удалением"
#: extensions/amavis/app_settings.py:19
#: extensions/amavis/app_settings.py:22
msgid "Messages releasing"
msgstr "Сообщение деблокировано"
#: extensions/amavis/app_settings.py:22
#: extensions/amavis/app_settings.py:25
msgid "Remove released messages"
msgstr "Удалить деблокированные сообщения"
#: extensions/amavis/app_settings.py:24
#: extensions/amavis/app_settings.py:27
msgid "Remove messages marked as released while cleaning up the database"
msgstr "Удалить сообщения отмеченные как деблокированные при очистке базы"
#: extensions/amavis/app_settings.py:28
#: extensions/amavis/app_settings.py:32
msgid "Amavis connection mode"
msgstr "Режим подключения Amavis"
#: extensions/amavis/app_settings.py:31
#: extensions/amavis/app_settings.py:35
msgid "Mode used to access the PDP server"
msgstr "Режим подключения к PDP серверу"
#: extensions/amavis/app_settings.py:36
#: extensions/amavis/app_settings.py:40
msgid "PDP server address"
msgstr "Адрес сервера PDP"
#: extensions/amavis/app_settings.py:38
#: extensions/amavis/app_settings.py:42
msgid "PDP server address (if inet mode)"
msgstr "Адрес PDP сервера (интернет режим)"
#: extensions/amavis/app_settings.py:42
#: extensions/amavis/app_settings.py:46
msgid "PDP server port"
msgstr "Порт сервера PDP"
#: extensions/amavis/app_settings.py:44
#: extensions/amavis/app_settings.py:48
msgid "PDP server port (if inet mode)"
msgstr "Порт PDP сервера (интернет режим)"
#: extensions/amavis/app_settings.py:48
#: extensions/amavis/app_settings.py:52
msgid "PDP server socket"
msgstr "Сокет сервера PDP"
#: extensions/amavis/app_settings.py:50
#: extensions/amavis/app_settings.py:54
msgid "Path to the PDP server socket (if unix mode)"
msgstr "Путь к PDP сокету сервера (для UNIX режима)"
#: extensions/amavis/app_settings.py:54
#: extensions/amavis/app_settings.py:58
msgid "Check requests interval"
msgstr "Интервал проверки запросов"
#: extensions/amavis/app_settings.py:56
#: extensions/amavis/app_settings.py:60
msgid "Interval between two release requests checks"
msgstr "Интервал между запросами на деблокирование для доставки"
#: extensions/amavis/app_settings.py:60
#: extensions/amavis/app_settings.py:64
msgid "Allow direct release"
msgstr "Разрешить прямое деблокирование"
#: extensions/amavis/app_settings.py:62
#: extensions/amavis/app_settings.py:66
msgid "Allow users to directly release their messages"
msgstr ""
"Позволить пользователю самостоятельно деблокировать сообщения для доставки"
#: extensions/amavis/app_settings.py:66
#: extensions/amavis/app_settings.py:70
msgid "Enable self-service mode"
msgstr "Разрешить режим самообслуживания"
#: extensions/amavis/app_settings.py:68
#: extensions/amavis/app_settings.py:72
msgid "Activate the 'self-service' mode"
msgstr "Активировать режим 'самообслуживания'"
#: extensions/amavis/app_settings.py:72
#: extensions/amavis/app_settings.py:76
msgid "Notifications sender"
msgstr "Уведомления отправителю"
#: extensions/amavis/app_settings.py:74
#: extensions/amavis/app_settings.py:78
msgid "The e-mail address used to send notitications"
msgstr "Адрес для отправки уведомлений"
#: extensions/amavis/app_settings.py:91 extensions/webmail/app_settings.py:91
#: extensions/amavis/app_settings.py:81
#: extensions/amavis/templates/amavis/main_action_bar.html:28
msgid "Manual learning"
msgstr ""
#: extensions/amavis/app_settings.py:84
msgid "Enable manual learning"
msgstr ""
#: extensions/amavis/app_settings.py:87
msgid "Allow super administrators to manually train Spamassassin"
msgstr ""
#: extensions/amavis/app_settings.py:92
msgid "Is Spamassassin local?"
msgstr ""
#: extensions/amavis/app_settings.py:95
msgid "Tell if Spamassassin is running on the same server than modoboa"
msgstr ""
#: extensions/amavis/app_settings.py:100
#, fuzzy
msgid "Default user"
msgstr "Редактор по умолчанию"
#: extensions/amavis/app_settings.py:103
msgid "Name of the user owning the default bayesian database"
msgstr ""
#: extensions/amavis/app_settings.py:108
#, fuzzy
msgid "Spamd address"
msgstr "Адрес отправителя"
#: extensions/amavis/app_settings.py:110
msgid "The IP address where spamd can be reached"
msgstr ""
#: extensions/amavis/app_settings.py:114
#, fuzzy
msgid "Spamd port"
msgstr "Импорт"
#: extensions/amavis/app_settings.py:116
msgid "The TCP port spamd is listening on"
msgstr ""
#: extensions/amavis/app_settings.py:120
msgid "Enable per-domain manual learning"
msgstr ""
#: extensions/amavis/app_settings.py:123
msgid ""
"Allow domain administrators to train Spamassassin (within dedicated per-"
"domain databases)"
msgstr ""
#: extensions/amavis/app_settings.py:129
msgid "Enable per-user manual learning"
msgstr ""
#: extensions/amavis/app_settings.py:132
msgid ""
"Allow simple users to personally train Spamassassin (within a dedicated "
"database)"
msgstr ""
#: extensions/amavis/app_settings.py:161 extensions/webmail/app_settings.py:91
msgid "Number of displayed emails per page"
msgstr "Количество отображаемых сообщений на странице"
#: extensions/amavis/app_settings.py:92
#: extensions/amavis/app_settings.py:162
msgid "Set the maximum number of messages displayed in a page"
msgstr "Установить максимальное количество сообщений показываемых на странице"
#: extensions/amavis/general_callbacks.py:82
#: extensions/amavis/forms.py:83
msgid "Global database"
msgstr ""
#: extensions/amavis/forms.py:89
#, fuzzy
msgid "Domain's database"
msgstr "Синонимы доменов"
#: extensions/amavis/forms.py:91
msgid "User's database"
msgstr ""
#: extensions/amavis/general_callbacks.py:136
msgid "pending requests"
msgstr "ожидающие запросы"
#: extensions/amavis/general_callbacks.py:125
#: extensions/amavis/general_callbacks.py:179
msgid "Pending requests"
msgstr ""
#: extensions/amavis/general_callbacks.py:135
#: extensions/amavis/general_callbacks.py:189
msgid "Content filter"
msgstr "Фильтр содержания"
#: extensions/amavis/lib.py:56
#: extensions/amavis/lib.py:62
#, python-format
msgid "Connection to amavis failed: %s"
msgstr "Ошибка соединания с Amavis %s"
#: extensions/amavis/lib.py:131
#, fuzzy
msgid "No recipient found"
msgstr "Получатель не определен"
#: extensions/amavis/models.py:93
msgid "Virus filter"
msgstr "Фильтр вирусов"
@@ -1603,8 +1689,8 @@ msgid "Score"
msgstr ""
#: extensions/amavis/sql_listing.py:33
#: extensions/amavis/templatetags/amavis_tags.py:75
#: extensions/webmail/forms.py:82
#: extensions/amavis/templatetags/amavis_tags.py:106
#: extensions/webmail/forms.py:83
msgid "To"
msgstr "Кому"
@@ -1615,21 +1701,21 @@ msgid "From"
msgstr "От кого"
#: extensions/amavis/sql_listing.py:40 extensions/sievefilters/forms.py:77
#: extensions/webmail/forms.py:86 extensions/webmail/lib/imapemail.py:288
#: extensions/webmail/forms.py:87 extensions/webmail/lib/imapemail.py:288
#: extensions/webmail/lib/listing.py:27 extensions/webmail/lib/tables.py:26
#: templates/common/email_searchbar.html:6
msgid "Subject"
msgstr "Тема"
#: extensions/amavis/views.py:27
#: extensions/amavis/views.py:31
msgid "Empty quarantine"
msgstr "очистить карантин"
#: extensions/amavis/views.py:149
#: extensions/amavis/views.py:177
msgid "Message deleted"
msgstr "Сообщение удалено"
#: extensions/amavis/views.py:168
#: extensions/amavis/views.py:194
#, python-format
msgid "%(count)d message deleted successfully"
msgid_plural "%(count)d messages deleted successfully"
@@ -1637,15 +1723,15 @@ msgstr[0] "%(count)d сообщение успешно удалено"
msgstr[1] "%(count)d сообщения успешно удалено"
msgstr[2] "%(count)d сообщений успешно удалено"
#: extensions/amavis/views.py:191
#: extensions/amavis/views.py:217
msgid "Request sent"
msgstr "Запрос послан"
#: extensions/amavis/views.py:197
#: extensions/amavis/views.py:223
msgid "Message released"
msgstr "Сообщение деблокировано"
#: extensions/amavis/views.py:225
#: extensions/amavis/views.py:250
#, python-format
msgid "%(count)d request sent"
msgid_plural "%(count)d requests sent"
@@ -1653,7 +1739,7 @@ msgstr[0] "%(count)d запрос послан"
msgstr[1] "%(count)d запроса полано"
msgstr[2] "%(count)d запросов послано"
#: extensions/amavis/views.py:246
#: extensions/amavis/views.py:271
#, python-format
msgid "%(count)d message released successfully"
msgid_plural "%(count)d messages released successfully"
@@ -1661,6 +1747,23 @@ msgstr[0] "%(count)d сообщение успешно деблокирован
msgstr[1] "%(count)d сообщения успешно деблокировано"
msgstr[2] "%(count)d сообщений успешно деблокировано"
#: extensions/amavis/views.py:309
#, fuzzy, python-format
msgid "%(count)d message processed successfully"
msgid_plural "%(count)d messages processed successfully"
msgstr[0] "%(count)d сообщение успешно деблокировано"
msgstr[1] "%(count)d сообщения успешно деблокировано"
msgstr[2] "%(count)d сообщений успешно деблокировано"
#: extensions/amavis/views.py:341
#, fuzzy
msgid "Select a database"
msgstr "Выберите файл"
#: extensions/amavis/views.py:345
msgid "Validate"
msgstr ""
#: extensions/amavis/management/commands/amnotify.py:61
msgid "[modoboa] Pending release requests"
msgstr "[modoboa] Заявки для включения в следующий релиз"
@@ -1686,64 +1789,83 @@ msgid "Select"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:9
msgid "Clean"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:10
msgid "Spam"
msgstr "Спам"
#: extensions/amavis/templates/amavis/main_action_bar.html:10
#: extensions/amavis/templates/amavis/main_action_bar.html:11
msgid "Virus"
msgstr "Вирус"
#: extensions/amavis/templates/amavis/main_action_bar.html:11
#: extensions/amavis/templates/amavis/main_action_bar.html:12
msgid "Bad Header"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:12
#: extensions/amavis/templates/amavis/main_action_bar.html:13
msgid "Bad MIME"
msgstr "Ошибка MIME"
#: extensions/amavis/templates/amavis/main_action_bar.html:13
#: extensions/amavis/templates/amavis/main_action_bar.html:14
msgid "Banned"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:18
#: extensions/amavis/templatetags/amavis_tags.py:19
#: extensions/amavis/templatetags/amavis_tags.py:54
#: extensions/amavis/templates/amavis/main_action_bar.html:19
#: extensions/amavis/templatetags/amavis_tags.py:24
#: extensions/amavis/templatetags/amavis_tags.py:85
msgid "Release"
msgstr "Деблокировать"
#: extensions/amavis/templates/amavis/main_action_bar.html:23
#: extensions/amavis/templatetags/amavis_tags.py:25
#: extensions/amavis/templatetags/amavis_tags.py:61
#: extensions/amavis/templates/amavis/main_action_bar.html:24
#: extensions/amavis/templatetags/amavis_tags.py:30
#: extensions/amavis/templatetags/amavis_tags.py:92
#: extensions/webmail/templatetags/webmail_tags.py:32
msgid "Delete"
msgstr "Удалить"
#: extensions/amavis/templates/amavis/main_action_bar.html:31
#: extensions/amavis/templates/amavis/main_action_bar.html:33
#: extensions/amavis/templatetags/amavis_tags.py:44
#, fuzzy
msgid "Mark as spam"
msgstr "Пометить сообщение"
#: extensions/amavis/templates/amavis/main_action_bar.html:34
#: extensions/amavis/templatetags/amavis_tags.py:52
msgid "Mark as non-spam"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:43
#: extensions/sievefilters/forms.py:64
msgid "All messages"
msgstr "Все сообщения"
#: extensions/amavis/templates/amavis/main_action_bar.html:31
#: extensions/amavis/templates/amavis/main_action_bar.html:43
msgid "All"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:32
#: extensions/amavis/templates/amavis/main_action_bar.html:45
msgid "Clean only"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:47
msgid "Spam only"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:33
#: extensions/amavis/templates/amavis/main_action_bar.html:48
msgid "Virus only"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:34
#: extensions/amavis/templates/amavis/main_action_bar.html:49
msgid "Bad Header only"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:35
#: extensions/amavis/templates/amavis/main_action_bar.html:50
msgid "Bad MIME only"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:36
#: extensions/amavis/templates/amavis/main_action_bar.html:51
msgid "Banned only"
msgstr ""
@@ -1794,7 +1916,7 @@ msgstr "Действуйте согласно этого сообщения"
msgid "Please visit %(listingurl)s for a full listing."
msgstr "Для просмотра листинга посетите %(listingurl)s"
#: extensions/amavis/templatetags/amavis_tags.py:28
#: extensions/amavis/templatetags/amavis_tags.py:35
msgid "View full headers"
msgstr "Просмотр заголовков"
@@ -2221,7 +2343,7 @@ msgstr "Отправитель"
msgid "Recipient"
msgstr "Получатель"
#: extensions/sievefilters/forms.py:80 extensions/webmail/forms.py:83
#: extensions/sievefilters/forms.py:80 extensions/webmail/forms.py:84
msgid "Cc"
msgstr "Копия"
@@ -2475,19 +2597,19 @@ msgstr "Неизвестный графический набор "
msgid "Bad custom period"
msgstr "Не верный выбор периода"
#: extensions/stats/templates/stats/index.html:33
#: extensions/stats/templates/stats/index.html:28
msgid "Search a domain"
msgstr "Искать домен"
#: extensions/stats/templates/stats/index.html:37
#: extensions/stats/templates/stats/index.html:32
msgid "Predefined time ranges"
msgstr "Предопределенные временные диапазоны"
#: extensions/stats/templates/stats/index.html:44
#: extensions/stats/templates/stats/index.html:39
msgid "Custom time range"
msgstr "Пользовательские временные диапазоны"
#: extensions/stats/templates/stats/index.html:57
#: extensions/stats/templates/stats/index.html:52
msgid "Apply"
msgstr "Применить"
@@ -2644,7 +2766,7 @@ msgstr "Ответ сервера"
msgid "Unknown action"
msgstr "Неизвестное действие"
#: extensions/webmail/forms.py:84
#: extensions/webmail/forms.py:85
msgid "Cci"
msgstr "Скрытая копия"
@@ -2853,15 +2975,15 @@ msgstr "Нет"
msgid "Failed to update password: %s"
msgstr "Ошибка обновления пароля: %s"
#: lib/permissions.py:20
#: lib/permissions.py:19
msgid "Simple user"
msgstr "Обычный пользователь"
#: lib/permissions.py:22
#: lib/permissions.py:21
msgid "Super administrator"
msgstr "Супер администратор"
#: lib/permissions.py:28
#: lib/permissions.py:27
msgid "Domain administrator"
msgstr "Администратор домена"
+27 -9
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-08-24 12:32+0200\n"
"POT-Creation-Date: 2014-10-29 20:22+0100\n"
"PO-Revision-Date: 2013-12-03 09:35+0000\n"
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>\n"
"Language-Team: Russian (http://www.transifex.com/projects/p/modoboa/language/"
@@ -43,33 +43,51 @@ msgstr ""
msgid "No domain administrator defined"
msgstr "Не указан администратор домена"
#: extensions/admin/static/admin/js/admin.js:291
#: extensions/admin/static/admin/js/admin.js:292
msgid "Do not delete mailbox directory"
msgstr "Не удаляйте каталог почтовых ящиков"
#: extensions/amavis/static/amavis/js/quarantine.js:180
#: extensions/amavis/static/amavis/js/quarantine.js:211
msgid "Release this selection?"
msgstr "Деблокировать отмеченные?"
#: extensions/amavis/static/amavis/js/quarantine.js:184
#: extensions/amavis/static/amavis/js/quarantine.js:215
msgid "Delete this selection?"
msgstr "Удалить отмеченные?"
#: extensions/amavis/static/amavis/js/quarantine.js:203
#: extensions/amavis/static/amavis/js/quarantine.js:255
#, fuzzy
msgid "Mark this selection as spam?"
msgstr "Деблокировать отмеченные?"
#: extensions/amavis/static/amavis/js/quarantine.js:270
#, fuzzy
msgid "Mark this selection as non-spam?"
msgstr "Деблокировать отмеченные?"
#: extensions/amavis/static/amavis/js/quarantine.js:295
#: extensions/amavis/static/amavis/js/selfservice.js:17
msgid "Release this message?"
msgstr "Деблокировать сообщение?"
#: extensions/amavis/static/amavis/js/quarantine.js:207
#: extensions/amavis/static/amavis/js/quarantine.js:299
#: extensions/amavis/static/amavis/js/selfservice.js:21
msgid "Delete this message?"
msgstr "Удалить сообщение?"
#: extensions/amavis/static/amavis/js/quarantine.js:224
#: extensions/amavis/static/amavis/js/quarantine.js:314
msgid "Mark as spam?"
msgstr ""
#: extensions/amavis/static/amavis/js/quarantine.js:330
msgid "Mark as non-spam?"
msgstr ""
#: extensions/amavis/static/amavis/js/quarantine.js:348
msgid "View full headers"
msgstr "Просмотр всех заголовков"
#: extensions/amavis/static/amavis/js/quarantine.js:229
#: extensions/amavis/static/amavis/js/quarantine.js:353
msgid "Hide full headers"
msgstr "Скрыть все заголовки"
@@ -98,7 +116,7 @@ msgstr "Активировать набор фильтров?"
msgid "active"
msgstr "активно"
#: extensions/stats/static/stats/js/stats.js:37
#: extensions/stats/static/stats/js/stats.js:38
msgid "Search a domain"
msgstr "Найти домен"
+256 -133
View File
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-08-24 12:28+0200\n"
"POT-Creation-Date: 2014-11-04 11:51+0100\n"
"PO-Revision-Date: 2013-09-27 08:19+0000\n"
"Last-Translator: ogg1980 <olle@dalnix.se>\n"
"Language-Team: Swedish (http://www.transifex.com/projects/p/modoboa/language/"
@@ -21,8 +21,8 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: core/__init__.py:52 core/__init__.py:53
#: extensions/admin/forms/account.py:326 extensions/admin/forms/domain.py:256
#: extensions/admin/views/domain.py:97 extensions/admin/views/identity.py:129
#: extensions/admin/forms/account.py:327 extensions/admin/forms/domain.py:248
#: extensions/admin/views/domain.py:97 extensions/admin/views/identity.py:133
#: extensions/postfix_autoreply/app_settings.py:11
#: extensions/postfix_relay_domains/forms.py:138
#: extensions/sievefilters/app_settings.py:50
@@ -288,8 +288,8 @@ msgstr "Ogiltig förfrågan"
msgid "This field is required"
msgstr "Detta fält är obligatoriskt"
#: core/app_settings.py:349 extensions/amavis/app_settings.py:87
#: extensions/amavis/templates/amavis/main_action_bar.html:29
#: core/app_settings.py:349 extensions/amavis/app_settings.py:157
#: extensions/amavis/templates/amavis/main_action_bar.html:41
#: extensions/webmail/app_settings.py:73
msgid "Display"
msgstr "Visning"
@@ -345,36 +345,36 @@ msgstr "Senaste inloggad"
msgid "You can't delete your own account"
msgstr "Du kan inte radera ditt eget konto"
#: core/models.py:117
#: core/models.py:130
msgid "Failed to update password: LDAP module not installed"
msgstr "Misslyckades med att uppdatera lösenord: LDAP modul ej installerad"
#: core/models.py:170
#: core/models.py:183
msgid "account"
msgstr "konto"
#: core/models.py:321 extensions/admin/models/domain.py:144
#: core/models.py:334 extensions/admin/models/domain.py:144
#: extensions/admin/models/domain_alias.py:39
#: extensions/postfix_relay_domains/models.py:134
#: extensions/postfix_relay_domains/models.py:190
msgid "Invalid line"
msgstr "Ogiltig rad"
#: core/models.py:325
#: core/models.py:338
msgid "You can't import an account with a role greater than yours"
msgstr "Du kan inte importera konto med en roll större än din"
#: core/models.py:337
#: core/models.py:350
#, python-format
msgid "The simple user '%s' must have a valid email address"
msgstr "Den enkla användaren '%s' måste ha en gällande e-postadress"
#: core/models.py:341
#: core/models.py:354
#, python-format
msgid "username and email fields must not differ for '%s'"
msgstr "användarnamn och e-post fält får inte avvika för '%s'"
#: core/models.py:410 extensions/admin/models/alias.py:35
#: core/models.py:423 extensions/admin/models/alias.py:35
#: extensions/admin/models/domain.py:32
#: extensions/admin/models/domain_alias.py:17
#: extensions/postfix_autoreply/models.py:28
@@ -383,29 +383,29 @@ msgstr "användarnamn och e-post fält får inte avvika för '%s'"
msgid "enabled"
msgstr "aktiverad"
#: core/models.py:411
#: core/models.py:424
msgid "Check to enable this extension"
msgstr "Markera för att aktivera detta tillägg"
#: core/models.py:491
#: core/models.py:504
msgid "added"
msgstr "tillagd"
#: core/models.py:494
#: core/models.py:507
msgid "modified"
msgstr "ändrad"
#: core/models.py:496 core/models.py:521
#: core/models.py:509 core/models.py:534
#, python-format
msgid "%(object)s '%(name)s' %(action)s by user %(user)s"
msgstr "%(object)s '%(name)s' %(action)s av användare %(user)s"
#: core/models.py:523
#: core/models.py:536
msgid "deleted"
msgstr "raderad"
#: core/tables.py:8 core/templates/core/information.html:8
#: extensions/admin/tables.py:9 extensions/admin/forms/domain.py:187
#: extensions/admin/tables.py:9 extensions/admin/forms/domain.py:179
#: extensions/admin/templates/admin/domains_table.html:5
#: extensions/admin/templates/admin/editdomainform.html:13
#: extensions/admin/templates/admin/identities_table.html:5
@@ -521,7 +521,7 @@ msgstr "Uppdatera personlig information"
#: core/templates/core/user_profile.html:8
#: extensions/admin/templates/admin/forward.html:8
#: extensions/admin/views/alias.py:112 extensions/admin/views/domain.py:168
#: extensions/admin/views/identity.py:200
#: extensions/admin/views/identity.py:204
#: extensions/postfix_autoreply/templates/postfix_autoreply/autoreply.html:9
#: extensions/postfix_relay_domains/views.py:66
#: extensions/sievefilters/views.py:166 extensions/webmail/views.py:172
@@ -648,7 +648,7 @@ msgstr "Vidarebefordra"
msgid "Account import failed (%s): domain does not exist"
msgstr "Konto import misslyckades (%s): domänen existerar inte"
#: extensions/admin/__init__.py:172 extensions/admin/forms/account.py:196
#: extensions/admin/__init__.py:172 extensions/admin/forms/account.py:197
#, python-format
msgid "Mailbox %s already exists"
msgstr "Brevlåda %s finns redan"
@@ -658,6 +658,13 @@ msgstr "Brevlåda %s finns redan"
msgid "Account import failed (%s): wrong quota value"
msgstr "Konto import misslyckades (%s): domänen existerar inte"
#: extensions/admin/__init__.py:212 extensions/admin/forms/domain.py:75
#: extensions/postfix_relay_domains/forms.py:50
#: extensions/postfix_relay_domains/forms.py:70
#, fuzzy
msgid "domain alias"
msgstr "Domän alias"
#: extensions/admin/app_settings.py:13
#: extensions/admin/templates/admin/editdomainform.html:25
#: extensions/limits/app_settings.py:31 extensions/limits/models.py:23
@@ -706,7 +713,7 @@ msgid "When a mailbox is removed, also remove the associated account"
msgstr "När en brevlåda raderas, radera också tillhörande konto"
#: extensions/admin/app_settings.py:81 extensions/admin/forms/account.py:178
#: extensions/admin/forms/domain.py:56
#: extensions/admin/forms/domain.py:57
msgid "Must be a positive integer"
msgstr ""
@@ -754,7 +761,7 @@ msgstr "Du kan inte inaktivera ditt eget konto"
msgid "E-mail"
msgstr "E-post"
#: extensions/admin/forms/account.py:113 extensions/admin/forms/domain.py:17
#: extensions/admin/forms/account.py:113 extensions/admin/forms/domain.py:18
msgid "Quota"
msgstr "Kvota"
@@ -768,7 +775,7 @@ msgstr ""
"domänens förvalda. Lämna tomt för att definiera ett obegränsat värde (ej "
"tillåtet för domänadministratörer)."
#: extensions/admin/forms/account.py:123 extensions/admin/forms/domain.py:26
#: extensions/admin/forms/account.py:123 extensions/admin/forms/domain.py:27
#: extensions/admin/templates/admin/domains_table.html:6
#: extensions/postfix_relay_domains/forms.py:12
msgid "Alias(es)"
@@ -784,25 +791,25 @@ msgstr ""
"lägga till ny rad. Använd '*' för att skapa ett 'catchall' alias (ex: "
"*@domain.tld)."
#: extensions/admin/forms/account.py:187 extensions/admin/forms/account.py:217
#: extensions/admin/forms/account.py:188 extensions/admin/forms/account.py:218
#: extensions/admin/forms/alias.py:65
msgid "Domain does not exist"
msgstr "Domän existerar inte"
#: extensions/admin/forms/account.py:284
#: extensions/admin/forms/account.py:285
msgid "Domain(s)"
msgstr "Domän(er)"
#: extensions/admin/forms/account.py:286
#: extensions/admin/forms/account.py:287
msgid "Domain(s) that user administrates"
msgstr "Domän(er) användaren administrerar"
#: extensions/admin/forms/account.py:328
#: extensions/admin/views/identity.py:132
#: extensions/admin/forms/account.py:329
#: extensions/admin/views/identity.py:136
msgid "Mail"
msgstr "Post"
#: extensions/admin/forms/account.py:330
#: extensions/admin/forms/account.py:331
msgid "Permissions"
msgstr "Rättigheter"
@@ -852,14 +859,14 @@ msgstr "Mottagare %s finns redan"
msgid "No recipient defined"
msgstr "Ingen mottagare definierad"
#: extensions/admin/forms/domain.py:20
#: extensions/admin/forms/domain.py:21
#, fuzzy
msgid ""
"Default quota in MB applied to mailboxes. Leave empty to use the default "
"value."
msgstr "Standard kvota i MB applicerad för brevlådor"
#: extensions/admin/forms/domain.py:29
#: extensions/admin/forms/domain.py:30
msgid ""
"Alias(es) of this domain. Indicate only one name per input, press ENTER to "
"add a new input."
@@ -867,36 +874,29 @@ msgstr ""
"Alias för denna domän. Ange endast ett namn per rad, tryck ENTER för att "
"lägga till en rad."
#: extensions/admin/forms/domain.py:75
#: extensions/postfix_relay_domains/forms.py:50
#: extensions/postfix_relay_domains/forms.py:70
#, fuzzy
msgid "domain alias"
msgstr "Domän alias"
#: extensions/admin/forms/domain.py:82 extensions/admin/forms/domain.py:98
#: extensions/admin/forms/domain.py:78 extensions/admin/forms/domain.py:92
#: extensions/postfix_relay_domains/forms.py:58
#: extensions/postfix_relay_domains/forms.py:78
#, fuzzy, python-format
msgid "A %s with this name already exists"
msgstr "Alias med detta namn existerar redan"
#: extensions/admin/forms/domain.py:92
#: extensions/admin/forms/domain.py:89
#: extensions/postfix_relay_domains/forms.py:49
#: extensions/postfix_relay_domains/forms.py:71
#, fuzzy
msgid "domain"
msgstr "Domäner"
#: extensions/admin/forms/domain.py:181
#: extensions/admin/forms/domain.py:173
msgid "Create a domain administrator"
msgstr "Skapa en domän administratör"
#: extensions/admin/forms/domain.py:183
#: extensions/admin/forms/domain.py:175
msgid "Automatically create an administrator for this domain"
msgstr "Skapa en domän administratör automatiskt för denna domän"
#: extensions/admin/forms/domain.py:190
#: extensions/admin/forms/domain.py:182
msgid ""
"The administrator's name. Don't include the domain's name here, it will be "
"automatically appended."
@@ -904,19 +904,19 @@ msgstr ""
"Administratörens namn. Inkludera inte domänens namn här, den kommer att "
"läggas till automatiskt."
#: extensions/admin/forms/domain.py:198
#: extensions/admin/forms/domain.py:190
msgid "Create aliases"
msgstr "Skapa alias."
#: extensions/admin/forms/domain.py:200
#: extensions/admin/forms/domain.py:192
msgid "Automatically create standard aliases for this domain"
msgstr "Skapa automatiskt standard alias för den här domänen"
#: extensions/admin/forms/domain.py:216
#: extensions/admin/forms/domain.py:208
msgid "Invalid format"
msgstr "Ogiltigt format"
#: extensions/admin/forms/domain.py:230
#: extensions/admin/forms/domain.py:222
#, python-format
msgid "User '%s' already exists"
msgstr "Användare '%s' finns redan"
@@ -953,7 +953,7 @@ msgstr ""
"Du kan inte definiera en vidarebefordring till en lokal destination. Be din "
"administratör att skapa ett alias istället."
#: extensions/admin/forms/import_.py:6 extensions/webmail/forms.py:198
#: extensions/admin/forms/import_.py:6 extensions/webmail/forms.py:200
msgid "Select a file"
msgstr "Välj en fil"
@@ -973,7 +973,7 @@ msgstr "Krypterade lösenord"
msgid "Check this option if passwords contained in your file are not crypted"
msgstr "Markera det här alternativet om lösenord i filen inte är krypterad"
#: extensions/admin/models/alias.py:18 extensions/admin/models/mailbox.py:62
#: extensions/admin/models/alias.py:18 extensions/admin/models/mailbox.py:74
msgid "address"
msgstr "adress"
@@ -1072,21 +1072,21 @@ msgstr "Domän dit detta alias pekar mot"
msgid "Unknown domain %s"
msgstr "Okänt kommando %s"
#: extensions/admin/models/mailbox.py:63
#: extensions/admin/models/mailbox.py:75
msgid "Mailbox address (without the @domain.tld part)"
msgstr "Brevlåde adress (utan @domain.tld)"
#: extensions/admin/models/mailbox.py:125
#: extensions/admin/models/mailbox.py:136
#, python-format
msgid "Failed to retrieve mailbox location (%s)"
msgstr "Kunde inte hitta brevlådans sökväg (%s)"
#: extensions/admin/models/mailbox.py:194
#: extensions/admin/models/mailbox.py:221
#, python-format
msgid "Quota is greater than the allowed domain's limit (%dM)"
msgstr "Kvotan är större än domänens gräns (%dM)"
#: extensions/admin/models/mailbox.py:199
#: extensions/admin/models/mailbox.py:227
msgid "A quota is required"
msgstr "En kvota krävs"
@@ -1159,7 +1159,7 @@ msgid "Importing..."
msgstr "Importerar..."
#: extensions/admin/templates/admin/listing.html:14
#: extensions/stats/templates/stats/index.html:28
#: extensions/stats/templates/stats/index.html:23
msgid "Filter"
msgstr "Filter"
@@ -1261,8 +1261,8 @@ msgid "Alias with this name already exists"
msgstr "Alias med detta namn existerar redan"
#: extensions/admin/views/alias.py:50 extensions/admin/views/domain.py:102
#: extensions/admin/views/domain.py:131 extensions/admin/views/identity.py:133
#: extensions/admin/views/identity.py:160
#: extensions/admin/views/domain.py:131 extensions/admin/views/identity.py:137
#: extensions/admin/views/identity.py:164
#: extensions/postfix_relay_domains/views.py:34
#: extensions/sievefilters/views.py:144 extensions/sievefilters/views.py:233
#: extensions/webmail/views.py:153
@@ -1305,7 +1305,7 @@ msgstr "Vidarebefodring ändrad"
msgid "Alias modified"
msgstr "Alias ändrat"
#: extensions/admin/views/domain.py:98 extensions/admin/views/identity.py:130
#: extensions/admin/views/domain.py:98 extensions/admin/views/identity.py:134
msgid "Next"
msgstr "Nästa"
@@ -1313,7 +1313,7 @@ msgstr "Nästa"
msgid "Options"
msgstr "Inställningar"
#: extensions/admin/views/domain.py:103 extensions/admin/views/identity.py:134
#: extensions/admin/views/domain.py:103 extensions/admin/views/identity.py:138
msgid "Previous"
msgstr "Föregående"
@@ -1347,11 +1347,11 @@ msgstr "Exportera konton"
msgid "Export domains"
msgstr "Exportera domäner"
#: extensions/admin/views/identity.py:104
#: extensions/admin/views/identity.py:227
#: extensions/admin/views/identity.py:232 extensions/amavis/views.py:144
#: extensions/amavis/views.py:148 extensions/amavis/views.py:181
#: extensions/amavis/views.py:186 extensions/amavis/views.py:188
#: extensions/admin/views/identity.py:108
#: extensions/admin/views/identity.py:231
#: extensions/admin/views/identity.py:236 extensions/amavis/views.py:172
#: extensions/amavis/views.py:176 extensions/amavis/views.py:207
#: extensions/amavis/views.py:212 extensions/amavis/views.py:214
#: extensions/webmail/views.py:49 extensions/webmail/views.py:67
#: extensions/webmail/views.py:81 extensions/webmail/views.py:99
#: extensions/webmail/views.py:116 extensions/webmail/views.py:202
@@ -1362,19 +1362,19 @@ msgstr "Exportera domäner"
msgid "Invalid request"
msgstr "Ogiltig förfrågan"
#: extensions/admin/views/identity.py:151
#: extensions/admin/views/identity.py:155
msgid "Account created"
msgstr "Konto skapat"
#: extensions/admin/views/identity.py:157
#: extensions/admin/views/identity.py:161
msgid "New account"
msgstr "Nytt konto"
#: extensions/admin/views/identity.py:193
#: extensions/admin/views/identity.py:197
msgid "Account updated"
msgstr "Konto uppdaterat"
#: extensions/admin/views/identity.py:217
#: extensions/admin/views/identity.py:221
msgid "Account deleted"
msgid_plural "Accounts deleted"
msgstr[0] "Konto raderat"
@@ -1457,124 +1457,211 @@ msgstr "Vidarebefordring uppdaterad"
msgid "Simple amavis management frontend"
msgstr "Enkel amavis hantering frontend"
#: extensions/amavis/__init__.py:52 extensions/amavis/general_callbacks.py:18
#: extensions/amavis/__init__.py:52 extensions/amavis/general_callbacks.py:20
msgid "Quarantine"
msgstr "Karantän"
#: extensions/amavis/app_settings.py:11
#: extensions/amavis/app_settings.py:14
msgid "Quarantine settings"
msgstr "Karantän inställningar"
#: extensions/amavis/app_settings.py:14
#: extensions/amavis/app_settings.py:17
msgid "Maximum message age"
msgstr "Maximal meddelandeålder"
#: extensions/amavis/app_settings.py:16
#: extensions/amavis/app_settings.py:19
msgid "Quarantine messages maximum age (in days) before deletion"
msgstr "Maximalt antal dagar meddelanden behålls i karantän innan radering"
#: extensions/amavis/app_settings.py:19
#: extensions/amavis/app_settings.py:22
msgid "Messages releasing"
msgstr "Meddelanden frisläppta"
#: extensions/amavis/app_settings.py:22
#: extensions/amavis/app_settings.py:25
msgid "Remove released messages"
msgstr "Radera frisläppta meddelanden"
#: extensions/amavis/app_settings.py:24
#: extensions/amavis/app_settings.py:27
msgid "Remove messages marked as released while cleaning up the database"
msgstr "Ta bort meddelanden markerade som släppta när vi städar databasen"
#: extensions/amavis/app_settings.py:28
#: extensions/amavis/app_settings.py:32
msgid "Amavis connection mode"
msgstr "Amavis anslutningsläge"
#: extensions/amavis/app_settings.py:31
#: extensions/amavis/app_settings.py:35
msgid "Mode used to access the PDP server"
msgstr "Läge som används för att komma åt PDP-servern"
#: extensions/amavis/app_settings.py:36
#: extensions/amavis/app_settings.py:40
msgid "PDP server address"
msgstr "PDP server adress"
#: extensions/amavis/app_settings.py:38
#: extensions/amavis/app_settings.py:42
msgid "PDP server address (if inet mode)"
msgstr "PDP-server adress (om inet läge)"
#: extensions/amavis/app_settings.py:42
#: extensions/amavis/app_settings.py:46
msgid "PDP server port"
msgstr "PDP server port"
#: extensions/amavis/app_settings.py:44
#: extensions/amavis/app_settings.py:48
msgid "PDP server port (if inet mode)"
msgstr "PDP serverport (om inet läge)"
#: extensions/amavis/app_settings.py:48
#: extensions/amavis/app_settings.py:52
msgid "PDP server socket"
msgstr "PDP server socket"
#: extensions/amavis/app_settings.py:50
#: extensions/amavis/app_settings.py:54
msgid "Path to the PDP server socket (if unix mode)"
msgstr "Sökväg till PDP-servern uttaget (om Unix-läge)"
#: extensions/amavis/app_settings.py:54
#: extensions/amavis/app_settings.py:58
msgid "Check requests interval"
msgstr "Intervall kontroll begäran"
#: extensions/amavis/app_settings.py:56
#: extensions/amavis/app_settings.py:60
msgid "Interval between two release requests checks"
msgstr "Intervall mellan frisläppskontroller"
#: extensions/amavis/app_settings.py:60
#: extensions/amavis/app_settings.py:64
msgid "Allow direct release"
msgstr "Möjliggör direkt frisläpp"
#: extensions/amavis/app_settings.py:62
#: extensions/amavis/app_settings.py:66
msgid "Allow users to directly release their messages"
msgstr "Tillåt användare att frisläppa sina meddelanden"
#: extensions/amavis/app_settings.py:66
#: extensions/amavis/app_settings.py:70
msgid "Enable self-service mode"
msgstr "Aktivera \"själv-service\" läge"
#: extensions/amavis/app_settings.py:68
#: extensions/amavis/app_settings.py:72
msgid "Activate the 'self-service' mode"
msgstr "Aktivera \"själv-service\" läge"
#: extensions/amavis/app_settings.py:72
#: extensions/amavis/app_settings.py:76
msgid "Notifications sender"
msgstr "Notifierings avsändare"
#: extensions/amavis/app_settings.py:74
#: extensions/amavis/app_settings.py:78
msgid "The e-mail address used to send notitications"
msgstr "E-postadress att använda för att skicka notifikationer"
#: extensions/amavis/app_settings.py:91 extensions/webmail/app_settings.py:91
#: extensions/amavis/app_settings.py:81
#: extensions/amavis/templates/amavis/main_action_bar.html:28
msgid "Manual learning"
msgstr ""
#: extensions/amavis/app_settings.py:84
msgid "Enable manual learning"
msgstr ""
#: extensions/amavis/app_settings.py:87
msgid "Allow super administrators to manually train Spamassassin"
msgstr ""
#: extensions/amavis/app_settings.py:92
msgid "Is Spamassassin local?"
msgstr ""
#: extensions/amavis/app_settings.py:95
msgid "Tell if Spamassassin is running on the same server than modoboa"
msgstr ""
#: extensions/amavis/app_settings.py:100
#, fuzzy
msgid "Default user"
msgstr "Standard editor"
#: extensions/amavis/app_settings.py:103
msgid "Name of the user owning the default bayesian database"
msgstr ""
#: extensions/amavis/app_settings.py:108
#, fuzzy
msgid "Spamd address"
msgstr "Från adress"
#: extensions/amavis/app_settings.py:110
msgid "The IP address where spamd can be reached"
msgstr ""
#: extensions/amavis/app_settings.py:114
#, fuzzy
msgid "Spamd port"
msgstr "Skräp"
#: extensions/amavis/app_settings.py:116
msgid "The TCP port spamd is listening on"
msgstr ""
#: extensions/amavis/app_settings.py:120
msgid "Enable per-domain manual learning"
msgstr ""
#: extensions/amavis/app_settings.py:123
msgid ""
"Allow domain administrators to train Spamassassin (within dedicated per-"
"domain databases)"
msgstr ""
#: extensions/amavis/app_settings.py:129
msgid "Enable per-user manual learning"
msgstr ""
#: extensions/amavis/app_settings.py:132
msgid ""
"Allow simple users to personally train Spamassassin (within a dedicated "
"database)"
msgstr ""
#: extensions/amavis/app_settings.py:161 extensions/webmail/app_settings.py:91
msgid "Number of displayed emails per page"
msgstr "Antalet visade e-postmeddelanden per sida"
#: extensions/amavis/app_settings.py:92
#: extensions/amavis/app_settings.py:162
msgid "Set the maximum number of messages displayed in a page"
msgstr "Anger det maximala antalet meddelanden som visas på en sida"
#: extensions/amavis/general_callbacks.py:82
#: extensions/amavis/forms.py:83
msgid "Global database"
msgstr ""
#: extensions/amavis/forms.py:89
#, fuzzy
msgid "Domain's database"
msgstr "Domän alias"
#: extensions/amavis/forms.py:91
#, fuzzy
msgid "User's database"
msgstr "Sök bas"
#: extensions/amavis/general_callbacks.py:136
msgid "pending requests"
msgstr "väntande förfrågningar"
#: extensions/amavis/general_callbacks.py:125
#: extensions/amavis/general_callbacks.py:179
#, fuzzy
msgid "Pending requests"
msgstr "väntande förfrågningar"
#: extensions/amavis/general_callbacks.py:135
#: extensions/amavis/general_callbacks.py:189
msgid "Content filter"
msgstr "Innehålls filter"
#: extensions/amavis/lib.py:56
#: extensions/amavis/lib.py:62
#, python-format
msgid "Connection to amavis failed: %s"
msgstr "Anslutning till amavis misslyckades: %s"
#: extensions/amavis/lib.py:131
#, fuzzy
msgid "No recipient found"
msgstr "Ingen mottagare definierad"
#: extensions/amavis/models.py:93
msgid "Virus filter"
msgstr "Virus filter"
@@ -1638,8 +1725,8 @@ msgid "Score"
msgstr ""
#: extensions/amavis/sql_listing.py:33
#: extensions/amavis/templatetags/amavis_tags.py:75
#: extensions/webmail/forms.py:82
#: extensions/amavis/templatetags/amavis_tags.py:106
#: extensions/webmail/forms.py:83
msgid "To"
msgstr "Till"
@@ -1650,49 +1737,65 @@ msgid "From"
msgstr "Från"
#: extensions/amavis/sql_listing.py:40 extensions/sievefilters/forms.py:77
#: extensions/webmail/forms.py:86 extensions/webmail/lib/imapemail.py:288
#: extensions/webmail/forms.py:87 extensions/webmail/lib/imapemail.py:288
#: extensions/webmail/lib/listing.py:27 extensions/webmail/lib/tables.py:26
#: templates/common/email_searchbar.html:6
msgid "Subject"
msgstr "Ämne"
#: extensions/amavis/views.py:27
#: extensions/amavis/views.py:31
msgid "Empty quarantine"
msgstr "Karantän tom"
#: extensions/amavis/views.py:149
#: extensions/amavis/views.py:177
msgid "Message deleted"
msgstr "Meddelande raderat"
#: extensions/amavis/views.py:168
#: extensions/amavis/views.py:194
#, python-format
msgid "%(count)d message deleted successfully"
msgid_plural "%(count)d messages deleted successfully"
msgstr[0] "%(count)d meddelande raderadat"
msgstr[1] "%(count)d meddelanden raderade"
#: extensions/amavis/views.py:191
#: extensions/amavis/views.py:217
msgid "Request sent"
msgstr "Begäran skickad"
#: extensions/amavis/views.py:197
#: extensions/amavis/views.py:223
msgid "Message released"
msgstr "Meddelande släppt"
#: extensions/amavis/views.py:225
#: extensions/amavis/views.py:250
#, python-format
msgid "%(count)d request sent"
msgid_plural "%(count)d requests sent"
msgstr[0] "%(count)d förfrågning skickad"
msgstr[1] "%(count)d förfrågningar skickadade"
#: extensions/amavis/views.py:246
#: extensions/amavis/views.py:271
#, python-format
msgid "%(count)d message released successfully"
msgid_plural "%(count)d messages released successfully"
msgstr[0] "%(count)d meddelande frisläppt"
msgstr[1] "%(count)d meddelanden frisläppta"
#: extensions/amavis/views.py:309
#, fuzzy, python-format
msgid "%(count)d message processed successfully"
msgid_plural "%(count)d messages processed successfully"
msgstr[0] "%(count)d meddelande frisläppt"
msgstr[1] "%(count)d meddelanden frisläppta"
#: extensions/amavis/views.py:341
#, fuzzy
msgid "Select a database"
msgstr "Välj en fil"
#: extensions/amavis/views.py:345
msgid "Validate"
msgstr ""
#: extensions/amavis/management/commands/amnotify.py:61
msgid "[modoboa] Pending release requests"
msgstr "[modoboa] Väntande release förfrågningar"
@@ -1719,70 +1822,90 @@ msgid "Select"
msgstr "Välj en fil"
#: extensions/amavis/templates/amavis/main_action_bar.html:9
msgid "Clean"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:10
msgid "Spam"
msgstr "Skräp"
#: extensions/amavis/templates/amavis/main_action_bar.html:10
#: extensions/amavis/templates/amavis/main_action_bar.html:11
msgid "Virus"
msgstr "Virus"
#: extensions/amavis/templates/amavis/main_action_bar.html:11
#: extensions/amavis/templates/amavis/main_action_bar.html:12
#, fuzzy
msgid "Bad Header"
msgstr "Dålig rubrik"
#: extensions/amavis/templates/amavis/main_action_bar.html:12
#: extensions/amavis/templates/amavis/main_action_bar.html:13
msgid "Bad MIME"
msgstr "Dålig MIME"
#: extensions/amavis/templates/amavis/main_action_bar.html:13
#: extensions/amavis/templates/amavis/main_action_bar.html:14
#, fuzzy
msgid "Banned"
msgstr "Förbjudna filter"
#: extensions/amavis/templates/amavis/main_action_bar.html:18
#: extensions/amavis/templatetags/amavis_tags.py:19
#: extensions/amavis/templatetags/amavis_tags.py:54
#: extensions/amavis/templates/amavis/main_action_bar.html:19
#: extensions/amavis/templatetags/amavis_tags.py:24
#: extensions/amavis/templatetags/amavis_tags.py:85
msgid "Release"
msgstr "Släpp"
#: extensions/amavis/templates/amavis/main_action_bar.html:23
#: extensions/amavis/templatetags/amavis_tags.py:25
#: extensions/amavis/templatetags/amavis_tags.py:61
#: extensions/amavis/templates/amavis/main_action_bar.html:24
#: extensions/amavis/templatetags/amavis_tags.py:30
#: extensions/amavis/templatetags/amavis_tags.py:92
#: extensions/webmail/templatetags/webmail_tags.py:32
msgid "Delete"
msgstr "Radera"
#: extensions/amavis/templates/amavis/main_action_bar.html:31
#: extensions/amavis/templates/amavis/main_action_bar.html:33
#: extensions/amavis/templatetags/amavis_tags.py:44
#, fuzzy
msgid "Mark as spam"
msgstr "Markera meddelande"
#: extensions/amavis/templates/amavis/main_action_bar.html:34
#: extensions/amavis/templatetags/amavis_tags.py:52
msgid "Mark as non-spam"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:43
#: extensions/sievefilters/forms.py:64
msgid "All messages"
msgstr "Alla meddelanden"
#: extensions/amavis/templates/amavis/main_action_bar.html:31
#: extensions/amavis/templates/amavis/main_action_bar.html:43
msgid "All"
msgstr ""
#: extensions/amavis/templates/amavis/main_action_bar.html:32
#: extensions/amavis/templates/amavis/main_action_bar.html:45
#, fuzzy
msgid "Clean only"
msgstr "Förbjudna filter"
#: extensions/amavis/templates/amavis/main_action_bar.html:47
#, fuzzy
msgid "Spam only"
msgstr "Skräp"
#: extensions/amavis/templates/amavis/main_action_bar.html:33
#: extensions/amavis/templates/amavis/main_action_bar.html:48
#, fuzzy
msgid "Virus only"
msgstr "Virus"
#: extensions/amavis/templates/amavis/main_action_bar.html:34
#: extensions/amavis/templates/amavis/main_action_bar.html:49
#, fuzzy
msgid "Bad Header only"
msgstr "Dålig rubrik"
#: extensions/amavis/templates/amavis/main_action_bar.html:35
#: extensions/amavis/templates/amavis/main_action_bar.html:50
#, fuzzy
msgid "Bad MIME only"
msgstr "Dålig MIME"
#: extensions/amavis/templates/amavis/main_action_bar.html:36
#: extensions/amavis/templates/amavis/main_action_bar.html:51
#, fuzzy
msgid "Banned only"
msgstr "Förbjudna filter"
@@ -1831,7 +1954,7 @@ msgstr "Agera på detta meddelande:"
msgid "Please visit %(listingurl)s for a full listing."
msgstr "Besök %(listingurl)s för full lista."
#: extensions/amavis/templatetags/amavis_tags.py:28
#: extensions/amavis/templatetags/amavis_tags.py:35
msgid "View full headers"
msgstr "Visa meddelandehuvuden"
@@ -2278,7 +2401,7 @@ msgstr "Avsändare"
msgid "Recipient"
msgstr "Mottagare"
#: extensions/sievefilters/forms.py:80 extensions/webmail/forms.py:83
#: extensions/sievefilters/forms.py:80 extensions/webmail/forms.py:84
msgid "Cc"
msgstr "Cc"
@@ -2536,19 +2659,19 @@ msgstr "Okänt grafisk uppsättning"
msgid "Bad custom period"
msgstr "Ogiltig anpassad tid"
#: extensions/stats/templates/stats/index.html:33
#: extensions/stats/templates/stats/index.html:28
msgid "Search a domain"
msgstr "Sök en domän"
#: extensions/stats/templates/stats/index.html:37
#: extensions/stats/templates/stats/index.html:32
msgid "Predefined time ranges"
msgstr "Fördefinierade tidsområden"
#: extensions/stats/templates/stats/index.html:44
#: extensions/stats/templates/stats/index.html:39
msgid "Custom time range"
msgstr "Anpassat tidsintervall"
#: extensions/stats/templates/stats/index.html:57
#: extensions/stats/templates/stats/index.html:52
msgid "Apply"
msgstr "Applicera"
@@ -2705,7 +2828,7 @@ msgstr "Server svar"
msgid "Unknown action"
msgstr "Okänd åtgärd"
#: extensions/webmail/forms.py:84
#: extensions/webmail/forms.py:85
msgid "Cci"
msgstr "BCC"
@@ -2912,15 +3035,15 @@ msgstr "Nej"
msgid "Failed to update password: %s"
msgstr "Misslyckades med att uppdatera lösenord: %s"
#: lib/permissions.py:20
#: lib/permissions.py:19
msgid "Simple user"
msgstr "Enkel användare"
#: lib/permissions.py:22
#: lib/permissions.py:21
msgid "Super administrator"
msgstr "Super administratör"
#: lib/permissions.py:28
#: lib/permissions.py:27
msgid "Domain administrator"
msgstr "Domän administratör"
+27 -9
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-08-24 12:32+0200\n"
"POT-Creation-Date: 2014-10-29 20:22+0100\n"
"PO-Revision-Date: 2013-05-23 08:22+0000\n"
"Last-Translator: ogg1980 <olle@dalnix.se>\n"
"Language-Team: Swedish (http://www.transifex.com/projects/p/modoboa/language/"
@@ -43,33 +43,51 @@ msgstr ""
msgid "No domain administrator defined"
msgstr "Ingen domänadministratör definierad"
#: extensions/admin/static/admin/js/admin.js:291
#: extensions/admin/static/admin/js/admin.js:292
msgid "Do not delete mailbox directory"
msgstr "Radera inte brevlådans katalog"
#: extensions/amavis/static/amavis/js/quarantine.js:180
#: extensions/amavis/static/amavis/js/quarantine.js:211
msgid "Release this selection?"
msgstr "Släpp markerat urval?"
#: extensions/amavis/static/amavis/js/quarantine.js:184
#: extensions/amavis/static/amavis/js/quarantine.js:215
msgid "Delete this selection?"
msgstr "Radera markerat urval?"
#: extensions/amavis/static/amavis/js/quarantine.js:203
#: extensions/amavis/static/amavis/js/quarantine.js:255
#, fuzzy
msgid "Mark this selection as spam?"
msgstr "Släpp markerat urval?"
#: extensions/amavis/static/amavis/js/quarantine.js:270
#, fuzzy
msgid "Mark this selection as non-spam?"
msgstr "Släpp markerat urval?"
#: extensions/amavis/static/amavis/js/quarantine.js:295
#: extensions/amavis/static/amavis/js/selfservice.js:17
msgid "Release this message?"
msgstr "Släpp detta meddelande?"
#: extensions/amavis/static/amavis/js/quarantine.js:207
#: extensions/amavis/static/amavis/js/quarantine.js:299
#: extensions/amavis/static/amavis/js/selfservice.js:21
msgid "Delete this message?"
msgstr "Radera detta meddelande?"
#: extensions/amavis/static/amavis/js/quarantine.js:224
#: extensions/amavis/static/amavis/js/quarantine.js:314
msgid "Mark as spam?"
msgstr ""
#: extensions/amavis/static/amavis/js/quarantine.js:330
msgid "Mark as non-spam?"
msgstr ""
#: extensions/amavis/static/amavis/js/quarantine.js:348
msgid "View full headers"
msgstr "Visa meddelandehuvud"
#: extensions/amavis/static/amavis/js/quarantine.js:229
#: extensions/amavis/static/amavis/js/quarantine.js:353
msgid "Hide full headers"
msgstr "Göm meddelandehuvud"
@@ -98,7 +116,7 @@ msgstr "Aktivera filteruppsättning?"
msgid "active"
msgstr "aktivera"
#: extensions/stats/static/stats/js/stats.js:37
#: extensions/stats/static/stats/js/stats.js:38
msgid "Search a domain"
msgstr "Sök domän"
+1 -1
View File
@@ -54,7 +54,7 @@ def read(fname):
setup(
name="modoboa",
version='1.1.6',
version='1.1.7',
url='http://modoboa.org/',
license='MIT',
description="Mail hosting made simple",