Merge branch 'master' into refactor/documentation

Conflicts:
	doc/manual_installation/dovecot.rst
This commit is contained in:
Antoine Nguyen
2016-10-18 18:05:51 +02:00
99 changed files with 2191 additions and 1818 deletions
+1 -4
View File
@@ -2,7 +2,7 @@
`Modoboa <http://modoboa.org/>`_
################################
|travis| |codecov| |landscape| |latest-version| |downloads|
|travis| |codecov| |landscape| |latest-version|
Modoboa is a mail hosting and management platform including a modern
and simplified Web User Interface. It provides useful components such
@@ -58,9 +58,6 @@ The following external libraries are provided with Modoboa:
.. |landscape| image:: https://landscape.io/github/tonioo/modoboa/master/landscape.svg?style=flat
:target: https://landscape.io/github/tonioo/modoboa/master
:alt: Code Health
.. |downloads| image:: https://img.shields.io/pypi/dm/modoboa.svg
:target: https://pypi.python.org/pypi/modoboa/
:alt: Downloads from Pypi
.. |travis| image:: https://travis-ci.org/tonioo/modoboa.png?branch=master
:target: https://travis-ci.org/tonioo/modoboa
.. |codecov| image:: http://codecov.io/github/tonioo/modoboa/coverage.svg?branch=master
+1 -1
View File
@@ -52,7 +52,7 @@ copyright = u'2016, Antoine Nguyen'
# The short X.Y version.
version = '1.6'
# The full version, including alpha/beta/rc tags.
release = '1.6.0'
release = '1.6.1'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
+6 -2
View File
@@ -15,9 +15,12 @@ You first need to create configuration files (or map files) that will
be used by Postfix to lookup into Modoboa tables.
To automaticaly generate the requested map files and store them in a
directory, run the following command::
directory, run the following command:
$ modoboa-admin.py postfix_maps --dbtype <mysql|postgres|sqlite> <directory>
.. sourcecode:: bash
> cd <modoboa_instance_path>
> python manage.py generate_postfix_maps --destdir <directory>
``<directory>`` is the directory where the files will be
stored. Answer the few questions and you're done.
@@ -56,6 +59,7 @@ Use the following configuration in the :file:`/etc/postfix/main.cf` file
smtpd_sender_login_maps =
<driver>:/etc/postfix/sql-sender-login-mailboxes.cf
<driver>:/etc/postfix/sql-sender-login-aliases.cf
<driver>:/etc/postfix/sql-sender-login-mailboxes-extra.cf
smtpd_sender_restrictions =
reject_sender_login_mismatch
+13 -3
View File
@@ -90,24 +90,34 @@ Specific instructions
An interesting feature brougth by this version is the capability to
make different checks about MX records. For example, Modoboa can
query main `DNSBL <https://en.wikipedia.org/wiki/DNSBL>`_ providers
for every defined domain. With this, you will quickly now if one the
for every defined domain. With this, you will quickly know if one the
domains you manage is listed or not. To activate it, add the
following line to your crontab::
*/30 * * * * <modoboa_site>/manage.py modo check_mx
*/30 * * * * <optional_virtualenv_path/>python <modoboa_instance_dir>/manage.py modo check_mx
The communication with Modoboa public API has been reworked. Instead
of sending direct synchronous queries (for example to check new
versions), a cron job has been added. To activate it, add the
following line to your crontab::
0 * * * * <modoboa_site>/manage.py communicate_with_public_api
0 * * * * <optional_virtualenv_path/>python <modoboa_instance_dir>/manage.py communicate_with_public_api
Please also note that public API now uses TLS so you must update your
configuration as follows::
MODOBOA_API_URL = 'https://api.modoboa.org/1/'
Finally, it is now possible to declare additional sender addresses on
a per-account basis. You need to update your postfix configuration in
order to use this functionality. Just edit the :file:`main.cf` file
and change the following parameter::
smtpd_sender_login_maps =
<driver>:/etc/postfix/sql-sender-login-mailboxes.cf
<driver>:/etc/postfix/sql-sender-login-aliases.cf
<driver>:/etc/postfix/sql-sender-login-mailboxes-extra.cf
1.5.0
=====
+6 -3
View File
@@ -56,9 +56,12 @@ class AccountViewSet(viewsets.ModelViewSet):
def get_serializer_class(self):
"""Return a serializer."""
if self.request.method == "GET":
return serializers.AccountSerializer
return serializers.WritableAccountSerializer
action_dict = {
"list": serializers.AccountSerializer,
"retrive": serializers.AccountSerializer
}
return action_dict.get(
self.action, serializers.WritableAccountSerializer)
def get_queryset(self):
"""Filter queryset based on current user."""
+3 -3
View File
@@ -85,7 +85,7 @@ def grant_access_to_all_objects(user, role):
def export_admin_domains(admin):
result = [admin.mailbox.quota] \
if hasattr(admin, "mailbox") else [""]
if admin.group != "DomainAdmins":
if admin.role != "DomainAdmins":
return result
return result + [dom.name for dom in Domain.objects.get_for_admin(admin)]
@@ -139,7 +139,7 @@ def import_account_mailbox(user, account, row):
quota, override_rules=user.has_perm("admin.change_domain")
)
mb.save(creator=user)
if account.group == "DomainAdmins":
if account.role == "DomainAdmins":
for domname in row[2:]:
try:
dom = Domain.objects.get(name=domname.strip())
@@ -157,7 +157,7 @@ def account_auto_created(user):
if parameters.get_admin("AUTO_CREATE_DOMAIN_AND_MAILBOX") == "no":
return
localpart, domname = split_mailbox(user.username)
if user.group != 'SimpleUsers' and domname is None:
if user.role != 'SimpleUsers' and domname is None:
return
sadmins = User.objects.filter(is_superuser=True)
try:
-1
View File
@@ -21,7 +21,6 @@ DNSBL_PROVIDERS = [
"dnsbl-3.uceprotect.net",
"dnsbl.cyberlogic.net",
"dnsbl.inps.de",
"dnsbl.njabl.org",
"dnsbl.sorbs.net",
"drone.abuse.ch",
"duinv.aupads.org",
+54 -40
View File
@@ -38,7 +38,7 @@ class AccountFormGeneral(forms.ModelForm):
)
role = forms.ChoiceField(
label=ugettext_lazy("Role"),
choices=[('', ugettext_lazy("Choose"))],
choices=[("", ugettext_lazy("Choose"))],
help_text=ugettext_lazy("What level of permission this user will have")
)
password1 = PasswordField(
@@ -59,52 +59,63 @@ class AccountFormGeneral(forms.ModelForm):
"username", "first_name", "last_name", "role", "is_active",
"master_user"
)
labels = {
"is_active": ugettext_lazy("Enabled")
}
def __init__(self, user, *args, **kwargs):
super(AccountFormGeneral, self).__init__(*args, **kwargs)
self.fields = OrderedDict(
(key, self.fields[key]) for key in
['role', 'username', 'first_name', 'last_name', 'password1',
'password2', 'master_user', 'is_active']
["role", "username", "first_name", "last_name", "password1",
"password2", "master_user", "is_active"]
)
self.fields["is_active"].label = _("Enabled")
self.user = user
if user.group == "DomainAdmins":
condition = (
user.role == "DomainAdmins" or
user.role == "Resellers" and self.instance == user
)
if condition:
self.fields["role"] = forms.CharField(
label="",
widget=forms.HiddenInput(attrs={"class": "form-control"}),
required=False
)
else:
self.fields["role"].choices = [('', ugettext_lazy("Choose"))]
self.fields["role"].choices += \
get_account_roles(user, kwargs['instance']) \
if 'instance' in kwargs else get_account_roles(user)
self.fields["role"].choices += (
get_account_roles(user, self.instance)
if self.instance.pk else get_account_roles(user)
)
if not user.is_superuser:
del self.fields["master_user"]
if "instance" in kwargs:
account = kwargs["instance"]
domain_disabled = (
hasattr(account, "mailbox") and
not account.mailbox.domain.enabled
)
if not self.instance.pk:
return
domain_disabled = (
hasattr(self.instance, "mailbox") and
not self.instance.mailbox.domain.enabled
)
if domain_disabled:
self.fields["is_active"].widget.attrs["disabled"] = "disabled"
if args:
empty_password = (
args[0].get("password1", "") == "" and
args[0].get("password2", "") == "")
if empty_password:
self.fields["password1"].required = False
self.fields["password2"].required = False
if domain_disabled:
self.fields["is_active"].widget.attrs['disabled'] = "disabled"
if args:
if args[0].get("password1", "") == "" \
and args[0].get("password2", "") == "":
self.fields["password1"].required = False
self.fields["password2"].required = False
if domain_disabled:
del self.fields["is_active"]
self.fields["role"].initial = account.group
if not account.is_local \
and parameters.get_admin(
"LDAP_AUTH_METHOD", app="core") == "directbind":
del self.fields["password1"]
del self.fields["password2"]
del self.fields["is_active"]
self.fields["role"].initial = self.instance.role
condition = (
not self.instance.is_local and
parameters.get_admin(
"LDAP_AUTH_METHOD", app="core") == "directbind")
if condition:
del self.fields["password1"]
del self.fields["password2"]
def domain_is_disabled(self):
"""Little shortcut to get the domain's state.
@@ -118,10 +129,12 @@ class AccountFormGeneral(forms.ModelForm):
return not self.instance.mailbox.domain.enabled
def clean_role(self):
if self.user.group == "DomainAdmins":
if self.user.role == "DomainAdmins":
if self.instance == self.user:
return "DomainAdmins"
return "SimpleUsers"
elif self.user.role == "Resellers" and self.instance == self.user:
return "Resellers"
return self.cleaned_data["role"]
def clean_username(self):
@@ -193,8 +206,8 @@ class AccountFormMail(forms.Form, DynamicForm):
required=False,
help_text=ugettext_lazy(
"Alias(es) of this mailbox. Indicate only one address per input, "
"press ENTER to add a new input. Use the '*' character to create "
"a 'catchall' alias (ex: *@domain.tld)."
"press ENTER to add a new input. To create a catchall alias, just "
"enter the domain name (@domain.tld)."
)
)
senderaddress = lib_fields.UTF8AndEmptyUserEmailField(
@@ -279,7 +292,7 @@ class AccountFormMail(forms.Form, DynamicForm):
self.add_error("quota", _("Must be a positive integer"))
self.aliases = []
self.sender_addresses = []
for name, value in cleaned_data.iteritems():
for name, value in list(cleaned_data.items()):
if value == "":
continue
if name.startswith("aliases"):
@@ -459,10 +472,12 @@ class AccountForm(TabForms):
})
def check_perms(self, account):
if account.is_superuser:
return False
return self.user.has_perm("admin.add_domain") \
and account.has_perm("core.add_user")
"""Check if perms form must displayed or not."""
return (
self.user.is_superuser and
not account.is_superuser and
account.has_perm("core.add_user")
)
def _before_is_valid(self, form):
if form["id"] == "general":
@@ -480,9 +495,8 @@ class AccountForm(TabForms):
return True
def is_valid(self):
"""Two steps validation.
"""
self.instances["general"].oldgroup = self.instances["general"].group
"""Two steps validation."""
self.instances["general"].oldgroup = self.instances["general"].role
if super(AccountForm, self).is_valid(mandatory_only=True):
self.account = self.forms[0]["instance"].save()
return super(AccountForm, self).is_valid(optional_only=True)
+3 -7
View File
@@ -8,7 +8,7 @@ from django.utils.translation import ugettext as _, ugettext_lazy
from modoboa.core.models import User
from modoboa.core import signals as core_signals
from modoboa.lib import events, parameters
from modoboa.lib.exceptions import ModoboaException, Conflict
from modoboa.lib.exceptions import Conflict
from modoboa.lib.fields import DomainNameField
from modoboa.lib.form_utils import (
YesNoField, WizardForm, WizardStep, DynamicForm, TabForms
@@ -279,17 +279,13 @@ class DomainForm(TabForms):
super(DomainForm, self).__init__(request, *args, **kwargs)
def extra_context(self, context):
domadmins = [u for u in self.domain.admins
if self.request.user.can_access(u) and not u.is_superuser]
if not self.request.user.is_superuser:
domadmins = [u for u in domadmins if u.group == "DomainAdmins"]
"""Add information to template context."""
context.update({
"title": self.domain.name,
"action": reverse(
"admin:domain_change", args=[self.domain.pk]),
"formid": "domform",
"domain": self.domain,
"domadmins": domadmins
"domain": self.domain
})
def is_valid(self):
+16 -2
View File
@@ -3,12 +3,15 @@
from django.db.models import signals
from django.dispatch import receiver
from modoboa.core import signals as core_signals
from . import models
from . import postfix_maps
@receiver(signals.post_save, sender=models.Domain)
def update_domain_mailboxes(sender, instance, **kwargs):
"""Update associated mailboxes."""
def update_domain_mxs_and_mailboxes(sender, instance, **kwargs):
"""Update associated MXs and mailboxes."""
if kwargs.get("created"):
return
instance.mailbox_set.filter(use_domain_quota=True).update(
@@ -97,3 +100,14 @@ def remove_alias_for_mailbox(sender, instance, **kwargs):
"""Remove "self alias" for this mailbox."""
models.Alias.objects.filter(
address=instance.full_address).delete()
@receiver(core_signals.register_postfix_maps)
def register_postfix_maps(sender, **kwargs):
"""Register admin map files."""
return [
postfix_maps.DomainsMap, postfix_maps.DomainsAliasesMap,
postfix_maps.AliasesMap, postfix_maps.MaintainMap,
postfix_maps.SenderLoginAliasMap, postfix_maps.SenderLoginMailboxMap,
postfix_maps.SenderLoginMailboxExtraMap
]
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2015-01-06 10:05+0000\n"
"Last-Translator: Miroslav Abrahám <miris@kunago.com>\n"
"Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/"
@@ -51,7 +51,7 @@ msgstr ""
msgid "Check every domain against major DNSBL providers"
msgstr ""
#: admin/app_settings.py:84 admin/templates/admin/domain_detail.html.py:40
#: admin/app_settings.py:84 admin/templates/admin/domain_detail.html:44
msgid "Mailboxes"
msgstr "Schránky"
@@ -103,7 +103,7 @@ msgstr "Automatické vytvoření domény/schránky"
msgid "Create a domain and a mailbox when an account is automatically created."
msgstr "Při založení účtu automaticky vytvořit doménu a schránku."
#: admin/app_settings.py:170 admin/forms/account.py:279
#: admin/app_settings.py:170 admin/forms/account.py:292
#: admin/forms/domain.py:81
msgid "Must be a positive integer"
msgstr "Musí se jednat o kladné číslo"
@@ -112,13 +112,13 @@ msgstr "Musí se jednat o kladné číslo"
msgid "Administration"
msgstr "Správa"
#: admin/callbacks.py:35 admin/templates/admin/domain_statistics.html.py:36
#: admin/callbacks.py:35 admin/templates/admin/domain_statistics.html:36
#: admin/templates/admin/domain_statistics.html:50
#: admin/templates/admin/identities.html:5
msgid "Identities"
msgstr "Identity"
#: admin/callbacks.py:50 admin/templates/admin/forward.html.py:2
#: admin/callbacks.py:50 admin/templates/admin/forward.html:2
msgid "Forward"
msgstr "Přeposlat"
@@ -142,7 +142,7 @@ msgstr "Import účtu selhal (%s): chybná hodnota kvóty"
msgid "domain alias"
msgstr "doménový alias"
#: admin/forms/account.py:33 admin/templates/admin/domain_detail.html.py:68
#: admin/forms/account.py:33 admin/templates/admin/domain_detail.html:72
msgid "Username"
msgstr "Uživatelské jméno"
@@ -154,11 +154,11 @@ msgstr ""
"Název uživatele. U běžných uživatelů musí být uvedena platná e-mailová "
"adresa nebo u administrátorů schránka."
#: admin/forms/account.py:40 admin/templates/admin/account_detail.html.py:29
#: admin/forms/account.py:40 admin/templates/admin/account_detail.html:29
msgid "Role"
msgstr "Role"
#: admin/forms/account.py:41 admin/forms/account.py:79
#: admin/forms/account.py:41
msgid "Choose"
msgstr "Vybrat"
@@ -178,32 +178,32 @@ msgstr "Potvrzení"
msgid "Enter the same password as above, for verification."
msgstr "Vložte stejné heslo jako v poli výše, pro jeho ověření."
#: admin/forms/account.py:70
#: admin/forms/account.py:63
msgid "Enabled"
msgstr "Povoleno"
#: admin/forms/account.py:142
#: admin/forms/account.py:155
msgid "The two password fields didn't match."
msgstr "Obě pole s heslem se neshodují."
#: admin/forms/account.py:157
#: admin/forms/account.py:170
msgid "Only super administrators are allowed for this mode"
msgstr ""
#: admin/forms/account.py:165
#: admin/forms/account.py:178
msgid "You can't disable your own account"
msgstr "Nemůžete zakázat váš vlastní účet"
#: admin/forms/account.py:180
#: admin/forms/account.py:193
msgid "E-mail"
msgstr "E-mail"
#: admin/forms/account.py:182 admin/forms/domain.py:36
#: admin/forms/account.py:195 admin/forms/domain.py:36
#: admin/templates/admin/account_detail.html:45
msgid "Quota"
msgstr "Kvóta"
#: admin/forms/account.py:184
#: admin/forms/account.py:197
msgid ""
"Quota in MB for this mailbox. Define a custom value or use domain's default "
"one. Leave empty to define an unlimited value (not allowed for domain "
@@ -213,28 +213,33 @@ msgstr ""
"hodnotu domény. Ponechejte prázdné pro neomezenou kvótu (není povoleno "
"správcům domény)."
#: admin/forms/account.py:192 admin/forms/domain.py:44
#: admin/forms/account.py:205 admin/forms/domain.py:44
#: admin/templates/admin/domains.html:35
msgid "Alias(es)"
msgstr "Alias(y)"
#: admin/forms/account.py:195
#: admin/forms/account.py:208
#, fuzzy
#| msgid ""
#| "Alias(es) of this mailbox. Indicate only one address per input, press "
#| "ENTER to add a new input. Use the '*' character to create a 'catchall' "
#| "alias (ex: *@domain.tld)."
msgid ""
"Alias(es) of this mailbox. Indicate only one address per input, press ENTER "
"to add a new input. Use the '*' character to create a 'catchall' alias (ex: "
"*@domain.tld)."
"to add a new input. To create a catchall alias, just enter the domain name "
"(@domain.tld)."
msgstr ""
"Alias(y) této schránky. Vložte pouze jeden alias na řádek, stiskněte ENTER "
"pro vložení dalšího aliasu. Pro vytvoření doménového koše vložte '*' (např. "
"*@domena.cz)."
#: admin/forms/account.py:201
#: admin/forms/account.py:214
#, fuzzy
#| msgid "Invalid request"
msgid "Sender addresses"
msgstr "Neplatný požadavek"
#: admin/forms/account.py:204
#: admin/forms/account.py:217
#, fuzzy
#| msgid ""
#| "Mailbox(es) this alias will point to. Indicate only one address per "
@@ -248,47 +253,47 @@ msgstr ""
"řádek pouze jednu adresu; pro vložení další adresy stiskněte po vložení "
"ENTER."
#: admin/forms/account.py:258 admin/forms/alias.py:89
#: admin/forms/account.py:271 admin/forms/alias.py:92
#: admin/models/mailbox.py:293
msgid "Domain does not exist"
msgstr "Doména neexistuje"
#: admin/forms/account.py:288
#: admin/forms/account.py:301
#, fuzzy
#| msgid "Domain does not exist"
msgid "Local domain does not exist"
msgstr "Doména neexistuje"
#: admin/forms/account.py:386
#: admin/forms/account.py:399
msgid "Domain(s)"
msgstr "Doména(y)"
#: admin/forms/account.py:388
#: admin/forms/account.py:401
msgid "Domain(s) that user administrates"
msgstr "Doména(y) pod správou uživatele"
#: admin/forms/account.py:434 admin/forms/account.py:518
#: admin/forms/domain.py:266 admin/forms/domain.py:336
#: admin/forms/account.py:447 admin/forms/account.py:532
#: admin/forms/domain.py:266 admin/forms/domain.py:332
msgid "General"
msgstr "Obecné"
#: admin/forms/account.py:439 admin/forms/account.py:524
#: admin/forms/account.py:452 admin/forms/account.py:538
msgid "Mail"
msgstr "Mail"
#: admin/forms/account.py:441
#: admin/forms/account.py:454
msgid "Permissions"
msgstr "Oprávnění"
#: admin/forms/account.py:507
#: admin/forms/account.py:521
msgid "Account updated"
msgstr "Účet aktualizován"
#: admin/forms/account.py:531
#: admin/forms/account.py:545
msgid "New account"
msgstr "Nový účet"
#: admin/forms/account.py:543
#: admin/forms/account.py:557
msgid "Account created"
msgstr "Účet vytvořen"
@@ -314,7 +319,7 @@ msgstr ""
"Alias adresy (bez části označující doménu). Pro vytvoření doménového koše "
"vložte znak '*'."
#: admin/forms/alias.py:35 admin/templates/admin/alias_detail.html.py:37
#: admin/forms/alias.py:35 admin/templates/admin/alias_detail.html:37
msgid "Recipients"
msgstr "Příjemci"
@@ -331,26 +336,26 @@ msgstr ""
"řádek pouze jednu adresu; pro vložení další adresy stiskněte po vložení "
"ENTER."
#: admin/forms/alias.py:92
#: admin/forms/alias.py:47 admin/forms/domain.py:24 admin/models/domain.py:90
#: admin/templates/admin/domain_statistics.html:49
msgid "Domain"
msgstr "Doména"
#: admin/forms/alias.py:95
msgid "You don't have access to this domain"
msgstr "Nemáte oprávnění k přístupu k této doméně"
#: admin/forms/alias.py:109 admin/forms/alias.py:111
#: admin/forms/alias.py:112 admin/forms/alias.py:114
#, fuzzy
#| msgid "A mailbox is required"
msgid "This field is required"
msgstr "Schránka je vyžadována"
#: admin/forms/alias.py:115
#: admin/forms/alias.py:118
msgid "No recipient defined"
msgstr "Nebyl určen příjemce"
#: admin/forms/domain.py:24 admin/models/alias.py:37 admin/models/domain.py:87
#: admin/templates/admin/domain_statistics.html:49
msgid "Domain"
msgstr "Doména"
#: admin/forms/domain.py:33 admin/templates/admin/domain_statistics.html.py:26
#: admin/forms/domain.py:33 admin/templates/admin/domain_statistics.html:26
msgid "Type"
msgstr "Typ"
@@ -388,7 +393,7 @@ msgstr "Vytvořit správce domény"
msgid "Automatically create an administrator for this domain"
msgstr "Automaticky vytvořit správce této domény"
#: admin/forms/domain.py:174 admin/templates/admin/domain_detail.html.py:68
#: admin/forms/domain.py:174 admin/templates/admin/domain_detail.html:72
#: admin/templates/admin/domains.html:34
#: admin/templates/admin/identity_headers.html:2
#: admin/templates/admin/mx_domain_detail.html:9
@@ -419,19 +424,19 @@ msgstr "Neplatný formát"
msgid "User '%s' already exists"
msgstr "Uživatel '%s' již existuje"
#: admin/forms/domain.py:325
#: admin/forms/domain.py:321
msgid "Domain modified"
msgstr "Doména upravena"
#: admin/forms/domain.py:345
#: admin/forms/domain.py:341
msgid "Options"
msgstr "Možnosti"
#: admin/forms/domain.py:353
#: admin/forms/domain.py:349
msgid "New domain"
msgstr "Nová doména"
#: admin/forms/domain.py:366
#: admin/forms/domain.py:362
msgid "Domain created"
msgstr "Doména vytvořena"
@@ -501,20 +506,20 @@ msgstr "Nemůžete smazat vlastní doménu"
msgid "You are not allowed to import domain aliases."
msgstr ""
#: admin/management/commands/subcommands/_mx.py:155
#: admin/management/commands/subcommands/_mx.py:159
msgid "[modoboa] DNSBL issue(s) for domain {}"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:176
msgid "Domain {} as no MX record"
#: admin/management/commands/subcommands/_mx.py:180
msgid "Domain {} has no MX record"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:187
#: admin/management/commands/subcommands/_mx.py:191
#, python-brace-format
msgid "Domain {0} got an invalid MX record. Got {1}"
msgid "MX record for domain {0} is invalid: {1}"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:203
#: admin/management/commands/subcommands/_mx.py:207
msgid "[modoboa] MX issue(s) for domain {}"
msgstr ""
@@ -528,66 +533,66 @@ msgstr "adresa"
msgid "The alias address."
msgstr "Název aliasu"
#: admin/models/alias.py:39 admin/models/domain.py:42
#: admin/models/alias.py:38 admin/models/domain.py:45
#: admin/models/domain_alias.py:44
msgid "enabled"
msgstr "povoleno"
#: admin/models/alias.py:40 admin/models/domain_alias.py:45
#: admin/models/alias.py:39 admin/models/domain_alias.py:45
msgid "Check to activate this alias"
msgstr "Zatrhněte pole pro povolení tohoto aliasu"
#: admin/models/alias.py:45 admin/templates/admin/alias_detail.html.py:32
#: admin/models/alias.py:44 admin/templates/admin/alias_detail.html:32
msgid "Description"
msgstr ""
#: admin/models/alias.py:47 admin/templates/admin/alias_detail.html.py:29
#: admin/models/alias.py:46 admin/templates/admin/alias_detail.html:29
msgid "Expire at"
msgstr ""
#: admin/models/alias.py:90
#: admin/models/alias.py:89
msgid "alias"
msgstr "alias"
#: admin/models/alias.py:122
#: admin/models/alias.py:121
#, fuzzy
#| msgid "Invalid request"
msgid "Invalid address"
msgstr "Neplatný požadavek"
#: admin/models/alias.py:143
#: admin/models/alias.py:142
#, fuzzy
#| msgid "Local recipient %s not found"
msgid "Local recipient {}@{} not found"
msgstr "Místní příjemce %s nebyl nalezen"
#: admin/models/alias.py:173
#: admin/models/alias.py:172
#, python-format
msgid "Invalid line: %s"
msgstr "Neplatný řádek: %s"
#: admin/models/alias.py:179
#: admin/models/alias.py:178
#, python-format
msgid "Domain '%s' does not exist"
msgstr "Doména '%s' neexistuje"
#: admin/models/domain.py:38 admin/models/domain_alias.py:37
#: admin/models/domain.py:41 admin/models/domain_alias.py:37
msgid "name"
msgstr "název"
#: admin/models/domain.py:39
#: admin/models/domain.py:42
msgid "The domain name"
msgstr "Doménové jméno"
#: admin/models/domain.py:43
#: admin/models/domain.py:46
msgid "Check to activate this domain"
msgstr "Zatrhněte pole pro povolení této domény"
#: admin/models/domain.py:198 admin/models/domain_alias.py:71
#: admin/models/domain.py:211 admin/models/domain_alias.py:71
msgid "Invalid line"
msgstr "Neplatný řádek"
#: admin/models/domain.py:206
#: admin/models/domain.py:219
#, python-format
msgid "Invalid quota value for domain '%s'"
msgstr "Neplatná hodnota kvóty u domény '%s'"
@@ -627,32 +632,32 @@ msgstr "Zvolená kvóta je větší než povolené omezení domény (%dM)"
msgid "A quota is required"
msgstr "Kvóta je vyžadována"
#: admin/serializers.py:44 admin/serializers.py:224 admin/serializers.py:313
#: admin/serializers.py:45 admin/serializers.py:228 admin/serializers.py:317
#, fuzzy
#| msgid "Permissions"
msgid "Permission denied."
msgstr "Oprávnění"
#: admin/serializers.py:82
#: admin/serializers.py:83
msgid ""
"List of administered domains (resellers and domain administrators only)."
msgstr ""
#: admin/serializers.py:189
#: admin/serializers.py:193
msgid "Not allowed for this role."
msgstr ""
#: admin/serializers.py:199
#: admin/serializers.py:203
msgid "Must be equal to mailbox full_address"
msgstr ""
#: admin/serializers.py:211
#: admin/serializers.py:215
#, fuzzy
#| msgid "Domain does not exist"
msgid "Local domain {} does not exist"
msgstr "Doména neexistuje"
#: admin/serializers.py:311
#: admin/serializers.py:315
#, fuzzy
#| msgid "Domain modified"
msgid "Domain not found."
@@ -790,34 +795,39 @@ msgstr ""
msgid "DNS status"
msgstr "Statistiky"
#: admin/templates/admin/domain_detail.html:36
#: admin/templates/admin/domain_detail.html:28
#: admin/templates/admin/domains_table.html:12
msgid "Awaiting checks"
msgstr ""
#: admin/templates/admin/domain_detail.html:40
msgid "Creation date"
msgstr "Datum vytvoření"
#: admin/templates/admin/domain_detail.html:38
#: admin/templates/admin/domain_detail.html:42
msgid "Last modification date"
msgstr "Datum poslední změny"
#: admin/templates/admin/domain_detail.html:39
#: admin/templates/admin/domain_detail.html:48
#: admin/templates/admin/domain_detail.html:43
#: admin/templates/admin/domain_detail.html:52
#: admin/templates/admin/domain_statistics.html:33
msgid "Domain aliases"
msgstr "Doménové aliasy"
#: admin/templates/admin/domain_detail.html:41
#: admin/templates/admin/domain_detail.html:45
msgid "Mailbox aliases"
msgstr "Aliasy schránek"
#: admin/templates/admin/domain_detail.html:65
#: admin/templates/admin/domain_detail.html:69
msgid "Administrators"
msgstr "Správci"
#: admin/templates/admin/domain_detail.html:75
#: admin/templates/admin/domain_detail.html:79
#: admin/templatetags/admin_tags.py:252
msgid "Remove this permission"
msgstr "Odstranit toto oprávnění"
#: admin/templates/admin/domain_detail.html:80
#: admin/templates/admin/domain_detail.html:84
#, fuzzy
#| msgid "No domain administrator defined"
msgid "No domain administrator defined yet."
+91 -81
View File
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2015-09-09 09:33+0000\n"
"Last-Translator: controlc.de\n"
"Language-Team: German (http://www.transifex.com/tonio/modoboa/language/de/)\n"
@@ -52,7 +52,7 @@ msgstr ""
msgid "Check every domain against major DNSBL providers"
msgstr ""
#: admin/app_settings.py:84 admin/templates/admin/domain_detail.html.py:40
#: admin/app_settings.py:84 admin/templates/admin/domain_detail.html:44
msgid "Mailboxes"
msgstr "Postfächer"
@@ -108,7 +108,7 @@ msgstr ""
"Erstelle eine Domain und ein Postfach, wenn ein Konto automatisch erstellt "
"wurde."
#: admin/app_settings.py:170 admin/forms/account.py:279
#: admin/app_settings.py:170 admin/forms/account.py:292
#: admin/forms/domain.py:81
msgid "Must be a positive integer"
msgstr "Muss eine positive Ganzzahl sein"
@@ -117,13 +117,13 @@ msgstr "Muss eine positive Ganzzahl sein"
msgid "Administration"
msgstr "Verwaltung"
#: admin/callbacks.py:35 admin/templates/admin/domain_statistics.html.py:36
#: admin/callbacks.py:35 admin/templates/admin/domain_statistics.html:36
#: admin/templates/admin/domain_statistics.html:50
#: admin/templates/admin/identities.html:5
msgid "Identities"
msgstr "Identitäten"
#: admin/callbacks.py:50 admin/templates/admin/forward.html.py:2
#: admin/callbacks.py:50 admin/templates/admin/forward.html:2
msgid "Forward"
msgstr "Weiterleiten"
@@ -147,7 +147,7 @@ msgstr "Konto Import fehlgeschlagen (%s): ungültiger Quota-Wert"
msgid "domain alias"
msgstr "Domain-Alias"
#: admin/forms/account.py:33 admin/templates/admin/domain_detail.html.py:68
#: admin/forms/account.py:33 admin/templates/admin/domain_detail.html:72
msgid "Username"
msgstr "Benutzername"
@@ -159,11 +159,11 @@ msgstr ""
"Der Benutzername. Muss eine gültige E-Mail-Adresse für 'Normale Benutzer' "
"oder Administratoren mit einer Mailbox sein."
#: admin/forms/account.py:40 admin/templates/admin/account_detail.html.py:29
#: admin/forms/account.py:40 admin/templates/admin/account_detail.html:29
msgid "Role"
msgstr "Rolle"
#: admin/forms/account.py:41 admin/forms/account.py:79
#: admin/forms/account.py:41
msgid "Choose"
msgstr "Auswählen"
@@ -183,32 +183,32 @@ msgstr "Bestätigung"
msgid "Enter the same password as above, for verification."
msgstr "Passwort bestätigen"
#: admin/forms/account.py:70
#: admin/forms/account.py:63
msgid "Enabled"
msgstr "Aktiviert"
#: admin/forms/account.py:142
#: admin/forms/account.py:155
msgid "The two password fields didn't match."
msgstr "Die angegebenen Passwörter stimmen nicht überein"
#: admin/forms/account.py:157
#: admin/forms/account.py:170
msgid "Only super administrators are allowed for this mode"
msgstr "Nur Super-Administratoren dürfen diesen Modus benutzen."
#: admin/forms/account.py:165
#: admin/forms/account.py:178
msgid "You can't disable your own account"
msgstr "Sie können Ihr eigenes Konto nicht deaktivieren"
#: admin/forms/account.py:180
#: admin/forms/account.py:193
msgid "E-mail"
msgstr "E-Mail"
#: admin/forms/account.py:182 admin/forms/domain.py:36
#: admin/forms/account.py:195 admin/forms/domain.py:36
#: admin/templates/admin/account_detail.html:45
msgid "Quota"
msgstr "Quota"
#: admin/forms/account.py:184
#: admin/forms/account.py:197
msgid ""
"Quota in MB for this mailbox. Define a custom value or use domain's default "
"one. Leave empty to define an unlimited value (not allowed for domain "
@@ -218,28 +218,33 @@ msgstr ""
"nutzen Sie den Standardwert der Domain. Lassen Sie das Feld leer für "
"unbegrenztes Quota (Domain-Administratoren ist dies nicht gestattet)."
#: admin/forms/account.py:192 admin/forms/domain.py:44
#: admin/forms/account.py:205 admin/forms/domain.py:44
#: admin/templates/admin/domains.html:35
msgid "Alias(es)"
msgstr "Alias(e)"
#: admin/forms/account.py:195
#: admin/forms/account.py:208
#, fuzzy
#| msgid ""
#| "Alias(es) of this mailbox. Indicate only one address per input, press "
#| "ENTER to add a new input. Use the '*' character to create a 'catchall' "
#| "alias (ex: *@domain.tld)."
msgid ""
"Alias(es) of this mailbox. Indicate only one address per input, press ENTER "
"to add a new input. Use the '*' character to create a 'catchall' alias (ex: "
"*@domain.tld)."
"to add a new input. To create a catchall alias, just enter the domain name "
"(@domain.tld)."
msgstr ""
"Alias(e) für dieses Postfach. Geben Sie jeweils nur eine Adresse pro Eingabe "
"an. Bestätigen Sie die Eingabe mit ENTER. Geben Sie '*' an, um einen "
"'catchall'-Alias (Bsp: *@example.com) zu erstellen."
#: admin/forms/account.py:201
#: admin/forms/account.py:214
#, fuzzy
#| msgid "Invalid address"
msgid "Sender addresses"
msgstr "Ungültige Adresse"
#: admin/forms/account.py:204
#: admin/forms/account.py:217
#, fuzzy
#| msgid ""
#| "Addresses this alias will point to. Indicate only one address per input, "
@@ -252,47 +257,47 @@ msgstr ""
"Adressen, auf die der Alias verweist. Geben Sie jeweils nur eine Adresse ein "
"und bestätigen Sie mit ENTER."
#: admin/forms/account.py:258 admin/forms/alias.py:89
#: admin/forms/account.py:271 admin/forms/alias.py:92
#: admin/models/mailbox.py:293
msgid "Domain does not exist"
msgstr "Domain existiert nicht"
#: admin/forms/account.py:288
#: admin/forms/account.py:301
#, fuzzy
#| msgid "Domain does not exist"
msgid "Local domain does not exist"
msgstr "Domain existiert nicht"
#: admin/forms/account.py:386
#: admin/forms/account.py:399
msgid "Domain(s)"
msgstr "Domain(s)"
#: admin/forms/account.py:388
#: admin/forms/account.py:401
msgid "Domain(s) that user administrates"
msgstr "Domain(s), die dieser Benutzer administriert"
#: admin/forms/account.py:434 admin/forms/account.py:518
#: admin/forms/domain.py:266 admin/forms/domain.py:336
#: admin/forms/account.py:447 admin/forms/account.py:532
#: admin/forms/domain.py:266 admin/forms/domain.py:332
msgid "General"
msgstr "Allgemein"
#: admin/forms/account.py:439 admin/forms/account.py:524
#: admin/forms/account.py:452 admin/forms/account.py:538
msgid "Mail"
msgstr "E-Mail"
#: admin/forms/account.py:441
#: admin/forms/account.py:454
msgid "Permissions"
msgstr "Berechtigungen"
#: admin/forms/account.py:507
#: admin/forms/account.py:521
msgid "Account updated"
msgstr "Konto aktualisiert"
#: admin/forms/account.py:531
#: admin/forms/account.py:545
msgid "New account"
msgstr "Neues Konto"
#: admin/forms/account.py:543
#: admin/forms/account.py:557
msgid "Account created"
msgstr "Konto erstellt"
@@ -314,7 +319,7 @@ msgstr ""
"Die Alias-Adresse. Geben Sie nur den Domainnamen (@domain.tld) für eine "
"'catch-all' Alias an."
#: admin/forms/alias.py:35 admin/templates/admin/alias_detail.html.py:37
#: admin/forms/alias.py:35 admin/templates/admin/alias_detail.html:37
msgid "Recipients"
msgstr "Empfänger"
@@ -326,26 +331,26 @@ msgstr ""
"Adressen, auf die der Alias verweist. Geben Sie jeweils nur eine Adresse ein "
"und bestätigen Sie mit ENTER."
#: admin/forms/alias.py:92
#: admin/forms/alias.py:47 admin/forms/domain.py:24 admin/models/domain.py:90
#: admin/templates/admin/domain_statistics.html:49
msgid "Domain"
msgstr "Domain"
#: admin/forms/alias.py:95
msgid "You don't have access to this domain"
msgstr "Der Zugriff auf diese Domain ist Ihnen nicht gestattet"
#: admin/forms/alias.py:109 admin/forms/alias.py:111
#: admin/forms/alias.py:112 admin/forms/alias.py:114
#, fuzzy
#| msgid "A mailbox is required"
msgid "This field is required"
msgstr "Ein Postfach ist erforderlich"
#: admin/forms/alias.py:115
#: admin/forms/alias.py:118
msgid "No recipient defined"
msgstr "Keine Empfänger angegeben"
#: admin/forms/domain.py:24 admin/models/alias.py:37 admin/models/domain.py:87
#: admin/templates/admin/domain_statistics.html:49
msgid "Domain"
msgstr "Domain"
#: admin/forms/domain.py:33 admin/templates/admin/domain_statistics.html.py:26
#: admin/forms/domain.py:33 admin/templates/admin/domain_statistics.html:26
msgid "Type"
msgstr "Typ"
@@ -384,7 +389,7 @@ msgstr "Domain-Administrator erstellen"
msgid "Automatically create an administrator for this domain"
msgstr "Automatisch Administrator für diese Domain anlegen"
#: admin/forms/domain.py:174 admin/templates/admin/domain_detail.html.py:68
#: admin/forms/domain.py:174 admin/templates/admin/domain_detail.html:72
#: admin/templates/admin/domains.html:34
#: admin/templates/admin/identity_headers.html:2
#: admin/templates/admin/mx_domain_detail.html:9
@@ -416,19 +421,19 @@ msgstr "Ungültiges Format"
msgid "User '%s' already exists"
msgstr "Benutzer %s existiert bereits"
#: admin/forms/domain.py:325
#: admin/forms/domain.py:321
msgid "Domain modified"
msgstr "Domain verändert"
#: admin/forms/domain.py:345
#: admin/forms/domain.py:341
msgid "Options"
msgstr "Optionen"
#: admin/forms/domain.py:353
#: admin/forms/domain.py:349
msgid "New domain"
msgstr "Neue Domain"
#: admin/forms/domain.py:366
#: admin/forms/domain.py:362
msgid "Domain created"
msgstr "Domain erstellt."
@@ -497,20 +502,20 @@ msgid "You are not allowed to import domain aliases."
msgstr ""
"Sie verfügen nicht über ausreichend Rechte, um Domain Aliase zu importieren."
#: admin/management/commands/subcommands/_mx.py:155
#: admin/management/commands/subcommands/_mx.py:159
msgid "[modoboa] DNSBL issue(s) for domain {}"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:176
msgid "Domain {} as no MX record"
#: admin/management/commands/subcommands/_mx.py:180
msgid "Domain {} has no MX record"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:187
#: admin/management/commands/subcommands/_mx.py:191
#, python-brace-format
msgid "Domain {0} got an invalid MX record. Got {1}"
msgid "MX record for domain {0} is invalid: {1}"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:203
#: admin/management/commands/subcommands/_mx.py:207
msgid "[modoboa] MX issue(s) for domain {}"
msgstr ""
@@ -522,62 +527,62 @@ msgstr "Adresse"
msgid "The alias address."
msgstr "Die Alias-Adresse"
#: admin/models/alias.py:39 admin/models/domain.py:42
#: admin/models/alias.py:38 admin/models/domain.py:45
#: admin/models/domain_alias.py:44
msgid "enabled"
msgstr "aktiviert"
#: admin/models/alias.py:40 admin/models/domain_alias.py:45
#: admin/models/alias.py:39 admin/models/domain_alias.py:45
msgid "Check to activate this alias"
msgstr "Auswählen, um den Alias zu aktivieren"
#: admin/models/alias.py:45 admin/templates/admin/alias_detail.html.py:32
#: admin/models/alias.py:44 admin/templates/admin/alias_detail.html:32
msgid "Description"
msgstr ""
#: admin/models/alias.py:47 admin/templates/admin/alias_detail.html.py:29
#: admin/models/alias.py:46 admin/templates/admin/alias_detail.html:29
msgid "Expire at"
msgstr ""
#: admin/models/alias.py:90
#: admin/models/alias.py:89
msgid "alias"
msgstr "Alias"
#: admin/models/alias.py:122
#: admin/models/alias.py:121
msgid "Invalid address"
msgstr "Ungültige Adresse"
#: admin/models/alias.py:143
#: admin/models/alias.py:142
msgid "Local recipient {}@{} not found"
msgstr "Lokaler Empfänger {}@{} nicht gefunden"
#: admin/models/alias.py:173
#: admin/models/alias.py:172
#, python-format
msgid "Invalid line: %s"
msgstr "Ungültige Zeile: %s"
#: admin/models/alias.py:179
#: admin/models/alias.py:178
#, python-format
msgid "Domain '%s' does not exist"
msgstr "Domain '%s' existiert nicht"
#: admin/models/domain.py:38 admin/models/domain_alias.py:37
#: admin/models/domain.py:41 admin/models/domain_alias.py:37
msgid "name"
msgstr "Name"
#: admin/models/domain.py:39
#: admin/models/domain.py:42
msgid "The domain name"
msgstr "Name der Domain"
#: admin/models/domain.py:43
#: admin/models/domain.py:46
msgid "Check to activate this domain"
msgstr "Auswählen, um diese Domain zu aktivieren"
#: admin/models/domain.py:198 admin/models/domain_alias.py:71
#: admin/models/domain.py:211 admin/models/domain_alias.py:71
msgid "Invalid line"
msgstr "Ungültige Zeile"
#: admin/models/domain.py:206
#: admin/models/domain.py:219
#, python-format
msgid "Invalid quota value for domain '%s'"
msgstr "Ungültiger Quota-Wert für Domain '%s'"
@@ -617,32 +622,32 @@ msgstr "Das Quota ist größer als das maximale Quota der Domain (%dM)"
msgid "A quota is required"
msgstr "Ein Quota ist erforderlich"
#: admin/serializers.py:44 admin/serializers.py:224 admin/serializers.py:313
#: admin/serializers.py:45 admin/serializers.py:228 admin/serializers.py:317
#, fuzzy
#| msgid "Permissions"
msgid "Permission denied."
msgstr "Berechtigungen"
#: admin/serializers.py:82
#: admin/serializers.py:83
msgid ""
"List of administered domains (resellers and domain administrators only)."
msgstr ""
#: admin/serializers.py:189
#: admin/serializers.py:193
msgid "Not allowed for this role."
msgstr ""
#: admin/serializers.py:199
#: admin/serializers.py:203
msgid "Must be equal to mailbox full_address"
msgstr ""
#: admin/serializers.py:211
#: admin/serializers.py:215
#, fuzzy
#| msgid "Domain does not exist"
msgid "Local domain {} does not exist"
msgstr "Domain existiert nicht"
#: admin/serializers.py:311
#: admin/serializers.py:315
#, fuzzy
#| msgid "Domain modified"
msgid "Domain not found."
@@ -780,34 +785,39 @@ msgstr ""
msgid "DNS status"
msgstr "Statistiken"
#: admin/templates/admin/domain_detail.html:36
#: admin/templates/admin/domain_detail.html:28
#: admin/templates/admin/domains_table.html:12
msgid "Awaiting checks"
msgstr ""
#: admin/templates/admin/domain_detail.html:40
msgid "Creation date"
msgstr "Erstellungsdatum"
#: admin/templates/admin/domain_detail.html:38
#: admin/templates/admin/domain_detail.html:42
msgid "Last modification date"
msgstr "Datum der letzten Änderung"
#: admin/templates/admin/domain_detail.html:39
#: admin/templates/admin/domain_detail.html:48
#: admin/templates/admin/domain_detail.html:43
#: admin/templates/admin/domain_detail.html:52
#: admin/templates/admin/domain_statistics.html:33
msgid "Domain aliases"
msgstr "Domain-Aliase"
#: admin/templates/admin/domain_detail.html:41
#: admin/templates/admin/domain_detail.html:45
msgid "Mailbox aliases"
msgstr "Postfach-Aliase"
#: admin/templates/admin/domain_detail.html:65
#: admin/templates/admin/domain_detail.html:69
msgid "Administrators"
msgstr "Administratoren"
#: admin/templates/admin/domain_detail.html:75
#: admin/templates/admin/domain_detail.html:79
#: admin/templatetags/admin_tags.py:252
msgid "Remove this permission"
msgstr "Diese Berechtigung entfernen"
#: admin/templates/admin/domain_detail.html:80
#: admin/templates/admin/domain_detail.html:84
#, fuzzy
#| msgid "No domain administrator defined"
msgid "No domain administrator defined yet."
+91 -86
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\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"
@@ -49,7 +49,7 @@ msgstr ""
msgid "Check every domain against major DNSBL providers"
msgstr ""
#: admin/app_settings.py:84 admin/templates/admin/domain_detail.html.py:40
#: admin/app_settings.py:84 admin/templates/admin/domain_detail.html:44
msgid "Mailboxes"
msgstr ""
@@ -97,7 +97,7 @@ msgstr ""
msgid "Create a domain and a mailbox when an account is automatically created."
msgstr ""
#: admin/app_settings.py:170 admin/forms/account.py:279
#: admin/app_settings.py:170 admin/forms/account.py:292
#: admin/forms/domain.py:81
msgid "Must be a positive integer"
msgstr ""
@@ -106,13 +106,13 @@ msgstr ""
msgid "Administration"
msgstr ""
#: admin/callbacks.py:35 admin/templates/admin/domain_statistics.html.py:36
#: admin/callbacks.py:35 admin/templates/admin/domain_statistics.html:36
#: admin/templates/admin/domain_statistics.html:50
#: admin/templates/admin/identities.html:5
msgid "Identities"
msgstr ""
#: admin/callbacks.py:50 admin/templates/admin/forward.html.py:2
#: admin/callbacks.py:50 admin/templates/admin/forward.html:2
msgid "Forward"
msgstr ""
@@ -134,7 +134,7 @@ msgstr ""
msgid "domain alias"
msgstr ""
#: admin/forms/account.py:33 admin/templates/admin/domain_detail.html.py:68
#: admin/forms/account.py:33 admin/templates/admin/domain_detail.html:72
msgid "Username"
msgstr ""
@@ -144,11 +144,11 @@ msgid ""
"administrators with a mailbox."
msgstr ""
#: admin/forms/account.py:40 admin/templates/admin/account_detail.html.py:29
#: admin/forms/account.py:40 admin/templates/admin/account_detail.html:29
msgid "Role"
msgstr ""
#: admin/forms/account.py:41 admin/forms/account.py:79
#: admin/forms/account.py:41
msgid "Choose"
msgstr ""
@@ -168,100 +168,100 @@ msgstr ""
msgid "Enter the same password as above, for verification."
msgstr ""
#: admin/forms/account.py:70
#: admin/forms/account.py:63
msgid "Enabled"
msgstr ""
#: admin/forms/account.py:142
#: admin/forms/account.py:155
msgid "The two password fields didn't match."
msgstr ""
#: admin/forms/account.py:157
#: admin/forms/account.py:170
msgid "Only super administrators are allowed for this mode"
msgstr ""
#: admin/forms/account.py:165
#: admin/forms/account.py:178
msgid "You can't disable your own account"
msgstr ""
#: admin/forms/account.py:180
#: admin/forms/account.py:193
msgid "E-mail"
msgstr ""
#: admin/forms/account.py:182 admin/forms/domain.py:36
#: admin/forms/account.py:195 admin/forms/domain.py:36
#: admin/templates/admin/account_detail.html:45
msgid "Quota"
msgstr ""
#: admin/forms/account.py:184
#: admin/forms/account.py:197
msgid ""
"Quota in MB for this mailbox. Define a custom value or use domain's default "
"one. Leave empty to define an unlimited value (not allowed for domain "
"administrators)."
msgstr ""
#: admin/forms/account.py:192 admin/forms/domain.py:44
#: admin/forms/account.py:205 admin/forms/domain.py:44
#: admin/templates/admin/domains.html:35
msgid "Alias(es)"
msgstr ""
#: admin/forms/account.py:195
#: admin/forms/account.py:208
msgid ""
"Alias(es) of this mailbox. Indicate only one address per input, press ENTER "
"to add a new input. Use the '*' character to create a 'catchall' alias (ex: "
"*@domain.tld)."
"to add a new input. To create a catchall alias, just enter the domain name "
"(@domain.tld)."
msgstr ""
#: admin/forms/account.py:201
#: admin/forms/account.py:214
msgid "Sender addresses"
msgstr ""
#: admin/forms/account.py:204
#: admin/forms/account.py:217
msgid ""
"Additional sender address(es) for this account. The user will be allowed to "
"send emails using this address, even if it does not exist locally. Indicate "
"one address per input. Press ENTER to add a new input."
msgstr ""
#: admin/forms/account.py:258 admin/forms/alias.py:89
#: admin/forms/account.py:271 admin/forms/alias.py:92
#: admin/models/mailbox.py:293
msgid "Domain does not exist"
msgstr ""
#: admin/forms/account.py:288
#: admin/forms/account.py:301
msgid "Local domain does not exist"
msgstr ""
#: admin/forms/account.py:386
#: admin/forms/account.py:399
msgid "Domain(s)"
msgstr ""
#: admin/forms/account.py:388
#: admin/forms/account.py:401
msgid "Domain(s) that user administrates"
msgstr ""
#: admin/forms/account.py:434 admin/forms/account.py:518
#: admin/forms/domain.py:266 admin/forms/domain.py:336
#: admin/forms/account.py:447 admin/forms/account.py:532
#: admin/forms/domain.py:266 admin/forms/domain.py:332
msgid "General"
msgstr ""
#: admin/forms/account.py:439 admin/forms/account.py:524
#: admin/forms/account.py:452 admin/forms/account.py:538
msgid "Mail"
msgstr ""
#: admin/forms/account.py:441
#: admin/forms/account.py:454
msgid "Permissions"
msgstr ""
#: admin/forms/account.py:507
#: admin/forms/account.py:521
msgid "Account updated"
msgstr ""
#: admin/forms/account.py:531
#: admin/forms/account.py:545
msgid "New account"
msgstr ""
#: admin/forms/account.py:543
#: admin/forms/account.py:557
msgid "Account created"
msgstr ""
@@ -279,7 +279,7 @@ msgid ""
"(@domain.tld)."
msgstr ""
#: admin/forms/alias.py:35 admin/templates/admin/alias_detail.html.py:37
#: admin/forms/alias.py:35 admin/templates/admin/alias_detail.html:37
msgid "Recipients"
msgstr ""
@@ -289,24 +289,24 @@ msgid ""
"press ENTER to add a new input."
msgstr ""
#: admin/forms/alias.py:92
msgid "You don't have access to this domain"
msgstr ""
#: admin/forms/alias.py:109 admin/forms/alias.py:111
msgid "This field is required"
msgstr ""
#: admin/forms/alias.py:115
msgid "No recipient defined"
msgstr ""
#: admin/forms/domain.py:24 admin/models/alias.py:37 admin/models/domain.py:87
#: admin/forms/alias.py:47 admin/forms/domain.py:24 admin/models/domain.py:90
#: admin/templates/admin/domain_statistics.html:49
msgid "Domain"
msgstr ""
#: admin/forms/domain.py:33 admin/templates/admin/domain_statistics.html.py:26
#: admin/forms/alias.py:95
msgid "You don't have access to this domain"
msgstr ""
#: admin/forms/alias.py:112 admin/forms/alias.py:114
msgid "This field is required"
msgstr ""
#: admin/forms/alias.py:118
msgid "No recipient defined"
msgstr ""
#: admin/forms/domain.py:33 admin/templates/admin/domain_statistics.html:26
msgid "Type"
msgstr ""
@@ -340,7 +340,7 @@ msgstr ""
msgid "Automatically create an administrator for this domain"
msgstr ""
#: admin/forms/domain.py:174 admin/templates/admin/domain_detail.html.py:68
#: admin/forms/domain.py:174 admin/templates/admin/domain_detail.html:72
#: admin/templates/admin/domains.html:34
#: admin/templates/admin/identity_headers.html:2
#: admin/templates/admin/mx_domain_detail.html:9
@@ -370,19 +370,19 @@ msgstr ""
msgid "User '%s' already exists"
msgstr ""
#: admin/forms/domain.py:325
#: admin/forms/domain.py:321
msgid "Domain modified"
msgstr ""
#: admin/forms/domain.py:345
#: admin/forms/domain.py:341
msgid "Options"
msgstr ""
#: admin/forms/domain.py:353
#: admin/forms/domain.py:349
msgid "New domain"
msgstr ""
#: admin/forms/domain.py:366
#: admin/forms/domain.py:362
msgid "Domain created"
msgstr ""
@@ -448,20 +448,20 @@ msgstr ""
msgid "You are not allowed to import domain aliases."
msgstr ""
#: admin/management/commands/subcommands/_mx.py:155
#: admin/management/commands/subcommands/_mx.py:159
msgid "[modoboa] DNSBL issue(s) for domain {}"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:176
msgid "Domain {} as no MX record"
#: admin/management/commands/subcommands/_mx.py:180
msgid "Domain {} has no MX record"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:187
#: admin/management/commands/subcommands/_mx.py:191
#, python-brace-format
msgid "Domain {0} got an invalid MX record. Got {1}"
msgid "MX record for domain {0} is invalid: {1}"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:203
#: admin/management/commands/subcommands/_mx.py:207
msgid "[modoboa] MX issue(s) for domain {}"
msgstr ""
@@ -473,62 +473,62 @@ msgstr ""
msgid "The alias address."
msgstr ""
#: admin/models/alias.py:39 admin/models/domain.py:42
#: admin/models/alias.py:38 admin/models/domain.py:45
#: admin/models/domain_alias.py:44
msgid "enabled"
msgstr ""
#: admin/models/alias.py:40 admin/models/domain_alias.py:45
#: admin/models/alias.py:39 admin/models/domain_alias.py:45
msgid "Check to activate this alias"
msgstr ""
#: admin/models/alias.py:45 admin/templates/admin/alias_detail.html.py:32
#: admin/models/alias.py:44 admin/templates/admin/alias_detail.html:32
msgid "Description"
msgstr ""
#: admin/models/alias.py:47 admin/templates/admin/alias_detail.html.py:29
#: admin/models/alias.py:46 admin/templates/admin/alias_detail.html:29
msgid "Expire at"
msgstr ""
#: admin/models/alias.py:90
#: admin/models/alias.py:89
msgid "alias"
msgstr ""
#: admin/models/alias.py:122
#: admin/models/alias.py:121
msgid "Invalid address"
msgstr ""
#: admin/models/alias.py:143
#: admin/models/alias.py:142
msgid "Local recipient {}@{} not found"
msgstr ""
#: admin/models/alias.py:173
#: admin/models/alias.py:172
#, python-format
msgid "Invalid line: %s"
msgstr ""
#: admin/models/alias.py:179
#: admin/models/alias.py:178
#, python-format
msgid "Domain '%s' does not exist"
msgstr ""
#: admin/models/domain.py:38 admin/models/domain_alias.py:37
#: admin/models/domain.py:41 admin/models/domain_alias.py:37
msgid "name"
msgstr ""
#: admin/models/domain.py:39
#: admin/models/domain.py:42
msgid "The domain name"
msgstr ""
#: admin/models/domain.py:43
#: admin/models/domain.py:46
msgid "Check to activate this domain"
msgstr ""
#: admin/models/domain.py:198 admin/models/domain_alias.py:71
#: admin/models/domain.py:211 admin/models/domain_alias.py:71
msgid "Invalid line"
msgstr ""
#: admin/models/domain.py:206
#: admin/models/domain.py:219
#, python-format
msgid "Invalid quota value for domain '%s'"
msgstr ""
@@ -568,28 +568,28 @@ msgstr ""
msgid "A quota is required"
msgstr ""
#: admin/serializers.py:44 admin/serializers.py:224 admin/serializers.py:313
#: admin/serializers.py:45 admin/serializers.py:228 admin/serializers.py:317
msgid "Permission denied."
msgstr ""
#: admin/serializers.py:82
#: admin/serializers.py:83
msgid ""
"List of administered domains (resellers and domain administrators only)."
msgstr ""
#: admin/serializers.py:189
#: admin/serializers.py:193
msgid "Not allowed for this role."
msgstr ""
#: admin/serializers.py:199
#: admin/serializers.py:203
msgid "Must be equal to mailbox full_address"
msgstr ""
#: admin/serializers.py:211
#: admin/serializers.py:215
msgid "Local domain {} does not exist"
msgstr ""
#: admin/serializers.py:311
#: admin/serializers.py:315
msgid "Domain not found."
msgstr ""
@@ -701,34 +701,39 @@ msgstr ""
msgid "DNS status"
msgstr ""
#: admin/templates/admin/domain_detail.html:36
#: admin/templates/admin/domain_detail.html:28
#: admin/templates/admin/domains_table.html:12
msgid "Awaiting checks"
msgstr ""
#: admin/templates/admin/domain_detail.html:40
msgid "Creation date"
msgstr ""
#: admin/templates/admin/domain_detail.html:38
#: admin/templates/admin/domain_detail.html:42
msgid "Last modification date"
msgstr ""
#: admin/templates/admin/domain_detail.html:39
#: admin/templates/admin/domain_detail.html:48
#: admin/templates/admin/domain_detail.html:43
#: admin/templates/admin/domain_detail.html:52
#: admin/templates/admin/domain_statistics.html:33
msgid "Domain aliases"
msgstr ""
#: admin/templates/admin/domain_detail.html:41
#: admin/templates/admin/domain_detail.html:45
msgid "Mailbox aliases"
msgstr ""
#: admin/templates/admin/domain_detail.html:65
#: admin/templates/admin/domain_detail.html:69
msgid "Administrators"
msgstr ""
#: admin/templates/admin/domain_detail.html:75
#: admin/templates/admin/domain_detail.html:79
#: admin/templatetags/admin_tags.py:252
msgid "Remove this permission"
msgstr ""
#: admin/templates/admin/domain_detail.html:80
#: admin/templates/admin/domain_detail.html:84
msgid "No domain administrator defined yet."
msgstr ""
+97 -87
View File
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\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/"
@@ -52,7 +52,7 @@ msgstr ""
msgid "Check every domain against major DNSBL providers"
msgstr ""
#: admin/app_settings.py:84 admin/templates/admin/domain_detail.html.py:40
#: admin/app_settings.py:84 admin/templates/admin/domain_detail.html:44
msgid "Mailboxes"
msgstr "Mailboxes"
@@ -105,7 +105,7 @@ msgstr "Dominio creado"
msgid "Create a domain and a mailbox when an account is automatically created."
msgstr ""
#: admin/app_settings.py:170 admin/forms/account.py:279
#: admin/app_settings.py:170 admin/forms/account.py:292
#: admin/forms/domain.py:81
msgid "Must be a positive integer"
msgstr ""
@@ -115,13 +115,13 @@ msgstr ""
msgid "Administration"
msgstr "Administradores"
#: admin/callbacks.py:35 admin/templates/admin/domain_statistics.html.py:36
#: admin/callbacks.py:35 admin/templates/admin/domain_statistics.html:36
#: admin/templates/admin/domain_statistics.html:50
#: admin/templates/admin/identities.html:5
msgid "Identities"
msgstr "Identidades"
#: admin/callbacks.py:50 admin/templates/admin/forward.html.py:2
#: admin/callbacks.py:50 admin/templates/admin/forward.html:2
msgid "Forward"
msgstr "Siguiente"
@@ -146,7 +146,7 @@ msgstr "Falló la importación de la cuenta (%s): el dominio no existe"
msgid "domain alias"
msgstr "Alias del dominio"
#: admin/forms/account.py:33 admin/templates/admin/domain_detail.html.py:68
#: admin/forms/account.py:33 admin/templates/admin/domain_detail.html:72
msgid "Username"
msgstr "Nombre de usuario"
@@ -157,11 +157,11 @@ msgid ""
"administrators with a mailbox."
msgstr "El usuario normal '%s' debe tener una dirección de email válida"
#: admin/forms/account.py:40 admin/templates/admin/account_detail.html.py:29
#: admin/forms/account.py:40 admin/templates/admin/account_detail.html:29
msgid "Role"
msgstr "Rol"
#: admin/forms/account.py:41 admin/forms/account.py:79
#: admin/forms/account.py:41
msgid "Choose"
msgstr "Elija"
@@ -181,32 +181,32 @@ msgstr "Confirmación"
msgid "Enter the same password as above, for verification."
msgstr "Introduzca la misma contraseña que arriba, para verificación."
#: admin/forms/account.py:70
#: admin/forms/account.py:63
msgid "Enabled"
msgstr "Activado"
#: admin/forms/account.py:142
#: admin/forms/account.py:155
msgid "The two password fields didn't match."
msgstr "Las contraseñas no concuerdan"
#: admin/forms/account.py:157
#: admin/forms/account.py:170
msgid "Only super administrators are allowed for this mode"
msgstr ""
#: admin/forms/account.py:165
#: admin/forms/account.py:178
msgid "You can't disable your own account"
msgstr "No puede deshabilitar su propia cuenta"
#: admin/forms/account.py:180
#: admin/forms/account.py:193
msgid "E-mail"
msgstr "Email"
#: admin/forms/account.py:182 admin/forms/domain.py:36
#: admin/forms/account.py:195 admin/forms/domain.py:36
#: admin/templates/admin/account_detail.html:45
msgid "Quota"
msgstr "Cuota"
#: admin/forms/account.py:184
#: admin/forms/account.py:197
msgid ""
"Quota in MB for this mailbox. Define a custom value or use domain's default "
"one. Leave empty to define an unlimited value (not allowed for domain "
@@ -216,28 +216,33 @@ msgstr ""
"dominio por defecto. Déjelo vacío para definir un valor ilimitado (no "
"permitido para los administradores del dominio)"
#: admin/forms/account.py:192 admin/forms/domain.py:44
#: admin/forms/account.py:205 admin/forms/domain.py:44
#: admin/templates/admin/domains.html:35
msgid "Alias(es)"
msgstr "Alias"
#: admin/forms/account.py:195
#: admin/forms/account.py:208
#, fuzzy
#| msgid ""
#| "Alias(es) of this mailbox. Indicate only one address per input, press "
#| "ENTER to add a new input. Use the '*' character to create a 'catchall' "
#| "alias (ex: *@domain.tld)."
msgid ""
"Alias(es) of this mailbox. Indicate only one address per input, press ENTER "
"to add a new input. Use the '*' character to create a 'catchall' alias (ex: "
"*@domain.tld)."
"to add a new input. To create a catchall alias, just enter the domain name "
"(@domain.tld)."
msgstr ""
"Alias de este mailbox. Indique sólo una dirección por entrada, presione "
"ENTER para añadir una nueva entrada. Use el carácter '*' para crear una "
"dirección 'catchall' (recogerlos todos, ej. *@domain.tld)"
#: admin/forms/account.py:201
#: admin/forms/account.py:214
#, fuzzy
#| msgid "Invalid request"
msgid "Sender addresses"
msgstr "Petición inválida"
#: admin/forms/account.py:204
#: admin/forms/account.py:217
#, fuzzy
#| msgid ""
#| "Mailbox(es) this alias will point to. Indicate only one address per "
@@ -250,47 +255,47 @@ msgstr ""
"Mailbox(es) a los que apuntará este alias. Indique únicamente una dirección "
"por entrada, presione ENTER para añadir una nueva entrada."
#: admin/forms/account.py:258 admin/forms/alias.py:89
#: admin/forms/account.py:271 admin/forms/alias.py:92
#: admin/models/mailbox.py:293
msgid "Domain does not exist"
msgstr "El dominio no existe"
#: admin/forms/account.py:288
#: admin/forms/account.py:301
#, fuzzy
#| msgid "Domain does not exist"
msgid "Local domain does not exist"
msgstr "El dominio no existe"
#: admin/forms/account.py:386
#: admin/forms/account.py:399
msgid "Domain(s)"
msgstr "Dominio(s)"
#: admin/forms/account.py:388
#: admin/forms/account.py:401
msgid "Domain(s) that user administrates"
msgstr "Dominio(s) que el usuario administra"
#: admin/forms/account.py:434 admin/forms/account.py:518
#: admin/forms/domain.py:266 admin/forms/domain.py:336
#: admin/forms/account.py:447 admin/forms/account.py:532
#: admin/forms/domain.py:266 admin/forms/domain.py:332
msgid "General"
msgstr "General"
#: admin/forms/account.py:439 admin/forms/account.py:524
#: admin/forms/account.py:452 admin/forms/account.py:538
msgid "Mail"
msgstr "Correo"
#: admin/forms/account.py:441
#: admin/forms/account.py:454
msgid "Permissions"
msgstr "Permisos"
#: admin/forms/account.py:507
#: admin/forms/account.py:521
msgid "Account updated"
msgstr "Cuenta actualizada"
#: admin/forms/account.py:531
#: admin/forms/account.py:545
msgid "New account"
msgstr "Nueva cuenta"
#: admin/forms/account.py:543
#: admin/forms/account.py:557
msgid "Account created"
msgstr "Cuenta creada"
@@ -316,7 +321,7 @@ msgstr ""
"La dirección del alias (sin la parte del dominio). Para una dirección que lo "
"recoja todo, ponga un asterisco (*)."
#: admin/forms/alias.py:35 admin/templates/admin/alias_detail.html.py:37
#: admin/forms/alias.py:35 admin/templates/admin/alias_detail.html:37
msgid "Recipients"
msgstr "Destinatarios"
@@ -332,26 +337,26 @@ msgstr ""
"Mailbox(es) a los que apuntará este alias. Indique únicamente una dirección "
"por entrada, presione ENTER para añadir una nueva entrada."
#: admin/forms/alias.py:92
msgid "You don't have access to this domain"
msgstr "No tienes acceso a este dominio"
#: admin/forms/alias.py:109 admin/forms/alias.py:111
#, fuzzy
msgid "This field is required"
msgstr "Una cuota es obligatoria"
#: admin/forms/alias.py:115
msgid "No recipient defined"
msgstr "No ha puesto destinatario"
#: admin/forms/domain.py:24 admin/models/alias.py:37 admin/models/domain.py:87
#: admin/forms/alias.py:47 admin/forms/domain.py:24 admin/models/domain.py:90
#: admin/templates/admin/domain_statistics.html:49
#, fuzzy
msgid "Domain"
msgstr "Dominios"
#: admin/forms/domain.py:33 admin/templates/admin/domain_statistics.html.py:26
#: admin/forms/alias.py:95
msgid "You don't have access to this domain"
msgstr "No tienes acceso a este dominio"
#: admin/forms/alias.py:112 admin/forms/alias.py:114
#, fuzzy
msgid "This field is required"
msgstr "Una cuota es obligatoria"
#: admin/forms/alias.py:118
msgid "No recipient defined"
msgstr "No ha puesto destinatario"
#: admin/forms/domain.py:33 admin/templates/admin/domain_statistics.html:26
msgid "Type"
msgstr ""
@@ -389,7 +394,7 @@ msgstr "Crear un administrador del dominio"
msgid "Automatically create an administrator for this domain"
msgstr "Automáticamente crear una administrador para este dominio"
#: admin/forms/domain.py:174 admin/templates/admin/domain_detail.html.py:68
#: admin/forms/domain.py:174 admin/templates/admin/domain_detail.html:72
#: admin/templates/admin/domains.html:34
#: admin/templates/admin/identity_headers.html:2
#: admin/templates/admin/mx_domain_detail.html:9
@@ -421,19 +426,19 @@ msgstr "Formato inválido"
msgid "User '%s' already exists"
msgstr "El usuario '%s' ya existe"
#: admin/forms/domain.py:325
#: admin/forms/domain.py:321
msgid "Domain modified"
msgstr "Dominio modificado"
#: admin/forms/domain.py:345
#: admin/forms/domain.py:341
msgid "Options"
msgstr "Opciones"
#: admin/forms/domain.py:353
#: admin/forms/domain.py:349
msgid "New domain"
msgstr "Nuevo dominio"
#: admin/forms/domain.py:366
#: admin/forms/domain.py:362
msgid "Domain created"
msgstr "Dominio creado"
@@ -506,20 +511,20 @@ msgstr "No puedo eliminar su propio dominio"
msgid "You are not allowed to import domain aliases."
msgstr ""
#: admin/management/commands/subcommands/_mx.py:155
#: admin/management/commands/subcommands/_mx.py:159
msgid "[modoboa] DNSBL issue(s) for domain {}"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:176
msgid "Domain {} as no MX record"
#: admin/management/commands/subcommands/_mx.py:180
msgid "Domain {} has no MX record"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:187
#: admin/management/commands/subcommands/_mx.py:191
#, python-brace-format
msgid "Domain {0} got an invalid MX record. Got {1}"
msgid "MX record for domain {0} is invalid: {1}"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:203
#: admin/management/commands/subcommands/_mx.py:207
msgid "[modoboa] MX issue(s) for domain {}"
msgstr ""
@@ -533,66 +538,66 @@ msgstr "dirección"
msgid "The alias address."
msgstr "Nombre del alias"
#: admin/models/alias.py:39 admin/models/domain.py:42
#: admin/models/alias.py:38 admin/models/domain.py:45
#: admin/models/domain_alias.py:44
msgid "enabled"
msgstr "activado"
#: admin/models/alias.py:40 admin/models/domain_alias.py:45
#: admin/models/alias.py:39 admin/models/domain_alias.py:45
msgid "Check to activate this alias"
msgstr "Marcar para activar este alias"
#: admin/models/alias.py:45 admin/templates/admin/alias_detail.html.py:32
#: admin/models/alias.py:44 admin/templates/admin/alias_detail.html:32
msgid "Description"
msgstr ""
#: admin/models/alias.py:47 admin/templates/admin/alias_detail.html.py:29
#: admin/models/alias.py:46 admin/templates/admin/alias_detail.html:29
msgid "Expire at"
msgstr ""
#: admin/models/alias.py:90
#: admin/models/alias.py:89
msgid "alias"
msgstr "alias"
#: admin/models/alias.py:122
#: admin/models/alias.py:121
#, fuzzy
#| msgid "Invalid request"
msgid "Invalid address"
msgstr "Petición inválida"
#: admin/models/alias.py:143
#: admin/models/alias.py:142
#, fuzzy
#| msgid "Local recipient %s not found"
msgid "Local recipient {}@{} not found"
msgstr "Destinatario local %s no encontrado"
#: admin/models/alias.py:173
#: admin/models/alias.py:172
#, python-format
msgid "Invalid line: %s"
msgstr "Línea inválida: %s"
#: admin/models/alias.py:179
#: admin/models/alias.py:178
#, python-format
msgid "Domain '%s' does not exist"
msgstr "El dominio '%s' no existe"
#: admin/models/domain.py:38 admin/models/domain_alias.py:37
#: admin/models/domain.py:41 admin/models/domain_alias.py:37
msgid "name"
msgstr "nombre"
#: admin/models/domain.py:39
#: admin/models/domain.py:42
msgid "The domain name"
msgstr "Nombre del dominio"
#: admin/models/domain.py:43
#: admin/models/domain.py:46
msgid "Check to activate this domain"
msgstr "Marcar para activar este dominio"
#: admin/models/domain.py:198 admin/models/domain_alias.py:71
#: admin/models/domain.py:211 admin/models/domain_alias.py:71
msgid "Invalid line"
msgstr "Línea inválida"
#: admin/models/domain.py:206
#: admin/models/domain.py:219
#, python-format
msgid "Invalid quota value for domain '%s'"
msgstr ""
@@ -632,32 +637,32 @@ msgstr "La cuota es mayor que el límite permitido para el dominio (%dM)"
msgid "A quota is required"
msgstr "Una cuota es obligatoria"
#: admin/serializers.py:44 admin/serializers.py:224 admin/serializers.py:313
#: admin/serializers.py:45 admin/serializers.py:228 admin/serializers.py:317
#, fuzzy
#| msgid "Permissions"
msgid "Permission denied."
msgstr "Permisos"
#: admin/serializers.py:82
#: admin/serializers.py:83
msgid ""
"List of administered domains (resellers and domain administrators only)."
msgstr ""
#: admin/serializers.py:189
#: admin/serializers.py:193
msgid "Not allowed for this role."
msgstr ""
#: admin/serializers.py:199
#: admin/serializers.py:203
msgid "Must be equal to mailbox full_address"
msgstr ""
#: admin/serializers.py:211
#: admin/serializers.py:215
#, fuzzy
#| msgid "Domain does not exist"
msgid "Local domain {} does not exist"
msgstr "El dominio no existe"
#: admin/serializers.py:311
#: admin/serializers.py:315
#, fuzzy
#| msgid "Domain modified"
msgid "Domain not found."
@@ -794,34 +799,39 @@ msgstr ""
msgid "DNS status"
msgstr "Estadísticas"
#: admin/templates/admin/domain_detail.html:36
#: admin/templates/admin/domain_detail.html:28
#: admin/templates/admin/domains_table.html:12
msgid "Awaiting checks"
msgstr ""
#: admin/templates/admin/domain_detail.html:40
msgid "Creation date"
msgstr "Fecha de creación"
#: admin/templates/admin/domain_detail.html:38
#: admin/templates/admin/domain_detail.html:42
msgid "Last modification date"
msgstr "Última fecha de modificación"
#: admin/templates/admin/domain_detail.html:39
#: admin/templates/admin/domain_detail.html:48
#: admin/templates/admin/domain_detail.html:43
#: admin/templates/admin/domain_detail.html:52
#: admin/templates/admin/domain_statistics.html:33
msgid "Domain aliases"
msgstr "Alias del dominio"
#: admin/templates/admin/domain_detail.html:41
#: admin/templates/admin/domain_detail.html:45
msgid "Mailbox aliases"
msgstr "Alias del mailbox"
#: admin/templates/admin/domain_detail.html:65
#: admin/templates/admin/domain_detail.html:69
msgid "Administrators"
msgstr "Administradores"
#: admin/templates/admin/domain_detail.html:75
#: admin/templates/admin/domain_detail.html:79
#: admin/templatetags/admin_tags.py:252
msgid "Remove this permission"
msgstr "Eliminar este permiso"
#: admin/templates/admin/domain_detail.html:80
#: admin/templates/admin/domain_detail.html:84
#, fuzzy
#| msgid "No domain administrator defined"
msgid "No domain administrator defined yet."
+126 -190
View File
@@ -1,21 +1,21 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
#
# Translators:
# Antoine Nguyen <tonio@ngyn.org>, 2015-2016
msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"PO-Revision-Date: 2016-09-16 13:56+0000\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2016-10-16 19:52+0000\n"
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>\n"
"Language-Team: French (http://www.transifex.com/tonio/modoboa/language/fr/)\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: admin/app_settings.py:54 admin/callbacks.py:25
@@ -38,11 +38,9 @@ msgstr "MX(s) valide(s)"
#: admin/app_settings.py:68
msgid ""
"IP(s) or network(s) of the MX that should match with domains' MX records. On "
"per line."
msgstr ""
"IP(s) ou réseau(x) avec lesquels les enregistrements MX des domaines doivent "
"correspondre. Un par ligne."
"IP(s) or network(s) of the MX that should match with domains' MX records. On"
" per line."
msgstr "IP(s) ou réseau(x) avec lesquels les enregistrements MX des domaines doivent correspondre. Un par ligne."
#: admin/app_settings.py:77
msgid "Enable DNSBL checks"
@@ -52,7 +50,7 @@ msgstr "Activer les vérifications DNSBL"
msgid "Check every domain against major DNSBL providers"
msgstr "Vérifie chaque domaine auprès des fournisseurs de DNSBL"
#: admin/app_settings.py:84 admin/templates/admin/domain_detail.html.py:40
#: admin/app_settings.py:84 admin/templates/admin/domain_detail.html:44
msgid "Mailboxes"
msgstr "Boites"
@@ -64,9 +62,7 @@ msgstr "Gérer les boites sur le système de fichiers"
msgid ""
"Rename or remove mailboxes on the filesystem when they get renamed or "
"removed within Modoboa"
msgstr ""
"Renommer ou supprimer les boites sur le système de fichiers quand elles sont "
"renommées ou supprimées dans Modoboa"
msgstr "Renommer ou supprimer les boites sur le système de fichiers quand elles sont renommées ou supprimées dans Modoboa"
#: admin/app_settings.py:96
msgid "Mailboxes owner"
@@ -84,9 +80,7 @@ msgstr "Quota de domaine par défaut"
msgid ""
"Default quota (in MB) applied to freshly created domains with no value "
"specified. A value of 0 means no quota."
msgstr ""
"Quota par défaut (en Mo) appliqué aux domaines fraichement créés et ne "
"spécifiant pas de valeur. 0 signifie qu'aucun quota ne sera appliqué."
msgstr "Quota par défaut (en Mo) appliqué aux domaines fraichement créés et ne spécifiant pas de valeur. 0 signifie qu'aucun quota ne sera appliqué."
#: admin/app_settings.py:113
msgid "Automatic account removal"
@@ -94,21 +88,18 @@ msgstr "Suppression automatique de compte"
#: admin/app_settings.py:116
msgid "When a mailbox is removed, also remove the associated account"
msgstr ""
"Lorsqu'une boite aux lettres est supprimée, supprimer le compte associé en "
"même temps"
msgstr "Lorsqu'une boite aux lettres est supprimée, supprimer le compte associé en même temps"
#: admin/app_settings.py:120
msgid "Automatic domain/mailbox creation"
msgstr "Création automatique de domaine/boite aux lettres"
#: admin/app_settings.py:123
msgid "Create a domain and a mailbox when an account is automatically created."
msgstr ""
"Créer un domaine et une boite aux lettres quand un compte est créé "
"automatiquement."
msgid ""
"Create a domain and a mailbox when an account is automatically created."
msgstr "Créer un domaine et une boite aux lettres quand un compte est créé automatiquement."
#: admin/app_settings.py:170 admin/forms/account.py:279
#: admin/app_settings.py:170 admin/forms/account.py:292
#: admin/forms/domain.py:81
msgid "Must be a positive integer"
msgstr "Doit être un entier positif"
@@ -117,13 +108,13 @@ msgstr "Doit être un entier positif"
msgid "Administration"
msgstr "Administration"
#: admin/callbacks.py:35 admin/templates/admin/domain_statistics.html.py:36
#: admin/callbacks.py:35 admin/templates/admin/domain_statistics.html:36
#: admin/templates/admin/domain_statistics.html:50
#: admin/templates/admin/identities.html:5
msgid "Identities"
msgstr "Identités"
#: admin/callbacks.py:50 admin/templates/admin/forward.html.py:2
#: admin/callbacks.py:50 admin/templates/admin/forward.html:2
msgid "Forward"
msgstr "Transfert"
@@ -145,7 +136,7 @@ msgstr "L'import du compte a échoué (%s): mauvais quota"
msgid "domain alias"
msgstr "alias de domaine"
#: admin/forms/account.py:33 admin/templates/admin/domain_detail.html.py:68
#: admin/forms/account.py:33 admin/templates/admin/domain_detail.html:72
msgid "Username"
msgstr "Nom d'utilisateur"
@@ -153,15 +144,13 @@ msgstr "Nom d'utilisateur"
msgid ""
"The user's name. Must be a valid e-mail address for simple users or "
"administrators with a mailbox."
msgstr ""
"Le nom de l'utilisateur. Doit être une adresse e-mail valide pour les "
"utilisateurs simples ou les administrateurs avec une boite aux lettres."
msgstr "Le nom de l'utilisateur. Doit être une adresse e-mail valide pour les utilisateurs simples ou les administrateurs avec une boite aux lettres."
#: admin/forms/account.py:40 admin/templates/admin/account_detail.html.py:29
#: admin/forms/account.py:40 admin/templates/admin/account_detail.html:29
msgid "Role"
msgstr "Rôle"
#: admin/forms/account.py:41 admin/forms/account.py:79
#: admin/forms/account.py:41
msgid "Choose"
msgstr "Choisir"
@@ -181,110 +170,100 @@ msgstr "Confirmation"
msgid "Enter the same password as above, for verification."
msgstr "Entrer le même mot de passe, pour vérification."
#: admin/forms/account.py:70
#: admin/forms/account.py:63
msgid "Enabled"
msgstr "Activé"
#: admin/forms/account.py:142
#: admin/forms/account.py:155
msgid "The two password fields didn't match."
msgstr "Les deux mots de passe ne correspondent pas."
#: admin/forms/account.py:157
#: admin/forms/account.py:170
msgid "Only super administrators are allowed for this mode"
msgstr "Seuls les super administrateurs sont autorisés pour ce mode"
#: admin/forms/account.py:165
#: admin/forms/account.py:178
msgid "You can't disable your own account"
msgstr "Vous ne pouvez pas désactiver votre propre compte"
#: admin/forms/account.py:180
#: admin/forms/account.py:193
msgid "E-mail"
msgstr "E-mail"
#: admin/forms/account.py:182 admin/forms/domain.py:36
#: admin/forms/account.py:195 admin/forms/domain.py:36
#: admin/templates/admin/account_detail.html:45
msgid "Quota"
msgstr "Quota"
#: admin/forms/account.py:184
#: admin/forms/account.py:197
msgid ""
"Quota in MB for this mailbox. Define a custom value or use domain's default "
"one. Leave empty to define an unlimited value (not allowed for domain "
"administrators)."
msgstr ""
"Quota en Mo pour cette boite. Définir une valeur spécifique ou utiliser la "
"valeur par défaut du domaine. Laisser vide pour définir une valeur illimitée "
"(interdit pour les admins. de domaine)."
msgstr "Quota en Mo pour cette boite. Définir une valeur spécifique ou utiliser la valeur par défaut du domaine. Laisser vide pour définir une valeur illimitée (interdit pour les admins. de domaine)."
#: admin/forms/account.py:192 admin/forms/domain.py:44
#: admin/forms/account.py:205 admin/forms/domain.py:44
#: admin/templates/admin/domains.html:35
msgid "Alias(es)"
msgstr "Alias"
#: admin/forms/account.py:195
#: admin/forms/account.py:208
msgid ""
"Alias(es) of this mailbox. Indicate only one address per input, press ENTER "
"to add a new input. Use the '*' character to create a 'catchall' alias (ex: "
"*@domain.tld)."
msgstr ""
"Alias de cette boite. Indiquer seulement une adresse par champ, appuyer sur "
"ENTREE pour ajouter un nouveau champ. Utiliser le caractère '*' pour créer "
"une adresse 'attrape tout' (ex: *@domain.tld)."
"to add a new input. To create a catchall alias, just enter the domain name "
"(@domain.tld)."
msgstr "Alias de cette boîte aux lettres. Indiquer une adresse par champ, appuyer sur ENTREE pour ajouter un nouveau champ. Pour créer un alias 'fourre-tout', entrer seulement le nom du domaine (@domain.tld)."
#: admin/forms/account.py:201
#: admin/forms/account.py:214
msgid "Sender addresses"
msgstr "Adresses d'envoi"
#: admin/forms/account.py:204
#: admin/forms/account.py:217
msgid ""
"Additional sender address(es) for this account. The user will be allowed to "
"send emails using this address, even if it does not exist locally. Indicate "
"one address per input. Press ENTER to add a new input."
msgstr ""
"Adresse(s) d'envoi supplémentaire(s) pour ce compte. L'utilisateur sera "
"autorisé à envoyer des e-mails en utilisant la/les adresse(s) déclarée(s), "
"même si elle(s) n'existe(nt) pas localement. Indiquer une adresse par champ. "
"Appuyer sur ENTREE pour ajouter un nouveau champ."
msgstr "Adresse(s) d'envoi supplémentaire(s) pour ce compte. L'utilisateur sera autorisé à envoyer des e-mails en utilisant la/les adresse(s) déclarée(s), même si elle(s) n'existe(nt) pas localement. Indiquer une adresse par champ. Appuyer sur ENTREE pour ajouter un nouveau champ."
#: admin/forms/account.py:258 admin/forms/alias.py:89
#: admin/forms/account.py:271 admin/forms/alias.py:92
#: admin/models/mailbox.py:293
msgid "Domain does not exist"
msgstr "Domaine inexistant"
#: admin/forms/account.py:288
#: admin/forms/account.py:301
msgid "Local domain does not exist"
msgstr "Le domaine local n'existe pas"
#: admin/forms/account.py:386
#: admin/forms/account.py:399
msgid "Domain(s)"
msgstr "Domaine(s)"
#: admin/forms/account.py:388
#: admin/forms/account.py:401
msgid "Domain(s) that user administrates"
msgstr "Domaine(s) que cet utilisateur administre"
#: admin/forms/account.py:434 admin/forms/account.py:518
#: admin/forms/domain.py:266 admin/forms/domain.py:336
#: admin/forms/account.py:447 admin/forms/account.py:532
#: admin/forms/domain.py:266 admin/forms/domain.py:332
msgid "General"
msgstr "Général"
#: admin/forms/account.py:439 admin/forms/account.py:524
#: admin/forms/account.py:452 admin/forms/account.py:538
msgid "Mail"
msgstr "Courrier"
#: admin/forms/account.py:441
#: admin/forms/account.py:454
msgid "Permissions"
msgstr "Permissions"
#: admin/forms/account.py:507
#: admin/forms/account.py:521
msgid "Account updated"
msgstr "Compte mis à jour"
#: admin/forms/account.py:531
#: admin/forms/account.py:545
msgid "New account"
msgstr "Nouveau compte"
#: admin/forms/account.py:543
#: admin/forms/account.py:557
msgid "Account created"
msgstr "Compte créé"
@@ -300,11 +279,9 @@ msgstr "Adresse email"
msgid ""
"The alias address. To create a catchall alias, just enter the domain name "
"(@domain.tld)."
msgstr ""
"L'adresse de l'alias. Pour créer un alias \"fourre-tout\", saisissez "
"uniquement le nom du domaine (@domain.tld)."
msgstr "L'adresse de l'alias. Pour créer un alias \"fourre-tout\", saisissez uniquement le nom du domaine (@domain.tld)."
#: admin/forms/alias.py:35 admin/templates/admin/alias_detail.html.py:37
#: admin/forms/alias.py:35 admin/templates/admin/alias_detail.html:37
msgid "Recipients"
msgstr "Destinataires"
@@ -312,28 +289,26 @@ msgstr "Destinataires"
msgid ""
"Addresses this alias will point to. Indicate only one address per input, "
"press ENTER to add a new input."
msgstr ""
"Les adresses vers lesquelles cet alias pointera. Indiquer une adresse par "
"champ, appuyer sur ENTREE pour ajouter un nouveau champ."
msgstr "Les adresses vers lesquelles cet alias pointera. Indiquer une adresse par champ, appuyer sur ENTREE pour ajouter un nouveau champ."
#: admin/forms/alias.py:92
msgid "You don't have access to this domain"
msgstr "Vous n'avez pas accès à ce domaine"
#: admin/forms/alias.py:109 admin/forms/alias.py:111
msgid "This field is required"
msgstr "Ce champ est requis."
#: admin/forms/alias.py:115
msgid "No recipient defined"
msgstr "Aucune destinataire défini"
#: admin/forms/domain.py:24 admin/models/alias.py:37 admin/models/domain.py:87
#: admin/forms/alias.py:47 admin/forms/domain.py:24 admin/models/domain.py:90
#: admin/templates/admin/domain_statistics.html:49
msgid "Domain"
msgstr "Domaine"
#: admin/forms/domain.py:33 admin/templates/admin/domain_statistics.html.py:26
#: admin/forms/alias.py:95
msgid "You don't have access to this domain"
msgstr "Vous n'avez pas accès à ce domaine"
#: admin/forms/alias.py:112 admin/forms/alias.py:114
msgid "This field is required"
msgstr "Ce champ est requis."
#: admin/forms/alias.py:118
msgid "No recipient defined"
msgstr "Aucune destinataire défini"
#: admin/forms/domain.py:33 admin/templates/admin/domain_statistics.html:26
msgid "Type"
msgstr "Type"
@@ -341,17 +316,13 @@ msgstr "Type"
msgid ""
"Default quota in MB applied to mailboxes. Leave empty to use the default "
"value."
msgstr ""
"Quota par défaut en Mo appliqué aux boites aux lettres. Laisser vide pour "
"utiliser la valeur par défaut."
msgstr "Quota par défaut en Mo appliqué aux boites aux lettres. Laisser vide pour utiliser la valeur par défaut."
#: admin/forms/domain.py:47
msgid ""
"Alias(es) of this domain. Indicate only one name per input, press ENTER to "
"add a new input."
msgstr ""
"Alias de ce domaine. Indiquer seulement un nom par champ, appuyer sur ENTREE "
"pour ajouter un nouveau champ."
msgstr "Alias de ce domaine. Indiquer seulement un nom par champ, appuyer sur ENTREE pour ajouter un nouveau champ."
#: admin/forms/domain.py:101 admin/forms/domain.py:113
#: admin/forms/domain.py:121
@@ -371,7 +342,7 @@ msgstr "Créer un administrateur de domaine"
msgid "Automatically create an administrator for this domain"
msgstr "Créer automatiquement un administrateur pour ce domaine"
#: admin/forms/domain.py:174 admin/templates/admin/domain_detail.html.py:68
#: admin/forms/domain.py:174 admin/templates/admin/domain_detail.html:72
#: admin/templates/admin/domains.html:34
#: admin/templates/admin/identity_headers.html:2
#: admin/templates/admin/mx_domain_detail.html:9
@@ -382,9 +353,7 @@ msgstr "Nom"
msgid ""
"The administrator's name. Don't include the domain's name here, it will be "
"automatically appended."
msgstr ""
"Le nom de l'administrateur. Ne pas include un nom de domaine ici, il sera "
"ajouté automatiquement."
msgstr "Le nom de l'administrateur. Ne pas include un nom de domaine ici, il sera ajouté automatiquement."
#: admin/forms/domain.py:184
msgid "Create aliases"
@@ -403,19 +372,19 @@ msgstr "Format invalide"
msgid "User '%s' already exists"
msgstr "L'utilisateur '%s' existe déjà"
#: admin/forms/domain.py:325
#: admin/forms/domain.py:321
msgid "Domain modified"
msgstr "Domaine modifié"
#: admin/forms/domain.py:345
#: admin/forms/domain.py:341
msgid "Options"
msgstr "Options"
#: admin/forms/domain.py:353
#: admin/forms/domain.py:349
msgid "New domain"
msgstr "Nouveau domaine"
#: admin/forms/domain.py:366
#: admin/forms/domain.py:362
msgid "Domain created"
msgstr "Domaine créé"
@@ -447,9 +416,7 @@ msgstr "Transférer les messages et conserver une copie dans votre boite locale"
msgid ""
"You can't define a forward to a local destination. Please ask your "
"administrator to create an alias instead."
msgstr ""
"Vous ne pouvez pas définir un transfert vers une destination locale. "
"Veuillez plutôt demander à votre administrateur de créer un alias"
msgstr "Vous ne pouvez pas définir un transfert vers une destination locale. Veuillez plutôt demander à votre administrateur de créer un alias"
#: admin/forms/import_.py:11
msgid "Select a file"
@@ -469,9 +436,7 @@ msgstr "Chiffrer les mots de passe"
#: admin/forms/import_.py:40
msgid "Check this option if passwords contained in your file are not crypted"
msgstr ""
"Cocher cette option si les mots de passe contenus dans votre fichier ne sont "
"pas chiffrés"
msgstr "Cocher cette option si les mots de passe contenus dans votre fichier ne sont pas chiffrés"
#: admin/lib.py:31
msgid "A mailbox is required"
@@ -485,20 +450,20 @@ msgstr "Vous n'êtes pas autorisé à importer des domaines"
msgid "You are not allowed to import domain aliases."
msgstr "Vous n'êtes pas autorisé à importer des alias de domaine."
#: admin/management/commands/subcommands/_mx.py:155
#: admin/management/commands/subcommands/_mx.py:159
msgid "[modoboa] DNSBL issue(s) for domain {}"
msgstr "[modoboa] Problème(s) DNSBL pour le domaine {}"
#: admin/management/commands/subcommands/_mx.py:176
msgid "Domain {} as no MX record"
msgstr "Le domaine {} n'a aucun enregistrement MX"
#: admin/management/commands/subcommands/_mx.py:180
msgid "Domain {} has no MX record"
msgstr "Le domaine {} n'a pas d'enregistrement MX"
#: admin/management/commands/subcommands/_mx.py:187
#: admin/management/commands/subcommands/_mx.py:191
#, python-brace-format
msgid "Domain {0} got an invalid MX record. Got {1}"
msgstr "L'enregistrement MX du domaine {0} n'est pas bon : {1}."
msgid "MX record for domain {0} is invalid: {1}"
msgstr "Enregistrement MX invalide pour le domaine {0} : {1}"
#: admin/management/commands/subcommands/_mx.py:203
#: admin/management/commands/subcommands/_mx.py:207
msgid "[modoboa] MX issue(s) for domain {}"
msgstr "[modoboa] problème(s) de MX pour le domaine {}"
@@ -510,62 +475,62 @@ msgstr "Adresse"
msgid "The alias address."
msgstr "L'adresse de l'alias"
#: admin/models/alias.py:39 admin/models/domain.py:42
#: admin/models/alias.py:38 admin/models/domain.py:45
#: admin/models/domain_alias.py:44
msgid "enabled"
msgstr "Activé"
#: admin/models/alias.py:40 admin/models/domain_alias.py:45
#: admin/models/alias.py:39 admin/models/domain_alias.py:45
msgid "Check to activate this alias"
msgstr "Cocher pour activer cet alias"
#: admin/models/alias.py:45 admin/templates/admin/alias_detail.html.py:32
#: admin/models/alias.py:44 admin/templates/admin/alias_detail.html:32
msgid "Description"
msgstr "Description"
#: admin/models/alias.py:47 admin/templates/admin/alias_detail.html.py:29
#: admin/models/alias.py:46 admin/templates/admin/alias_detail.html:29
msgid "Expire at"
msgstr "Expire le"
#: admin/models/alias.py:90
#: admin/models/alias.py:89
msgid "alias"
msgstr "alias"
#: admin/models/alias.py:122
#: admin/models/alias.py:121
msgid "Invalid address"
msgstr "Adresse invalide"
#: admin/models/alias.py:143
#: admin/models/alias.py:142
msgid "Local recipient {}@{} not found"
msgstr "Destinataire local {}@{} introuvable"
#: admin/models/alias.py:173
#: admin/models/alias.py:172
#, python-format
msgid "Invalid line: %s"
msgstr "Ligne invalide : %s"
#: admin/models/alias.py:179
#: admin/models/alias.py:178
#, python-format
msgid "Domain '%s' does not exist"
msgstr "Domaine '%s' inexistant"
#: admin/models/domain.py:38 admin/models/domain_alias.py:37
#: admin/models/domain.py:41 admin/models/domain_alias.py:37
msgid "name"
msgstr "Nom"
#: admin/models/domain.py:39
#: admin/models/domain.py:42
msgid "The domain name"
msgstr "Le nom du domaine"
#: admin/models/domain.py:43
#: admin/models/domain.py:46
msgid "Check to activate this domain"
msgstr "Cocher pour activer ce domaine"
#: admin/models/domain.py:198 admin/models/domain_alias.py:71
#: admin/models/domain.py:211 admin/models/domain_alias.py:71
msgid "Invalid line"
msgstr "Ligne invalide"
#: admin/models/domain.py:206
#: admin/models/domain.py:219
#, python-format
msgid "Invalid quota value for domain '%s'"
msgstr "Quota invalide pour le domaine '%s'"
@@ -605,30 +570,28 @@ msgstr "Le quota est supérieur à la limité autorisée pour le domaine (%dM)"
msgid "A quota is required"
msgstr "Un quota est requis"
#: admin/serializers.py:44 admin/serializers.py:224 admin/serializers.py:313
#: admin/serializers.py:45 admin/serializers.py:228 admin/serializers.py:317
msgid "Permission denied."
msgstr "Permission refusée."
#: admin/serializers.py:82
#: admin/serializers.py:83
msgid ""
"List of administered domains (resellers and domain administrators only)."
msgstr ""
"Liste des domaines administrés (revendeurs et administrateurs de domaine "
"seulement)."
msgstr "Liste des domaines administrés (revendeurs et administrateurs de domaine seulement)."
#: admin/serializers.py:189
#: admin/serializers.py:193
msgid "Not allowed for this role."
msgstr "Non autorisé pour ce rôle."
#: admin/serializers.py:199
#: admin/serializers.py:203
msgid "Must be equal to mailbox full_address"
msgstr "Doit être égale au champ full_address dans mailbox"
#: admin/serializers.py:211
#: admin/serializers.py:215
msgid "Local domain {} does not exist"
msgstr "Le domaine local {} n'existe pas"
#: admin/serializers.py:311
#: admin/serializers.py:315
msgid "Domain not found."
msgstr "Domaine introuvable."
@@ -740,34 +703,39 @@ msgstr "Aucune information disponible pour ce domaine."
msgid "DNS status"
msgstr "Statut DNS"
#: admin/templates/admin/domain_detail.html:36
#: admin/templates/admin/domain_detail.html:28
#: admin/templates/admin/domains_table.html:12
msgid "Awaiting checks"
msgstr "En attente de vérification"
#: admin/templates/admin/domain_detail.html:40
msgid "Creation date"
msgstr "Date de création"
#: admin/templates/admin/domain_detail.html:38
#: admin/templates/admin/domain_detail.html:42
msgid "Last modification date"
msgstr "Date de dernière modification"
#: admin/templates/admin/domain_detail.html:39
#: admin/templates/admin/domain_detail.html:48
#: admin/templates/admin/domain_detail.html:43
#: admin/templates/admin/domain_detail.html:52
#: admin/templates/admin/domain_statistics.html:33
msgid "Domain aliases"
msgstr "Alias de domaine"
#: admin/templates/admin/domain_detail.html:41
#: admin/templates/admin/domain_detail.html:45
msgid "Mailbox aliases"
msgstr "Alias de boite."
#: admin/templates/admin/domain_detail.html:65
#: admin/templates/admin/domain_detail.html:69
msgid "Administrators"
msgstr "Administrateurs"
#: admin/templates/admin/domain_detail.html:75
#: admin/templates/admin/domain_detail.html:79
#: admin/templatetags/admin_tags.py:252
msgid "Remove this permission"
msgstr "Supprimer cette permission"
#: admin/templates/admin/domain_detail.html:80
#: admin/templates/admin/domain_detail.html:84
msgid "No domain administrator defined yet."
msgstr "Aucun administrateur de domaine défini."
@@ -859,9 +827,7 @@ msgstr "Mis à jour"
#: admin/templates/admin/mx_domain_detail.html:23
msgid "This IP does not match any of the valid MXs defined in parameters"
msgstr ""
"Cette IP ne correspond à un aucun des MX valides déclarés dans les "
"paramètres."
msgstr "Cette IP ne correspond à un aucun des MX valides déclarés dans les paramètres."
#: admin/templates/admin/mx_domain_detail.html:36
msgid "No MX record found for this domain."
@@ -872,26 +838,19 @@ msgstr "Aucun enregistrement MX trouvé pour ce domaine."
msgid ""
"Modoboa detected that domain %(domain)s is listed by the following DNSBL "
"providers:"
msgstr ""
"Modoboa a détecté que le domaine %(domain)s est listé par les fournisseurs "
"de DNSBL suivants :"
msgstr "Modoboa a détecté que le domaine %(domain)s est listé par les fournisseurs de DNSBL suivants :"
#: admin/templates/admin/notifications/domain_in_dnsbl.html:11
msgid ""
"The domain's reputation will be affected and there is a chance that emails "
"coming from it are considered as spam. You should contact those providers "
"and ask them to unlist detected IP address(es)."
msgstr ""
"La réputation de ce domaine sera affectée et il est probable que les emails "
"venant de lui soient considérés comme du spam. Vous devriez contacter ces "
"fournisseurs pour leur demander de délister la/les adresse(s) détectée(s)."
msgstr "La réputation de ce domaine sera affectée et il est probable que les emails venant de lui soient considérés comme du spam. Vous devriez contacter ces fournisseurs pour leur demander de délister la/les adresse(s) détectée(s)."
#: admin/templates/admin/notifications/domain_invalid_mx.html:3
#, python-format
msgid "Modoboa detected that domain %(domain)s has no valid MX record:"
msgstr ""
"Modoboa a détecté que le domain %(domain)s n'a aucun enregistrement MX "
"valide :"
msgstr "Modoboa a détecté que le domain %(domain)s n'a aucun enregistrement MX valide :"
#: admin/templates/admin/quota_headers.html:3
msgid "Value"
@@ -1037,19 +996,9 @@ msgid ""
" <li><em>domainalias; name; targeted domain; enabled</em></li>\n"
" %s\n"
"</ul>\n"
"<p>The first element of each line is mandatory and must be equal to one of "
"the previous values.</p>\n"
"<p>The first element of each line is mandatory and must be equal to one of the previous values.</p>\n"
"<p>You can use a different character as separator.</p>\n"
msgstr ""
"Fournir un fichier CSV ou chaque ligne respècte un des formats suivants :\n"
"<ul>\n"
" <li><em>domain; nom; quota; activé</em></li>\n"
" <li><em>domainalias; nom; domaine cible; activé</em></li>\n"
" %s\n"
"</ul>\n"
"<p>Le premier élément de chaque ligne est obligatoire et doit être égal à "
"l'une des valeurs précédentes.</p>\n"
"<p>Vous pouvez utiliser un caractère différent comme séparateur.</p>\n"
msgstr "Fournir un fichier CSV ou chaque ligne respècte un des formats suivants :\n<ul>\n <li><em>domain; nom; quota; activé</em></li>\n <li><em>domainalias; nom; domaine cible; activé</em></li>\n %s\n</ul>\n<p>Le premier élément de chaque ligne est obligatoire et doit être égal à l'une des valeurs précédentes.</p>\n<p>Vous pouvez utiliser un caractère différent comme séparateur.</p>\n"
#: admin/views/import_.py:98
msgid "Import domains"
@@ -1059,26 +1008,13 @@ msgstr "Importer des domaines"
msgid ""
"Provide a CSV file where lines respect one of the following formats:\n"
"<ul>\n"
"<li><em>account; loginname; password; first name; last name; enabled; group; "
"address; quota; [, domain, ...]</em></li>\n"
"<li><em>account; loginname; password; first name; last name; enabled; group; address; quota; [, domain, ...]</em></li>\n"
"<li><em>alias; address; enabled; recipient; recipient; ...</em></li>\n"
"</ul>\n"
"<p>The first element of each line is mandatory and must be equal to one of "
"the previous values.</p>\n"
"<p>The first element of each line is mandatory and must be equal to one of the previous values.</p>\n"
"\n"
"<p>You can use a different character as separator.</p>\n"
msgstr ""
"Fournir un fichier CSV dans lequel les lignes respectent un des formats "
"suivants :\n"
"<ul>\n"
"<li><em>account; loginname; password; first name; last name; enabled; group; "
"address; quota; [, domain, ...]</em></li>\n"
"<li><em>alias; address; enabled; recipient; recipient; ...</em></li>\n"
"</ul>\n"
"<p>Le premier élément de chaque ligne est obligatoire et doit être égal à "
"l'une des valeurs précédentes..</p>\n"
"\n"
"<p>Vous pouvez utiliser un caractère différent comme séparateur.</p>\n"
msgstr "Fournir un fichier CSV dans lequel les lignes respectent un des formats suivants :\n<ul>\n<li><em>account; loginname; password; first name; last name; enabled; group; address; quota; [, domain, ...]</em></li>\n<li><em>alias; address; enabled; recipient; recipient; ...</em></li>\n</ul>\n<p>Le premier élément de chaque ligne est obligatoire et doit être égal à l'une des valeurs précédentes..</p>\n\n<p>Vous pouvez utiliser un caractère différent comme séparateur.</p>\n"
#: admin/views/import_.py:130
msgid "Import identities"
+91 -81
View File
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2015-10-11 11:48+0000\n"
"Last-Translator: Rocco <mors10@hotmail.com>\n"
"Language-Team: Italian (http://www.transifex.com/tonio/modoboa/language/"
@@ -52,7 +52,7 @@ msgstr ""
msgid "Check every domain against major DNSBL providers"
msgstr ""
#: admin/app_settings.py:84 admin/templates/admin/domain_detail.html.py:40
#: admin/app_settings.py:84 admin/templates/admin/domain_detail.html:44
msgid "Mailboxes"
msgstr "Caselle di posta"
@@ -107,7 +107,7 @@ msgstr ""
"Crea un dominio ed una casella di posta elettronica quando si crea un "
"account utente"
#: admin/app_settings.py:170 admin/forms/account.py:279
#: admin/app_settings.py:170 admin/forms/account.py:292
#: admin/forms/domain.py:81
msgid "Must be a positive integer"
msgstr "Dev'essere un intero positivo"
@@ -116,13 +116,13 @@ msgstr "Dev'essere un intero positivo"
msgid "Administration"
msgstr "Amministrazione"
#: admin/callbacks.py:35 admin/templates/admin/domain_statistics.html.py:36
#: admin/callbacks.py:35 admin/templates/admin/domain_statistics.html:36
#: admin/templates/admin/domain_statistics.html:50
#: admin/templates/admin/identities.html:5
msgid "Identities"
msgstr "Identità"
#: admin/callbacks.py:50 admin/templates/admin/forward.html.py:2
#: admin/callbacks.py:50 admin/templates/admin/forward.html:2
msgid "Forward"
msgstr "Inoltra"
@@ -146,7 +146,7 @@ msgstr "Importazione account fallito(%s): valore della quota errato"
msgid "domain alias"
msgstr "alias del dominio"
#: admin/forms/account.py:33 admin/templates/admin/domain_detail.html.py:68
#: admin/forms/account.py:33 admin/templates/admin/domain_detail.html:72
msgid "Username"
msgstr "Nome utente"
@@ -158,11 +158,11 @@ msgstr ""
"Il nome dell'utente. Dev'essere un indirizzo e-mail per gli utenti semplici "
"o gli amministratori che posseggono una casella"
#: admin/forms/account.py:40 admin/templates/admin/account_detail.html.py:29
#: admin/forms/account.py:40 admin/templates/admin/account_detail.html:29
msgid "Role"
msgstr "Ruolo"
#: admin/forms/account.py:41 admin/forms/account.py:79
#: admin/forms/account.py:41
msgid "Choose"
msgstr "Scegli"
@@ -183,32 +183,32 @@ msgid "Enter the same password as above, for verification."
msgstr ""
"Inserisci la medesima password che hai inserito sopra, per la verifica."
#: admin/forms/account.py:70
#: admin/forms/account.py:63
msgid "Enabled"
msgstr "Abilitato"
#: admin/forms/account.py:142
#: admin/forms/account.py:155
msgid "The two password fields didn't match."
msgstr "Le password nei due campi non corrispondono"
#: admin/forms/account.py:157
#: admin/forms/account.py:170
msgid "Only super administrators are allowed for this mode"
msgstr "Solo i super amministratori possono operare in questa modalità"
#: admin/forms/account.py:165
#: admin/forms/account.py:178
msgid "You can't disable your own account"
msgstr "Tu non puoi disabilitare il tuo account"
#: admin/forms/account.py:180
#: admin/forms/account.py:193
msgid "E-mail"
msgstr "E-mail"
#: admin/forms/account.py:182 admin/forms/domain.py:36
#: admin/forms/account.py:195 admin/forms/domain.py:36
#: admin/templates/admin/account_detail.html:45
msgid "Quota"
msgstr "Quota"
#: admin/forms/account.py:184
#: admin/forms/account.py:197
msgid ""
"Quota in MB for this mailbox. Define a custom value or use domain's default "
"one. Leave empty to define an unlimited value (not allowed for domain "
@@ -218,28 +218,33 @@ msgstr ""
"quello predefinito. Lasciare vuoto per non impostare limiti (non consentito "
"per gli amministratori di dominio)."
#: admin/forms/account.py:192 admin/forms/domain.py:44
#: admin/forms/account.py:205 admin/forms/domain.py:44
#: admin/templates/admin/domains.html:35
msgid "Alias(es)"
msgstr "Alias"
#: admin/forms/account.py:195
#: admin/forms/account.py:208
#, fuzzy
#| msgid ""
#| "Alias(es) of this mailbox. Indicate only one address per input, press "
#| "ENTER to add a new input. Use the '*' character to create a 'catchall' "
#| "alias (ex: *@domain.tld)."
msgid ""
"Alias(es) of this mailbox. Indicate only one address per input, press ENTER "
"to add a new input. Use the '*' character to create a 'catchall' alias (ex: "
"*@domain.tld)."
"to add a new input. To create a catchall alias, just enter the domain name "
"(@domain.tld)."
msgstr ""
"Alias per questa casella di posta. Inserire un solo indirizzo alla volta, "
"premere INVIO per aggiungere un nuovo elemento. Utilizzare il carattere '*' "
"per creare un alias 'prenditutto' (p.es.: *@dominio.org)."
#: admin/forms/account.py:201
#: admin/forms/account.py:214
#, fuzzy
#| msgid "Invalid address"
msgid "Sender addresses"
msgstr "Indirizzo non valido"
#: admin/forms/account.py:204
#: admin/forms/account.py:217
#, fuzzy
#| msgid ""
#| "Addresses this alias will point to. Indicate only one address per input, "
@@ -252,47 +257,47 @@ msgstr ""
"Indirizzi verso il quale questo alias punterà . Indicare un solo indirizzo "
"per ogni ingresso , premere INVIO per aggiungere un nuovo input ."
#: admin/forms/account.py:258 admin/forms/alias.py:89
#: admin/forms/account.py:271 admin/forms/alias.py:92
#: admin/models/mailbox.py:293
msgid "Domain does not exist"
msgstr "Il dominio non esiste"
#: admin/forms/account.py:288
#: admin/forms/account.py:301
#, fuzzy
#| msgid "Domain does not exist"
msgid "Local domain does not exist"
msgstr "Il dominio non esiste"
#: admin/forms/account.py:386
#: admin/forms/account.py:399
msgid "Domain(s)"
msgstr "Dominio(i)"
#: admin/forms/account.py:388
#: admin/forms/account.py:401
msgid "Domain(s) that user administrates"
msgstr "Dominio(i) amministrato(i) dall'utente"
#: admin/forms/account.py:434 admin/forms/account.py:518
#: admin/forms/domain.py:266 admin/forms/domain.py:336
#: admin/forms/account.py:447 admin/forms/account.py:532
#: admin/forms/domain.py:266 admin/forms/domain.py:332
msgid "General"
msgstr "Generale"
#: admin/forms/account.py:439 admin/forms/account.py:524
#: admin/forms/account.py:452 admin/forms/account.py:538
msgid "Mail"
msgstr "Posta"
#: admin/forms/account.py:441
#: admin/forms/account.py:454
msgid "Permissions"
msgstr "Permessi"
#: admin/forms/account.py:507
#: admin/forms/account.py:521
msgid "Account updated"
msgstr "Account aggiornato"
#: admin/forms/account.py:531
#: admin/forms/account.py:545
msgid "New account"
msgstr "Nuovo account"
#: admin/forms/account.py:543
#: admin/forms/account.py:557
msgid "Account created"
msgstr "Account creato"
@@ -314,7 +319,7 @@ msgstr ""
"Indirizzi email alias. Per creare un alias catchall specifica il nome del "
"dominio (@domain.tld)."
#: admin/forms/alias.py:35 admin/templates/admin/alias_detail.html.py:37
#: admin/forms/alias.py:35 admin/templates/admin/alias_detail.html:37
msgid "Recipients"
msgstr "Destinatari"
@@ -326,26 +331,26 @@ msgstr ""
"Indirizzi verso il quale questo alias punterà . Indicare un solo indirizzo "
"per ogni ingresso , premere INVIO per aggiungere un nuovo input ."
#: admin/forms/alias.py:92
#: admin/forms/alias.py:47 admin/forms/domain.py:24 admin/models/domain.py:90
#: admin/templates/admin/domain_statistics.html:49
msgid "Domain"
msgstr "Dominio"
#: admin/forms/alias.py:95
msgid "You don't have access to this domain"
msgstr "Non hai accesso a questo dominio"
#: admin/forms/alias.py:109 admin/forms/alias.py:111
#: admin/forms/alias.py:112 admin/forms/alias.py:114
#, fuzzy
#| msgid "A mailbox is required"
msgid "This field is required"
msgstr "É necessaria una casella"
#: admin/forms/alias.py:115
#: admin/forms/alias.py:118
msgid "No recipient defined"
msgstr "Non è stato definito un destinatario"
#: admin/forms/domain.py:24 admin/models/alias.py:37 admin/models/domain.py:87
#: admin/templates/admin/domain_statistics.html:49
msgid "Domain"
msgstr "Dominio"
#: admin/forms/domain.py:33 admin/templates/admin/domain_statistics.html.py:26
#: admin/forms/domain.py:33 admin/templates/admin/domain_statistics.html:26
msgid "Type"
msgstr "Tipo"
@@ -383,7 +388,7 @@ msgstr "Crea un amministratore di dominio"
msgid "Automatically create an administrator for this domain"
msgstr "Crea automaticamente un amministratore per questo dominio"
#: admin/forms/domain.py:174 admin/templates/admin/domain_detail.html.py:68
#: admin/forms/domain.py:174 admin/templates/admin/domain_detail.html:72
#: admin/templates/admin/domains.html:34
#: admin/templates/admin/identity_headers.html:2
#: admin/templates/admin/mx_domain_detail.html:9
@@ -415,19 +420,19 @@ msgstr "Formato non valido"
msgid "User '%s' already exists"
msgstr "L'utente '%s' esiste già"
#: admin/forms/domain.py:325
#: admin/forms/domain.py:321
msgid "Domain modified"
msgstr "Dominio modificato"
#: admin/forms/domain.py:345
#: admin/forms/domain.py:341
msgid "Options"
msgstr "Opzioni"
#: admin/forms/domain.py:353
#: admin/forms/domain.py:349
msgid "New domain"
msgstr "Nuovo dominio"
#: admin/forms/domain.py:366
#: admin/forms/domain.py:362
msgid "Domain created"
msgstr "Dominio creato"
@@ -497,20 +502,20 @@ msgstr "Non hai i permessi di importare domini"
msgid "You are not allowed to import domain aliases."
msgstr "Non hai i permessi di importare gli alias dominio"
#: admin/management/commands/subcommands/_mx.py:155
#: admin/management/commands/subcommands/_mx.py:159
msgid "[modoboa] DNSBL issue(s) for domain {}"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:176
msgid "Domain {} as no MX record"
#: admin/management/commands/subcommands/_mx.py:180
msgid "Domain {} has no MX record"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:187
#: admin/management/commands/subcommands/_mx.py:191
#, python-brace-format
msgid "Domain {0} got an invalid MX record. Got {1}"
msgid "MX record for domain {0} is invalid: {1}"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:203
#: admin/management/commands/subcommands/_mx.py:207
msgid "[modoboa] MX issue(s) for domain {}"
msgstr ""
@@ -522,62 +527,62 @@ msgstr "indirizzo"
msgid "The alias address."
msgstr "Indirizzi Alias."
#: admin/models/alias.py:39 admin/models/domain.py:42
#: admin/models/alias.py:38 admin/models/domain.py:45
#: admin/models/domain_alias.py:44
msgid "enabled"
msgstr "Attivato"
#: admin/models/alias.py:40 admin/models/domain_alias.py:45
#: admin/models/alias.py:39 admin/models/domain_alias.py:45
msgid "Check to activate this alias"
msgstr "Seleziona per attivare questo alias"
#: admin/models/alias.py:45 admin/templates/admin/alias_detail.html.py:32
#: admin/models/alias.py:44 admin/templates/admin/alias_detail.html:32
msgid "Description"
msgstr ""
#: admin/models/alias.py:47 admin/templates/admin/alias_detail.html.py:29
#: admin/models/alias.py:46 admin/templates/admin/alias_detail.html:29
msgid "Expire at"
msgstr ""
#: admin/models/alias.py:90
#: admin/models/alias.py:89
msgid "alias"
msgstr "alias"
#: admin/models/alias.py:122
#: admin/models/alias.py:121
msgid "Invalid address"
msgstr "Indirizzo non valido"
#: admin/models/alias.py:143
#: admin/models/alias.py:142
msgid "Local recipient {}@{} not found"
msgstr "Destinatario locale {}@{} non trovato"
#: admin/models/alias.py:173
#: admin/models/alias.py:172
#, python-format
msgid "Invalid line: %s"
msgstr "Riga non valida: %s"
#: admin/models/alias.py:179
#: admin/models/alias.py:178
#, python-format
msgid "Domain '%s' does not exist"
msgstr "Il dominio '%s' non esiste"
#: admin/models/domain.py:38 admin/models/domain_alias.py:37
#: admin/models/domain.py:41 admin/models/domain_alias.py:37
msgid "name"
msgstr "nome"
#: admin/models/domain.py:39
#: admin/models/domain.py:42
msgid "The domain name"
msgstr "Il nome del dominio"
#: admin/models/domain.py:43
#: admin/models/domain.py:46
msgid "Check to activate this domain"
msgstr "Seleziona per attivare questo dominio"
#: admin/models/domain.py:198 admin/models/domain_alias.py:71
#: admin/models/domain.py:211 admin/models/domain_alias.py:71
msgid "Invalid line"
msgstr "Riga non valida"
#: admin/models/domain.py:206
#: admin/models/domain.py:219
#, python-format
msgid "Invalid quota value for domain '%s'"
msgstr "Valore della quota non valido per il dominio '%s'"
@@ -617,32 +622,32 @@ msgstr "La quota è maggiore del limite stabilito per il dominio (%dM)"
msgid "A quota is required"
msgstr "È richiesta una quota"
#: admin/serializers.py:44 admin/serializers.py:224 admin/serializers.py:313
#: admin/serializers.py:45 admin/serializers.py:228 admin/serializers.py:317
#, fuzzy
#| msgid "Permissions"
msgid "Permission denied."
msgstr "Permessi"
#: admin/serializers.py:82
#: admin/serializers.py:83
msgid ""
"List of administered domains (resellers and domain administrators only)."
msgstr ""
#: admin/serializers.py:189
#: admin/serializers.py:193
msgid "Not allowed for this role."
msgstr ""
#: admin/serializers.py:199
#: admin/serializers.py:203
msgid "Must be equal to mailbox full_address"
msgstr ""
#: admin/serializers.py:211
#: admin/serializers.py:215
#, fuzzy
#| msgid "Domain does not exist"
msgid "Local domain {} does not exist"
msgstr "Il dominio non esiste"
#: admin/serializers.py:311
#: admin/serializers.py:315
#, fuzzy
#| msgid "Domain modified"
msgid "Domain not found."
@@ -780,34 +785,39 @@ msgstr ""
msgid "DNS status"
msgstr "Statistiche"
#: admin/templates/admin/domain_detail.html:36
#: admin/templates/admin/domain_detail.html:28
#: admin/templates/admin/domains_table.html:12
msgid "Awaiting checks"
msgstr ""
#: admin/templates/admin/domain_detail.html:40
msgid "Creation date"
msgstr "Data di creazione"
#: admin/templates/admin/domain_detail.html:38
#: admin/templates/admin/domain_detail.html:42
msgid "Last modification date"
msgstr "Data dell'ultima modifica"
#: admin/templates/admin/domain_detail.html:39
#: admin/templates/admin/domain_detail.html:48
#: admin/templates/admin/domain_detail.html:43
#: admin/templates/admin/domain_detail.html:52
#: admin/templates/admin/domain_statistics.html:33
msgid "Domain aliases"
msgstr "Alias del dominio"
#: admin/templates/admin/domain_detail.html:41
#: admin/templates/admin/domain_detail.html:45
msgid "Mailbox aliases"
msgstr "Alias delle caselle di posta"
#: admin/templates/admin/domain_detail.html:65
#: admin/templates/admin/domain_detail.html:69
msgid "Administrators"
msgstr "Amministratori"
#: admin/templates/admin/domain_detail.html:75
#: admin/templates/admin/domain_detail.html:79
#: admin/templatetags/admin_tags.py:252
msgid "Remove this permission"
msgstr "Rimuovi questo permesso"
#: admin/templates/admin/domain_detail.html:80
#: admin/templates/admin/domain_detail.html:84
#, fuzzy
#| msgid "No domain administrator defined"
msgid "No domain administrator defined yet."
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2016-09-14 17:06+0000\n"
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>\n"
"Language-Team: Japanese (Japan) (http://www.transifex.com/tonio/modoboa/"
@@ -51,7 +51,7 @@ msgstr "DNSBL チェックを有効にする"
msgid "Check every domain against major DNSBL providers"
msgstr "すべてのドメインを 主な DNSBL プロバイダーでチェックする"
#: admin/app_settings.py:84 admin/templates/admin/domain_detail.html.py:40
#: admin/app_settings.py:84 admin/templates/admin/domain_detail.html:44
msgid "Mailboxes"
msgstr "メールボックス"
@@ -105,7 +105,7 @@ msgid "Create a domain and a mailbox when an account is automatically created."
msgstr ""
"アカウントが自動的に作成されたとき、ドメインとメールボックを作成します。"
#: admin/app_settings.py:170 admin/forms/account.py:279
#: admin/app_settings.py:170 admin/forms/account.py:292
#: admin/forms/domain.py:81
msgid "Must be a positive integer"
msgstr "正の整数でなければいけません"
@@ -114,13 +114,13 @@ msgstr "正の整数でなければいけません"
msgid "Administration"
msgstr "管理"
#: admin/callbacks.py:35 admin/templates/admin/domain_statistics.html.py:36
#: admin/callbacks.py:35 admin/templates/admin/domain_statistics.html:36
#: admin/templates/admin/domain_statistics.html:50
#: admin/templates/admin/identities.html:5
msgid "Identities"
msgstr "ID"
#: admin/callbacks.py:50 admin/templates/admin/forward.html.py:2
#: admin/callbacks.py:50 admin/templates/admin/forward.html:2
msgid "Forward"
msgstr "転送先"
@@ -142,7 +142,7 @@ msgstr "アカウントのインポートに失敗しました (%s): 不正な
msgid "domain alias"
msgstr "ドメインエイリアス"
#: admin/forms/account.py:33 admin/templates/admin/domain_detail.html.py:68
#: admin/forms/account.py:33 admin/templates/admin/domain_detail.html:72
msgid "Username"
msgstr "ユーザー名"
@@ -155,11 +155,11 @@ msgstr ""
"メールボックスを持つユーザーもしくは管理者の有効な電子メールアドレスでなけれ"
"ばなりません。"
#: admin/forms/account.py:40 admin/templates/admin/account_detail.html.py:29
#: admin/forms/account.py:40 admin/templates/admin/account_detail.html:29
msgid "Role"
msgstr "ロール"
#: admin/forms/account.py:41 admin/forms/account.py:79
#: admin/forms/account.py:41
msgid "Choose"
msgstr "選ぶ"
@@ -179,32 +179,32 @@ msgstr "確認"
msgid "Enter the same password as above, for verification."
msgstr "確認のため、上記と同じパスワードを入力します。"
#: admin/forms/account.py:70
#: admin/forms/account.py:63
msgid "Enabled"
msgstr "有効化"
#: admin/forms/account.py:142
#: admin/forms/account.py:155
msgid "The two password fields didn't match."
msgstr "2つのパスワード項目が一致しません"
#: admin/forms/account.py:157
#: admin/forms/account.py:170
msgid "Only super administrators are allowed for this mode"
msgstr "スーパー管理者だけが、このモードのために許可されています。"
#: admin/forms/account.py:165
#: admin/forms/account.py:178
msgid "You can't disable your own account"
msgstr "あなた自身のアカウントは無効化できません"
#: admin/forms/account.py:180
#: admin/forms/account.py:193
msgid "E-mail"
msgstr "電子メール"
#: admin/forms/account.py:182 admin/forms/domain.py:36
#: admin/forms/account.py:195 admin/forms/domain.py:36
#: admin/templates/admin/account_detail.html:45
msgid "Quota"
msgstr "クォータ"
#: admin/forms/account.py:184
#: admin/forms/account.py:197
msgid ""
"Quota in MB for this mailbox. Define a custom value or use domain's default "
"one. Leave empty to define an unlimited value (not allowed for domain "
@@ -215,16 +215,21 @@ msgstr ""
"無制限の値を定義する場合は空白のままにします\n"
"(ドメイン管理者には許可されていません)"
#: admin/forms/account.py:192 admin/forms/domain.py:44
#: admin/forms/account.py:205 admin/forms/domain.py:44
#: admin/templates/admin/domains.html:35
msgid "Alias(es)"
msgstr "エイリアス"
#: admin/forms/account.py:195
#: admin/forms/account.py:208
#, fuzzy
#| msgid ""
#| "Alias(es) of this mailbox. Indicate only one address per input, press "
#| "ENTER to add a new input. Use the '*' character to create a 'catchall' "
#| "alias (ex: *@domain.tld)."
msgid ""
"Alias(es) of this mailbox. Indicate only one address per input, press ENTER "
"to add a new input. Use the '*' character to create a 'catchall' alias (ex: "
"*@domain.tld)."
"to add a new input. To create a catchall alias, just enter the domain name "
"(@domain.tld)."
msgstr ""
"メールボックスのエイリアス\n"
"input ごとに1つだけのアドレスを記入し、 ENTER キーを押して、新しい input を追"
@@ -232,56 +237,56 @@ msgstr ""
" 「キャッチオール」エイリアスを作成するには、 ' * '文字を使用してください "
"(例: *@domain.tld)"
#: admin/forms/account.py:201
#: admin/forms/account.py:214
msgid "Sender addresses"
msgstr ""
#: admin/forms/account.py:204
#: admin/forms/account.py:217
msgid ""
"Additional sender address(es) for this account. The user will be allowed to "
"send emails using this address, even if it does not exist locally. Indicate "
"one address per input. Press ENTER to add a new input."
msgstr ""
#: admin/forms/account.py:258 admin/forms/alias.py:89
#: admin/forms/account.py:271 admin/forms/alias.py:92
#: admin/models/mailbox.py:293
msgid "Domain does not exist"
msgstr "ドメインは存在しません"
#: admin/forms/account.py:288
#: admin/forms/account.py:301
msgid "Local domain does not exist"
msgstr "ローカルドメインは存在しません"
#: admin/forms/account.py:386
#: admin/forms/account.py:399
msgid "Domain(s)"
msgstr "ドメイン"
#: admin/forms/account.py:388
#: admin/forms/account.py:401
msgid "Domain(s) that user administrates"
msgstr "ユーザーに管理されたドメイン"
#: admin/forms/account.py:434 admin/forms/account.py:518
#: admin/forms/domain.py:266 admin/forms/domain.py:336
#: admin/forms/account.py:447 admin/forms/account.py:532
#: admin/forms/domain.py:266 admin/forms/domain.py:332
msgid "General"
msgstr "全般"
#: admin/forms/account.py:439 admin/forms/account.py:524
#: admin/forms/account.py:452 admin/forms/account.py:538
msgid "Mail"
msgstr "メール"
#: admin/forms/account.py:441
#: admin/forms/account.py:454
msgid "Permissions"
msgstr "アクセス許可"
#: admin/forms/account.py:507
#: admin/forms/account.py:521
msgid "Account updated"
msgstr "アカウントを更新しました"
#: admin/forms/account.py:531
#: admin/forms/account.py:545
msgid "New account"
msgstr "新しいアカウト"
#: admin/forms/account.py:543
#: admin/forms/account.py:557
msgid "Account created"
msgstr "アカウントを作成しました"
@@ -304,7 +309,7 @@ msgstr ""
"キャッチオールエイリアスを作成するためには、ドメイン名だけを入力します "
"(@domain.tld)"
#: admin/forms/alias.py:35 admin/templates/admin/alias_detail.html.py:37
#: admin/forms/alias.py:35 admin/templates/admin/alias_detail.html:37
msgid "Recipients"
msgstr "受信者"
@@ -317,24 +322,24 @@ msgstr ""
"input ごとに1つだけのアドレスを記入し、 ENTER キーを押して、新しい input を追"
"加します"
#: admin/forms/alias.py:92
msgid "You don't have access to this domain"
msgstr "このドメインにアクセスする権限がありません"
#: admin/forms/alias.py:109 admin/forms/alias.py:111
msgid "This field is required"
msgstr ""
#: admin/forms/alias.py:115
msgid "No recipient defined"
msgstr "受信者が定義されていません"
#: admin/forms/domain.py:24 admin/models/alias.py:37 admin/models/domain.py:87
#: admin/forms/alias.py:47 admin/forms/domain.py:24 admin/models/domain.py:90
#: admin/templates/admin/domain_statistics.html:49
msgid "Domain"
msgstr "ドメイン"
#: admin/forms/domain.py:33 admin/templates/admin/domain_statistics.html.py:26
#: admin/forms/alias.py:95
msgid "You don't have access to this domain"
msgstr "このドメインにアクセスする権限がありません"
#: admin/forms/alias.py:112 admin/forms/alias.py:114
msgid "This field is required"
msgstr ""
#: admin/forms/alias.py:118
msgid "No recipient defined"
msgstr "受信者が定義されていません"
#: admin/forms/domain.py:33 admin/templates/admin/domain_statistics.html:26
msgid "Type"
msgstr "タイプ"
@@ -373,7 +378,7 @@ msgstr "ドメイン管理者を作成する"
msgid "Automatically create an administrator for this domain"
msgstr "自動的にドメインの管理者を作成する"
#: admin/forms/domain.py:174 admin/templates/admin/domain_detail.html.py:68
#: admin/forms/domain.py:174 admin/templates/admin/domain_detail.html:72
#: admin/templates/admin/domains.html:34
#: admin/templates/admin/identity_headers.html:2
#: admin/templates/admin/mx_domain_detail.html:9
@@ -405,19 +410,19 @@ msgstr "不正なフォーマット"
msgid "User '%s' already exists"
msgstr "ユーザー %s はすでに存在します"
#: admin/forms/domain.py:325
#: admin/forms/domain.py:321
msgid "Domain modified"
msgstr "ドメインが修正されました"
#: admin/forms/domain.py:345
#: admin/forms/domain.py:341
msgid "Options"
msgstr "オプション"
#: admin/forms/domain.py:353
#: admin/forms/domain.py:349
msgid "New domain"
msgstr "新しいドメイン"
#: admin/forms/domain.py:366
#: admin/forms/domain.py:362
msgid "Domain created"
msgstr "ドメインが作成されました"
@@ -487,20 +492,20 @@ msgstr "ドメインのインポートは許可されていません"
msgid "You are not allowed to import domain aliases."
msgstr "ドメインエイリアスのインポートは許可されていません"
#: admin/management/commands/subcommands/_mx.py:155
#: admin/management/commands/subcommands/_mx.py:159
msgid "[modoboa] DNSBL issue(s) for domain {}"
msgstr "[modoboa] ドメイン {} の DNSBL結果"
#: admin/management/commands/subcommands/_mx.py:176
msgid "Domain {} as no MX record"
#: admin/management/commands/subcommands/_mx.py:180
msgid "Domain {} has no MX record"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:187
#: admin/management/commands/subcommands/_mx.py:191
#, python-brace-format
msgid "Domain {0} got an invalid MX record. Got {1}"
msgid "MX record for domain {0} is invalid: {1}"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:203
#: admin/management/commands/subcommands/_mx.py:207
msgid "[modoboa] MX issue(s) for domain {}"
msgstr ""
@@ -512,62 +517,62 @@ msgstr "アドレス"
msgid "The alias address."
msgstr "エイリアスアドレス"
#: admin/models/alias.py:39 admin/models/domain.py:42
#: admin/models/alias.py:38 admin/models/domain.py:45
#: admin/models/domain_alias.py:44
msgid "enabled"
msgstr "有効"
#: admin/models/alias.py:40 admin/models/domain_alias.py:45
#: admin/models/alias.py:39 admin/models/domain_alias.py:45
msgid "Check to activate this alias"
msgstr "このエイリアスをアクティブにするために確認してください"
#: admin/models/alias.py:45 admin/templates/admin/alias_detail.html.py:32
#: admin/models/alias.py:44 admin/templates/admin/alias_detail.html:32
msgid "Description"
msgstr ""
#: admin/models/alias.py:47 admin/templates/admin/alias_detail.html.py:29
#: admin/models/alias.py:46 admin/templates/admin/alias_detail.html:29
msgid "Expire at"
msgstr ""
#: admin/models/alias.py:90
#: admin/models/alias.py:89
msgid "alias"
msgstr "エイリアス"
#: admin/models/alias.py:122
#: admin/models/alias.py:121
msgid "Invalid address"
msgstr "不正なアドレス"
#: admin/models/alias.py:143
#: admin/models/alias.py:142
msgid "Local recipient {}@{} not found"
msgstr "ローカル受信者 {}@{} は見つかりません"
#: admin/models/alias.py:173
#: admin/models/alias.py:172
#, python-format
msgid "Invalid line: %s"
msgstr "不正な行: %s"
#: admin/models/alias.py:179
#: admin/models/alias.py:178
#, python-format
msgid "Domain '%s' does not exist"
msgstr "ドメイン %s は、存在しません"
#: admin/models/domain.py:38 admin/models/domain_alias.py:37
#: admin/models/domain.py:41 admin/models/domain_alias.py:37
msgid "name"
msgstr "名前"
#: admin/models/domain.py:39
#: admin/models/domain.py:42
msgid "The domain name"
msgstr "ドメイン名"
#: admin/models/domain.py:43
#: admin/models/domain.py:46
msgid "Check to activate this domain"
msgstr "このドメインをアクティブするために確認してください"
#: admin/models/domain.py:198 admin/models/domain_alias.py:71
#: admin/models/domain.py:211 admin/models/domain_alias.py:71
msgid "Invalid line"
msgstr "不正な行"
#: admin/models/domain.py:206
#: admin/models/domain.py:219
#, python-format
msgid "Invalid quota value for domain '%s'"
msgstr "不正なドメイン %s のクォータ値"
@@ -607,28 +612,28 @@ msgstr "クォータが、ドメインに許可された制限 (%dM) より大
msgid "A quota is required"
msgstr "クォータは必須です"
#: admin/serializers.py:44 admin/serializers.py:224 admin/serializers.py:313
#: admin/serializers.py:45 admin/serializers.py:228 admin/serializers.py:317
msgid "Permission denied."
msgstr "アクセス拒否"
#: admin/serializers.py:82
#: admin/serializers.py:83
msgid ""
"List of administered domains (resellers and domain administrators only)."
msgstr "管理しているドメインのリスト (リセーラーとドメイン管理者のみ)"
#: admin/serializers.py:189
#: admin/serializers.py:193
msgid "Not allowed for this role."
msgstr "このロールには許可されていません"
#: admin/serializers.py:199
#: admin/serializers.py:203
msgid "Must be equal to mailbox full_address"
msgstr "メールボックス full_address に等しくなければなりません"
#: admin/serializers.py:211
#: admin/serializers.py:215
msgid "Local domain {} does not exist"
msgstr "ローカルドメイン {} は、存在しません"
#: admin/serializers.py:311
#: admin/serializers.py:315
msgid "Domain not found."
msgstr "ドメインが見つかりません"
@@ -742,34 +747,39 @@ msgstr "このドメインに関する情報がありません。"
msgid "DNS status"
msgstr "ステータス"
#: admin/templates/admin/domain_detail.html:36
#: admin/templates/admin/domain_detail.html:28
#: admin/templates/admin/domains_table.html:12
msgid "Awaiting checks"
msgstr ""
#: admin/templates/admin/domain_detail.html:40
msgid "Creation date"
msgstr "作成日時"
#: admin/templates/admin/domain_detail.html:38
#: admin/templates/admin/domain_detail.html:42
msgid "Last modification date"
msgstr "最終修正日時"
#: admin/templates/admin/domain_detail.html:39
#: admin/templates/admin/domain_detail.html:48
#: admin/templates/admin/domain_detail.html:43
#: admin/templates/admin/domain_detail.html:52
#: admin/templates/admin/domain_statistics.html:33
msgid "Domain aliases"
msgstr "ドメインエイリアス"
#: admin/templates/admin/domain_detail.html:41
#: admin/templates/admin/domain_detail.html:45
msgid "Mailbox aliases"
msgstr "メールボックスエイリアス"
#: admin/templates/admin/domain_detail.html:65
#: admin/templates/admin/domain_detail.html:69
msgid "Administrators"
msgstr "管理者"
#: admin/templates/admin/domain_detail.html:75
#: admin/templates/admin/domain_detail.html:79
#: admin/templatetags/admin_tags.py:252
msgid "Remove this permission"
msgstr "このパーミッションを削除"
#: admin/templates/admin/domain_detail.html:80
#: admin/templates/admin/domain_detail.html:84
msgid "No domain administrator defined yet."
msgstr "ドメイン管理者が指定されていません"
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2014-12-31 11:37+0000\n"
"Last-Translator: TuxBrother <vrijwilligerswerk@wij.rs>\n"
"Language-Team: Dutch (Netherlands) (http://www.transifex.com/projects/p/"
@@ -52,7 +52,7 @@ msgstr ""
msgid "Check every domain against major DNSBL providers"
msgstr ""
#: admin/app_settings.py:84 admin/templates/admin/domain_detail.html.py:40
#: admin/app_settings.py:84 admin/templates/admin/domain_detail.html:44
msgid "Mailboxes"
msgstr "Mailboxen"
@@ -107,7 +107,7 @@ msgid "Create a domain and a mailbox when an account is automatically created."
msgstr ""
"Maak een domein en mailbox aan wanneer een account automatisch is aangemaakt."
#: admin/app_settings.py:170 admin/forms/account.py:279
#: admin/app_settings.py:170 admin/forms/account.py:292
#: admin/forms/domain.py:81
msgid "Must be a positive integer"
msgstr "Dit moet een positive integer zijn."
@@ -116,13 +116,13 @@ msgstr "Dit moet een positive integer zijn."
msgid "Administration"
msgstr "Administratie"
#: admin/callbacks.py:35 admin/templates/admin/domain_statistics.html.py:36
#: admin/callbacks.py:35 admin/templates/admin/domain_statistics.html:36
#: admin/templates/admin/domain_statistics.html:50
#: admin/templates/admin/identities.html:5
msgid "Identities"
msgstr "Identiteiten"
#: admin/callbacks.py:50 admin/templates/admin/forward.html.py:2
#: admin/callbacks.py:50 admin/templates/admin/forward.html:2
msgid "Forward"
msgstr "Doorsturen"
@@ -146,7 +146,7 @@ msgstr "Account import is mislukt (%s): verkeerd quotum waarde"
msgid "domain alias"
msgstr "domein alias"
#: admin/forms/account.py:33 admin/templates/admin/domain_detail.html.py:68
#: admin/forms/account.py:33 admin/templates/admin/domain_detail.html:72
msgid "Username"
msgstr "Gebruikersnaam"
@@ -158,11 +158,11 @@ msgstr ""
"De naam van de gebruiker. Moet een geldig e-mail adres zijn voor gebruikers "
"of administrators met een mailbox."
#: admin/forms/account.py:40 admin/templates/admin/account_detail.html.py:29
#: admin/forms/account.py:40 admin/templates/admin/account_detail.html:29
msgid "Role"
msgstr "Regel"
#: admin/forms/account.py:41 admin/forms/account.py:79
#: admin/forms/account.py:41
msgid "Choose"
msgstr "Kiezen"
@@ -182,32 +182,32 @@ msgstr "Bevestiging"
msgid "Enter the same password as above, for verification."
msgstr "Herhaal wachtwoord (voor verificatie)"
#: admin/forms/account.py:70
#: admin/forms/account.py:63
msgid "Enabled"
msgstr "Actief"
#: admin/forms/account.py:142
#: admin/forms/account.py:155
msgid "The two password fields didn't match."
msgstr "De wachtwoorden komen niet overeen."
#: admin/forms/account.py:157
#: admin/forms/account.py:170
msgid "Only super administrators are allowed for this mode"
msgstr ""
#: admin/forms/account.py:165
#: admin/forms/account.py:178
msgid "You can't disable your own account"
msgstr "U kunt uw eigen account niet uitschakelen"
#: admin/forms/account.py:180
#: admin/forms/account.py:193
msgid "E-mail"
msgstr "E-mail"
#: admin/forms/account.py:182 admin/forms/domain.py:36
#: admin/forms/account.py:195 admin/forms/domain.py:36
#: admin/templates/admin/account_detail.html:45
msgid "Quota"
msgstr "Quota"
#: admin/forms/account.py:184
#: admin/forms/account.py:197
msgid ""
"Quota in MB for this mailbox. Define a custom value or use domain's default "
"one. Leave empty to define an unlimited value (not allowed for domain "
@@ -217,28 +217,33 @@ msgstr ""
"stanaard waarde van het domein. Laat leeg om een ongelimiteerde waarde te "
"definieren (niet toegestaan voor domein administrators)."
#: admin/forms/account.py:192 admin/forms/domain.py:44
#: admin/forms/account.py:205 admin/forms/domain.py:44
#: admin/templates/admin/domains.html:35
msgid "Alias(es)"
msgstr "Alias(sen)"
#: admin/forms/account.py:195
#: admin/forms/account.py:208
#, fuzzy
#| msgid ""
#| "Alias(es) of this mailbox. Indicate only one address per input, press "
#| "ENTER to add a new input. Use the '*' character to create a 'catchall' "
#| "alias (ex: *@domain.tld)."
msgid ""
"Alias(es) of this mailbox. Indicate only one address per input, press ENTER "
"to add a new input. Use the '*' character to create a 'catchall' alias (ex: "
"*@domain.tld)."
"to add a new input. To create a catchall alias, just enter the domain name "
"(@domain.tld)."
msgstr ""
"Alias(en) van deze mailbox. Geef slechts een adres per regel op, en toets "
"ENTER om een nieuwe regel te krijgen. Gebruik een wildcard '*' om een 'catch-"
"all' adres te maken (bijvoorbeeld: *@domein.tld)."
#: admin/forms/account.py:201
#: admin/forms/account.py:214
#, fuzzy
#| msgid "Invalid request"
msgid "Sender addresses"
msgstr "Ongeldig verzoek"
#: admin/forms/account.py:204
#: admin/forms/account.py:217
#, fuzzy
#| msgid ""
#| "Mailbox(es) this alias will point to. Indicate only one address per "
@@ -251,47 +256,47 @@ msgstr ""
"Mailbox(en) waarnaar deze alias zal verwijzen. Geef slechts een adres per "
"regel op, en toets ENTER om een nieuwe regel te krijgen."
#: admin/forms/account.py:258 admin/forms/alias.py:89
#: admin/forms/account.py:271 admin/forms/alias.py:92
#: admin/models/mailbox.py:293
msgid "Domain does not exist"
msgstr "Domein bestaat niet"
#: admin/forms/account.py:288
#: admin/forms/account.py:301
#, fuzzy
#| msgid "Domain does not exist"
msgid "Local domain does not exist"
msgstr "Domein bestaat niet"
#: admin/forms/account.py:386
#: admin/forms/account.py:399
msgid "Domain(s)"
msgstr "Domein(en)"
#: admin/forms/account.py:388
#: admin/forms/account.py:401
msgid "Domain(s) that user administrates"
msgstr "Domein(en) die gebruiker mag beheren"
#: admin/forms/account.py:434 admin/forms/account.py:518
#: admin/forms/domain.py:266 admin/forms/domain.py:336
#: admin/forms/account.py:447 admin/forms/account.py:532
#: admin/forms/domain.py:266 admin/forms/domain.py:332
msgid "General"
msgstr "Algemeen"
#: admin/forms/account.py:439 admin/forms/account.py:524
#: admin/forms/account.py:452 admin/forms/account.py:538
msgid "Mail"
msgstr "Mail"
#: admin/forms/account.py:441
#: admin/forms/account.py:454
msgid "Permissions"
msgstr "Rechten"
#: admin/forms/account.py:507
#: admin/forms/account.py:521
msgid "Account updated"
msgstr "Account aangepast"
#: admin/forms/account.py:531
#: admin/forms/account.py:545
msgid "New account"
msgstr "Nieuwe account"
#: admin/forms/account.py:543
#: admin/forms/account.py:557
msgid "Account created"
msgstr "Account aangemaakt"
@@ -317,7 +322,7 @@ msgstr ""
"Het alias adres (zonder het domein deel). Voor een 'catch-all' adres, vul "
"een * in."
#: admin/forms/alias.py:35 admin/templates/admin/alias_detail.html.py:37
#: admin/forms/alias.py:35 admin/templates/admin/alias_detail.html:37
msgid "Recipients"
msgstr "Ontvangers"
@@ -333,26 +338,26 @@ msgstr ""
"Mailbox(en) waarnaar deze alias zal verwijzen. Geef slechts een adres per "
"regel op, en toets ENTER om een nieuwe regel te krijgen."
#: admin/forms/alias.py:92
#: admin/forms/alias.py:47 admin/forms/domain.py:24 admin/models/domain.py:90
#: admin/templates/admin/domain_statistics.html:49
msgid "Domain"
msgstr "Domein"
#: admin/forms/alias.py:95
msgid "You don't have access to this domain"
msgstr "U heeft geen toegang tot dit domein"
#: admin/forms/alias.py:109 admin/forms/alias.py:111
#: admin/forms/alias.py:112 admin/forms/alias.py:114
#, fuzzy
#| msgid "A mailbox is required"
msgid "This field is required"
msgstr "Een mailbox is benodigd"
#: admin/forms/alias.py:115
#: admin/forms/alias.py:118
msgid "No recipient defined"
msgstr "Geen ontvanger opgegeven"
#: admin/forms/domain.py:24 admin/models/alias.py:37 admin/models/domain.py:87
#: admin/templates/admin/domain_statistics.html:49
msgid "Domain"
msgstr "Domein"
#: admin/forms/domain.py:33 admin/templates/admin/domain_statistics.html.py:26
#: admin/forms/domain.py:33 admin/templates/admin/domain_statistics.html:26
msgid "Type"
msgstr "Type"
@@ -390,7 +395,7 @@ msgstr "Maak een domein administrator aan"
msgid "Automatically create an administrator for this domain"
msgstr "Automatisch een administrator aanmaken voor dit domein"
#: admin/forms/domain.py:174 admin/templates/admin/domain_detail.html.py:68
#: admin/forms/domain.py:174 admin/templates/admin/domain_detail.html:72
#: admin/templates/admin/domains.html:34
#: admin/templates/admin/identity_headers.html:2
#: admin/templates/admin/mx_domain_detail.html:9
@@ -421,19 +426,19 @@ msgstr "Verkeerd formaat"
msgid "User '%s' already exists"
msgstr "Gebruiker '%s' bestaat al"
#: admin/forms/domain.py:325
#: admin/forms/domain.py:321
msgid "Domain modified"
msgstr "Domein gewijzigd"
#: admin/forms/domain.py:345
#: admin/forms/domain.py:341
msgid "Options"
msgstr "Opties"
#: admin/forms/domain.py:353
#: admin/forms/domain.py:349
msgid "New domain"
msgstr "Nieuw domein"
#: admin/forms/domain.py:366
#: admin/forms/domain.py:362
msgid "Domain created"
msgstr "Domein aangemaakt"
@@ -504,20 +509,20 @@ msgstr "U kunt uw eigen domein niet verwijderen"
msgid "You are not allowed to import domain aliases."
msgstr ""
#: admin/management/commands/subcommands/_mx.py:155
#: admin/management/commands/subcommands/_mx.py:159
msgid "[modoboa] DNSBL issue(s) for domain {}"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:176
msgid "Domain {} as no MX record"
#: admin/management/commands/subcommands/_mx.py:180
msgid "Domain {} has no MX record"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:187
#: admin/management/commands/subcommands/_mx.py:191
#, python-brace-format
msgid "Domain {0} got an invalid MX record. Got {1}"
msgid "MX record for domain {0} is invalid: {1}"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:203
#: admin/management/commands/subcommands/_mx.py:207
msgid "[modoboa] MX issue(s) for domain {}"
msgstr ""
@@ -531,66 +536,66 @@ msgstr "adres"
msgid "The alias address."
msgstr "De alias naam"
#: admin/models/alias.py:39 admin/models/domain.py:42
#: admin/models/alias.py:38 admin/models/domain.py:45
#: admin/models/domain_alias.py:44
msgid "enabled"
msgstr "actief"
#: admin/models/alias.py:40 admin/models/domain_alias.py:45
#: admin/models/alias.py:39 admin/models/domain_alias.py:45
msgid "Check to activate this alias"
msgstr "Aanvinken om deze alias te activeren"
#: admin/models/alias.py:45 admin/templates/admin/alias_detail.html.py:32
#: admin/models/alias.py:44 admin/templates/admin/alias_detail.html:32
msgid "Description"
msgstr ""
#: admin/models/alias.py:47 admin/templates/admin/alias_detail.html.py:29
#: admin/models/alias.py:46 admin/templates/admin/alias_detail.html:29
msgid "Expire at"
msgstr ""
#: admin/models/alias.py:90
#: admin/models/alias.py:89
msgid "alias"
msgstr "alias"
#: admin/models/alias.py:122
#: admin/models/alias.py:121
#, fuzzy
#| msgid "Invalid request"
msgid "Invalid address"
msgstr "Ongeldig verzoek"
#: admin/models/alias.py:143
#: admin/models/alias.py:142
#, fuzzy
#| msgid "Local recipient %s not found"
msgid "Local recipient {}@{} not found"
msgstr "Lokale ontvanger %s niet gevonden"
#: admin/models/alias.py:173
#: admin/models/alias.py:172
#, python-format
msgid "Invalid line: %s"
msgstr "Ongeldige regel: %s"
#: admin/models/alias.py:179
#: admin/models/alias.py:178
#, python-format
msgid "Domain '%s' does not exist"
msgstr "Domein '%s' bestaat niet"
#: admin/models/domain.py:38 admin/models/domain_alias.py:37
#: admin/models/domain.py:41 admin/models/domain_alias.py:37
msgid "name"
msgstr "naam"
#: admin/models/domain.py:39
#: admin/models/domain.py:42
msgid "The domain name"
msgstr "De domeinnaam"
#: admin/models/domain.py:43
#: admin/models/domain.py:46
msgid "Check to activate this domain"
msgstr "Aanvinken om dit domein te activeren"
#: admin/models/domain.py:198 admin/models/domain_alias.py:71
#: admin/models/domain.py:211 admin/models/domain_alias.py:71
msgid "Invalid line"
msgstr "Verkeerde regel"
#: admin/models/domain.py:206
#: admin/models/domain.py:219
#, python-format
msgid "Invalid quota value for domain '%s'"
msgstr "Verkeerde quota waarde voor domein '%s'"
@@ -630,32 +635,32 @@ msgstr "Quota is groter dan de maximaal toegestane domein limiet (%dM)"
msgid "A quota is required"
msgstr "Een quota is vereist"
#: admin/serializers.py:44 admin/serializers.py:224 admin/serializers.py:313
#: admin/serializers.py:45 admin/serializers.py:228 admin/serializers.py:317
#, fuzzy
#| msgid "Permissions"
msgid "Permission denied."
msgstr "Rechten"
#: admin/serializers.py:82
#: admin/serializers.py:83
msgid ""
"List of administered domains (resellers and domain administrators only)."
msgstr ""
#: admin/serializers.py:189
#: admin/serializers.py:193
msgid "Not allowed for this role."
msgstr ""
#: admin/serializers.py:199
#: admin/serializers.py:203
msgid "Must be equal to mailbox full_address"
msgstr ""
#: admin/serializers.py:211
#: admin/serializers.py:215
#, fuzzy
#| msgid "Domain does not exist"
msgid "Local domain {} does not exist"
msgstr "Domein bestaat niet"
#: admin/serializers.py:311
#: admin/serializers.py:315
#, fuzzy
#| msgid "Domain modified"
msgid "Domain not found."
@@ -793,34 +798,39 @@ msgstr ""
msgid "DNS status"
msgstr "Statistieken"
#: admin/templates/admin/domain_detail.html:36
#: admin/templates/admin/domain_detail.html:28
#: admin/templates/admin/domains_table.html:12
msgid "Awaiting checks"
msgstr ""
#: admin/templates/admin/domain_detail.html:40
msgid "Creation date"
msgstr "Datum van aanmaken"
#: admin/templates/admin/domain_detail.html:38
#: admin/templates/admin/domain_detail.html:42
msgid "Last modification date"
msgstr "Laatst gewijzigd"
#: admin/templates/admin/domain_detail.html:39
#: admin/templates/admin/domain_detail.html:48
#: admin/templates/admin/domain_detail.html:43
#: admin/templates/admin/domain_detail.html:52
#: admin/templates/admin/domain_statistics.html:33
msgid "Domain aliases"
msgstr "Domein aliassen"
#: admin/templates/admin/domain_detail.html:41
#: admin/templates/admin/domain_detail.html:45
msgid "Mailbox aliases"
msgstr "Mailbox aliassen"
#: admin/templates/admin/domain_detail.html:65
#: admin/templates/admin/domain_detail.html:69
msgid "Administrators"
msgstr "Administrators"
#: admin/templates/admin/domain_detail.html:75
#: admin/templates/admin/domain_detail.html:79
#: admin/templatetags/admin_tags.py:252
msgid "Remove this permission"
msgstr "Deze bevoegdheid verwijderen"
#: admin/templates/admin/domain_detail.html:80
#: admin/templates/admin/domain_detail.html:84
#, fuzzy
#| msgid "No domain administrator defined"
msgid "No domain administrator defined yet."
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2016-05-17 12:28+0000\n"
"Last-Translator: Jose Marcos Araujo <jmaraujo@avancetec.com.br>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/tonio/modoboa/"
@@ -54,7 +54,7 @@ msgstr ""
msgid "Check every domain against major DNSBL providers"
msgstr ""
#: admin/app_settings.py:84 admin/templates/admin/domain_detail.html.py:40
#: admin/app_settings.py:84 admin/templates/admin/domain_detail.html:44
msgid "Mailboxes"
msgstr "Caixas de correios"
@@ -109,7 +109,7 @@ msgstr ""
"Criar um domínio e uma caixa de correio quando uma conta é automaticamente "
"criada."
#: admin/app_settings.py:170 admin/forms/account.py:279
#: admin/app_settings.py:170 admin/forms/account.py:292
#: admin/forms/domain.py:81
msgid "Must be a positive integer"
msgstr "Deve ser um inteiro positivo"
@@ -118,13 +118,13 @@ msgstr "Deve ser um inteiro positivo"
msgid "Administration"
msgstr "Administração"
#: admin/callbacks.py:35 admin/templates/admin/domain_statistics.html.py:36
#: admin/callbacks.py:35 admin/templates/admin/domain_statistics.html:36
#: admin/templates/admin/domain_statistics.html:50
#: admin/templates/admin/identities.html:5
msgid "Identities"
msgstr "Identidades"
#: admin/callbacks.py:50 admin/templates/admin/forward.html.py:2
#: admin/callbacks.py:50 admin/templates/admin/forward.html:2
msgid "Forward"
msgstr "Encaminhar"
@@ -146,7 +146,7 @@ msgstr "Falha na importação de conta (%s): valor de cota errado"
msgid "domain alias"
msgstr "alias de domínio"
#: admin/forms/account.py:33 admin/templates/admin/domain_detail.html.py:68
#: admin/forms/account.py:33 admin/templates/admin/domain_detail.html:72
msgid "Username"
msgstr "Nome de usuário"
@@ -158,11 +158,11 @@ msgstr ""
"O nome de usuário. Deve ser um endereço de e-mail válido para usuários "
"simples ou administradores com uma caixa de mensagens."
#: admin/forms/account.py:40 admin/templates/admin/account_detail.html.py:29
#: admin/forms/account.py:40 admin/templates/admin/account_detail.html:29
msgid "Role"
msgstr "Papel"
#: admin/forms/account.py:41 admin/forms/account.py:79
#: admin/forms/account.py:41
msgid "Choose"
msgstr "Escolher"
@@ -182,32 +182,32 @@ msgstr "Confirmação"
msgid "Enter the same password as above, for verification."
msgstr "Para verificação, digite a mesma senha que a anterior."
#: admin/forms/account.py:70
#: admin/forms/account.py:63
msgid "Enabled"
msgstr "Ativado"
#: admin/forms/account.py:142
#: admin/forms/account.py:155
msgid "The two password fields didn't match."
msgstr "Os dois campos de senha não coincidiram."
#: admin/forms/account.py:157
#: admin/forms/account.py:170
msgid "Only super administrators are allowed for this mode"
msgstr "Apenas super administradores estão liberados para este modo"
#: admin/forms/account.py:165
#: admin/forms/account.py:178
msgid "You can't disable your own account"
msgstr "Você não pode desabilitar seu própria conta"
#: admin/forms/account.py:180
#: admin/forms/account.py:193
msgid "E-mail"
msgstr "E-mail"
#: admin/forms/account.py:182 admin/forms/domain.py:36
#: admin/forms/account.py:195 admin/forms/domain.py:36
#: admin/templates/admin/account_detail.html:45
msgid "Quota"
msgstr "Cota"
#: admin/forms/account.py:184
#: admin/forms/account.py:197
msgid ""
"Quota in MB for this mailbox. Define a custom value or use domain's default "
"one. Leave empty to define an unlimited value (not allowed for domain "
@@ -217,28 +217,33 @@ msgstr ""
"o padrão do domínio. Deixe em branco para definir um valor ilimitado (não "
"permitido para administradores de domínios)."
#: admin/forms/account.py:192 admin/forms/domain.py:44
#: admin/forms/account.py:205 admin/forms/domain.py:44
#: admin/templates/admin/domains.html:35
msgid "Alias(es)"
msgstr "Alias(es)"
#: admin/forms/account.py:195
#: admin/forms/account.py:208
#, fuzzy
#| msgid ""
#| "Alias(es) of this mailbox. Indicate only one address per input, press "
#| "ENTER to add a new input. Use the '*' character to create a 'catchall' "
#| "alias (ex: *@domain.tld)."
msgid ""
"Alias(es) of this mailbox. Indicate only one address per input, press ENTER "
"to add a new input. Use the '*' character to create a 'catchall' alias (ex: "
"*@domain.tld)."
"to add a new input. To create a catchall alias, just enter the domain name "
"(@domain.tld)."
msgstr ""
"Alias(es) para essa caixa de correio. Indique apenas um endereço por "
"entrada, pressione ENTER para adicionar uma nova entrada. Use o caractere "
"'*' para criar um alias 'pega-todos' (ex: *@exemplo.com)."
#: admin/forms/account.py:201
#: admin/forms/account.py:214
#, fuzzy
#| msgid "Invalid address"
msgid "Sender addresses"
msgstr "Endereço inválido"
#: admin/forms/account.py:204
#: admin/forms/account.py:217
#, fuzzy
#| msgid ""
#| "Addresses this alias will point to. Indicate only one address per input, "
@@ -251,45 +256,45 @@ msgstr ""
"Endereços que este alias vai apontar. Indique apenas um endereço por "
"entrada, pressione ENTER para adicionar uma nova entrada."
#: admin/forms/account.py:258 admin/forms/alias.py:89
#: admin/forms/account.py:271 admin/forms/alias.py:92
#: admin/models/mailbox.py:293
msgid "Domain does not exist"
msgstr "Domínio não existe"
#: admin/forms/account.py:288
#: admin/forms/account.py:301
msgid "Local domain does not exist"
msgstr "Domínio local não existe"
#: admin/forms/account.py:386
#: admin/forms/account.py:399
msgid "Domain(s)"
msgstr "Domínio(s)"
#: admin/forms/account.py:388
#: admin/forms/account.py:401
msgid "Domain(s) that user administrates"
msgstr "Domínio(s) que o usuário administra"
#: admin/forms/account.py:434 admin/forms/account.py:518
#: admin/forms/domain.py:266 admin/forms/domain.py:336
#: admin/forms/account.py:447 admin/forms/account.py:532
#: admin/forms/domain.py:266 admin/forms/domain.py:332
msgid "General"
msgstr "Geral"
#: admin/forms/account.py:439 admin/forms/account.py:524
#: admin/forms/account.py:452 admin/forms/account.py:538
msgid "Mail"
msgstr "Correio"
#: admin/forms/account.py:441
#: admin/forms/account.py:454
msgid "Permissions"
msgstr "Permissões"
#: admin/forms/account.py:507
#: admin/forms/account.py:521
msgid "Account updated"
msgstr "Conta atualizada"
#: admin/forms/account.py:531
#: admin/forms/account.py:545
msgid "New account"
msgstr "Nova conta"
#: admin/forms/account.py:543
#: admin/forms/account.py:557
msgid "Account created"
msgstr "Conta criada"
@@ -311,7 +316,7 @@ msgstr ""
"O endereço alias. Para criar um alias de captura, basta digitar o nome de "
"domínio (@domain.tld)."
#: admin/forms/alias.py:35 admin/templates/admin/alias_detail.html.py:37
#: admin/forms/alias.py:35 admin/templates/admin/alias_detail.html:37
msgid "Recipients"
msgstr "Destinatários"
@@ -323,26 +328,26 @@ msgstr ""
"Endereços que este alias vai apontar. Indique apenas um endereço por "
"entrada, pressione ENTER para adicionar uma nova entrada."
#: admin/forms/alias.py:92
#: admin/forms/alias.py:47 admin/forms/domain.py:24 admin/models/domain.py:90
#: admin/templates/admin/domain_statistics.html:49
msgid "Domain"
msgstr "Domínio"
#: admin/forms/alias.py:95
msgid "You don't have access to this domain"
msgstr "Você não tem acesso a esse domínio"
#: admin/forms/alias.py:109 admin/forms/alias.py:111
#: admin/forms/alias.py:112 admin/forms/alias.py:114
#, fuzzy
#| msgid "A mailbox is required"
msgid "This field is required"
msgstr "Um caixa de mensagens é obrigatória"
#: admin/forms/alias.py:115
#: admin/forms/alias.py:118
msgid "No recipient defined"
msgstr "Nenhum destinatário definido"
#: admin/forms/domain.py:24 admin/models/alias.py:37 admin/models/domain.py:87
#: admin/templates/admin/domain_statistics.html:49
msgid "Domain"
msgstr "Domínio"
#: admin/forms/domain.py:33 admin/templates/admin/domain_statistics.html.py:26
#: admin/forms/domain.py:33 admin/templates/admin/domain_statistics.html:26
msgid "Type"
msgstr "Tipo"
@@ -380,7 +385,7 @@ msgstr "Criar um administrador de domínio"
msgid "Automatically create an administrator for this domain"
msgstr "Criar automaticamente um administrador para este domínio"
#: admin/forms/domain.py:174 admin/templates/admin/domain_detail.html.py:68
#: admin/forms/domain.py:174 admin/templates/admin/domain_detail.html:72
#: admin/templates/admin/domains.html:34
#: admin/templates/admin/identity_headers.html:2
#: admin/templates/admin/mx_domain_detail.html:9
@@ -412,19 +417,19 @@ msgstr "Formato inválido"
msgid "User '%s' already exists"
msgstr "O usuário '%s' já existe"
#: admin/forms/domain.py:325
#: admin/forms/domain.py:321
msgid "Domain modified"
msgstr "Domínio alterado"
#: admin/forms/domain.py:345
#: admin/forms/domain.py:341
msgid "Options"
msgstr "Opções"
#: admin/forms/domain.py:353
#: admin/forms/domain.py:349
msgid "New domain"
msgstr "Novo domínio"
#: admin/forms/domain.py:366
#: admin/forms/domain.py:362
msgid "Domain created"
msgstr "Domínio criado"
@@ -493,20 +498,20 @@ msgstr "Você não tem permissão para importar domínios"
msgid "You are not allowed to import domain aliases."
msgstr "Você não tem permissão para importar aliases de domínio."
#: admin/management/commands/subcommands/_mx.py:155
#: admin/management/commands/subcommands/_mx.py:159
msgid "[modoboa] DNSBL issue(s) for domain {}"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:176
msgid "Domain {} as no MX record"
#: admin/management/commands/subcommands/_mx.py:180
msgid "Domain {} has no MX record"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:187
#: admin/management/commands/subcommands/_mx.py:191
#, python-brace-format
msgid "Domain {0} got an invalid MX record. Got {1}"
msgid "MX record for domain {0} is invalid: {1}"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:203
#: admin/management/commands/subcommands/_mx.py:207
msgid "[modoboa] MX issue(s) for domain {}"
msgstr ""
@@ -518,62 +523,62 @@ msgstr "endereço"
msgid "The alias address."
msgstr "O endereço alias."
#: admin/models/alias.py:39 admin/models/domain.py:42
#: admin/models/alias.py:38 admin/models/domain.py:45
#: admin/models/domain_alias.py:44
msgid "enabled"
msgstr "ativado"
#: admin/models/alias.py:40 admin/models/domain_alias.py:45
#: admin/models/alias.py:39 admin/models/domain_alias.py:45
msgid "Check to activate this alias"
msgstr "Verificar para ativar o alias"
#: admin/models/alias.py:45 admin/templates/admin/alias_detail.html.py:32
#: admin/models/alias.py:44 admin/templates/admin/alias_detail.html:32
msgid "Description"
msgstr ""
#: admin/models/alias.py:47 admin/templates/admin/alias_detail.html.py:29
#: admin/models/alias.py:46 admin/templates/admin/alias_detail.html:29
msgid "Expire at"
msgstr ""
#: admin/models/alias.py:90
#: admin/models/alias.py:89
msgid "alias"
msgstr "alias"
#: admin/models/alias.py:122
#: admin/models/alias.py:121
msgid "Invalid address"
msgstr "Endereço inválido"
#: admin/models/alias.py:143
#: admin/models/alias.py:142
msgid "Local recipient {}@{} not found"
msgstr "Destinatário local {}@{} não encontrado"
#: admin/models/alias.py:173
#: admin/models/alias.py:172
#, python-format
msgid "Invalid line: %s"
msgstr "Linha inválida: %s"
#: admin/models/alias.py:179
#: admin/models/alias.py:178
#, python-format
msgid "Domain '%s' does not exist"
msgstr "O domínio '%s' não existe"
#: admin/models/domain.py:38 admin/models/domain_alias.py:37
#: admin/models/domain.py:41 admin/models/domain_alias.py:37
msgid "name"
msgstr "nome"
#: admin/models/domain.py:39
#: admin/models/domain.py:42
msgid "The domain name"
msgstr "Nome do domínio"
#: admin/models/domain.py:43
#: admin/models/domain.py:46
msgid "Check to activate this domain"
msgstr "Marque para ativar esse domínio"
#: admin/models/domain.py:198 admin/models/domain_alias.py:71
#: admin/models/domain.py:211 admin/models/domain_alias.py:71
msgid "Invalid line"
msgstr "Linha inválida"
#: admin/models/domain.py:206
#: admin/models/domain.py:219
#, python-format
msgid "Invalid quota value for domain '%s'"
msgstr "Valor de cota inválido para o domínio '%s'"
@@ -613,30 +618,30 @@ msgstr "A cota é maior que o permitido pelo limite do domínio (%dM)"
msgid "A quota is required"
msgstr "Uma cota é requerida"
#: admin/serializers.py:44 admin/serializers.py:224 admin/serializers.py:313
#: admin/serializers.py:45 admin/serializers.py:228 admin/serializers.py:317
msgid "Permission denied."
msgstr "Permissão negada"
#: admin/serializers.py:82
#: admin/serializers.py:83
msgid ""
"List of administered domains (resellers and domain administrators only)."
msgstr ""
"Lista dos domínios administrados (somente revendedores e administradores de "
"domínio)"
#: admin/serializers.py:189
#: admin/serializers.py:193
msgid "Not allowed for this role."
msgstr "Não permitido para este perfil (role)"
#: admin/serializers.py:199
#: admin/serializers.py:203
msgid "Must be equal to mailbox full_address"
msgstr "Deve ser igual ao endereço completo da conta"
#: admin/serializers.py:211
#: admin/serializers.py:215
msgid "Local domain {} does not exist"
msgstr "Domínio local {} não existe"
#: admin/serializers.py:311
#: admin/serializers.py:315
msgid "Domain not found."
msgstr "Domínio não encontrado"
@@ -772,34 +777,39 @@ msgstr ""
msgid "DNS status"
msgstr "Estatísticas"
#: admin/templates/admin/domain_detail.html:36
#: admin/templates/admin/domain_detail.html:28
#: admin/templates/admin/domains_table.html:12
msgid "Awaiting checks"
msgstr ""
#: admin/templates/admin/domain_detail.html:40
msgid "Creation date"
msgstr "Data de criação"
#: admin/templates/admin/domain_detail.html:38
#: admin/templates/admin/domain_detail.html:42
msgid "Last modification date"
msgstr "Data da última modificação"
#: admin/templates/admin/domain_detail.html:39
#: admin/templates/admin/domain_detail.html:48
#: admin/templates/admin/domain_detail.html:43
#: admin/templates/admin/domain_detail.html:52
#: admin/templates/admin/domain_statistics.html:33
msgid "Domain aliases"
msgstr "Alias de domínios"
#: admin/templates/admin/domain_detail.html:41
#: admin/templates/admin/domain_detail.html:45
msgid "Mailbox aliases"
msgstr "Alias de caixas de correio"
#: admin/templates/admin/domain_detail.html:65
#: admin/templates/admin/domain_detail.html:69
msgid "Administrators"
msgstr "Administradores"
#: admin/templates/admin/domain_detail.html:75
#: admin/templates/admin/domain_detail.html:79
#: admin/templatetags/admin_tags.py:252
msgid "Remove this permission"
msgstr "Remover essa persmissão"
#: admin/templates/admin/domain_detail.html:80
#: admin/templates/admin/domain_detail.html:84
#, fuzzy
#| msgid "No domain administrator defined"
msgid "No domain administrator defined yet."
@@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2014-12-29 12:51+0000\n"
"Last-Translator: Mike C. <miguelmclara@gmail.com>\n"
"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/"
@@ -56,7 +56,7 @@ msgstr ""
msgid "Check every domain against major DNSBL providers"
msgstr ""
#: admin/app_settings.py:84 admin/templates/admin/domain_detail.html.py:40
#: admin/app_settings.py:84 admin/templates/admin/domain_detail.html:44
msgid "Mailboxes"
msgstr "Caixas de Correio"
@@ -111,7 +111,7 @@ msgstr ""
"Criar um dominio e uma caixa de correio quando uma conta é criada "
"automátiamente."
#: admin/app_settings.py:170 admin/forms/account.py:279
#: admin/app_settings.py:170 admin/forms/account.py:292
#: admin/forms/domain.py:81
msgid "Must be a positive integer"
msgstr "Tem de ser um inteiro, positivo"
@@ -120,13 +120,13 @@ msgstr "Tem de ser um inteiro, positivo"
msgid "Administration"
msgstr "Administração"
#: admin/callbacks.py:35 admin/templates/admin/domain_statistics.html.py:36
#: admin/callbacks.py:35 admin/templates/admin/domain_statistics.html:36
#: admin/templates/admin/domain_statistics.html:50
#: admin/templates/admin/identities.html:5
msgid "Identities"
msgstr "Identidades"
#: admin/callbacks.py:50 admin/templates/admin/forward.html.py:2
#: admin/callbacks.py:50 admin/templates/admin/forward.html:2
msgid "Forward"
msgstr "Reencaminhar"
@@ -150,7 +150,7 @@ msgstr "Importação da conta falhou (%s): valor para quota inválido"
msgid "domain alias"
msgstr "'Alias' de domínio"
#: admin/forms/account.py:33 admin/templates/admin/domain_detail.html.py:68
#: admin/forms/account.py:33 admin/templates/admin/domain_detail.html:72
msgid "Username"
msgstr "Nome de Utilizador"
@@ -160,11 +160,11 @@ msgid ""
"administrators with a mailbox."
msgstr ""
#: admin/forms/account.py:40 admin/templates/admin/account_detail.html.py:29
#: admin/forms/account.py:40 admin/templates/admin/account_detail.html:29
msgid "Role"
msgstr "Papel"
#: admin/forms/account.py:41 admin/forms/account.py:79
#: admin/forms/account.py:41
msgid "Choose"
msgstr "Escolher"
@@ -184,32 +184,32 @@ msgstr "Confirmação"
msgid "Enter the same password as above, for verification."
msgstr "Repita a password acima, para verificação."
#: admin/forms/account.py:70
#: admin/forms/account.py:63
msgid "Enabled"
msgstr "Ativo"
#: admin/forms/account.py:142
#: admin/forms/account.py:155
msgid "The two password fields didn't match."
msgstr "Os dois campos de password não são idênticos."
#: admin/forms/account.py:157
#: admin/forms/account.py:170
msgid "Only super administrators are allowed for this mode"
msgstr ""
#: admin/forms/account.py:165
#: admin/forms/account.py:178
msgid "You can't disable your own account"
msgstr "Não pode desativar a sua própria conta"
#: admin/forms/account.py:180
#: admin/forms/account.py:193
msgid "E-mail"
msgstr "E-mail"
#: admin/forms/account.py:182 admin/forms/domain.py:36
#: admin/forms/account.py:195 admin/forms/domain.py:36
#: admin/templates/admin/account_detail.html:45
msgid "Quota"
msgstr "Quota"
#: admin/forms/account.py:184
#: admin/forms/account.py:197
msgid ""
"Quota in MB for this mailbox. Define a custom value or use domain's default "
"one. Leave empty to define an unlimited value (not allowed for domain "
@@ -219,28 +219,33 @@ msgstr ""
"usar o valor predefinido pelo domínio. Deixar em branco para definir uma "
"valor ilimitado (não permitido para administradores do domínio)."
#: admin/forms/account.py:192 admin/forms/domain.py:44
#: admin/forms/account.py:205 admin/forms/domain.py:44
#: admin/templates/admin/domains.html:35
msgid "Alias(es)"
msgstr "Alias(es)"
#: admin/forms/account.py:195
#: admin/forms/account.py:208
#, fuzzy
#| msgid ""
#| "Alias(es) of this mailbox. Indicate only one address per input, press "
#| "ENTER to add a new input. Use the '*' character to create a 'catchall' "
#| "alias (ex: *@domain.tld)."
msgid ""
"Alias(es) of this mailbox. Indicate only one address per input, press ENTER "
"to add a new input. Use the '*' character to create a 'catchall' alias (ex: "
"*@domain.tld)."
"to add a new input. To create a catchall alias, just enter the domain name "
"(@domain.tld)."
msgstr ""
"Alias(es) desta caixa de correio. Indique apenas um endereço por entrada, "
"clique ENTER para adicionar uma nova entrada. Use o '*' para criar um alias "
"'catchall' (ex: *@domain.tld)."
#: admin/forms/account.py:201
#: admin/forms/account.py:214
#, fuzzy
#| msgid "Invalid request"
msgid "Sender addresses"
msgstr "Pedido inválido"
#: admin/forms/account.py:204
#: admin/forms/account.py:217
#, fuzzy
#| msgid ""
#| "Mailbox(es) this alias will point to. Indicate only one address per "
@@ -253,47 +258,47 @@ msgstr ""
"Caixa(s) de correio para o qual este 'alias' aponta. Indicar apenas um "
"endereço por entrada, pressionar ENTER para acrescentar uma nova entrada."
#: admin/forms/account.py:258 admin/forms/alias.py:89
#: admin/forms/account.py:271 admin/forms/alias.py:92
#: admin/models/mailbox.py:293
msgid "Domain does not exist"
msgstr "O domínio não existe"
#: admin/forms/account.py:288
#: admin/forms/account.py:301
#, fuzzy
#| msgid "Domain does not exist"
msgid "Local domain does not exist"
msgstr "O domínio não existe"
#: admin/forms/account.py:386
#: admin/forms/account.py:399
msgid "Domain(s)"
msgstr "Domínio(s)"
#: admin/forms/account.py:388
#: admin/forms/account.py:401
msgid "Domain(s) that user administrates"
msgstr "Domínio(s) administrado pelo utilizador"
#: admin/forms/account.py:434 admin/forms/account.py:518
#: admin/forms/domain.py:266 admin/forms/domain.py:336
#: admin/forms/account.py:447 admin/forms/account.py:532
#: admin/forms/domain.py:266 admin/forms/domain.py:332
msgid "General"
msgstr "Geral"
#: admin/forms/account.py:439 admin/forms/account.py:524
#: admin/forms/account.py:452 admin/forms/account.py:538
msgid "Mail"
msgstr "Correio"
#: admin/forms/account.py:441
#: admin/forms/account.py:454
msgid "Permissions"
msgstr "Permissões"
#: admin/forms/account.py:507
#: admin/forms/account.py:521
msgid "Account updated"
msgstr "Conta actualizada"
#: admin/forms/account.py:531
#: admin/forms/account.py:545
msgid "New account"
msgstr "Nova conta"
#: admin/forms/account.py:543
#: admin/forms/account.py:557
msgid "Account created"
msgstr "Conta criada"
@@ -319,7 +324,7 @@ msgstr ""
"O endereço do alias (sem a parte do domínio). Para um endereço 'cath-all', "
"digite apenas o caractere *"
#: admin/forms/alias.py:35 admin/templates/admin/alias_detail.html.py:37
#: admin/forms/alias.py:35 admin/templates/admin/alias_detail.html:37
msgid "Recipients"
msgstr "Destinatários"
@@ -335,26 +340,26 @@ msgstr ""
"Caixa(s) de correio para o qual este 'alias' aponta. Indicar apenas um "
"endereço por entrada, pressionar ENTER para acrescentar uma nova entrada."
#: admin/forms/alias.py:92
#: admin/forms/alias.py:47 admin/forms/domain.py:24 admin/models/domain.py:90
#: admin/templates/admin/domain_statistics.html:49
msgid "Domain"
msgstr "Domínio"
#: admin/forms/alias.py:95
msgid "You don't have access to this domain"
msgstr "Não tem acesso a este domínio"
#: admin/forms/alias.py:109 admin/forms/alias.py:111
#: admin/forms/alias.py:112 admin/forms/alias.py:114
#, fuzzy
#| msgid "A mailbox is required"
msgid "This field is required"
msgstr "É necessária uma caixa de correio"
#: admin/forms/alias.py:115
#: admin/forms/alias.py:118
msgid "No recipient defined"
msgstr "Sem destinatário definido"
#: admin/forms/domain.py:24 admin/models/alias.py:37 admin/models/domain.py:87
#: admin/templates/admin/domain_statistics.html:49
msgid "Domain"
msgstr "Domínio"
#: admin/forms/domain.py:33 admin/templates/admin/domain_statistics.html.py:26
#: admin/forms/domain.py:33 admin/templates/admin/domain_statistics.html:26
msgid "Type"
msgstr "Tipo"
@@ -392,7 +397,7 @@ msgstr "Criar um administrador de domínio"
msgid "Automatically create an administrator for this domain"
msgstr "Criar automaticamente um administrador para este domínio"
#: admin/forms/domain.py:174 admin/templates/admin/domain_detail.html.py:68
#: admin/forms/domain.py:174 admin/templates/admin/domain_detail.html:72
#: admin/templates/admin/domains.html:34
#: admin/templates/admin/identity_headers.html:2
#: admin/templates/admin/mx_domain_detail.html:9
@@ -424,19 +429,19 @@ msgstr "Formato inválido"
msgid "User '%s' already exists"
msgstr "O utilizador '%s' já existe"
#: admin/forms/domain.py:325
#: admin/forms/domain.py:321
msgid "Domain modified"
msgstr "Domínio alterado"
#: admin/forms/domain.py:345
#: admin/forms/domain.py:341
msgid "Options"
msgstr "Opções"
#: admin/forms/domain.py:353
#: admin/forms/domain.py:349
msgid "New domain"
msgstr "Novo domínio"
#: admin/forms/domain.py:366
#: admin/forms/domain.py:362
msgid "Domain created"
msgstr "Domínio criado"
@@ -507,20 +512,20 @@ msgstr "Não é possível eliminar o seu próprio domínio"
msgid "You are not allowed to import domain aliases."
msgstr ""
#: admin/management/commands/subcommands/_mx.py:155
#: admin/management/commands/subcommands/_mx.py:159
msgid "[modoboa] DNSBL issue(s) for domain {}"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:176
msgid "Domain {} as no MX record"
#: admin/management/commands/subcommands/_mx.py:180
msgid "Domain {} has no MX record"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:187
#: admin/management/commands/subcommands/_mx.py:191
#, python-brace-format
msgid "Domain {0} got an invalid MX record. Got {1}"
msgid "MX record for domain {0} is invalid: {1}"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:203
#: admin/management/commands/subcommands/_mx.py:207
msgid "[modoboa] MX issue(s) for domain {}"
msgstr ""
@@ -534,66 +539,66 @@ msgstr "endereços"
msgid "The alias address."
msgstr "O nome do 'alias'"
#: admin/models/alias.py:39 admin/models/domain.py:42
#: admin/models/alias.py:38 admin/models/domain.py:45
#: admin/models/domain_alias.py:44
msgid "enabled"
msgstr "ativo"
#: admin/models/alias.py:40 admin/models/domain_alias.py:45
#: admin/models/alias.py:39 admin/models/domain_alias.py:45
msgid "Check to activate this alias"
msgstr "Marcar para ativar este alias"
#: admin/models/alias.py:45 admin/templates/admin/alias_detail.html.py:32
#: admin/models/alias.py:44 admin/templates/admin/alias_detail.html:32
msgid "Description"
msgstr ""
#: admin/models/alias.py:47 admin/templates/admin/alias_detail.html.py:29
#: admin/models/alias.py:46 admin/templates/admin/alias_detail.html:29
msgid "Expire at"
msgstr ""
#: admin/models/alias.py:90
#: admin/models/alias.py:89
msgid "alias"
msgstr "alias"
#: admin/models/alias.py:122
#: admin/models/alias.py:121
#, fuzzy
#| msgid "Invalid request"
msgid "Invalid address"
msgstr "Pedido inválido"
#: admin/models/alias.py:143
#: admin/models/alias.py:142
#, fuzzy
#| msgid "Local recipient %s not found"
msgid "Local recipient {}@{} not found"
msgstr "O destinatário local %s não foi encontrado"
#: admin/models/alias.py:173
#: admin/models/alias.py:172
#, python-format
msgid "Invalid line: %s"
msgstr "Linha inválida: %s"
#: admin/models/alias.py:179
#: admin/models/alias.py:178
#, python-format
msgid "Domain '%s' does not exist"
msgstr "O domínio '%s' não existe"
#: admin/models/domain.py:38 admin/models/domain_alias.py:37
#: admin/models/domain.py:41 admin/models/domain_alias.py:37
msgid "name"
msgstr "nome"
#: admin/models/domain.py:39
#: admin/models/domain.py:42
msgid "The domain name"
msgstr "O nome do domínio"
#: admin/models/domain.py:43
#: admin/models/domain.py:46
msgid "Check to activate this domain"
msgstr "Marcar para ativar este domínio"
#: admin/models/domain.py:198 admin/models/domain_alias.py:71
#: admin/models/domain.py:211 admin/models/domain_alias.py:71
msgid "Invalid line"
msgstr "Linha inválida"
#: admin/models/domain.py:206
#: admin/models/domain.py:219
#, python-format
msgid "Invalid quota value for domain '%s'"
msgstr "Valor de quota inválido para o dominio '%s'"
@@ -633,32 +638,32 @@ msgstr "A quota excede o limite permitido pelo domínio (%dM)"
msgid "A quota is required"
msgstr "É necessário uma quota"
#: admin/serializers.py:44 admin/serializers.py:224 admin/serializers.py:313
#: admin/serializers.py:45 admin/serializers.py:228 admin/serializers.py:317
#, fuzzy
#| msgid "Permissions"
msgid "Permission denied."
msgstr "Permissões"
#: admin/serializers.py:82
#: admin/serializers.py:83
msgid ""
"List of administered domains (resellers and domain administrators only)."
msgstr ""
#: admin/serializers.py:189
#: admin/serializers.py:193
msgid "Not allowed for this role."
msgstr ""
#: admin/serializers.py:199
#: admin/serializers.py:203
msgid "Must be equal to mailbox full_address"
msgstr ""
#: admin/serializers.py:211
#: admin/serializers.py:215
#, fuzzy
#| msgid "Domain does not exist"
msgid "Local domain {} does not exist"
msgstr "O domínio não existe"
#: admin/serializers.py:311
#: admin/serializers.py:315
#, fuzzy
#| msgid "Domain modified"
msgid "Domain not found."
@@ -796,34 +801,39 @@ msgstr ""
msgid "DNS status"
msgstr "Estatísticas"
#: admin/templates/admin/domain_detail.html:36
#: admin/templates/admin/domain_detail.html:28
#: admin/templates/admin/domains_table.html:12
msgid "Awaiting checks"
msgstr ""
#: admin/templates/admin/domain_detail.html:40
msgid "Creation date"
msgstr "Data de criação"
#: admin/templates/admin/domain_detail.html:38
#: admin/templates/admin/domain_detail.html:42
msgid "Last modification date"
msgstr "Data da última modificação"
#: admin/templates/admin/domain_detail.html:39
#: admin/templates/admin/domain_detail.html:48
#: admin/templates/admin/domain_detail.html:43
#: admin/templates/admin/domain_detail.html:52
#: admin/templates/admin/domain_statistics.html:33
msgid "Domain aliases"
msgstr "Aliases de domínio"
#: admin/templates/admin/domain_detail.html:41
#: admin/templates/admin/domain_detail.html:45
msgid "Mailbox aliases"
msgstr "Aliases para caixas de correio"
#: admin/templates/admin/domain_detail.html:65
#: admin/templates/admin/domain_detail.html:69
msgid "Administrators"
msgstr "Administradores"
#: admin/templates/admin/domain_detail.html:75
#: admin/templates/admin/domain_detail.html:79
#: admin/templatetags/admin_tags.py:252
msgid "Remove this permission"
msgstr "Remover esta permissão"
#: admin/templates/admin/domain_detail.html:80
#: admin/templates/admin/domain_detail.html:84
#, fuzzy
#| msgid "No domain administrator defined"
msgid "No domain administrator defined yet."
+91 -81
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\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/"
@@ -51,7 +51,7 @@ msgstr ""
msgid "Check every domain against major DNSBL providers"
msgstr ""
#: admin/app_settings.py:84 admin/templates/admin/domain_detail.html.py:40
#: admin/app_settings.py:84 admin/templates/admin/domain_detail.html:44
msgid "Mailboxes"
msgstr "Почтовые ящики"
@@ -103,7 +103,7 @@ msgstr "Домен создан"
msgid "Create a domain and a mailbox when an account is automatically created."
msgstr ""
#: admin/app_settings.py:170 admin/forms/account.py:279
#: admin/app_settings.py:170 admin/forms/account.py:292
#: admin/forms/domain.py:81
msgid "Must be a positive integer"
msgstr ""
@@ -112,13 +112,13 @@ msgstr ""
msgid "Administration"
msgstr ""
#: admin/callbacks.py:35 admin/templates/admin/domain_statistics.html.py:36
#: admin/callbacks.py:35 admin/templates/admin/domain_statistics.html:36
#: admin/templates/admin/domain_statistics.html:50
#: admin/templates/admin/identities.html:5
msgid "Identities"
msgstr "Пользователи"
#: admin/callbacks.py:50 admin/templates/admin/forward.html.py:2
#: admin/callbacks.py:50 admin/templates/admin/forward.html:2
msgid "Forward"
msgstr "Перенаправленые"
@@ -142,7 +142,7 @@ msgstr "Ошибка импорта аккаунта (%s): домен долже
msgid "domain alias"
msgstr ""
#: admin/forms/account.py:33 admin/templates/admin/domain_detail.html.py:68
#: admin/forms/account.py:33 admin/templates/admin/domain_detail.html:72
msgid "Username"
msgstr "Логин пользователя"
@@ -152,11 +152,11 @@ msgid ""
"administrators with a mailbox."
msgstr ""
#: admin/forms/account.py:40 admin/templates/admin/account_detail.html.py:29
#: admin/forms/account.py:40 admin/templates/admin/account_detail.html:29
msgid "Role"
msgstr "Роль"
#: admin/forms/account.py:41 admin/forms/account.py:79
#: admin/forms/account.py:41
msgid "Choose"
msgstr "Выбрать"
@@ -176,32 +176,32 @@ msgstr "Подтверждение"
msgid "Enter the same password as above, for verification."
msgstr "Введите такой же пароль как выше. Для проверки."
#: admin/forms/account.py:70
#: admin/forms/account.py:63
msgid "Enabled"
msgstr "Разрешено"
#: admin/forms/account.py:142
#: admin/forms/account.py:155
msgid "The two password fields didn't match."
msgstr "Пароли не совпадают"
#: admin/forms/account.py:157
#: admin/forms/account.py:170
msgid "Only super administrators are allowed for this mode"
msgstr ""
#: admin/forms/account.py:165
#: admin/forms/account.py:178
msgid "You can't disable your own account"
msgstr "Вы не можете запретить собственный аккаунт"
#: admin/forms/account.py:180
#: admin/forms/account.py:193
msgid "E-mail"
msgstr "Е-майл"
#: admin/forms/account.py:182 admin/forms/domain.py:36
#: admin/forms/account.py:195 admin/forms/domain.py:36
#: admin/templates/admin/account_detail.html:45
msgid "Quota"
msgstr "Квота"
#: admin/forms/account.py:184
#: admin/forms/account.py:197
msgid ""
"Quota in MB for this mailbox. Define a custom value or use domain's default "
"one. Leave empty to define an unlimited value (not allowed for domain "
@@ -212,27 +212,32 @@ msgstr ""
"Оставьте пустым для неограниченного значения. (Не разрешено администраторам "
"домена)"
#: admin/forms/account.py:192 admin/forms/domain.py:44
#: admin/forms/account.py:205 admin/forms/domain.py:44
#: admin/templates/admin/domains.html:35
msgid "Alias(es)"
msgstr "Синоним(ы)"
#: admin/forms/account.py:195
#: admin/forms/account.py:208
#, fuzzy
#| msgid ""
#| "Alias(es) of this mailbox. Indicate only one address per input, press "
#| "ENTER to add a new input. Use the '*' character to create a 'catchall' "
#| "alias (ex: *@domain.tld)."
msgid ""
"Alias(es) of this mailbox. Indicate only one address per input, press ENTER "
"to add a new input. Use the '*' character to create a 'catchall' alias (ex: "
"*@domain.tld)."
"to add a new input. To create a catchall alias, just enter the domain name "
"(@domain.tld)."
msgstr ""
"Синонимы этого почтового ящика. Вводите один адрес за раз. Нажмите ENTER для "
"добавления. Используйте '*' для создания синонима 'для всех' (*@domain.tld)"
#: admin/forms/account.py:201
#: admin/forms/account.py:214
#, fuzzy
#| msgid "Invalid request"
msgid "Sender addresses"
msgstr "Ошибочный запрос"
#: admin/forms/account.py:204
#: admin/forms/account.py:217
#, fuzzy
#| msgid ""
#| "Mailbox(es) this alias will point to. Indicate only one address per "
@@ -245,47 +250,47 @@ msgstr ""
"Этот синоним почтового ящика. Вводите один адрес за раз. Нажмите ENTER для "
"добавления."
#: admin/forms/account.py:258 admin/forms/alias.py:89
#: admin/forms/account.py:271 admin/forms/alias.py:92
#: admin/models/mailbox.py:293
msgid "Domain does not exist"
msgstr "Домен не существует"
#: admin/forms/account.py:288
#: admin/forms/account.py:301
#, fuzzy
#| msgid "Domain does not exist"
msgid "Local domain does not exist"
msgstr "Домен не существует"
#: admin/forms/account.py:386
#: admin/forms/account.py:399
msgid "Domain(s)"
msgstr "Домен(ы)"
#: admin/forms/account.py:388
#: admin/forms/account.py:401
msgid "Domain(s) that user administrates"
msgstr "Домен(ы) администрируемые пользователем"
#: admin/forms/account.py:434 admin/forms/account.py:518
#: admin/forms/domain.py:266 admin/forms/domain.py:336
#: admin/forms/account.py:447 admin/forms/account.py:532
#: admin/forms/domain.py:266 admin/forms/domain.py:332
msgid "General"
msgstr "Основные"
#: admin/forms/account.py:439 admin/forms/account.py:524
#: admin/forms/account.py:452 admin/forms/account.py:538
msgid "Mail"
msgstr "Почта"
#: admin/forms/account.py:441
#: admin/forms/account.py:454
msgid "Permissions"
msgstr "Права"
#: admin/forms/account.py:507
#: admin/forms/account.py:521
msgid "Account updated"
msgstr "аккаунт изменен"
#: admin/forms/account.py:531
#: admin/forms/account.py:545
msgid "New account"
msgstr "Новый аккаунт"
#: admin/forms/account.py:543
#: admin/forms/account.py:557
msgid "Account created"
msgstr "Аккаунт создан"
@@ -311,7 +316,7 @@ msgstr ""
"Адреса синонимов (без доменной части). Для указания адреса 'для всех' "
"введите символ *"
#: admin/forms/alias.py:35 admin/templates/admin/alias_detail.html.py:37
#: admin/forms/alias.py:35 admin/templates/admin/alias_detail.html:37
msgid "Recipients"
msgstr "Получатели"
@@ -327,26 +332,26 @@ msgstr ""
"Этот синоним почтового ящика. Вводите один адрес за раз. Нажмите ENTER для "
"добавления."
#: admin/forms/alias.py:92
#: admin/forms/alias.py:47 admin/forms/domain.py:24 admin/models/domain.py:90
#: admin/templates/admin/domain_statistics.html:49
msgid "Domain"
msgstr ""
#: admin/forms/alias.py:95
msgid "You don't have access to this domain"
msgstr "Вы не имеете права доступа к этому домену"
#: admin/forms/alias.py:109 admin/forms/alias.py:111
#: admin/forms/alias.py:112 admin/forms/alias.py:114
#, fuzzy
#| msgid "A quota is required"
msgid "This field is required"
msgstr "Требуется квота"
#: admin/forms/alias.py:115
#: admin/forms/alias.py:118
msgid "No recipient defined"
msgstr "Получатель не определен"
#: admin/forms/domain.py:24 admin/models/alias.py:37 admin/models/domain.py:87
#: admin/templates/admin/domain_statistics.html:49
msgid "Domain"
msgstr ""
#: admin/forms/domain.py:33 admin/templates/admin/domain_statistics.html.py:26
#: admin/forms/domain.py:33 admin/templates/admin/domain_statistics.html:26
msgid "Type"
msgstr ""
@@ -382,7 +387,7 @@ msgstr "Создание администратора домена"
msgid "Automatically create an administrator for this domain"
msgstr "Автоматически создаст администратора для этого домена"
#: admin/forms/domain.py:174 admin/templates/admin/domain_detail.html.py:68
#: admin/forms/domain.py:174 admin/templates/admin/domain_detail.html:72
#: admin/templates/admin/domains.html:34
#: admin/templates/admin/identity_headers.html:2
#: admin/templates/admin/mx_domain_detail.html:9
@@ -414,19 +419,19 @@ msgstr "Неверный формат"
msgid "User '%s' already exists"
msgstr "Пользователь '%s' уже существует"
#: admin/forms/domain.py:325
#: admin/forms/domain.py:321
msgid "Domain modified"
msgstr "Домен изменен"
#: admin/forms/domain.py:345
#: admin/forms/domain.py:341
msgid "Options"
msgstr "Опции"
#: admin/forms/domain.py:353
#: admin/forms/domain.py:349
msgid "New domain"
msgstr "Новый домен"
#: admin/forms/domain.py:366
#: admin/forms/domain.py:362
msgid "Domain created"
msgstr "Домен создан"
@@ -498,20 +503,20 @@ msgstr "Вы не можете удалить собственный домен"
msgid "You are not allowed to import domain aliases."
msgstr ""
#: admin/management/commands/subcommands/_mx.py:155
#: admin/management/commands/subcommands/_mx.py:159
msgid "[modoboa] DNSBL issue(s) for domain {}"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:176
msgid "Domain {} as no MX record"
#: admin/management/commands/subcommands/_mx.py:180
msgid "Domain {} has no MX record"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:187
#: admin/management/commands/subcommands/_mx.py:191
#, python-brace-format
msgid "Domain {0} got an invalid MX record. Got {1}"
msgid "MX record for domain {0} is invalid: {1}"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:203
#: admin/management/commands/subcommands/_mx.py:207
msgid "[modoboa] MX issue(s) for domain {}"
msgstr ""
@@ -525,66 +530,66 @@ msgstr "адрес"
msgid "The alias address."
msgstr "Имя синонима"
#: admin/models/alias.py:39 admin/models/domain.py:42
#: admin/models/alias.py:38 admin/models/domain.py:45
#: admin/models/domain_alias.py:44
msgid "enabled"
msgstr "Разрешен"
#: admin/models/alias.py:40 admin/models/domain_alias.py:45
#: admin/models/alias.py:39 admin/models/domain_alias.py:45
msgid "Check to activate this alias"
msgstr "Отметить для активации синонима"
#: admin/models/alias.py:45 admin/templates/admin/alias_detail.html.py:32
#: admin/models/alias.py:44 admin/templates/admin/alias_detail.html:32
msgid "Description"
msgstr ""
#: admin/models/alias.py:47 admin/templates/admin/alias_detail.html.py:29
#: admin/models/alias.py:46 admin/templates/admin/alias_detail.html:29
msgid "Expire at"
msgstr ""
#: admin/models/alias.py:90
#: admin/models/alias.py:89
msgid "alias"
msgstr "Синоним"
#: admin/models/alias.py:122
#: admin/models/alias.py:121
#, fuzzy
#| msgid "Invalid request"
msgid "Invalid address"
msgstr "Ошибочный запрос"
#: admin/models/alias.py:143
#: admin/models/alias.py:142
#, fuzzy
#| msgid "Local recipient %s not found"
msgid "Local recipient {}@{} not found"
msgstr "Локальный получатель %s не найден"
#: admin/models/alias.py:173
#: admin/models/alias.py:172
#, python-format
msgid "Invalid line: %s"
msgstr "Неверная строка %s"
#: admin/models/alias.py:179
#: admin/models/alias.py:178
#, python-format
msgid "Domain '%s' does not exist"
msgstr "Домен '%s' не существует"
#: admin/models/domain.py:38 admin/models/domain_alias.py:37
#: admin/models/domain.py:41 admin/models/domain_alias.py:37
msgid "name"
msgstr "имя"
#: admin/models/domain.py:39
#: admin/models/domain.py:42
msgid "The domain name"
msgstr "Имя домена"
#: admin/models/domain.py:43
#: admin/models/domain.py:46
msgid "Check to activate this domain"
msgstr "Отметить для активации этого домена"
#: admin/models/domain.py:198 admin/models/domain_alias.py:71
#: admin/models/domain.py:211 admin/models/domain_alias.py:71
msgid "Invalid line"
msgstr "Ошибочная строка"
#: admin/models/domain.py:206
#: admin/models/domain.py:219
#, python-format
msgid "Invalid quota value for domain '%s'"
msgstr ""
@@ -624,32 +629,32 @@ msgstr "Квота больше чем разрешено на уровне до
msgid "A quota is required"
msgstr "Требуется квота"
#: admin/serializers.py:44 admin/serializers.py:224 admin/serializers.py:313
#: admin/serializers.py:45 admin/serializers.py:228 admin/serializers.py:317
#, fuzzy
#| msgid "Permissions"
msgid "Permission denied."
msgstr "Права"
#: admin/serializers.py:82
#: admin/serializers.py:83
msgid ""
"List of administered domains (resellers and domain administrators only)."
msgstr ""
#: admin/serializers.py:189
#: admin/serializers.py:193
msgid "Not allowed for this role."
msgstr ""
#: admin/serializers.py:199
#: admin/serializers.py:203
msgid "Must be equal to mailbox full_address"
msgstr ""
#: admin/serializers.py:211
#: admin/serializers.py:215
#, fuzzy
#| msgid "Domain does not exist"
msgid "Local domain {} does not exist"
msgstr "Домен не существует"
#: admin/serializers.py:311
#: admin/serializers.py:315
#, fuzzy
#| msgid "Domain modified"
msgid "Domain not found."
@@ -786,34 +791,39 @@ msgstr ""
msgid "DNS status"
msgstr "Статистика"
#: admin/templates/admin/domain_detail.html:36
#: admin/templates/admin/domain_detail.html:28
#: admin/templates/admin/domains_table.html:12
msgid "Awaiting checks"
msgstr ""
#: admin/templates/admin/domain_detail.html:40
msgid "Creation date"
msgstr "Дата создания"
#: admin/templates/admin/domain_detail.html:38
#: admin/templates/admin/domain_detail.html:42
msgid "Last modification date"
msgstr "Дата последней модификации"
#: admin/templates/admin/domain_detail.html:39
#: admin/templates/admin/domain_detail.html:48
#: admin/templates/admin/domain_detail.html:43
#: admin/templates/admin/domain_detail.html:52
#: admin/templates/admin/domain_statistics.html:33
msgid "Domain aliases"
msgstr "Синонимы доменов"
#: admin/templates/admin/domain_detail.html:41
#: admin/templates/admin/domain_detail.html:45
msgid "Mailbox aliases"
msgstr "Синонимы почтового ящика"
#: admin/templates/admin/domain_detail.html:65
#: admin/templates/admin/domain_detail.html:69
msgid "Administrators"
msgstr "Администраторы"
#: admin/templates/admin/domain_detail.html:75
#: admin/templates/admin/domain_detail.html:79
#: admin/templatetags/admin_tags.py:252
msgid "Remove this permission"
msgstr "Удалить это разрешение"
#: admin/templates/admin/domain_detail.html:80
#: admin/templates/admin/domain_detail.html:84
#, fuzzy
#| msgid "No domain administrator defined"
msgid "No domain administrator defined yet."
+91 -81
View File
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2016-05-30 18:05+0000\n"
"Last-Translator: Olle Gustafsson <olle@dalnix.se>\n"
"Language-Team: Swedish (http://www.transifex.com/tonio/modoboa/language/"
@@ -52,7 +52,7 @@ msgstr ""
msgid "Check every domain against major DNSBL providers"
msgstr ""
#: admin/app_settings.py:84 admin/templates/admin/domain_detail.html.py:40
#: admin/app_settings.py:84 admin/templates/admin/domain_detail.html:44
msgid "Mailboxes"
msgstr "Brevlådor"
@@ -104,7 +104,7 @@ msgstr "Automatisk skapande av domän/brevlåda"
msgid "Create a domain and a mailbox when an account is automatically created."
msgstr "Skapa en domän och en brevlåda när ett konto skapas automatiskt."
#: admin/app_settings.py:170 admin/forms/account.py:279
#: admin/app_settings.py:170 admin/forms/account.py:292
#: admin/forms/domain.py:81
msgid "Must be a positive integer"
msgstr "Måste vara ett positivt heltal"
@@ -113,13 +113,13 @@ msgstr "Måste vara ett positivt heltal"
msgid "Administration"
msgstr "Administration"
#: admin/callbacks.py:35 admin/templates/admin/domain_statistics.html.py:36
#: admin/callbacks.py:35 admin/templates/admin/domain_statistics.html:36
#: admin/templates/admin/domain_statistics.html:50
#: admin/templates/admin/identities.html:5
msgid "Identities"
msgstr "Konton"
#: admin/callbacks.py:50 admin/templates/admin/forward.html.py:2
#: admin/callbacks.py:50 admin/templates/admin/forward.html:2
msgid "Forward"
msgstr "Vidarebefordra"
@@ -141,7 +141,7 @@ msgstr "Importering av konto misslyckades (%s): Fel kvota värde"
msgid "domain alias"
msgstr "domän alias"
#: admin/forms/account.py:33 admin/templates/admin/domain_detail.html.py:68
#: admin/forms/account.py:33 admin/templates/admin/domain_detail.html:72
msgid "Username"
msgstr "Användarnamn"
@@ -153,11 +153,11 @@ msgstr ""
"Användarens namn. Måste vara en giltig e-postadress för vanliga användare "
"eller för administratörer med brevlåda."
#: admin/forms/account.py:40 admin/templates/admin/account_detail.html.py:29
#: admin/forms/account.py:40 admin/templates/admin/account_detail.html:29
msgid "Role"
msgstr "Roll"
#: admin/forms/account.py:41 admin/forms/account.py:79
#: admin/forms/account.py:41
msgid "Choose"
msgstr "Välj"
@@ -177,32 +177,32 @@ msgstr "Bekräftelse"
msgid "Enter the same password as above, for verification."
msgstr "Ange samma lösenord som ovan för verifiering."
#: admin/forms/account.py:70
#: admin/forms/account.py:63
msgid "Enabled"
msgstr "Aktiverad"
#: admin/forms/account.py:142
#: admin/forms/account.py:155
msgid "The two password fields didn't match."
msgstr "Dessa två lösnordsfält matchar inte."
#: admin/forms/account.py:157
#: admin/forms/account.py:170
msgid "Only super administrators are allowed for this mode"
msgstr "Endast superadmininstratörer tillåts åtkomst till det här läget"
#: admin/forms/account.py:165
#: admin/forms/account.py:178
msgid "You can't disable your own account"
msgstr "Du kan inte inaktivera ditt eget konto"
#: admin/forms/account.py:180
#: admin/forms/account.py:193
msgid "E-mail"
msgstr "E-post"
#: admin/forms/account.py:182 admin/forms/domain.py:36
#: admin/forms/account.py:195 admin/forms/domain.py:36
#: admin/templates/admin/account_detail.html:45
msgid "Quota"
msgstr "Kvot"
#: admin/forms/account.py:184
#: admin/forms/account.py:197
msgid ""
"Quota in MB for this mailbox. Define a custom value or use domain's default "
"one. Leave empty to define an unlimited value (not allowed for domain "
@@ -212,28 +212,33 @@ 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)."
#: admin/forms/account.py:192 admin/forms/domain.py:44
#: admin/forms/account.py:205 admin/forms/domain.py:44
#: admin/templates/admin/domains.html:35
msgid "Alias(es)"
msgstr "Alias"
#: admin/forms/account.py:195
#: admin/forms/account.py:208
#, fuzzy
#| msgid ""
#| "Alias(es) of this mailbox. Indicate only one address per input, press "
#| "ENTER to add a new input. Use the '*' character to create a 'catchall' "
#| "alias (ex: *@domain.tld)."
msgid ""
"Alias(es) of this mailbox. Indicate only one address per input, press ENTER "
"to add a new input. Use the '*' character to create a 'catchall' alias (ex: "
"*@domain.tld)."
"to add a new input. To create a catchall alias, just enter the domain name "
"(@domain.tld)."
msgstr ""
"Alias för denna brevlåda. Ange endast en adress per rad, tryck ENTER för att "
"lägga till ny rad. Använd '*' för att skapa ett 'catchall' alias (ex: "
"*@domain.tld)."
#: admin/forms/account.py:201
#: admin/forms/account.py:214
#, fuzzy
#| msgid "Invalid address"
msgid "Sender addresses"
msgstr "Ogiltigt adress"
#: admin/forms/account.py:204
#: admin/forms/account.py:217
#, fuzzy
#| msgid ""
#| "Addresses this alias will point to. Indicate only one address per input, "
@@ -246,45 +251,45 @@ msgstr ""
"Adresser detta alias kommer peka på. Ange bara en adress per fält, tryck "
"RETUR för att lägga till ytterligare."
#: admin/forms/account.py:258 admin/forms/alias.py:89
#: admin/forms/account.py:271 admin/forms/alias.py:92
#: admin/models/mailbox.py:293
msgid "Domain does not exist"
msgstr "Domän existerar inte"
#: admin/forms/account.py:288
#: admin/forms/account.py:301
msgid "Local domain does not exist"
msgstr "Lokal domän existerar inte"
#: admin/forms/account.py:386
#: admin/forms/account.py:399
msgid "Domain(s)"
msgstr "Domän(er)"
#: admin/forms/account.py:388
#: admin/forms/account.py:401
msgid "Domain(s) that user administrates"
msgstr "Domän(er) användaren administrerar"
#: admin/forms/account.py:434 admin/forms/account.py:518
#: admin/forms/domain.py:266 admin/forms/domain.py:336
#: admin/forms/account.py:447 admin/forms/account.py:532
#: admin/forms/domain.py:266 admin/forms/domain.py:332
msgid "General"
msgstr "Generellt"
#: admin/forms/account.py:439 admin/forms/account.py:524
#: admin/forms/account.py:452 admin/forms/account.py:538
msgid "Mail"
msgstr "Post"
#: admin/forms/account.py:441
#: admin/forms/account.py:454
msgid "Permissions"
msgstr "Rättigheter"
#: admin/forms/account.py:507
#: admin/forms/account.py:521
msgid "Account updated"
msgstr "Konto uppdaterat"
#: admin/forms/account.py:531
#: admin/forms/account.py:545
msgid "New account"
msgstr "Nytt konto"
#: admin/forms/account.py:543
#: admin/forms/account.py:557
msgid "Account created"
msgstr "Konto skapat"
@@ -305,7 +310,7 @@ msgid ""
msgstr ""
"Alias adress. För en \"catch-all\"-alias, ange bara domännamnet (@domän.tld)."
#: admin/forms/alias.py:35 admin/templates/admin/alias_detail.html.py:37
#: admin/forms/alias.py:35 admin/templates/admin/alias_detail.html:37
msgid "Recipients"
msgstr "Mottagare"
@@ -317,26 +322,26 @@ msgstr ""
"Adresser detta alias kommer peka på. Ange bara en adress per fält, tryck "
"RETUR för att lägga till ytterligare."
#: admin/forms/alias.py:92
#: admin/forms/alias.py:47 admin/forms/domain.py:24 admin/models/domain.py:90
#: admin/templates/admin/domain_statistics.html:49
msgid "Domain"
msgstr "Domän"
#: admin/forms/alias.py:95
msgid "You don't have access to this domain"
msgstr "Du har inte åtkomst till denna domän"
#: admin/forms/alias.py:109 admin/forms/alias.py:111
#: admin/forms/alias.py:112 admin/forms/alias.py:114
#, fuzzy
#| msgid "A mailbox is required"
msgid "This field is required"
msgstr "En brevlåda krävs"
#: admin/forms/alias.py:115
#: admin/forms/alias.py:118
msgid "No recipient defined"
msgstr "Ingen mottagare definierad"
#: admin/forms/domain.py:24 admin/models/alias.py:37 admin/models/domain.py:87
#: admin/templates/admin/domain_statistics.html:49
msgid "Domain"
msgstr "Domän"
#: admin/forms/domain.py:33 admin/templates/admin/domain_statistics.html.py:26
#: admin/forms/domain.py:33 admin/templates/admin/domain_statistics.html:26
msgid "Type"
msgstr "Typ"
@@ -374,7 +379,7 @@ msgstr "Skapa en domän administratör"
msgid "Automatically create an administrator for this domain"
msgstr "Skapa en domän administratör automatiskt för denna domän"
#: admin/forms/domain.py:174 admin/templates/admin/domain_detail.html.py:68
#: admin/forms/domain.py:174 admin/templates/admin/domain_detail.html:72
#: admin/templates/admin/domains.html:34
#: admin/templates/admin/identity_headers.html:2
#: admin/templates/admin/mx_domain_detail.html:9
@@ -406,19 +411,19 @@ msgstr "Ogiltigt format"
msgid "User '%s' already exists"
msgstr "Användare '%s' finns redan"
#: admin/forms/domain.py:325
#: admin/forms/domain.py:321
msgid "Domain modified"
msgstr "Domän ändrad"
#: admin/forms/domain.py:345
#: admin/forms/domain.py:341
msgid "Options"
msgstr "Inställningar"
#: admin/forms/domain.py:353
#: admin/forms/domain.py:349
msgid "New domain"
msgstr "Ny domän"
#: admin/forms/domain.py:366
#: admin/forms/domain.py:362
msgid "Domain created"
msgstr "Domän skapad"
@@ -486,20 +491,20 @@ msgstr "Du tillåts inte att importera domäner"
msgid "You are not allowed to import domain aliases."
msgstr "Du tillåts inte att importera domän alias."
#: admin/management/commands/subcommands/_mx.py:155
#: admin/management/commands/subcommands/_mx.py:159
msgid "[modoboa] DNSBL issue(s) for domain {}"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:176
msgid "Domain {} as no MX record"
#: admin/management/commands/subcommands/_mx.py:180
msgid "Domain {} has no MX record"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:187
#: admin/management/commands/subcommands/_mx.py:191
#, python-brace-format
msgid "Domain {0} got an invalid MX record. Got {1}"
msgid "MX record for domain {0} is invalid: {1}"
msgstr ""
#: admin/management/commands/subcommands/_mx.py:203
#: admin/management/commands/subcommands/_mx.py:207
msgid "[modoboa] MX issue(s) for domain {}"
msgstr ""
@@ -511,62 +516,62 @@ msgstr "adress"
msgid "The alias address."
msgstr "Alias adressen."
#: admin/models/alias.py:39 admin/models/domain.py:42
#: admin/models/alias.py:38 admin/models/domain.py:45
#: admin/models/domain_alias.py:44
msgid "enabled"
msgstr "aktiverad"
#: admin/models/alias.py:40 admin/models/domain_alias.py:45
#: admin/models/alias.py:39 admin/models/domain_alias.py:45
msgid "Check to activate this alias"
msgstr "Markera för aktivera detta alias"
#: admin/models/alias.py:45 admin/templates/admin/alias_detail.html.py:32
#: admin/models/alias.py:44 admin/templates/admin/alias_detail.html:32
msgid "Description"
msgstr ""
#: admin/models/alias.py:47 admin/templates/admin/alias_detail.html.py:29
#: admin/models/alias.py:46 admin/templates/admin/alias_detail.html:29
msgid "Expire at"
msgstr ""
#: admin/models/alias.py:90
#: admin/models/alias.py:89
msgid "alias"
msgstr "alias"
#: admin/models/alias.py:122
#: admin/models/alias.py:121
msgid "Invalid address"
msgstr "Ogiltigt adress"
#: admin/models/alias.py:143
#: admin/models/alias.py:142
msgid "Local recipient {}@{} not found"
msgstr "Lokal mottagare {}@{} kunde inte hittas."
#: admin/models/alias.py:173
#: admin/models/alias.py:172
#, python-format
msgid "Invalid line: %s"
msgstr "Ogiltig rad: %s"
#: admin/models/alias.py:179
#: admin/models/alias.py:178
#, python-format
msgid "Domain '%s' does not exist"
msgstr "Domänen '%s' existerar inte"
#: admin/models/domain.py:38 admin/models/domain_alias.py:37
#: admin/models/domain.py:41 admin/models/domain_alias.py:37
msgid "name"
msgstr "namn"
#: admin/models/domain.py:39
#: admin/models/domain.py:42
msgid "The domain name"
msgstr "Domännamnet"
#: admin/models/domain.py:43
#: admin/models/domain.py:46
msgid "Check to activate this domain"
msgstr "Markera för att aktivera denna domän"
#: admin/models/domain.py:198 admin/models/domain_alias.py:71
#: admin/models/domain.py:211 admin/models/domain_alias.py:71
msgid "Invalid line"
msgstr "Ogiltig rad"
#: admin/models/domain.py:206
#: admin/models/domain.py:219
#, python-format
msgid "Invalid quota value for domain '%s'"
msgstr "Ogiltig kvota värde för domänen '%s'"
@@ -606,30 +611,30 @@ msgstr "Kvotan är större än domänens gräns (%dM)"
msgid "A quota is required"
msgstr "En kvota krävs"
#: admin/serializers.py:44 admin/serializers.py:224 admin/serializers.py:313
#: admin/serializers.py:45 admin/serializers.py:228 admin/serializers.py:317
msgid "Permission denied."
msgstr "Åtskomst nekad."
#: admin/serializers.py:82
#: admin/serializers.py:83
msgid ""
"List of administered domains (resellers and domain administrators only)."
msgstr ""
"Lista över administrerade domäner (endast återförsäljare och "
"domänadministratörer)."
#: admin/serializers.py:189
#: admin/serializers.py:193
msgid "Not allowed for this role."
msgstr "Inte tillåtet för denna roll."
#: admin/serializers.py:199
#: admin/serializers.py:203
msgid "Must be equal to mailbox full_address"
msgstr "Måste vara lika med brevlådans full_address"
#: admin/serializers.py:211
#: admin/serializers.py:215
msgid "Local domain {} does not exist"
msgstr "Lokal domän {} finns inte"
#: admin/serializers.py:311
#: admin/serializers.py:315
msgid "Domain not found."
msgstr "Domän kunde ej hittas."
@@ -765,34 +770,39 @@ msgstr ""
msgid "DNS status"
msgstr "Statistik"
#: admin/templates/admin/domain_detail.html:36
#: admin/templates/admin/domain_detail.html:28
#: admin/templates/admin/domains_table.html:12
msgid "Awaiting checks"
msgstr ""
#: admin/templates/admin/domain_detail.html:40
msgid "Creation date"
msgstr "Skapelsedatum"
#: admin/templates/admin/domain_detail.html:38
#: admin/templates/admin/domain_detail.html:42
msgid "Last modification date"
msgstr "Senast ändrad"
#: admin/templates/admin/domain_detail.html:39
#: admin/templates/admin/domain_detail.html:48
#: admin/templates/admin/domain_detail.html:43
#: admin/templates/admin/domain_detail.html:52
#: admin/templates/admin/domain_statistics.html:33
msgid "Domain aliases"
msgstr "Domän alias"
#: admin/templates/admin/domain_detail.html:41
#: admin/templates/admin/domain_detail.html:45
msgid "Mailbox aliases"
msgstr "Brevlåde alias"
#: admin/templates/admin/domain_detail.html:65
#: admin/templates/admin/domain_detail.html:69
msgid "Administrators"
msgstr "Administratörer"
#: admin/templates/admin/domain_detail.html:75
#: admin/templates/admin/domain_detail.html:79
#: admin/templatetags/admin_tags.py:252
msgid "Remove this permission"
msgstr "Radera detta tillstånd"
#: admin/templates/admin/domain_detail.html:80
#: admin/templates/admin/domain_detail.html:84
#, fuzzy
#| msgid "No domain administrator defined"
msgid "No domain administrator defined yet."
@@ -57,6 +57,9 @@ class CheckMXRecords(BaseCommand):
"--skip-admin-emails", action="store_true",
default=False,
help="Skip domain's admins email notification.")
parser.add_argument(
"--domain", type=str, action="append", default=[],
help="Domain name or id to update.")
parser.add_argument(
"--timeout", type=int, default=3,
help="Timeout used for queries.")
@@ -80,28 +83,29 @@ class CheckMXRecords(BaseCommand):
models.MXRecord.objects.filter(domain=domain).delete()
try:
answers = dns.resolver.query(domain.name, "MX")
except (dns.resolver.NoAnswer, dns.resolver.NXDOMAIN):
except (dns.resolver.NoAnswer, dns.resolver.NXDOMAIN,
dns.resolver.NoNameservers):
raise StopIteration()
delta = timedelta(seconds=ttl)
for answer in answers:
address = None
try:
ipaddress.ip_address(str(answer.exchange))
except ValueError:
try:
address = socket.gethostbyname(str(answer.exchange))
except socket.gaierror:
pass
# work if .exchange is a name or IP
address = socket.gethostbyname(str(answer.exchange))
except socket.gaierror:
pass
else:
address = str(answer.exchange)
finally:
if address is not None:
try:
# we must have a valid IP
address = ipaddress.ip_address(u"{}".format(address))
except ValueError:
pass
else:
record = models.MXRecord.objects.create(
domain=domain,
name=str(answer.exchange).strip("."),
address=address,
name=u"{}".format(str(answer.exchange).strip(".")),
address=u"{}".format(address),
updated=now + delta)
yield record
@@ -110,7 +114,7 @@ class CheckMXRecords(BaseCommand):
results = {}
for mx in mx_list:
reverse = ".".join(reversed(mx.address.split(".")))
pattern = "{}.{}".format(reverse, provider)
pattern = "{}.{}.".format(reverse, provider)
try:
results[mx] = socket.gethostbyname(pattern)
except socket.gaierror:
@@ -173,7 +177,7 @@ class CheckMXRecords(BaseCommand):
for mx in mx_list]
valid_mxs = self.valid_mxs
if not mxs:
alerts.append(_("Domain {} as no MX record").format(domain))
alerts.append(_("Domain {} has no MX record").format(domain))
elif valid_mxs:
for subnet in valid_mxs:
for mx, addr in mxs:
@@ -184,7 +188,7 @@ class CheckMXRecords(BaseCommand):
mx_names = [
"{0.name} ({0.address})".format(mx) for mx in mx_list]
alerts.append(
_("Domain {0} got an invalid MX record. Got {1}").format(
_("MX record for domain {0} is invalid: {1}").format(
domain, ", ".join(mx_names))
)
if not alerts:
@@ -237,5 +241,20 @@ class CheckMXRecords(BaseCommand):
models.DNSBLResult.objects.exclude(
provider__in=self.providers).delete()
for domain in models.Domain.objects.filter(enabled=True):
if options["domain"]:
domains = []
for domain in options["domain"]:
try:
if domain.isdigit():
domains.append(models.Domain.objects.get(pk=domain))
else:
domains.append(models.Domain.objects.get(name=domain))
except models.Domain.DoesNotExist:
pass
else:
domains = models.Domain.objects.filter(enabled=True)
options.pop("domain")
for domain in domains:
self.check_domain(domain, **options)
+15 -2
View File
@@ -1,7 +1,10 @@
"""Models related to domains management."""
import datetime
from django.db import models
from django.db.models.manager import Manager
from django.utils import timezone
from django.utils.encoding import python_2_unicode_compatible, smart_text
from django.utils.functional import cached_property
from django.utils.translation import ugettext as _, ugettext_lazy
@@ -103,8 +106,18 @@ class Domain(AdminObject):
return self.domainalias_set
@property
def mx_records(self):
self.mxrecord_set
def just_created(self):
"""return true if the domain was created in the latest 24h"""
now = timezone.now()
delta = datetime.timedelta(days=1)
return self.creation + delta > now
def awaiting_checks(self):
"""return true if the domain has no valid MX records and was created
in the latest 24h"""
if (not self.mxrecord_set.has_valids()) and self.just_created:
return True
return False
@cached_property
def dnsbl_status_color(self):
+1 -1
View File
@@ -283,7 +283,7 @@ class Mailbox(AdminObject):
newaddress = None
if values["email"] != self.full_address:
newaddress = values["email"]
elif (self.user.group == "SimpleUsers" and
elif (self.user.role == "SimpleUsers" and
self.user.username != self.full_address):
newaddress = self.user.username
if newaddress is not None:
+2 -9
View File
@@ -1,7 +1,5 @@
"""Map file definitions for postfix."""
from modoboa.core.commands.postfix_maps import registry
class DomainsMap(object):
@@ -127,13 +125,13 @@ class SenderLoginMailboxExtraMap(object):
"WHERE sad.address='%s'"
)
postgres = (
"SELECT mb.address || '@' || dom.name) FROM admin_mailbox mb "
"SELECT mb.address || '@' || dom.name FROM admin_mailbox mb "
"INNER JOIN admin_senderaddress sad ON sad.mailbox_id=mb.id "
"INNER JOIN admin_domain dom ON dom.id=mb.domain_id "
"WHERE sad.address='%s'"
)
sqlite = (
"SELECT mb.address || '@' || dom.name) FROM admin_mailbox mb "
"SELECT mb.address || '@' || dom.name FROM admin_mailbox mb "
"INNER JOIN admin_senderaddress sad ON sad.mailbox_id=mb.id "
"INNER JOIN admin_domain dom ON dom.id=mb.domain_id "
"WHERE sad.address='%s'"
@@ -166,8 +164,3 @@ class SenderLoginAliasMap(object):
" INNER JOIN admin_alias al ON alr.alias_id=al.id "
"WHERE al.enabled=1 AND al.address='%s'"
)
registry.add_files([
DomainsMap, DomainsAliasesMap, AliasesMap, MaintainMap,
SenderLoginAliasMap, SenderLoginMailboxMap, SenderLoginMailboxExtraMap
])
+7 -3
View File
@@ -8,6 +8,7 @@ from rest_framework import serializers
from passwords import validators
from modoboa.admin import models as admin_models
from modoboa.core import constants as core_constants
from modoboa.core import models as core_models
from modoboa.core import signals as core_signals
from modoboa.lib import exceptions as lib_exceptions
@@ -102,7 +103,7 @@ class AccountSerializer(serializers.ModelSerializer):
def get_role(self, account):
"""Return role."""
return account.group
return account.role
def get_domains(self, account):
"""Return domains administered by this account."""
@@ -154,6 +155,8 @@ class AccountPasswordSerializer(serializers.ModelSerializer):
class WritableAccountSerializer(AccountSerializer):
"""Serializer to create account."""
role = serializers.ChoiceField(choices=core_constants.ROLES)
class Meta(AccountSerializer.Meta):
fields = AccountSerializer.Meta.fields + (
"password", )
@@ -184,11 +187,12 @@ class WritableAccountSerializer(AccountSerializer):
def validate(self, data):
"""Check constraints."""
master_user = data.get("master_user", False)
if master_user and data["role"] != "SuperAdmins":
role = data.get("role")
if master_user and role != "SuperAdmins":
raise serializers.ValidationError({
"master_user": _("Not allowed for this role.")
})
if data["role"] == "SimpleUsers":
if role == "SimpleUsers":
mailbox = data.get("mailbox")
if mailbox is None:
data["mailbox"] = {
@@ -24,11 +24,15 @@
{% if enable_mx_checks == "yes" or enable_dnsbl_checks == "yes" %}
<div class="row">
<span class="title">{% trans "DNS status" %}</span>
{% if enable_mx_checks == "yes" %}
<span class="label label-mini label-{% if not domain.mxrecord_set.has_valids %}danger{% else %}success{% endif %}"><a href="{% url 'admin:mx_domain_detail' domain.pk %}" data-toggle="ajaxmodal">MX</a></span>
{% endif %}
{% if enable_dnsbl_checks == "yes" %}
<span class="label label-{{ domain.dnsbl_status_color }}"><a href="{% url 'admin:dnsbl_domain_detail' domain.pk %}" data-toggle="ajaxmodal">DNSBL</a></span>
{% if domain.awaiting_checks %}
<span class="label label-mini label-info">{% trans "Awaiting checks" %}</span>
{% else %}
{% if enable_mx_checks == "yes" %}
<span class="label label-mini label-{% if not domain.mxrecord_set.has_valids %}danger{% else %}success{% endif %}"><a href="{% url 'admin:mx_domain_detail' domain.pk %}" data-toggle="ajaxmodal">MX</a></span>
{% endif %}
{% if enable_dnsbl_checks == "yes" %}
<span class="label label-mini label-{{ domain.dnsbl_status_color }}"><a href="{% url 'admin:dnsbl_domain_detail' domain.pk %}" data-toggle="ajaxmodal">DNSBL</a></span>
{% endif %}
{% endif %}
</div>
{% endif %}
@@ -16,7 +16,7 @@
<hr>
<div class="row">
{% if user.group == "SuperAdmins" %}
{% if user.role == "SuperAdmins" %}
<div class="col-xs-12 col-sm-6">
<div class="panel panel-info">
<div class="panel-heading"><h3 class="panel-title">{% trans "Global counters" %}</h3></div>
@@ -8,11 +8,15 @@
{% if enable_mx_checks == "yes" or enable_dnsbl_checks == "yes" %}
<td name="dns">
<small>
{% if enable_mx_checks == "yes" %}
<span class="label label-mini label-{% if not domain.mxrecord_set.has_valids %}danger{% else %}success{% endif %}"><a href="{% url 'admin:mx_domain_detail' domain.pk %}" data-toggle="ajaxmodal">MX</a></span>
{% endif %}
{% if enable_dnsbl_checks == "yes" %}
<span class="label label-mini label-{{ domain.dnsbl_status_color }}"><a href="{% url 'admin:dnsbl_domain_detail' domain.pk %}" data-toggle="ajaxmodal">DNSBL</a></span>
{% if domain.awaiting_checks %}
<span class="label label-mini label-info">{% trans "Awaiting checks" %}</span>
{% else %}
{% if enable_mx_checks == "yes" %}
<span class="label label-mini label-{% if not domain.mxrecord_set.has_valids %}danger{% else %}success{% endif %}"><a href="{% url 'admin:mx_domain_detail' domain.pk %}" data-toggle="ajaxmodal">MX</a></span>
{% endif %}
{% if enable_dnsbl_checks == "yes" %}
<span class="label label-mini label-{{ domain.dnsbl_status_color }}"><a href="{% url 'admin:dnsbl_domain_detail' domain.pk %}" data-toggle="ajaxmodal">DNSBL</a></span>
{% endif %}
{% endif %}
</small>
</td>
+55 -13
View File
@@ -5,8 +5,9 @@ from unittest import skipIf
from django.core.urlresolvers import reverse
from django.test import override_settings
from modoboa.core.models import User
from modoboa.core import factories as core_factories
from modoboa.core import tests as core_tests
from modoboa.core.models import User
from modoboa.lib import parameters
from modoboa.lib.tests import ModoTestCase
from modoboa.lib.tests import NO_LDAP
@@ -73,6 +74,24 @@ class AccountTestCase(ModoTestCase):
alias__internal=True).exists()
)
def test_delete_default_superadmin(self):
"""Delete default superadmin."""
sadmin2 = core_factories.UserFactory(
username="admin2", is_superuser=True)
sadmin = User.objects.get(username="admin")
self.client.force_login(sadmin2)
self.ajax_post(
reverse("admin:account_delete", args=[sadmin.pk]), {}
)
values = {
"username": "user@test.com", "role": "DomainAdmins",
"is_active": True, "email": "user@test.com"
}
account = User.objects.get(username="user@test.com")
self.ajax_post(
reverse("admin:account_change", args=[account.pk]), values
)
def test_sender_address(self):
"""Check if sender addresses are saved."""
account = User.objects.get(username="user@test.com")
@@ -197,7 +216,7 @@ class AccountTestCase(ModoTestCase):
self.assertIn("Resources usage", response.content)
@skipIf(NO_LDAP, 'No ldap module installed')
@skipIf(NO_LDAP, "No ldap module installed")
@override_settings(AUTHENTICATION_BACKENDS=(
'modoboa.lib.authbackends.LDAPBackend',
'modoboa.lib.authbackends.SimpleBackend',
@@ -233,7 +252,9 @@ class PermissionsTestCase(ModoTestCase):
app="limits"
)
factories.populate_database()
cls.user = User.objects.get(username='user@test.com')
cls.reseller = core_factories.UserFactory(username="reseller")
cls.reseller.role = "Resellers"
cls.user = User.objects.get(username="user@test.com")
cls.values = dict(
username=cls.user.username, role="DomainAdmins",
is_active=cls.user.is_active, email="user@test.com",
@@ -248,14 +269,15 @@ class PermissionsTestCase(ModoTestCase):
reverse("admin:account_change", args=[self.user.id]),
self.values
)
self.assertEqual(self.user.group, "DomainAdmins")
self.assertEqual(self.user.role, "DomainAdmins")
self.values["role"] = "SimpleUsers"
self.ajax_post(
reverse("admin:account_change", args=[self.user.id]),
self.values
)
self.assertNotEqual(self.user.group, 'DomainAdmins')
self.assertNotEqual(
self.user.groups.first().name, "DomainAdmins")
def test_superusers(self):
self.values["role"] = "SuperAdmins"
@@ -281,16 +303,16 @@ class PermissionsTestCase(ModoTestCase):
self.client.login(username="admin@test.com", password="toto")
)
admin = User.objects.get(username="admin@test.com")
values = dict(
username="admin@test.com", first_name="Admin",
password1="", password2="",
quota=10, is_active=True, email="admin@test.com"
)
values = {
"username": "admin@test.com", "first_name": "Admin",
"password1": "", "password2": "",
"quota": 10, "is_active": True, "email": "admin@test.com"
}
self.ajax_post(
reverse("admin:account_change", args=[admin.id]),
values
)
self.assertEqual(admin.group, "DomainAdmins")
self.assertEqual(admin.role, "DomainAdmins")
self.assertTrue(admin.can_access(
models.Domain.objects.get(name="test.com")))
@@ -299,8 +321,28 @@ class PermissionsTestCase(ModoTestCase):
reverse("admin:account_change", args=[admin.id]),
values
)
admin = User.objects.get(username="admin@test.com")
self.assertEqual(admin.group, "DomainAdmins")
admin.refresh_from_db()
self.assertEqual(admin.role, "DomainAdmins")
self.client.logout()
self.client.login(username=self.reseller.username, password="toto")
self.assertTrue(self.reseller.can_access(self.reseller))
values = {
"username": self.reseller.username, "first_name": "Reseller",
"password1": "", "password2": "",
"is_active": True
}
self.ajax_post(
reverse("admin:account_change", args=[self.reseller.pk]),
values
)
self.assertEqual(self.reseller.role, "Resellers")
values["role"] = "SuperAdmins"
self.ajax_post(
reverse("admin:account_change", args=[self.reseller.pk]),
values
)
self.assertEqual(self.reseller.role, "Resellers")
def test_domadmin_access(self):
self.client.logout()
+3 -3
View File
@@ -22,7 +22,7 @@ class AliasTestCase(ModoTestCase):
def test_alias(self):
user = User.objects.get(username="user@test.com")
values = dict(
username="user@test.com", role=user.group,
username="user@test.com", role=user.role,
is_active=user.is_active, email="user@test.com",
aliases="toto@test.com", aliases_1="titi@test.com"
)
@@ -64,7 +64,7 @@ class AliasTestCase(ModoTestCase):
"""Try to create an upper case alias."""
user = User.objects.get(username="user@test.com")
values = dict(
username="user@test.com", role=user.group,
username="user@test.com", role=user.role,
is_active=user.is_active, email="user@test.com",
aliases="Toto@test.com"
)
@@ -94,7 +94,7 @@ class AliasTestCase(ModoTestCase):
"""Try to create a alias with tag in recipient address"""
user = User.objects.get(username="user@test.com")
values = dict(
username="user@test.com", role=user.group,
username="user@test.com", role=user.role,
is_active=user.is_active, email="user@test.com"
)
self.ajax_post(
+15
View File
@@ -162,3 +162,18 @@ class DomainTestCase(ModoTestCase):
"ENABLE_DOMAIN_LIMITS", "yes", app="limits")
response = self.client.get(url)
self.assertIn("Resources usage", response.content)
def test_domain_statitics_view(self):
"""Test statistics display."""
url = reverse("admin:domain_statistics")
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
self.assertIn("Global counters", response.content)
self.assertIn("Per-domain counters", response.content)
self.client.force_login(
User.objects.get(username="admin@test.com"))
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
self.assertNotIn("Global counters", response.content)
self.assertIn("Per-domain counters", response.content)
+2 -2
View File
@@ -75,7 +75,7 @@ dlist; dlist@test.com; True; user1@test.com; user@extdomain.com
self.assertEqual(u1.first_name, "User")
self.assertEqual(u1.last_name, "One")
self.assertTrue(u1.is_active)
self.assertEqual(u1.group, "SimpleUsers")
self.assertEqual(u1.role, "SimpleUsers")
self.assertTrue(mb1.use_domain_quota)
self.assertEqual(mb1.quota, 0)
self.assertTrue(admin.is_owner(mb1))
@@ -87,7 +87,7 @@ dlist; dlist@test.com; True; user1@test.com; user@extdomain.com
da = User.objects.get(username="truc@test.com")
damb = da.mailbox
self.assertEqual(da.first_name, u"René")
self.assertEqual(da.group, "DomainAdmins")
self.assertEqual(da.role, "DomainAdmins")
self.assertEqual(damb.quota, 5)
self.assertFalse(damb.use_domain_quota)
self.assertEqual(damb.full_address, "truc@test.com")
+40
View File
@@ -1,7 +1,12 @@
"""Test map files generation."""
import os
from django.conf import settings
from django.core.management import call_command
from django.test import TestCase
from modoboa.core.utils import parse_map_file
from modoboa.lib.test_utils import MapFilesTestCaseMixin
@@ -14,3 +19,38 @@ class MapFilesTestCase(MapFilesTestCaseMixin, TestCase):
"sql-maintain.cf", "sql-sender-login-mailboxes.cf",
"sql-sender-login-mailboxes-extra.cf", "sql-sender-login-aliases.cf"
]
def test_map_upgrade(self):
"""Check that map content is used."""
dburl = "postgres://user:password@localhost/testdb"
call_command(
"generate_postfix_maps",
"--dburl", dburl, "--destdir", self.workdir)
# Now upgrade files. Map credentials should be preserved.
call_command("generate_postfix_maps", "--destdir", self.workdir)
for f in self.MAP_FILES:
mapcontent = parse_map_file(os.path.join(self.workdir, f))
self.assertEqual(mapcontent["user"], "user")
self.assertEqual(mapcontent["password"], "password")
self.assertEqual(mapcontent["dbname"], "testdb")
# Now force overwrite, credentials should be different
call_command(
"generate_postfix_maps", "--destdir", self.workdir,
"--force-overwrite")
dbsettings = settings.DATABASES["default"]
for f in self.MAP_FILES:
mapcontent = parse_map_file(os.path.join(self.workdir, f))
self.assertEqual(mapcontent["user"], dbsettings["USER"])
self.assertEqual(mapcontent["password"], dbsettings["PASSWORD"])
self.assertEqual(mapcontent["dbname"], dbsettings["NAME"])
# Now modify a file manually
path = os.path.join(self.workdir, "sql-domains.cf")
with open(path, "a") as fp:
fp.write("pouet")
call_command("generate_postfix_maps", "--destdir", self.workdir)
with open(path) as fp:
content = fp.read()
self.assertIn("pouet", content)
+22 -2
View File
@@ -19,8 +19,10 @@ class MXTestCase(ModoTestCase):
"""Create some data."""
super(MXTestCase, cls).setUpTestData()
cls.domain = factories.DomainFactory(name="modoboa.org")
factories.DomainFactory(name="pouet.com") # should not exist
parameters.save_admin('VALID_MXS', '127.0.0.1', app='admin')
# should not exist
cls.bad_domain = factories.DomainFactory(name="pouet.com")
parameters.save_admin("VALID_MXS", "127.0.0.1")
models.MXRecord.objects.all().delete()
def test_management_command(self):
"""Check that command works fine."""
@@ -43,6 +45,23 @@ class MXTestCase(ModoTestCase):
qs = models.MXRecord.objects.filter(domain=self.domain)
self.assertEqual(id, qs[0].id)
def test_single_domain_update(self):
"""Update only one domain."""
management.call_command(
"modo", "check_mx", "--domain", self.domain.name)
self.assertTrue(
models.MXRecord.objects.filter(domain=self.domain).exists())
self.assertFalse(
models.MXRecord.objects.filter(domain=self.bad_domain).exists())
management.call_command(
"modo", "check_mx", "--domain", str(self.bad_domain.pk))
self.assertFalse(
models.MXRecord.objects.filter(domain=self.bad_domain).exists())
management.call_command(
"modo", "check_mx", "--domain", "toto.com")
class DNSBLTestCase(ModoTestCase):
"""TestCase for DNSBL related features."""
@@ -53,6 +72,7 @@ class DNSBLTestCase(ModoTestCase):
super(DNSBLTestCase, cls).setUpTestData()
cls.domain = factories.DomainFactory(name="modoboa.org")
factories.DomainFactory(name="pouet.com") # should not exist
models.DNSBLResult.objects.all().delete()
@override_settings(DNSBL_PROVIDERS=["zen.spamhaus.org"])
def test_management_command(self):
+2 -1
View File
@@ -18,7 +18,8 @@ urlpatterns = patterns(
name="mx_domain_detail"),
url(r'^domains/list/$', '_domains', name="_domain_list"),
url(r'^domains/flatlist/$', 'domains_list', name="domain_flat_list"),
url(r'^domains/stats/$', 'domain_statistics', name="domain_statistics"),
url(r'^domains/stats/$', views.DomainStatisticsView.as_view(),
name="domain_statistics"),
url(r'^domains/new/', 'newdomain', name='domain_add'),
url(r'^domains/(?P<dom_id>\d+)/edit/$', 'editdomain',
name="domain_change"),
+2 -1
View File
@@ -3,7 +3,7 @@
from .alias import AliasDetailView
from .identity import AccountDetailView
from .dns import DNSBLDomainDetailView, MXDomainDetailView
from .domain import DomainDetailView
from .domain import DomainDetailView, DomainStatisticsView
__all__ = [
@@ -11,5 +11,6 @@ __all__ = [
"AliasDetailView",
"DNSBLDomainDetailView",
"DomainDetailView",
"DomainStatisticsView",
"MXDomainDetailView",
]
+19 -13
View File
@@ -147,21 +147,27 @@ def deldomain(request, dom_id):
return render_to_json_response(msg)
@login_required
@permission_required("admin.view_domains")
def domain_statistics(request):
class DomainStatisticsView(
auth_mixins.PermissionRequiredMixin, generic.TemplateView):
"""A simple page to present domain statistics."""
context = {}
if request.user.group == "SuperAdmins":
template_name = "admin/domain_statistics.html"
permission_required = "admin.view_domains"
def get_context_data(self, **kwargs):
"""Add counters."""
context = super(DomainStatisticsView, self).get_context_data(**kwargs)
if self.request.user.role == "SuperAdmins":
context.update({
"domains_counter": Domain.objects.count(),
"domain_aliases_counter": DomainAlias.objects.count(),
"identities_counter": (
User.objects.count() +
Alias.objects.filter(internal=False).count()),
})
context.update({
"domains_counter": Domain.objects.count(),
"domain_aliases_counter": DomainAlias.objects.count(),
"identities_counter": (
User.objects.count() +
Alias.objects.filter(internal=False).count()),
})
context.update({"domains": Domain.objects.get_for_admin(request.user)})
return render(request, "admin/domain_statistics.html", context)
"domains": Domain.objects.get_for_admin(self.request.user)})
return context
class DomainDetailView(
-185
View File
@@ -1,185 +0,0 @@
# coding: utf-8
"""postfix_maps command."""
import datetime
import getpass
import os
import sys
import django
from django.template import Context, Template
import dj_database_url
from . import Command
MAP_FILE_TEMPLATE = """user = {{ dbuser }}
password = {{ dbpass }}
dbname = {{ dbname }}
hosts = {{ dbhost }}
query = {{ query|safe }}
"""
class MapFilesRegistry(object):
"""A registry of all map files."""
def __init__(self):
self.files = []
def add_files(self, files):
"""Add map files to registry."""
self.files += files
registry = MapFilesRegistry()
class MapFilesGenerator(object):
"""Map files generator."""
def __init__(self, dbinfo=None):
"""Constructor."""
self.template = Template(MAP_FILE_TEMPLATE)
if dbinfo is None:
self.tpl_context = {
'dbhost': raw_input('Database host: '),
'dbname': raw_input('Database name: '),
'dbuser': raw_input('Username: '),
'dbpass': getpass.getpass('Password: ')
}
else:
self.tpl_context = {
'dbhost': dbinfo['HOST'],
'dbname': dbinfo['NAME'],
'dbuser': dbinfo['USER'],
'dbpass': dbinfo['PASSWORD']
}
if not self.tpl_context['dbhost']:
self.tpl_context['dbhost'] = '127.0.0.1'
def __render_map(self, args, mapobject):
"""Render a map file.
:param args: command line arguments
:param mapobject: a ``MapFile`` subclass
"""
content = self.template.render(
Context(dict(
self.tpl_context.items(),
query=getattr(mapobject, args.dbtype)
))
)
with open("%s/%s" % (args.destdir, mapobject.filename), "w") as fp:
fp.write("""# This file was generated on {} by running:
# {} {}
# DO NOT EDIT!
"""
.format(datetime.datetime.now().isoformat(),
os.path.basename(sys.argv[0]),
' '.join(sys.argv[1:])))
fp.write("{}\n".format(content))
def __load_applications(self, applications):
"""Load specified applications."""
for app in applications:
extension = app.replace("-", "_")
try:
__import__(extension, locals(), globals(), ["postfix_maps"])
except ImportError:
sys.stderr.write("Unknown application {0}".format(extension))
def render(self, args):
"""Render all map files.
:param args: arguments received from the command line
"""
try:
os.mkdir(args.destdir)
except OSError:
pass
applications = ["modoboa.admin", "modoboa.relaydomains"]
if args.extensions:
if "all" in applications:
from modoboa.lib.api_client import ModoAPIClient
# Retrieve extension list from the API
url = "http://api.modoboa.org/"
official_exts = ModoAPIClient(url).list_extensions()
extensions = [
extension["name"] for extension in official_exts]
else:
extensions = args.extensions
applications += extensions
self.__load_applications(applications)
for mapfile in registry.files:
self.__render_map(args, mapfile)
class SQLiteMapFilesGenerator(MapFilesGenerator):
"""SQLite special generator."""
def __init__(self, dbinfo=None):
self.template = Template("""dbpath = {{ dbpath }}
query = {{ query|safe }}
""")
if dbinfo is None:
self.tpl_context = {
'dbpath': raw_input('Database path: ')
}
else:
self.tpl_context = {
'dbpath': dbinfo['NAME']
}
class PostfixMapsCommand(Command):
"""Base command to generate map files."""
help = "Generate ready-to-use postfix map files"
def __init__(self, *args, **kwargs):
super(PostfixMapsCommand, self).__init__(*args, **kwargs)
self._parser.add_argument(
'destdir', type=str,
help='Directory that will contain generated map files'
)
self._parser.add_argument(
'--dbtype', type=str, choices=['mysql', 'postgres', 'sqlite'],
default='mysql',
help='Used database type'
)
self._parser.add_argument(
'--dburl', type=str, nargs=1, default=None,
help="url of Modoboa's database"
)
self._parser.add_argument(
'--extensions', type=str, nargs='+',
help=(
'Generate map files for this extensions '
'("all" shortcut available)'
)
)
def handle(self, parsed_args):
"""Command entry point."""
django.setup()
dbinfo = None
if parsed_args.dburl:
dbinfo = dj_database_url.config(default=parsed_args.dburl[0])
if 'sqlite' in dbinfo['ENGINE']:
parsed_args.dbtype = 'sqlite'
elif 'psycopg2' in dbinfo['ENGINE']:
parsed_args.dbtype = 'postgres'
else:
parsed_args.dbtype = 'mysql'
if parsed_args.dbtype == 'sqlite':
generator = SQLiteMapFilesGenerator(dbinfo)
else:
generator = MapFilesGenerator(dbinfo)
generator.render(parsed_args)
@@ -167,8 +167,12 @@ SWAGGER_SETTINGS = {
"exclude_namespaces": [],
"info": {
"contact": "contact@modoboa.com",
"description": ("Modoboa API, requires a valid token."),
"title": "Modoboa API",
"description": (
"Modoboa API, requires a valid token. To obtain a token, login "
"as super administrator, go to 'User settings > API' and enable "
"API access. Click on 'Update' and wait for page refresh."
),
"title": "Modoboa API documentation",
}
}
+2 -2
View File
@@ -28,7 +28,7 @@ class GroupFactory(factory.DjangoModelFactory):
class Meta:
model = Group
name = 'DefaultGroup'
name = "DefaultGroup"
class UserFactory(PermissionFactory):
@@ -40,7 +40,7 @@ class UserFactory(PermissionFactory):
django_get_or_create = ("username", )
email = factory.LazyAttribute(lambda a: a.username)
password = '{PLAIN}toto'
password = "{PLAIN}toto"
@factory.post_generation
def groups(self, create, extracted, **kwargs):
@@ -0,0 +1,162 @@
"""Management command to generate/update postfix map files."""
import copy
import hashlib
import os
import sys
from django.conf import settings
from django.core.management.base import BaseCommand
from django.template import Context, Template
from django.utils import timezone
import dj_database_url
from ... import signals
from ... import utils
MAP_FILE_TEMPLATE = """# This file was generated on {{ date }} by running:
# {{ commandline }}
# DO NOT EDIT!
"""
class Command(BaseCommand):
"""Command class."""
help = "Generate/update postfix map files."
def add_arguments(self, parser):
"""Add extra arguments."""
parser.add_argument(
"--dburl", help="Custom database url")
parser.add_argument(
"--destdir", default=".",
help="Directory where files will be created")
parser.add_argument(
"--force-overwrite", action="store_true", default=False,
help="Force overwrite of existing map files")
def __load_checksums(self, destdir):
"""Load existing checksums if possible."""
self.__checksums_file = os.path.join(
destdir, "modoboa-postfix-maps.chk")
self.__checksums = {}
if not os.path.exists(self.__checksums_file):
return
with open(self.__checksums_file) as fp:
for line in fp:
fname, dbtype, checksum = line.split(":")
self.__checksums[fname.strip()] = {
"dbtype": dbtype, "checksum": checksum.strip()
}
def __register_map_files(self):
"""Load specified applications."""
responses = signals.register_postfix_maps.send(sender=self.__class__)
mapfiles = []
for response in responses:
mapfiles += response[1]
return mapfiles
def __check_file(self, path):
"""Check if map file has been modified."""
fname = os.path.basename(path)
condition = (
not self.__checksums or
fname not in self.__checksums)
if condition:
return True
with open(path) as fp:
checksum = hashlib.md5(fp.read()).hexdigest()
return checksum == self.__checksums[fname]["checksum"]
def get_template(self, dbtype):
"""Return map file template."""
tplcontent = MAP_FILE_TEMPLATE
if dbtype == "sqlite":
tplcontent += """dbpath = {{ dbname }}
query = {{ query|safe }}
"""
else:
tplcontent += """user = {{ dbuser }}
password = {{ dbpass }}
dbname = {{ dbname }}
hosts = {{ dbhost }}
query = {{ query|safe }}
"""
return Template(tplcontent)
def get_template_context(self, options):
"""Build the context used to render templates."""
dburl = options.get("dburl")
db_settings = (
dj_database_url.config(default=dburl)
if dburl else settings.DATABASES["default"])
if "sqlite" in db_settings["ENGINE"]:
dbtype = "sqlite"
elif "psycopg2" in db_settings["ENGINE"]:
dbtype = "postgres"
else:
dbtype = "mysql"
commandline = "{} {}".format(
os.path.basename(sys.argv[0]), " ".join(sys.argv[1:]))
context = {
"date": timezone.now(),
"commandline": commandline,
"dbtype": dbtype,
"dbuser": db_settings["USER"],
"dbpass": db_settings["PASSWORD"],
"dbname": db_settings["NAME"],
"dbhost": db_settings.get("HOST", "127.0.0.1"),
}
return context
def __render_map_file(
self, mapobject, destdir, context, force_overwrite=False):
"""Render a map file."""
fullpath = os.path.join(destdir, mapobject.filename)
if os.path.exists(fullpath) and not force_overwrite:
if not self.__check_file(fullpath):
print(
"Cannot upgrade '{}' map because it has been modified."
.format(mapobject.filename))
return self.__checksums[mapobject.filename]
mapcontent = utils.parse_map_file(fullpath)
context = copy.deepcopy(context)
context["dbtype"] = self.__checksums[mapobject.filename]["dbtype"]
context["dbuser"] = mapcontent["user"]
context["dbpass"] = mapcontent["password"]
context["dbname"] = mapcontent["dbname"]
context["dbhost"] = mapcontent["hosts"]
content = self.get_template(context["dbtype"]).render(
Context(
dict(context.items(),
query=getattr(mapobject, context["dbtype"]))
)
)
fullpath = os.path.join(destdir, mapobject.filename)
with open(fullpath, "w") as fp:
fp.write(content)
return hashlib.md5(content).hexdigest()
def handle(self, *args, **options):
"""Command entry point."""
mapfiles = self.__register_map_files()
destdir = os.path.realpath(options["destdir"])
try:
os.mkdir(destdir)
except OSError:
pass
self.__load_checksums(destdir)
context = self.get_template_context(options)
checksums = {}
for mapobject in mapfiles:
checksum = self.__render_map_file(
mapobject, destdir, context,
force_overwrite=options["force_overwrite"])
checksums[mapobject.filename] = checksum
with open(self.__checksums_file, "w") as fp:
for fname, checksum in checksums.items():
fp.write("{}:{}:{}\n".format(
fname, context["dbtype"], checksum))
+12 -32
View File
@@ -62,12 +62,12 @@ class User(PermissionsMixin):
"Allow this administrator to access user mailboxes"
)
)
password = models.CharField(ugettext_lazy('password'), max_length=256)
password = models.CharField(ugettext_lazy("password"), max_length=256)
last_login = models.DateTimeField(
ugettext_lazy('last login'), blank=True, null=True
)
language = models.CharField(
language = models.CharField(ugettext_lazy("language"),
max_length=10, default="en", choices=constants.LANGUAGES,
help_text=ugettext_lazy(
"Prefered language to display pages."
@@ -118,6 +118,9 @@ class User(PermissionsMixin):
raise PermDeniedException
owner = get_object_owner(self)
if owner == self:
# The default admin is being removed...
owner = fromuser
for ooentry in self.objectaccess_set.filter(is_owner=True):
if ooentry.content_object is not None:
grant_access_to_object(owner, ooentry.content_object, True)
@@ -220,7 +223,7 @@ class User(PermissionsMixin):
@property
def tags(self):
return [{"name": "account", "label": _("account"), "type": "idt"},
{"name": self.group, "label": self.group,
{"name": self.role, "label": self.role,
"type": "grp", "color": "info"}]
@property
@@ -239,16 +242,6 @@ class User(PermissionsMixin):
return "%s %s" % (self.first_name, self.last_name)
return "----"
@property
def group(self):
"""FIXME: DEPRECATED"""
if self.is_superuser:
return "SuperAdmins"
try:
return self.groups.all()[0].name
except IndexError:
return "---"
@property
def enabled(self):
return self.is_active
@@ -258,22 +251,9 @@ class User(PermissionsMixin):
from email.header import Header
if self.first_name != "" or self.last_name != "":
return "%s <%s>" % \
(Header(self.fullname, 'utf8').encode(), self.email)
(Header(self.fullname, "utf8").encode(), self.email)
return self.email
def belongs_to_group(self, name):
"""Simple shortcut to check if this user is a member of a
specific group.
:param name: the group's name
:return: a boolean
"""
try:
self.groups.get(name=name)
except Group.DoesNotExist:
return False
return True
def is_owner(self, obj):
"""Tell is the user is the unique owner of this object
@@ -339,7 +319,7 @@ class User(PermissionsMixin):
:param string role: the role to set
"""
if role is None or self.group == role:
if role is None or self.role == role:
return
events.raiseEvent("RoleChanged", self, role)
self.groups.clear()
@@ -353,7 +333,7 @@ class User(PermissionsMixin):
self.groups.add(Group.objects.get(name=role))
except Group.DoesNotExist:
self.groups.add(Group.objects.get(name="SimpleUsers"))
if self.group != "SimpleUsers" and not self.can_access(self):
if role != "SimpleUsers" and not self.can_access(self):
from modoboa.lib.permissions import grant_access_to_object
grant_access_to_object(self, self)
self.save()
@@ -392,7 +372,7 @@ class User(PermissionsMixin):
The expected order is the following::
"account", loginname, password, first name, last name, enabled, group
"account", loginname, password, first name, last name, enabled, role
Additional fields can be added using the *AccountImported* event.
@@ -463,7 +443,7 @@ class User(PermissionsMixin):
self.first_name.encode("utf-8"),
self.last_name.encode("utf-8"),
self.is_active,
self.group,
self.role,
self.email.encode("utf-8")
]
row += events.raiseQueryEvent("AccountExported", self)
@@ -472,7 +452,7 @@ class User(PermissionsMixin):
reversion.register(User)
def populate_callback(user, group='SimpleUsers'):
def populate_callback(user, group="SimpleUsers"):
"""Populate callback
If the LDAP authentication backend is in use, this callback will
+1
View File
@@ -4,3 +4,4 @@ import django.dispatch
can_create_object = django.dispatch.Signal(
providing_args=["context", "object_type", "count"])
register_postfix_maps = django.dispatch.Signal()
+2 -2
View File
@@ -34,7 +34,7 @@
<thead>
<tr>
<th>{% trans "Name" %}</th>
<th>{% trans "Group name" %}</th>
<th>{% trans "Role" %}</th>
<th>{% trans "Last login" %}</th>
</tr>
</thead>
@@ -42,7 +42,7 @@
{% connected_users as users %}{% for u in users %}
<tr>
<td>{{ u.username }}</td>
<td>{{ u.group }}</td>
<td>{{ u.role }}</td>
<td>{{ u.last_login }}</td>
</tr>
{% endfor %}
+1 -1
View File
@@ -159,7 +159,7 @@ class LDAPAuthenticationTestCase(LDAPTestCaseMixin, ModoTestCase):
def check_created_user(self, username, group="SimpleUsers", with_mb=True):
"""Check that created user is valid."""
user = models.User.objects.get(username=username)
self.assertEqual(user.group, group)
self.assertEqual(user.role, group)
if with_mb:
self.assertEqual(user.email, username)
self.assertEqual(user.mailbox.domain.name, "example.com")
+12
View File
@@ -11,6 +11,18 @@ from modoboa.lib.api_client import ModoAPIClient
from . import models
def parse_map_file(path):
"""Parse a postfix map file and return values."""
content = {}
with open(path) as fp:
for line in fp:
if not line or line.startswith("#"):
continue
name, value = line.split("=", 1)
content[name.strip()] = value.strip()
return content
def check_for_updates(request):
"""Check if a new version of Modoboa is available."""
local_config = models.LocalConfig.objects.first()
+2 -2
View File
@@ -38,7 +38,7 @@ def dologin(request):
request.user.language)
logger.info(
_("User '%s' successfully logged in" % user.username)
_("User '%s' successfully logged in") % user.username
)
events.raiseEvent("UserLogin", request,
form.cleaned_data["username"],
@@ -73,6 +73,6 @@ def dologout(request):
if not request.user.is_anonymous():
events.raiseEvent("UserLogout", request)
logger = logging.getLogger("modoboa.auth")
logger.info(_("User '%s' logged out" % request.user.username))
logger.info(_("User '%s' logged out") % request.user.username)
logout(request)
return HttpResponseRedirect(reverse("core:login"))
+8
View File
@@ -6,6 +6,7 @@ from datetime import datetime
from django import template
from django.template import Template, Context
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext as _
from modoboa.lib import events
@@ -94,3 +95,10 @@ def extra_static_content(caller, st_type, user):
"GetStaticContent", caller, st_type, user)
})
)
@register.filter(name='localize_header_name')
def localize_header_name(headername):
""" Localizes the header names """
names = {"From": _("From"), "To": _("To"), "Date": _("Date"), "Subject": _("Subject")}
return names.get(headername, headername)
+6 -10
View File
@@ -1,13 +1,13 @@
"""Tools for top level testing (ie. when ran by Travis)."""
import os
import shutil
import tempfile
from .sysutils import exec_cmd
from django.core.management import call_command
class MapFilesTestCaseMixin(object):
"""A generic test case to check map files generation."""
MAP_FILES = None
@@ -18,17 +18,13 @@ class MapFilesTestCaseMixin(object):
self.workdir = tempfile.mkdtemp()
def tearDown(self):
exec_cmd("rm -rf {0}".format(self.workdir))
shutil.rmtree(self.workdir)
def _test_maps_generation(self, engine):
dburl = "{0}://user:password@localhost/testdb".format(engine)
code, output = exec_cmd(
"modoboa-admin.py postfix_maps {0}--dburl {1} {2}".format(
"--extensions {} ".format(self.extension)
if self.extension else "", dburl, self.workdir
)
)
self.assertEqual(code, 0)
call_command(
"generate_postfix_maps",
"--dburl", dburl, "--destdir", self.workdir)
for mapfile in self.MAP_FILES:
path = "{0}/{1}".format(self.workdir, mapfile)
+6 -10
View File
@@ -1,12 +1,9 @@
#!/usr/bin/env python
# coding: utf-8
"""
u2u_decode.py
unstructured rfc2047 header to unicode
"""
import re
"""Unstructured rfc2047 header to unicode."""
from email.header import decode_header, make_header
import re
# check spaces between encoded_words (and strip them)
sre = re.compile(r'\?=[ \t]+=\?')
@@ -15,7 +12,7 @@ mre = re.compile(r'=\?[^?]*?\?[bq]\?[^?\t]*?\?=', re.I)
def clean_spaces(m):
"""Replace unencoded spaces in string
"""Replace unencoded spaces in string.
:param str m: a match object
:return: the cleaned string
@@ -24,12 +21,11 @@ def clean_spaces(m):
def decode_mime(m):
"""substitute matching encoded_word with unicode equiv.
"""
"""Substitute matching encoded_word with unicode equiv."""
h = decode_header(clean_spaces(m))
try:
u = unicode(make_header(h))
except UnicodeDecodeError:
except (LookupError, UnicodeDecodeError):
return m.group(0)
return u
+4 -4
View File
@@ -51,7 +51,7 @@ def user_can_set_role(user, role, account=None):
)
if condition:
return [True]
if account is not None and account.group == role:
if account is not None and account.role == role:
return [True]
return [False]
@@ -60,18 +60,18 @@ def user_can_set_role(user, role, account=None):
def on_account_modified(old, new):
"""Update limits when roles are updated"""
owner = get_object_owner(old)
if owner.group not in ["SuperAdmins", "Resellers"]:
if owner.role not in ["SuperAdmins", "Resellers"]:
# Domain admins can't change the role so nothing to check.
return
if new.group not in ["DomainAdmins", "Resellers"]:
if new.role not in ["DomainAdmins", "Resellers"]:
move_pool_resource(owner, new)
@events.observe("AccountDeleted")
def on_account_deleted(account, byuser, **kwargs):
owner = get_object_owner(account)
if owner.group not in ["SuperAdmins", "Resellers"]:
if owner.role not in ["SuperAdmins", "Resellers"]:
return
move_pool_resource(owner, account)
+1 -1
View File
@@ -21,7 +21,7 @@ class ResourcePoolForm(forms.Form):
if "required_role" in tpl:
condition = (
self.account is not None and
self.account.group != tpl["required_role"]
self.account.role != tpl["required_role"]
)
if condition:
continue
+11 -8
View File
@@ -26,7 +26,7 @@ def display_pool_usage(user, target, currentpage):
name for name, tpl in utils.get_user_limit_templates()
if name not in exceptions and
("required_role" not in tpl or
tpl["required_role"] == user.group)
tpl["required_role"] == user.role)
]
limits = user.userobjectlimit_set.filter(name__in=names, max_value__gt=0)
@@ -42,10 +42,14 @@ def display_pool_usage(user, target, currentpage):
def extra_account_form(user, account=None):
if parameters.get_admin("ENABLE_ADMIN_LIMITS") == "no":
return []
if user.group not in ["SuperAdmins", "Resellers"]:
if user.role not in ["SuperAdmins", "Resellers"]:
return []
if account is not None and \
account.group not in ["Resellers", "DomainAdmins"]:
condition = (
(account is not None and
account.role not in ["Resellers", "DomainAdmins"]) or
user == account
)
if condition:
return []
return [{
@@ -81,8 +85,7 @@ def fill_domain_instances(user, domain, instances):
def check_form_access(account, form):
if form["id"] != "resources":
return [True]
if not account.belongs_to_group("Resellers") and \
not account.belongs_to_group("DomainAdmins"):
if account.role not in ["Resellers", "DomainAdmins"]:
return [False]
return [True]
@@ -91,11 +94,11 @@ def check_form_access(account, form):
def fill_account_instances(user, account, instances):
condition = (
parameters.get_admin("ENABLE_ADMIN_LIMITS") == "no" or
(not user.is_superuser and user.group != "Resellers")
(not user.is_superuser and user.role != "Resellers")
)
if condition:
return
if account.group not in ["Resellers", "DomainAdmins"]:
if account.role not in ["Resellers", "DomainAdmins"]:
return
instances["resources"] = account
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2015-01-06 10:05+0000\n"
"Last-Translator: Miroslav Abrahám <miris@kunago.com>\n"
"Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/"
@@ -209,7 +209,7 @@ msgstr "Neplatné omezení"
msgid "You're not allowed to define unlimited values"
msgstr "Nemáte oprávnění nastavovat neomezené hodnoty"
#: limits/general_callbacks.py:52 limits/general_callbacks.py:65
#: limits/general_callbacks.py:56 limits/general_callbacks.py:69
msgid "Resources"
msgstr "Zdroje"
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2014-12-03 11:02+0000\n"
"Last-Translator: Arvedui <arvedui@posteo.de>\n"
"Language-Team: German (http://www.transifex.com/projects/p/modoboa/language/"
@@ -210,7 +210,7 @@ msgstr ""
"Sie verfügen nicht über die erforderlichen Rechte, um unbegrenzte Werte "
"anzugeben"
#: limits/general_callbacks.py:52 limits/general_callbacks.py:65
#: limits/general_callbacks.py:56 limits/general_callbacks.py:69
msgid "Resources"
msgstr "Ressourcen"
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\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"
@@ -167,7 +167,7 @@ msgstr ""
msgid "You're not allowed to define unlimited values"
msgstr ""
#: limits/general_callbacks.py:52 limits/general_callbacks.py:65
#: limits/general_callbacks.py:56 limits/general_callbacks.py:69
msgid "Resources"
msgstr ""
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\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/"
@@ -210,7 +210,7 @@ msgstr "Límite inválido"
msgid "You're not allowed to define unlimited values"
msgstr "No está autorizado definir valores ilimitados"
#: limits/general_callbacks.py:52 limits/general_callbacks.py:65
#: limits/general_callbacks.py:56 limits/general_callbacks.py:69
msgid "Resources"
msgstr "Recursos"
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2016-04-27 20:12+0000\n"
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>\n"
"Language-Team: French (http://www.transifex.com/tonio/modoboa/language/fr/)\n"
@@ -187,7 +187,7 @@ msgstr "Limite invalide"
msgid "You're not allowed to define unlimited values"
msgstr "Vous n'êtes pas autorisé à définir des valeurs illimitées"
#: limits/general_callbacks.py:52 limits/general_callbacks.py:65
#: limits/general_callbacks.py:56 limits/general_callbacks.py:69
msgid "Resources"
msgstr "Ressources"
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\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"
@@ -211,7 +211,7 @@ msgstr "Limite non valido"
msgid "You're not allowed to define unlimited values"
msgstr "Non ti è consentito definire valori non limitati"
#: limits/general_callbacks.py:52 limits/general_callbacks.py:65
#: limits/general_callbacks.py:56 limits/general_callbacks.py:69
msgid "Resources"
msgstr "Risorse"
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2016-06-07 07:16+0000\n"
"Last-Translator: cwatanab <chihiro.watanabe@live.jp>\n"
"Language-Team: Japanese (Japan) (http://www.transifex.com/tonio/modoboa/"
@@ -187,7 +187,7 @@ msgstr "不正な制限"
msgid "You're not allowed to define unlimited values"
msgstr "無制限な値に設定するのは許可されていません"
#: limits/general_callbacks.py:52 limits/general_callbacks.py:65
#: limits/general_callbacks.py:56 limits/general_callbacks.py:69
msgid "Resources"
msgstr "リソース"
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2014-12-31 11:37+0000\n"
"Last-Translator: TuxBrother <vrijwilligerswerk@wij.rs>\n"
"Language-Team: Dutch (Netherlands) (http://www.transifex.com/projects/p/"
@@ -204,7 +204,7 @@ msgstr "Ongeldige limiet"
msgid "You're not allowed to define unlimited values"
msgstr "U mag geen ongelimiteerde waardes opgeven"
#: limits/general_callbacks.py:52 limits/general_callbacks.py:65
#: limits/general_callbacks.py:56 limits/general_callbacks.py:69
msgid "Resources"
msgstr "Capaciteiten"
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2016-05-17 12:19+0000\n"
"Last-Translator: Jose Marcos Araujo <jmaraujo@avancetec.com.br>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/tonio/modoboa/"
@@ -193,7 +193,7 @@ msgstr "Limite inválido"
msgid "You're not allowed to define unlimited values"
msgstr "Você não tem permissão para definir valores ilimitados"
#: limits/general_callbacks.py:52 limits/general_callbacks.py:65
#: limits/general_callbacks.py:56 limits/general_callbacks.py:69
msgid "Resources"
msgstr "Recursos"
@@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2014-12-29 12:51+0000\n"
"Last-Translator: Mike C. <miguelmclara@gmail.com>\n"
"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/"
@@ -216,7 +216,7 @@ msgstr "Limite inválido"
msgid "You're not allowed to define unlimited values"
msgstr "Não está autorizado a definir valores ilimitados"
#: limits/general_callbacks.py:52 limits/general_callbacks.py:65
#: limits/general_callbacks.py:56 limits/general_callbacks.py:69
msgid "Resources"
msgstr "Recursos"
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\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/"
@@ -217,7 +217,7 @@ msgstr "Ошибочный лимит"
msgid "You're not allowed to define unlimited values"
msgstr "Вам не позволено определять нелимитированные значения"
#: limits/general_callbacks.py:52 limits/general_callbacks.py:65
#: limits/general_callbacks.py:56 limits/general_callbacks.py:69
msgid "Resources"
msgstr "Ресурсы"
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2016-05-30 18:08+0000\n"
"Last-Translator: Olle Gustafsson <olle@dalnix.se>\n"
"Language-Team: Swedish (http://www.transifex.com/tonio/modoboa/language/"
@@ -187,7 +187,7 @@ msgstr "Ogiltig gräns"
msgid "You're not allowed to define unlimited values"
msgstr "Du har inte tillåtelse att definiera obegränsat värden"
#: limits/general_callbacks.py:52 limits/general_callbacks.py:65
#: limits/general_callbacks.py:56 limits/general_callbacks.py:69
msgid "Resources"
msgstr "Resurser"
+2 -2
View File
@@ -83,7 +83,7 @@ class DomainLimitsTestCase(lib_tests.ModoTestCase):
self.assertFalse(limit.is_exceeded())
user = User.objects.get(username="admin@test2.com")
values = {
"username": user.username, "role": user.group,
"username": user.username, "role": user.role,
"is_active": user.is_active, "email": user.email,
"quota_act": True, "domains": "test2.com",
"domains_1": "test.com"
@@ -130,7 +130,7 @@ class DomainLimitsTestCase(lib_tests.ModoTestCase):
limit.save()
self.assertFalse(limit.is_exceeded())
values = {
"username": user.username, "role": user.group,
"username": user.username, "role": user.role,
"is_active": user.is_active, "email": user.email,
"quota_act": True,
"aliases": "alias@test.com", "aliases_1": "alias1@test.com"
+10 -10
View File
@@ -162,7 +162,7 @@ class DomainAdminTestCase(ResourceTestCase):
def test_aliases_limit_through_account_form(self):
user = User.objects.get(username='user@test.com')
values = dict(
username=user.username, role=user.group,
username=user.username, role=user.role,
is_active=user.is_active, email=user.email, quota_act=True,
aliases="alias1@test.com", aliases_1="alias2@test.com"
)
@@ -245,12 +245,12 @@ class ResellerTestCase(ResourceTestCase):
self.user.userobjectlimit_set.filter(
name="mailboxes").update(max_value=3)
self._create_account('user1@domain.tld')
user = User.objects.get(username='user1@domain.tld')
self._create_account("user1@domain.tld")
user = User.objects.get(username="user1@domain.tld")
values = {
'username': user.username, 'role': 'DomainAdmins',
'quota_act': True, 'is_active': user.is_active,
'email': user.email
"username": user.username, "role": "DomainAdmins",
"quota_act": True, "is_active": user.is_active,
"email": user.email
}
resp = self.ajax_post(
reverse("admin:account_change", args=[user.id]),
@@ -320,7 +320,7 @@ class ResellerTestCase(ResourceTestCase):
# Give 1 mailbox and 2 aliases to the admin -> should work
values = {
'username': user.username, 'role': user.group, 'quota_act': True,
'username': user.username, 'role': user.role, 'quota_act': True,
'is_active': user.is_active, 'email': user.email,
'mailboxes_limit': 1, 'mailbox_aliases_limit': 2
}
@@ -347,7 +347,7 @@ class ResellerTestCase(ResourceTestCase):
self._create_account('admin1@domain.tld', role='DomainAdmins')
user = User.objects.get(username='admin1@domain.tld')
values = {
'username': user.username, 'role': user.group, 'quota_act': True,
'username': user.username, 'role': user.role, 'quota_act': True,
'is_active': user.is_active, 'email': user.email,
'mailboxes_limit': 1, 'mailbox_aliases_limit': 2
}
@@ -379,7 +379,7 @@ class ResellerTestCase(ResourceTestCase):
# Give 1 mailbox and 2 aliases to the admin -> should work
values = {
'username': user.username, 'role': user.group, 'quota_act': True,
'username': user.username, 'role': user.role, 'quota_act': True,
'is_active': user.is_active, 'email': user.email,
'mailboxes_limit': 1, 'mailbox_aliases_limit': 2
}
@@ -411,7 +411,7 @@ class ResellerTestCase(ResourceTestCase):
# Give 2 mailboxes and 3 aliases to the admin -> should fail.
values = {
'username': user.username, 'role': user.group, 'quota_act': True,
'username': user.username, 'role': user.role, 'quota_act': True,
'is_active': user.is_active, 'email': user.email,
'mailboxes_limit': 2, 'mailbox_aliases_limit': 3
}
+34 -20
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2015-01-06 10:05+0000\n"
"Last-Translator: Miroslav Abrahám <miris@kunago.com>\n"
"Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/"
@@ -434,6 +434,12 @@ msgstr "heslo"
msgid "last login"
msgstr "poslední přihlášení"
#: core/models.py:70
#, fuzzy
#| msgid "Prefered language"
msgid "language"
msgstr "Preferovaný jazyk"
#: core/models.py:73
#, fuzzy
#| msgid "Prefered language to display pages"
@@ -456,32 +462,32 @@ msgstr ""
msgid "You can't delete your own account"
msgstr "Nemůžete smazat vlastní účet"
#: core/models.py:164
#: core/models.py:167
msgid "Failed to update password: LDAP module not installed"
msgstr "Nebylo možné změnit heslo: LDAP modul není instalován"
#: core/models.py:222
#: core/models.py:225
msgid "account"
msgstr "účet"
#: core/models.py:367
#: core/models.py:347
msgid "Unknown"
msgstr ""
#: core/models.py:406
#: core/models.py:386
msgid "Invalid line"
msgstr "Neplatný řádek"
#: core/models.py:414
#: core/models.py:394
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:429
#: core/models.py:409
#, python-format
msgid "The simple user '%s' must have a valid email address"
msgstr "Běžný uživatel '%s' musí mít nastavenou platnou emailovou adresu"
#: core/models.py:434
#: core/models.py:414
#, 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"
@@ -566,8 +572,8 @@ msgid "Active users"
msgstr "Aktivní uživatelé"
#: core/templates/core/information.html:37
msgid "Group name"
msgstr "Název skupiny"
msgid "Role"
msgstr ""
#: core/templates/core/information.html:38
msgid "Last login"
@@ -581,7 +587,7 @@ msgstr "Záznamy"
msgid "Previously on Modoboa..."
msgstr "Dříve v Modoboa..."
#: core/templates/core/logs.html:6
#: core/templates/core/logs.html:6 lib/templatetags/lib_tags.py:103
msgid "Date"
msgstr "Datum"
@@ -653,7 +659,7 @@ msgstr "Odhlásit se"
msgid "API"
msgstr ""
#: core/utils.py:22
#: core/utils.py:34
#, fuzzy
#| msgid "Welcome to Modoboa"
msgid "The core part of Modoboa"
@@ -738,7 +744,19 @@ msgstr "Ne"
msgid "Failed to update password: {}"
msgstr "Nebylo možné změnit heslo: %s"
#: templates/404.html:4 templates/500.html.py:4
#: lib/templatetags/lib_tags.py:103
msgid "From"
msgstr ""
#: lib/templatetags/lib_tags.py:103
msgid "To"
msgstr ""
#: lib/templatetags/lib_tags.py:103 templates/common/email_searchbar.html:17
msgid "Subject"
msgstr "Předmět"
#: templates/404.html:4 templates/500.html:4
msgid "Sorry"
msgstr "Omlouváme se"
@@ -758,10 +776,6 @@ msgstr "Hledat..."
msgid "From address"
msgstr "Z adresy"
#: templates/common/email_searchbar.html:17
msgid "Subject"
msgstr "Předmět"
#: templates/common/email_searchbar.html:33
msgid "Both"
msgstr "Obojí"
@@ -801,8 +815,8 @@ msgstr "Zapamatovat si"
msgid "Log in"
msgstr "Přihlásit"
#~ msgid "Group name"
#~ msgstr "Název skupiny"
#~ msgid "Display"
#~ msgstr "Zobrazení"
#~ msgid "Prefered language"
#~ msgstr "Preferovaný jazyk"
+39 -40
View File
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2015-07-09 14:03+0000\n"
"Last-Translator: controlc.de\n"
"Language-Team: German (http://www.transifex.com/tonio/modoboa/language/de/)\n"
@@ -214,10 +214,8 @@ msgstr ""
"angelegt werden. Nutzen Sie ';', um Gruppen zu separieren."
#: core/app_settings.py:196
#, fuzzy
#| msgid "Group name"
msgid "Group type"
msgstr "Gruppenname"
msgstr "Gruppentyp"
#: core/app_settings.py:200
msgid "The LDAP group type to use with your directory."
@@ -399,16 +397,12 @@ msgid "deleted"
msgstr "entfernt"
#: core/models.py:51
#, fuzzy
#| msgid "Group name"
msgid "First name"
msgstr "Gruppenname"
msgstr "Vorname"
#: core/models.py:53
#, fuzzy
#| msgid "Last login"
msgid "Last name"
msgstr "Letzte Anmeldung"
msgstr "Nachname"
#: core/models.py:60
msgid "Allow mailboxes access"
@@ -426,55 +420,57 @@ msgstr "Passwort"
msgid "last login"
msgstr "Letzte Anmeldung"
#: core/models.py:70
msgid "language"
msgstr "Sprache"
#: core/models.py:73
#, fuzzy
#| msgid "Prefered language to display pages"
msgid "Prefered language to display pages."
msgstr "Bevorzugte Sprache für Seitendarstellung"
#: core/models.py:77
msgid "Phone number"
msgstr ""
msgstr "Telefonnummer"
#: core/models.py:79
msgid "Secondary email"
msgstr ""
msgstr "Alternative Email-Adresse"
#: core/models.py:82
msgid "An alternative e-mail address, can be used for recovery needs."
msgstr ""
msgstr "Eine alternative e-mail Adresse zur Widerherstellung."
#: core/models.py:114
msgid "You can't delete your own account"
msgstr "Sie können Ihr eigenes Konto nicht entfernen"
#: core/models.py:164
#: core/models.py:167
msgid "Failed to update password: LDAP module not installed"
msgstr "Konnte Passwort nicht aktualisieren: LDAP-Modul nicht installiert"
#: core/models.py:222
#: core/models.py:225
msgid "account"
msgstr "Konto"
#: core/models.py:367
#: core/models.py:347
msgid "Unknown"
msgstr ""
msgstr "Unbekannt"
#: core/models.py:406
#: core/models.py:386
msgid "Invalid line"
msgstr "Ungültige Zeile"
#: core/models.py:414
#: core/models.py:394
msgid "You can't import an account with a role greater than yours"
msgstr ""
"Sie können kein Konto mit einer höheren Rolle als Ihrer eigenen importieren"
#: core/models.py:429
#: core/models.py:409
#, python-format
msgid "The simple user '%s' must have a valid email address"
msgstr "Der normale Benutzer '%s' muss eine gültige E-Mail-Adresse besitzen"
#: core/models.py:434
#: core/models.py:414
#, python-format
msgid "username and email fields must not differ for '%s'"
msgstr "Benutzername und E-Mail für '%s' dürfen sich nicht unterscheiden"
@@ -499,11 +495,11 @@ msgstr "Aktualisieren"
#: core/templates/core/dashboard.html:9
#, python-format
msgid "Hello %(user)s."
msgstr ""
msgstr "Hallo %(user)s."
#: core/templates/core/dashboard.html:15
msgid "Latest news"
msgstr ""
msgstr "Neueste Nachrichten"
#: core/templates/core/dashboard.html:29
msgid ""
@@ -555,8 +551,8 @@ msgid "Active users"
msgstr "Aktive Benutzer"
#: core/templates/core/information.html:37
msgid "Group name"
msgstr "Gruppenname"
msgid "Role"
msgstr "Rolle"
#: core/templates/core/information.html:38
msgid "Last login"
@@ -570,7 +566,7 @@ msgstr "Logs"
msgid "Previously on Modoboa..."
msgstr "Vorher auf Modoboa…"
#: core/templates/core/logs.html:6
#: core/templates/core/logs.html:6 lib/templatetags/lib_tags.py:103
msgid "Date"
msgstr "Datum"
@@ -642,7 +638,7 @@ msgstr "Logout"
msgid "API"
msgstr ""
#: core/utils.py:22
#: core/utils.py:34
msgid "The core part of Modoboa"
msgstr "Der Kern von Modoboa"
@@ -721,12 +717,22 @@ msgid "No"
msgstr "Nein"
#: lib/ldap_utils.py:124
#, fuzzy
#| msgid "Failed to update password: %s"
msgid "Failed to update password: {}"
msgstr "Konnte Passwort nicht aktualisieren: %s"
msgstr "Konnte Passwort nicht aktualisieren: {}"
#: templates/404.html:4 templates/500.html.py:4
#: lib/templatetags/lib_tags.py:103
msgid "From"
msgstr "Absender"
#: lib/templatetags/lib_tags.py:103
msgid "To"
msgstr "Empfänger"
#: lib/templatetags/lib_tags.py:103 templates/common/email_searchbar.html:17
msgid "Subject"
msgstr "Betreff"
#: templates/404.html:4 templates/500.html:4
msgid "Sorry"
msgstr "Entschuldigung"
@@ -746,10 +752,6 @@ msgstr "Suchen..."
msgid "From address"
msgstr "Absender-Adresse"
#: templates/common/email_searchbar.html:17
msgid "Subject"
msgstr "Betreff"
#: templates/common/email_searchbar.html:33
msgid "Both"
msgstr "Beide"
@@ -791,6 +793,3 @@ msgstr "Anmelden"
#~ msgid "Display"
#~ msgstr "Darstellung"
#~ msgid "Prefered language"
#~ msgstr "Bevorzugte Sprache"
+28 -16
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\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"
@@ -401,6 +401,10 @@ msgstr ""
msgid "last login"
msgstr ""
#: core/models.py:70
msgid "language"
msgstr ""
#: core/models.py:73
msgid "Prefered language to display pages."
msgstr ""
@@ -421,32 +425,32 @@ msgstr ""
msgid "You can't delete your own account"
msgstr ""
#: core/models.py:164
#: core/models.py:167
msgid "Failed to update password: LDAP module not installed"
msgstr ""
#: core/models.py:222
#: core/models.py:225
msgid "account"
msgstr ""
#: core/models.py:367
#: core/models.py:347
msgid "Unknown"
msgstr ""
#: core/models.py:406
#: core/models.py:386
msgid "Invalid line"
msgstr ""
#: core/models.py:414
#: core/models.py:394
msgid "You can't import an account with a role greater than yours"
msgstr ""
#: core/models.py:429
#: core/models.py:409
#, python-format
msgid "The simple user '%s' must have a valid email address"
msgstr ""
#: core/models.py:434
#: core/models.py:414
#, python-format
msgid "username and email fields must not differ for '%s'"
msgstr ""
@@ -525,7 +529,7 @@ msgid "Active users"
msgstr ""
#: core/templates/core/information.html:37
msgid "Group name"
msgid "Role"
msgstr ""
#: core/templates/core/information.html:38
@@ -540,7 +544,7 @@ msgstr ""
msgid "Previously on Modoboa..."
msgstr ""
#: core/templates/core/logs.html:6
#: core/templates/core/logs.html:6 lib/templatetags/lib_tags.py:103
msgid "Date"
msgstr ""
@@ -610,7 +614,7 @@ msgstr ""
msgid "API"
msgstr ""
#: core/utils.py:22
#: core/utils.py:34
msgid "The core part of Modoboa"
msgstr ""
@@ -686,7 +690,19 @@ msgstr ""
msgid "Failed to update password: {}"
msgstr ""
#: templates/404.html:4 templates/500.html.py:4
#: lib/templatetags/lib_tags.py:103
msgid "From"
msgstr ""
#: lib/templatetags/lib_tags.py:103
msgid "To"
msgstr ""
#: lib/templatetags/lib_tags.py:103 templates/common/email_searchbar.html:17
msgid "Subject"
msgstr ""
#: templates/404.html:4 templates/500.html:4
msgid "Sorry"
msgstr ""
@@ -706,10 +722,6 @@ msgstr ""
msgid "From address"
msgstr ""
#: templates/common/email_searchbar.html:17
msgid "Subject"
msgstr ""
#: templates/common/email_searchbar.html:33
msgid "Both"
msgstr ""
+34 -20
View File
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\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/"
@@ -436,6 +436,12 @@ msgstr "Contraseña"
msgid "last login"
msgstr "Última entrada"
#: core/models.py:70
#, fuzzy
#| msgid "Prefered language"
msgid "language"
msgstr "Idioma preferido"
#: core/models.py:73
#, fuzzy
#| msgid "Prefered language to display pages"
@@ -458,32 +464,32 @@ msgstr ""
msgid "You can't delete your own account"
msgstr "No puede eliminar su propia cuenta"
#: core/models.py:164
#: core/models.py:167
msgid "Failed to update password: LDAP module not installed"
msgstr "Falló al actualizar la contraseña: módulo LDAP no instalado"
#: core/models.py:222
#: core/models.py:225
msgid "account"
msgstr "cuenta"
#: core/models.py:367
#: core/models.py:347
msgid "Unknown"
msgstr ""
#: core/models.py:406
#: core/models.py:386
msgid "Invalid line"
msgstr "Línea inválida"
#: core/models.py:414
#: core/models.py:394
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:429
#: core/models.py:409
#, 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:434
#: core/models.py:414
#, python-format
msgid "username and email fields must not differ for '%s'"
msgstr ""
@@ -568,8 +574,8 @@ msgid "Active users"
msgstr "Usuarios activos"
#: core/templates/core/information.html:37
msgid "Group name"
msgstr "Nombre del grupo"
msgid "Role"
msgstr ""
#: core/templates/core/information.html:38
msgid "Last login"
@@ -583,7 +589,7 @@ msgstr "Logs"
msgid "Previously on Modoboa..."
msgstr "Anteriormente en Modoboa..."
#: core/templates/core/logs.html:6
#: core/templates/core/logs.html:6 lib/templatetags/lib_tags.py:103
msgid "Date"
msgstr "Fecha"
@@ -655,7 +661,7 @@ msgstr "Salir"
msgid "API"
msgstr ""
#: core/utils.py:22
#: core/utils.py:34
#, fuzzy
#| msgid "Welcome to Modoboa"
msgid "The core part of Modoboa"
@@ -741,7 +747,19 @@ msgstr "No "
msgid "Failed to update password: {}"
msgstr "Falló la actualización de la contraseña: %s"
#: templates/404.html:4 templates/500.html.py:4
#: lib/templatetags/lib_tags.py:103
msgid "From"
msgstr ""
#: lib/templatetags/lib_tags.py:103
msgid "To"
msgstr ""
#: lib/templatetags/lib_tags.py:103 templates/common/email_searchbar.html:17
msgid "Subject"
msgstr "Tema"
#: templates/404.html:4 templates/500.html:4
msgid "Sorry"
msgstr "Lo siento"
@@ -761,10 +779,6 @@ msgstr "Buscar..."
msgid "From address"
msgstr "De la dirección"
#: templates/common/email_searchbar.html:17
msgid "Subject"
msgstr "Tema"
#: templates/common/email_searchbar.html:33
msgid "Both"
msgstr "Ambos"
@@ -804,8 +818,8 @@ msgstr "Recuerdame"
msgid "Log in"
msgstr "Entrar"
#~ msgid "Group name"
#~ msgstr "Nombre del grupo"
#~ msgid "Display"
#~ msgstr "Mostrar"
#~ msgid "Prefered language"
#~ msgstr "Idioma preferido"
+30 -18
View File
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"PO-Revision-Date: 2016-09-16 14:04+0000\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2016-10-16 19:46+0000\n"
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>\n"
"Language-Team: French (http://www.transifex.com/tonio/modoboa/language/fr/)\n"
"MIME-Version: 1.0\n"
@@ -402,6 +402,10 @@ msgstr "mot de passe"
msgid "last login"
msgstr "dernière connexion"
#: core/models.py:70
msgid "language"
msgstr "langue"
#: core/models.py:73
msgid "Prefered language to display pages."
msgstr "Langage préféré pour afficher les pages"
@@ -422,32 +426,32 @@ msgstr "Une adresse e-mail alternative ou de secours."
msgid "You can't delete your own account"
msgstr "Vous ne pouvez pas supprimer votre propre compte"
#: core/models.py:164
#: core/models.py:167
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:222
#: core/models.py:225
msgid "account"
msgstr "compte"
#: core/models.py:367
#: core/models.py:347
msgid "Unknown"
msgstr "Inconnu"
#: core/models.py:406
#: core/models.py:386
msgid "Invalid line"
msgstr "Ligne invalide"
#: core/models.py:414
#: core/models.py:394
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:429
#: core/models.py:409
#, 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:434
#: core/models.py:414
#, 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"
@@ -526,8 +530,8 @@ msgid "Active users"
msgstr "Utilisateurs actifs"
#: core/templates/core/information.html:37
msgid "Group name"
msgstr "Nom du groupe"
msgid "Role"
msgstr "Rôle"
#: core/templates/core/information.html:38
msgid "Last login"
@@ -541,7 +545,7 @@ msgstr "Journaux"
msgid "Previously on Modoboa..."
msgstr "Précédemment dans Modoboa..."
#: core/templates/core/logs.html:6
#: core/templates/core/logs.html:6 lib/templatetags/lib_tags.py:103
msgid "Date"
msgstr "Date"
@@ -611,7 +615,7 @@ msgstr "Déconnexion"
msgid "API"
msgstr "API"
#: core/utils.py:22
#: core/utils.py:34
msgid "The core part of Modoboa"
msgstr "Le coeur de Modoboa"
@@ -687,7 +691,19 @@ msgstr "Non"
msgid "Failed to update password: {}"
msgstr "Impossible de mettre à jour le mot de passe : {}"
#: templates/404.html:4 templates/500.html.py:4
#: lib/templatetags/lib_tags.py:103
msgid "From"
msgstr "De"
#: lib/templatetags/lib_tags.py:103
msgid "To"
msgstr "À"
#: lib/templatetags/lib_tags.py:103 templates/common/email_searchbar.html:17
msgid "Subject"
msgstr "Sujet"
#: templates/404.html:4 templates/500.html:4
msgid "Sorry"
msgstr "Désolé"
@@ -707,10 +723,6 @@ msgstr "Chercher..."
msgid "From address"
msgstr "Emetteur"
#: templates/common/email_searchbar.html:17
msgid "Subject"
msgstr "Sujet"
#: templates/common/email_searchbar.html:33
msgid "Both"
msgstr "Tous"
+34 -20
View File
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2015-10-11 11:47+0000\n"
"Last-Translator: Rocco <mors10@hotmail.com>\n"
"Language-Team: Italian (http://www.transifex.com/tonio/modoboa/language/"
@@ -436,6 +436,12 @@ msgstr "password"
msgid "last login"
msgstr "ultimo login"
#: core/models.py:70
#, fuzzy
#| msgid "Prefered language"
msgid "language"
msgstr "Lingua preferita"
#: core/models.py:73
#, fuzzy
#| msgid "Prefered language to display pages"
@@ -458,32 +464,32 @@ msgstr ""
msgid "You can't delete your own account"
msgstr "Non puoi cancellare il tuo account"
#: core/models.py:164
#: core/models.py:167
msgid "Failed to update password: LDAP module not installed"
msgstr "Aggiornamento della password fallito: il modulo LDAP non è installato"
#: core/models.py:222
#: core/models.py:225
msgid "account"
msgstr "account"
#: core/models.py:367
#: core/models.py:347
msgid "Unknown"
msgstr ""
#: core/models.py:406
#: core/models.py:386
msgid "Invalid line"
msgstr "Riga non valida"
#: core/models.py:414
#: core/models.py:394
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:429
#: core/models.py:409
#, 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:434
#: core/models.py:414
#, 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"
@@ -564,8 +570,8 @@ msgid "Active users"
msgstr "Utenti attivi"
#: core/templates/core/information.html:37
msgid "Group name"
msgstr "Nome gruppo"
msgid "Role"
msgstr ""
#: core/templates/core/information.html:38
msgid "Last login"
@@ -579,7 +585,7 @@ msgstr "Log"
msgid "Previously on Modoboa..."
msgstr "Precedentemente su Modoboa ..."
#: core/templates/core/logs.html:6
#: core/templates/core/logs.html:6 lib/templatetags/lib_tags.py:103
msgid "Date"
msgstr "Data"
@@ -651,7 +657,7 @@ msgstr "Esci"
msgid "API"
msgstr ""
#: core/utils.py:22
#: core/utils.py:34
msgid "The core part of Modoboa"
msgstr "Parte centrale di Modoboa"
@@ -733,7 +739,19 @@ msgstr "No"
msgid "Failed to update password: {}"
msgstr "Aggiornamento della password fallito: %s"
#: templates/404.html:4 templates/500.html.py:4
#: lib/templatetags/lib_tags.py:103
msgid "From"
msgstr ""
#: lib/templatetags/lib_tags.py:103
msgid "To"
msgstr ""
#: lib/templatetags/lib_tags.py:103 templates/common/email_searchbar.html:17
msgid "Subject"
msgstr "Oggetto"
#: templates/404.html:4 templates/500.html:4
msgid "Sorry"
msgstr "Dispiace"
@@ -753,10 +771,6 @@ msgstr "Ricerca ..."
msgid "From address"
msgstr "Mittente"
#: templates/common/email_searchbar.html:17
msgid "Subject"
msgstr "Oggetto"
#: templates/common/email_searchbar.html:33
msgid "Both"
msgstr "Entrambi"
@@ -796,8 +810,8 @@ msgstr "Ricordami"
msgid "Log in"
msgstr "Registrati"
#~ msgid "Group name"
#~ msgstr "Nome gruppo"
#~ msgid "Display"
#~ msgstr "Mostra"
#~ msgid "Prefered language"
#~ msgstr "Lingua preferita"
+32 -17
View File
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2016-09-14 17:06+0000\n"
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>\n"
"Language-Team: Japanese (Japan) (http://www.transifex.com/tonio/modoboa/"
@@ -422,6 +422,10 @@ msgstr "パスワード"
msgid "last login"
msgstr "最終ログイン"
#: core/models.py:70
msgid "language"
msgstr ""
#: core/models.py:73
msgid "Prefered language to display pages."
msgstr "ページの表示に優先言語を使う"
@@ -442,35 +446,35 @@ msgstr "別の電子メールアドレスは、回復の必要のために使用
msgid "You can't delete your own account"
msgstr "あなた自身のアカウントは削除できません"
#: core/models.py:164
#: core/models.py:167
msgid "Failed to update password: LDAP module not installed"
msgstr ""
"パスワードの更新に失敗しました : LDAP モジュールがインストールされていませ"
"ん。"
#: core/models.py:222
#: core/models.py:225
msgid "account"
msgstr "アカウント"
#: core/models.py:367
#: core/models.py:347
msgid "Unknown"
msgstr ""
#: core/models.py:406
#: core/models.py:386
msgid "Invalid line"
msgstr "不正な行"
#: core/models.py:414
#: core/models.py:394
msgid "You can't import an account with a role greater than yours"
msgstr "あなた以上のロールを持ったアカウントはインポートできません"
#: core/models.py:429
#: core/models.py:409
#, python-format
msgid "The simple user '%s' must have a valid email address"
msgstr ""
"ユーザー \"%s\" は、正しい電子メールアドレスを持っていなければいけません"
#: core/models.py:434
#: core/models.py:414
#, python-format
msgid "username and email fields must not differ for '%s'"
msgstr "\"%s\" のユーザー名と電子メールフィールドが同一である必要があります。"
@@ -551,8 +555,8 @@ msgid "Active users"
msgstr "アクティブユーザー"
#: core/templates/core/information.html:37
msgid "Group name"
msgstr "グループ名"
msgid "Role"
msgstr ""
#: core/templates/core/information.html:38
msgid "Last login"
@@ -566,7 +570,7 @@ msgstr "ログ"
msgid "Previously on Modoboa..."
msgstr "Modoboa 以前 ..."
#: core/templates/core/logs.html:6
#: core/templates/core/logs.html:6 lib/templatetags/lib_tags.py:103
msgid "Date"
msgstr "日付"
@@ -636,7 +640,7 @@ msgstr "ログアウト"
msgid "API"
msgstr "API"
#: core/utils.py:22
#: core/utils.py:34
msgid "The core part of Modoboa"
msgstr "Modoboaのコア部分"
@@ -712,7 +716,19 @@ msgstr "いいえ"
msgid "Failed to update password: {}"
msgstr "パスワードの更新に失敗しました: {}"
#: templates/404.html:4 templates/500.html.py:4
#: lib/templatetags/lib_tags.py:103
msgid "From"
msgstr ""
#: lib/templatetags/lib_tags.py:103
msgid "To"
msgstr ""
#: lib/templatetags/lib_tags.py:103 templates/common/email_searchbar.html:17
msgid "Subject"
msgstr "件名"
#: templates/404.html:4 templates/500.html:4
msgid "Sorry"
msgstr "すみません"
@@ -732,10 +748,6 @@ msgstr "検索 ..."
msgid "From address"
msgstr "From アドレス"
#: templates/common/email_searchbar.html:17
msgid "Subject"
msgstr "件名"
#: templates/common/email_searchbar.html:33
msgid "Both"
msgstr "両方"
@@ -774,3 +786,6 @@ msgstr "記憶する"
#: templates/registration/login.html:43
msgid "Log in"
msgstr "ログイン"
#~ msgid "Group name"
#~ msgstr "グループ名"
+34 -20
View File
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2014-12-31 11:37+0000\n"
"Last-Translator: TuxBrother <vrijwilligerswerk@wij.rs>\n"
"Language-Team: Dutch (Netherlands) (http://www.transifex.com/projects/p/"
@@ -434,6 +434,12 @@ msgstr "wachtwoord"
msgid "last login"
msgstr "laatste login"
#: core/models.py:70
#, fuzzy
#| msgid "Prefered language"
msgid "language"
msgstr "Voorkeurs taal"
#: core/models.py:73
#, fuzzy
#| msgid "Prefered language to display pages"
@@ -456,32 +462,32 @@ msgstr ""
msgid "You can't delete your own account"
msgstr "U kunt uw eigen account niet verwijderen"
#: core/models.py:164
#: core/models.py:167
msgid "Failed to update password: LDAP module not installed"
msgstr "Mislukt om wachtwoord aan te passen: LDAP module niet geinstalleerd"
#: core/models.py:222
#: core/models.py:225
msgid "account"
msgstr "account"
#: core/models.py:367
#: core/models.py:347
msgid "Unknown"
msgstr ""
#: core/models.py:406
#: core/models.py:386
msgid "Invalid line"
msgstr "Verkeerde regel"
#: core/models.py:414
#: core/models.py:394
msgid "You can't import an account with a role greater than yours"
msgstr "U kunt geen accounts importeren met hogere rechten dan die van uzelf."
#: core/models.py:429
#: core/models.py:409
#, python-format
msgid "The simple user '%s' must have a valid email address"
msgstr "De gebruiker '%s' moet een geldig email adres hebben"
#: core/models.py:434
#: core/models.py:414
#, python-format
msgid "username and email fields must not differ for '%s'"
msgstr "gebruikersnaam en email velden moeten niet verschillen van '%s'"
@@ -566,8 +572,8 @@ msgid "Active users"
msgstr "Actieve gebruikers"
#: core/templates/core/information.html:37
msgid "Group name"
msgstr "Groep naam"
msgid "Role"
msgstr ""
#: core/templates/core/information.html:38
msgid "Last login"
@@ -581,7 +587,7 @@ msgstr "Logs"
msgid "Previously on Modoboa..."
msgstr "Vorige gebeurtenissen op Modoboa..."
#: core/templates/core/logs.html:6
#: core/templates/core/logs.html:6 lib/templatetags/lib_tags.py:103
msgid "Date"
msgstr "Datum"
@@ -653,7 +659,7 @@ msgstr "Uitloggen"
msgid "API"
msgstr ""
#: core/utils.py:22
#: core/utils.py:34
#, fuzzy
#| msgid "Welcome to Modoboa"
msgid "The core part of Modoboa"
@@ -739,7 +745,19 @@ msgstr "Nee"
msgid "Failed to update password: {}"
msgstr "Mislukt om wachtwoord aan te passen: %s"
#: templates/404.html:4 templates/500.html.py:4
#: lib/templatetags/lib_tags.py:103
msgid "From"
msgstr ""
#: lib/templatetags/lib_tags.py:103
msgid "To"
msgstr ""
#: lib/templatetags/lib_tags.py:103 templates/common/email_searchbar.html:17
msgid "Subject"
msgstr "Onderwerp"
#: templates/404.html:4 templates/500.html:4
msgid "Sorry"
msgstr "Sorry"
@@ -759,10 +777,6 @@ msgstr "Zoeken..."
msgid "From address"
msgstr "Van adres"
#: templates/common/email_searchbar.html:17
msgid "Subject"
msgstr "Onderwerp"
#: templates/common/email_searchbar.html:33
msgid "Both"
msgstr "Beiden"
@@ -802,8 +816,8 @@ msgstr "Onthoud mij"
msgid "Log in"
msgstr "Inloggen"
#~ msgid "Group name"
#~ msgstr "Groep naam"
#~ msgid "Display"
#~ msgstr "Weergeven"
#~ msgid "Prefered language"
#~ msgstr "Voorkeurs taal"
+32 -17
View File
@@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2016-05-17 12:26+0000\n"
"Last-Translator: Jose Marcos Araujo <jmaraujo@avancetec.com.br>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/tonio/modoboa/"
@@ -428,6 +428,10 @@ msgstr "senha"
msgid "last login"
msgstr "último login"
#: core/models.py:70
msgid "language"
msgstr ""
#: core/models.py:73
msgid "Prefered language to display pages."
msgstr "Linguagem padrão para visualizar mensagens"
@@ -449,32 +453,32 @@ msgstr ""
msgid "You can't delete your own account"
msgstr "Você não pode deletar sua própria conta"
#: core/models.py:164
#: core/models.py:167
msgid "Failed to update password: LDAP module not installed"
msgstr "Falha ao atualizar senha: módulo LDAP não instalado"
#: core/models.py:222
#: core/models.py:225
msgid "account"
msgstr "conta"
#: core/models.py:367
#: core/models.py:347
msgid "Unknown"
msgstr ""
#: core/models.py:406
#: core/models.py:386
msgid "Invalid line"
msgstr "Linha inválida"
#: core/models.py:414
#: core/models.py:394
msgid "You can't import an account with a role greater than yours"
msgstr "Você não pode importar uma conta com um papel maior que o seu"
#: core/models.py:429
#: core/models.py:409
#, python-format
msgid "The simple user '%s' must have a valid email address"
msgstr "O usuário simples '%s' deve ter um endereço de e-mail válido"
#: core/models.py:434
#: core/models.py:414
#, python-format
msgid "username and email fields must not differ for '%s'"
msgstr "os campos nome de usuário e e-mail não diferem de '%s'"
@@ -554,8 +558,8 @@ msgid "Active users"
msgstr "Usuários ativos"
#: core/templates/core/information.html:37
msgid "Group name"
msgstr "Nome do grupo"
msgid "Role"
msgstr ""
#: core/templates/core/information.html:38
msgid "Last login"
@@ -569,7 +573,7 @@ msgstr "Logs"
msgid "Previously on Modoboa..."
msgstr "Previamente no Modoboa..."
#: core/templates/core/logs.html:6
#: core/templates/core/logs.html:6 lib/templatetags/lib_tags.py:103
msgid "Date"
msgstr "Data"
@@ -639,7 +643,7 @@ msgstr "Sair"
msgid "API"
msgstr "API"
#: core/utils.py:22
#: core/utils.py:34
msgid "The core part of Modoboa"
msgstr "Core do Modoboa"
@@ -715,7 +719,19 @@ msgstr "Não"
msgid "Failed to update password: {}"
msgstr "Falha ao atualizar a senha: {}"
#: templates/404.html:4 templates/500.html.py:4
#: lib/templatetags/lib_tags.py:103
msgid "From"
msgstr ""
#: lib/templatetags/lib_tags.py:103
msgid "To"
msgstr ""
#: lib/templatetags/lib_tags.py:103 templates/common/email_searchbar.html:17
msgid "Subject"
msgstr "Assunto"
#: templates/404.html:4 templates/500.html:4
msgid "Sorry"
msgstr "Desculpe"
@@ -735,10 +751,6 @@ msgstr "Buscar..."
msgid "From address"
msgstr "Do endereço"
#: templates/common/email_searchbar.html:17
msgid "Subject"
msgstr "Assunto"
#: templates/common/email_searchbar.html:33
msgid "Both"
msgstr "Ambos"
@@ -777,3 +789,6 @@ msgstr "Lembrar-me"
#: templates/registration/login.html:43
msgid "Log in"
msgstr "Entrar"
#~ msgid "Group name"
#~ msgstr "Nome do grupo"
+34 -20
View File
@@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2014-12-29 12:51+0000\n"
"Last-Translator: Mike C. <miguelmclara@gmail.com>\n"
"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/"
@@ -435,6 +435,12 @@ msgstr "password"
msgid "last login"
msgstr "último login"
#: core/models.py:70
#, fuzzy
#| msgid "Prefered language"
msgid "language"
msgstr "Idioma preferido"
#: core/models.py:73
#, fuzzy
#| msgid "Prefered language to display pages"
@@ -457,32 +463,32 @@ msgstr ""
msgid "You can't delete your own account"
msgstr "Não pode apagar a sua própria conta"
#: core/models.py:164
#: core/models.py:167
msgid "Failed to update password: LDAP module not installed"
msgstr "Falha ao actualizar password: Modulo LDAP não instalado"
#: core/models.py:222
#: core/models.py:225
msgid "account"
msgstr "conta"
#: core/models.py:367
#: core/models.py:347
msgid "Unknown"
msgstr ""
#: core/models.py:406
#: core/models.py:386
msgid "Invalid line"
msgstr "Linha inválida"
#: core/models.py:414
#: core/models.py:394
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:429
#: core/models.py:409
#, 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:434
#: core/models.py:414
#, python-format
msgid "username and email fields must not differ for '%s'"
msgstr ""
@@ -569,8 +575,8 @@ msgid "Active users"
msgstr "Utilizadores ativos"
#: core/templates/core/information.html:37
msgid "Group name"
msgstr "Nome do grupo"
msgid "Role"
msgstr ""
#: core/templates/core/information.html:38
msgid "Last login"
@@ -584,7 +590,7 @@ msgstr "Logs"
msgid "Previously on Modoboa..."
msgstr "Anteriormente no Modoboa..."
#: core/templates/core/logs.html:6
#: core/templates/core/logs.html:6 lib/templatetags/lib_tags.py:103
msgid "Date"
msgstr "Data"
@@ -656,7 +662,7 @@ msgstr "Sair"
msgid "API"
msgstr ""
#: core/utils.py:22
#: core/utils.py:34
#, fuzzy
#| msgid "Welcome to Modoboa"
msgid "The core part of Modoboa"
@@ -740,7 +746,19 @@ msgstr "Não"
msgid "Failed to update password: {}"
msgstr "Falha ao actualizar a password: %s"
#: templates/404.html:4 templates/500.html.py:4
#: lib/templatetags/lib_tags.py:103
msgid "From"
msgstr ""
#: lib/templatetags/lib_tags.py:103
msgid "To"
msgstr ""
#: lib/templatetags/lib_tags.py:103 templates/common/email_searchbar.html:17
msgid "Subject"
msgstr "Assunto"
#: templates/404.html:4 templates/500.html:4
msgid "Sorry"
msgstr "Lamentamos"
@@ -760,10 +778,6 @@ msgstr "Procurar..."
msgid "From address"
msgstr "Do endereço"
#: templates/common/email_searchbar.html:17
msgid "Subject"
msgstr "Assunto"
#: templates/common/email_searchbar.html:33
msgid "Both"
msgstr "Ambos"
@@ -803,8 +817,8 @@ msgstr "Lembrar-me"
msgid "Log in"
msgstr "Entrar"
#~ msgid "Group name"
#~ msgstr "Nome do grupo"
#~ msgid "Display"
#~ msgstr "Exibir"
#~ msgid "Prefered language"
#~ msgstr "Idioma preferido"
+34 -20
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\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/"
@@ -425,6 +425,12 @@ msgstr ""
msgid "last login"
msgstr ""
#: core/models.py:70
#, fuzzy
#| msgid "Prefered language"
msgid "language"
msgstr "Предпочитаемый язык"
#: core/models.py:73
#, fuzzy
#| msgid "Prefered language to display pages"
@@ -447,32 +453,32 @@ msgstr ""
msgid "You can't delete your own account"
msgstr "Вы не можете удалить собственный аккаунт"
#: core/models.py:164
#: core/models.py:167
msgid "Failed to update password: LDAP module not installed"
msgstr "Ошибка обновления пароля: модуль LDAP не установлен"
#: core/models.py:222
#: core/models.py:225
msgid "account"
msgstr "Аккаунт"
#: core/models.py:367
#: core/models.py:347
msgid "Unknown"
msgstr ""
#: core/models.py:406
#: core/models.py:386
msgid "Invalid line"
msgstr "Ошибочная строка"
#: core/models.py:414
#: core/models.py:394
msgid "You can't import an account with a role greater than yours"
msgstr "Вы не можете импортировать аккаунт с ролью старше чем у вас"
#: core/models.py:429
#: core/models.py:409
#, python-format
msgid "The simple user '%s' must have a valid email address"
msgstr "Пользователь '%s' должен иметь действительный почтовый адрес"
#: core/models.py:434
#: core/models.py:414
#, python-format
msgid "username and email fields must not differ for '%s'"
msgstr "Имя пользователя и адрес не должны отличатся для пользователя '%s'"
@@ -556,8 +562,8 @@ msgid "Active users"
msgstr "Активные пользователи"
#: core/templates/core/information.html:37
msgid "Group name"
msgstr "Название группы"
msgid "Role"
msgstr ""
#: core/templates/core/information.html:38
msgid "Last login"
@@ -571,7 +577,7 @@ msgstr "Логи"
msgid "Previously on Modoboa..."
msgstr "Ранее в Modoboa ..."
#: core/templates/core/logs.html:6
#: core/templates/core/logs.html:6 lib/templatetags/lib_tags.py:103
msgid "Date"
msgstr "Дата"
@@ -643,7 +649,7 @@ msgstr "Завершить сеанс"
msgid "API"
msgstr ""
#: core/utils.py:22
#: core/utils.py:34
#, fuzzy
#| msgid "Welcome to Modoboa"
msgid "The core part of Modoboa"
@@ -727,7 +733,19 @@ msgstr "Нет"
msgid "Failed to update password: {}"
msgstr "Ошибка обновления пароля: %s"
#: templates/404.html:4 templates/500.html.py:4
#: lib/templatetags/lib_tags.py:103
msgid "From"
msgstr ""
#: lib/templatetags/lib_tags.py:103
msgid "To"
msgstr ""
#: lib/templatetags/lib_tags.py:103 templates/common/email_searchbar.html:17
msgid "Subject"
msgstr "Тема"
#: templates/404.html:4 templates/500.html:4
msgid "Sorry"
msgstr "Жаль"
@@ -747,10 +765,6 @@ msgstr "Поиск..."
msgid "From address"
msgstr "Адрес отправителя"
#: templates/common/email_searchbar.html:17
msgid "Subject"
msgstr "Тема"
#: templates/common/email_searchbar.html:33
msgid "Both"
msgstr "Оба"
@@ -790,8 +804,8 @@ msgstr "Запомнить меня"
msgid "Log in"
msgstr "Войти"
#~ msgid "Group name"
#~ msgstr "Название группы"
#~ msgid "Display"
#~ msgstr "Отображение"
#~ msgid "Prefered language"
#~ msgstr "Предпочитаемый язык"
+32 -17
View File
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2016-05-30 18:03+0000\n"
"Last-Translator: Olle Gustafsson <olle@dalnix.se>\n"
"Language-Team: Swedish (http://www.transifex.com/tonio/modoboa/language/"
@@ -424,6 +424,10 @@ msgstr "lösenord"
msgid "last login"
msgstr "senaste inloggning"
#: core/models.py:70
msgid "language"
msgstr ""
#: core/models.py:73
msgid "Prefered language to display pages."
msgstr "Önskat språk för att visa sidor."
@@ -444,32 +448,32 @@ msgstr "En alternativ e-post adress, kan användas för återställningsbehov."
msgid "You can't delete your own account"
msgstr "Du kan inte radera ditt eget konto"
#: core/models.py:164
#: core/models.py:167
msgid "Failed to update password: LDAP module not installed"
msgstr "Misslyckades med att uppdatera lösenord: LDAP modul ej installerad"
#: core/models.py:222
#: core/models.py:225
msgid "account"
msgstr "konto"
#: core/models.py:367
#: core/models.py:347
msgid "Unknown"
msgstr ""
#: core/models.py:406
#: core/models.py:386
msgid "Invalid line"
msgstr "Ogiltig rad"
#: core/models.py:414
#: core/models.py:394
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:429
#: core/models.py:409
#, 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:434
#: core/models.py:414
#, 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'"
@@ -549,8 +553,8 @@ msgid "Active users"
msgstr "Aktiva användare"
#: core/templates/core/information.html:37
msgid "Group name"
msgstr "Gruppnamn"
msgid "Role"
msgstr ""
#: core/templates/core/information.html:38
msgid "Last login"
@@ -564,7 +568,7 @@ msgstr "Loggar"
msgid "Previously on Modoboa..."
msgstr "Tidigare på Modoboa..."
#: core/templates/core/logs.html:6
#: core/templates/core/logs.html:6 lib/templatetags/lib_tags.py:103
msgid "Date"
msgstr "Datum"
@@ -634,7 +638,7 @@ msgstr "Logga ut"
msgid "API"
msgstr "API"
#: core/utils.py:22
#: core/utils.py:34
msgid "The core part of Modoboa"
msgstr "Kärnan av Modoboa"
@@ -710,7 +714,19 @@ msgstr "Nej"
msgid "Failed to update password: {}"
msgstr "Misslyckades med att uppdatera lösenord: {}"
#: templates/404.html:4 templates/500.html.py:4
#: lib/templatetags/lib_tags.py:103
msgid "From"
msgstr ""
#: lib/templatetags/lib_tags.py:103
msgid "To"
msgstr ""
#: lib/templatetags/lib_tags.py:103 templates/common/email_searchbar.html:17
msgid "Subject"
msgstr "Ämne"
#: templates/404.html:4 templates/500.html:4
msgid "Sorry"
msgstr "Ursäkta"
@@ -730,10 +746,6 @@ msgstr "Sök..."
msgid "From address"
msgstr "Från adress"
#: templates/common/email_searchbar.html:17
msgid "Subject"
msgstr "Ämne"
#: templates/common/email_searchbar.html:33
msgid "Both"
msgstr "Båda"
@@ -772,3 +784,6 @@ msgstr "Kom ihåg mig"
#: templates/registration/login.html:43
msgid "Log in"
msgstr "Logga in"
#~ msgid "Group name"
#~ msgstr "Gruppnamn"
+13
View File
@@ -5,9 +5,11 @@ from django.dispatch import receiver
from modoboa.admin import models as admin_models
from modoboa.admin.signals import use_external_recipients
from modoboa.core import signals as core_signals
from modoboa.lib.email_utils import split_mailbox
from . import models
from . import postfix_maps
@receiver(use_external_recipients)
@@ -39,3 +41,14 @@ def clean_domain(sender, instance, **kwargs):
# at form level...
models.RelayDomain.objects.create(
domain=instance, service=models.Service.objects.first())
@receiver(core_signals.register_postfix_maps)
def register_postfix_maps(sender, **kwargs):
"""Register postfix maps."""
return [
postfix_maps.RelayDomainsMap,
postfix_maps.RelayDomainsTransportMap,
postfix_maps.SplitedDomainsTransportMap,
postfix_maps.RelayRecipientVerification
]
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2015-01-06 10:05+0000\n"
"Last-Translator: Miroslav Abrahám <miris@kunago.com>\n"
"Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/"
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2014-12-03 11:02+0000\n"
"Last-Translator: Arvedui <arvedui@posteo.de>\n"
"Language-Team: German (http://www.transifex.com/projects/p/modoboa/language/"
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\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"
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\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/"
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: modoboa-1.1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\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"
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\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"
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2016-06-07 07:27+0000\n"
"Last-Translator: cwatanab <chihiro.watanabe@live.jp>\n"
"Language-Team: Japanese (Japan) (http://www.transifex.com/tonio/modoboa/"
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2014-12-31 11:37+0000\n"
"Last-Translator: TuxBrother <vrijwilligerswerk@wij.rs>\n"
"Language-Team: Dutch (Netherlands) (http://www.transifex.com/projects/p/"
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2014-12-13 09:10+0000\n"
"Last-Translator: Paulino Michelazzo <paulino@michelazzo.com.br>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/"
@@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2014-12-29 12:51+0000\n"
"Last-Translator: Mike C. <miguelmclara@gmail.com>\n"
"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/"
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\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/"
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-16 16:03+0200\n"
"POT-Creation-Date: 2016-10-16 14:31+0200\n"
"PO-Revision-Date: 2015-01-13 15:18+0000\n"
"Last-Translator: Olle Gustafsson <olle@dalnix.se>\n"
"Language-Team: Swedish (http://www.transifex.com/projects/p/modoboa/language/"
-8
View File
@@ -1,7 +1,5 @@
"""Map file definitions for postfix."""
from modoboa.core.commands.postfix_maps import registry
class RelayDomainsMap(object):
@@ -116,9 +114,3 @@ class RelayRecipientVerification(object):
"INNER JOIN admin_domain AS dom ON rdom.domain_id=dom.id "
"WHERE rdom.verify_recipients=1 AND dom.name='%d'"
)
registry.add_files([
RelayDomainsMap, RelayDomainsTransportMap, SplitedDomainsTransportMap,
RelayRecipientVerification
])
+2 -2
View File
@@ -1,8 +1,8 @@
{% load i18n %}
{% load i18n lib_tags %}
{% block emailheaders %}
<div id="emailheaders" class="well">
{% for hdr in headers %}<div class="row">
<div class="header">{{ hdr.name }}</div><div class="value">{{ hdr.value }}</div>
<div class="header">{{ hdr.name|localize_header_name }}</div><div class="value">{{ hdr.value }}</div>
</div>{% endfor %}
{% block extraheaders %}{% endblock %}
</div>
+1 -1
View File
@@ -12,7 +12,7 @@ django-xforwardedfor-middleware
django-passwords==0.3.10
rfc6266
progressbar==2.3
djangorestframework==3.3.1
djangorestframework==3.3.3
django-rest-swagger==0.3.5
django-subcommand2==0.1.1
gevent==1.1.1
+13 -13
View File
@@ -54,24 +54,24 @@ def read(fname):
setup(
name="modoboa",
version='1.6.0',
url='http://modoboa.org/',
license='MIT',
version="1.6.1",
url="http://modoboa.org/",
license="ISC",
description="Mail hosting made simple",
long_description=read('README.rst'),
author='Antoine Nguyen',
author_email='tonio@ngyn.org',
long_description=read("README.rst"),
author="Antoine Nguyen",
author_email="tonio@ngyn.org",
packages=find_packages(),
include_package_data=True,
scripts=["bin/modoboa-admin.py"],
zip_safe=False,
install_requires=parse_requirements(PIP_REQUIRES),
dependency_links=parse_dependency_links(PIP_REQUIRES),
classifiers=['Development Status :: 5 - Production/Stable',
'Framework :: Django',
'Intended Audience :: System Administrators',
'License :: OSI Approved :: MIT License',
'Operating System :: OS Independent',
'Programming Language :: Python',
'Topic :: Internet :: WWW/HTTP']
classifiers=["Development Status :: 5 - Production/Stable",
"Framework :: Django",
"Intended Audience :: System Administrators",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python",
"Topic :: Internet :: WWW/HTTP"]
)
-1
View File
@@ -106,7 +106,6 @@ USE_L10N = False
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.6/howto/static-files/