wip: UI refactoring

* translation files update
* various fixes

see #204
This commit is contained in:
Antoine Nguyen
2012-04-25 16:45:01 +02:00
parent 57572ec19f
commit 14268578ba
33 changed files with 4873 additions and 3746 deletions
+12 -12
View File
@@ -1,34 +1,34 @@
# -*- coding: utf-8 -*-
from modoboa.lib import parameters, events
from django.utils.translation import ugettext as _
from django.utils.translation import ugettext as _, ugettext_lazy
from django.db.utils import DatabaseError
from models import Extension
parameters.register_admin("AUTHENTICATION_TYPE", type="list", deflt="local",
values=[('local', _("Local")),
values=[('local', ugettext_lazy("Local")),
('ldap', "LDAP")],
help=_("The backend used for authentication"))
help=ugettext_lazy("The backend used for authentication"))
parameters.register_admin("CREATE_DIRECTORIES", type="list_yesno", deflt="yes",
help=_("Modoboa will handle mailbox creation on filesystem"))
help=ugettext_lazy("Modoboa will handle mailbox creation on filesystem"))
parameters.register_admin("STORAGE_PATH", type="string", deflt="/var/vmail",
help=_("Path to the root directory where messages are stored"))
help=ugettext_lazy("Path to the root directory where messages are stored"))
parameters.register_admin("VIRTUAL_UID", type="string", deflt="vmail",
help=_("UID of the virtual user which owns domains/mailboxes/messages on the filesystem"))
help=ugettext_lazy("UID of the virtual user which owns domains/mailboxes/messages on the filesystem"))
parameters.register_admin("VIRTUAL_GID", type="string", deflt="vmail",
help=_("GID of the virtual user which owns domains/mailboxes/messages on the filesystem"))
help=ugettext_lazy("GID of the virtual user which owns domains/mailboxes/messages on the filesystem"))
parameters.register_admin("MAILBOX_TYPE", type="list", deflt="maildir",
values=[("maildir", "maildir"), ("mbox", "mbox")],
help=_("Mailboxes storage format"))
help=ugettext_lazy("Mailboxes storage format"))
parameters.register_admin("MAILDIR_ROOT", type="string", deflt=".maildir",
help=_("Sub-directory (inside the mailbox) where messages are stored when using the maildir format"))
help=ugettext_lazy("Sub-directory (inside the mailbox) where messages are stored when using the maildir format"))
parameters.register_admin(
"PASSWORD_SCHEME", type="list", deflt="crypt",
values=[("crypt", "crypt"), ("md5", "md5"), ("sha256", "sha256"), ("clear", "clear")],
help=_("Scheme used to crypt mailbox passwords")
help=ugettext_lazy("Scheme used to crypt mailbox passwords")
)
parameters.register_admin("ITEMS_PER_PAGE", type="int", deflt=30,
help=_("Number of displayed items per page"))
help=ugettext_lazy("Number of displayed items per page"))
def enabled_applications():
"""Return the list of currently enabled extensions
@@ -51,7 +51,7 @@ def enabled_applications():
parameters.register_admin("DEFAULT_TOP_REDIRECTION", type="list", deflt="admin",
app="general",
values=enabled_applications(),
help=_("The default redirection used when no application is specified"))
help=ugettext_lazy("The default redirection used when no application is specified"))
@events.observe("ExtDisabled")
def unset_default_topredirection(extension):
+17 -17
View File
@@ -2,7 +2,7 @@
from django import forms
from django.contrib.auth.models import Group
from modoboa.admin.models import *
from django.utils.translation import ugettext as _, ugettext_noop
from django.utils.translation import ugettext as _, ugettext_lazy
from django.http import QueryDict
from modoboa.admin.templatetags.admin_extras import gender
from modoboa.lib.emailutils import split_mailbox
@@ -12,9 +12,9 @@ from modoboa.lib.permissions import *
class DomainForm(forms.ModelForm, DynamicForm):
aliases = DomainNameField(
label=ugettext_noop("Alias(es)"),
label=ugettext_lazy("Alias(es)"),
required=False,
help_text=ugettext_noop("Alias(es) of this domain")
help_text=ugettext_lazy("Alias(es) of this domain")
)
class Meta:
@@ -102,12 +102,12 @@ class DomainForm(forms.ModelForm, DynamicForm):
class DlistForm(forms.ModelForm, DynamicForm):
email = forms.EmailField(
label=ugettext_noop("Email address"),
help_text=ugettext_noop("")
label=ugettext_lazy("Email address"),
help_text=ugettext_lazy("The distribution list address")
)
recipients = forms.EmailField(
label=ugettext_noop("Recipients"), required=False,
help_text=ugettext_noop("Mailbox(es) this alias will point to")
label=ugettext_lazy("Recipients"), required=False,
help_text=ugettext_lazy("Mailbox(es) this alias will point to")
)
class Meta:
@@ -209,10 +209,10 @@ class ImportDataForm(forms.Form):
return str(self.cleaned_data["sepcar"])
class AccountFormGeneral(forms.ModelForm):
username = forms.CharField(max_length=254)
username = forms.CharField(label=ugettext_lazy("Username"), max_length=254)
role = forms.ChoiceField(
choices=[('', ugettext_noop("Choose"))],
help_text=ugettext_noop("What level of permission this user will have")
choices=[('', ugettext_lazy("Choose"))],
help_text=ugettext_lazy("What level of permission this user will have")
)
class Meta:
@@ -229,7 +229,7 @@ class AccountFormGeneral(forms.ModelForm):
return
self.fields["role"].choices = \
[('', ugettext_noop("Choose"))] + get_account_roles(user)
[('', ugettext_lazy("Choose"))] + get_account_roles(user)
if kwargs.has_key("instance"):
u = kwargs["instance"]
if u.is_superuser:
@@ -263,9 +263,9 @@ class AccountFormGeneral(forms.ModelForm):
class AccountFormGeneralPwd(AccountFormGeneral):
password1 = forms.CharField(label=_("Password"), widget=forms.PasswordInput)
password2 = forms.CharField(
label=ugettext_noop("Confirmation"),
label=ugettext_lazy("Confirmation"),
widget=forms.PasswordInput,
help_text=ugettext_noop("Enter the same password as above, for verification.")
help_text=ugettext_lazy("Enter the same password as above, for verification.")
)
class Meta:
@@ -295,9 +295,9 @@ class AccountFormMail(forms.Form, DynamicForm):
email = forms.EmailField(label=_("E-mail"), required=False)
quota = forms.IntegerField(label=_("Quota"), required=False)
aliases = forms.EmailField(
label=ugettext_noop("Alias(es)"),
label=ugettext_lazy("Alias(es)"),
required=False,
help_text=ugettext_noop("Alias(es) of this mailbox")
help_text=ugettext_lazy("Alias(es) of this mailbox")
)
def __init__(self, *args, **kwargs):
@@ -385,9 +385,9 @@ class AccountFormMail(forms.Form, DynamicForm):
class AccountPermissionsForm(forms.Form, DynamicForm):
domains = DomainNameField(
label=ugettext_noop("Domain(s)"),
label=ugettext_lazy("Domain(s)"),
required=False,
help_text=ugettext_noop("Domain(s) that user administrates")
help_text=ugettext_lazy("Domain(s) that user administrates")
)
def __init__(self, *args, **kwargs):
+22 -22
View File
@@ -3,7 +3,7 @@ from django.db import models, IntegrityError
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic
from django.contrib.auth.models import User as DUser, UserManager, Group
from django.utils.translation import ugettext as _, ugettext_noop
from django.utils.translation import ugettext as _, ugettext_lazy
from django.utils.crypto import constant_time_compare
from django.conf import settings
from modoboa.lib import parameters, events
@@ -375,11 +375,11 @@ class DatesAware(models.Model):
return self.dates.last_modification
class Domain(DatesAware):
name = models.CharField(ugettext_noop('name'), max_length=100, unique=True,
help_text=ugettext_noop("The domain name"))
quota = models.IntegerField(help_text=ugettext_noop("Default quota in MB applied to mailboxes"))
enabled = models.BooleanField(ugettext_noop('enabled'),
help_text=ugettext_noop("Check to activate this domain"))
name = models.CharField(ugettext_lazy('name'), max_length=100, unique=True,
help_text=ugettext_lazy("The domain name"))
quota = models.IntegerField(help_text=ugettext_lazy("Default quota in MB applied to mailboxes"))
enabled = models.BooleanField(ugettext_lazy('enabled'),
help_text=ugettext_lazy("Check to activate this domain"))
owners = generic.GenericRelation(ObjectAccess)
class Meta:
@@ -452,13 +452,13 @@ class Domain(DatesAware):
self.save()
class DomainAlias(DatesAware):
name = models.CharField(ugettext_noop("name"), max_length=100, unique=True,
help_text=ugettext_noop("The alias name"))
target = models.ForeignKey(Domain, verbose_name=ugettext_noop('target'),
help_text=ugettext_noop("The domain this alias points to"))
name = models.CharField(ugettext_lazy("name"), max_length=100, unique=True,
help_text=ugettext_lazy("The alias name"))
target = models.ForeignKey(Domain, verbose_name=ugettext_lazy('target'),
help_text=ugettext_lazy("The domain this alias points to"))
enabled = models.BooleanField(
ugettext_noop('enabled'),
help_text=ugettext_noop("Check to activate this alias")
ugettext_lazy('enabled'),
help_text=ugettext_lazy("Check to activate this alias")
)
class Meta:
@@ -471,8 +471,8 @@ class DomainAlias(DatesAware):
class Mailbox(DatesAware):
address = models.CharField(
ugettext_noop('address'), max_length=100,
help_text=ugettext_noop("Mailbox address (without the @domain.tld part)")
ugettext_lazy('address'), max_length=100,
help_text=ugettext_lazy("Mailbox address (without the @domain.tld part)")
)
quota = models.IntegerField()
uid = models.IntegerField()
@@ -684,17 +684,17 @@ class Mailbox(DatesAware):
class Alias(DatesAware):
address = models.CharField(
ugettext_noop('address'), max_length=254,
help_text=ugettext_noop("The alias address (without the domain part). For a 'catch-all' address, just enter an * character.")
ugettext_lazy('address'), max_length=254,
help_text=ugettext_lazy("The alias address (without the domain part). For a 'catch-all' address, just enter an * character.")
)
domain = models.ForeignKey(Domain)
mboxes = models.ManyToManyField(
Mailbox, verbose_name=ugettext_noop('mailboxes'),
help_text=ugettext_noop("The mailboxes this alias points to")
Mailbox, verbose_name=ugettext_lazy('mailboxes'),
help_text=ugettext_lazy("The mailboxes this alias points to")
)
extmboxes = models.TextField(blank=True)
enabled = models.BooleanField(ugettext_noop('enabled'),
help_text=ugettext_noop("Check to activate this alias"))
enabled = models.BooleanField(ugettext_lazy('enabled'),
help_text=ugettext_lazy("Check to activate this alias"))
class Meta:
permissions = (
@@ -779,8 +779,8 @@ class Alias(DatesAware):
class Extension(models.Model):
name = models.CharField(max_length=150)
enabled = models.BooleanField(
ugettext_noop('enabled'),
help_text=ugettext_noop("Check to enable this extension")
ugettext_lazy('enabled'),
help_text=ugettext_lazy("Check to enable this extension")
)
def init(self):
+4 -4
View File
@@ -1,6 +1,6 @@
from django import template
from django.template.loader import render_to_string
from django.utils.translation import ugettext as _, ugettext_noop
from django.utils.translation import ugettext as _, ugettext_lazy
from django.core.urlresolvers import reverse
from modoboa import admin
from modoboa.lib import events
@@ -9,7 +9,7 @@ from modoboa.lib.webutils import static_url, render_actions
register = template.Library()
genders = {
"Enabled" : (ugettext_noop("enabled_m"), ugettext_noop("enabled_f"))
"Enabled" : (ugettext_lazy("enabled_m"), ugettext_lazy("enabled_f"))
}
@register.simple_tag
@@ -166,7 +166,7 @@ def param(app, definition):
result = """<div class='control-group'>
<label class="param-label" for="%s">%s</label>
<div class="param-controls">""" \
% (name, definition.has_key("label") and _(definition["label"])
% (name, definition.has_key("label") and _(definition["label"])
or definition["name"])
if definition["type"] in ["string", "int"]:
result += """
@@ -197,7 +197,7 @@ def param(app, definition):
if definition.has_key("help"):
result += """
<p class="help-block">%s</p>
""" % definition["help"]
""" % _(definition["help"])
result += """
</div>
</div>
+2 -2
View File
@@ -1,6 +1,6 @@
# coding: utf-8
from modoboa.lib import parameters
from django.utils.translation import ugettext as _
from django.utils.translation import ugettext_lazy
parameters.register_admin("SECRET_KEY", type="string", deflt="abcdefghijklmnop",
help=_("Key used to encrypt/decrypt passwords"))
help=ugettext_lazy("Key used to encrypt/decrypt passwords"))
+1 -1
View File
@@ -1,7 +1,7 @@
# coding: utf-8
from django.conf import settings
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_noop as _
from django.utils.translation import ugettext_lazy as _
from django.template.loader import render_to_string
from modoboa.lib import events
from modoboa.lib.webutils import static_url
+15 -17
View File
@@ -2,9 +2,8 @@
"""
Amavis quarantine manager (SQL based)
"""
from django.utils.translation import ugettext_noop as _, ugettext
from django.utils.translation import ugettext as _, ugettext_lazy
from django.core.urlresolvers import reverse
from django.template import Template, Context
from modoboa.lib import events, parameters
@@ -15,7 +14,7 @@ def infos():
return {
"name" : "Amavis quarantine",
"version" : "1.0",
"description" : ugettext("Simple amavis quarantine management tool"),
"description" : _("Simple amavis quarantine management tool"),
"url" : "quarantine"
}
@@ -53,28 +52,28 @@ def load():
parameters.register_admin("AM_PDP_MODE", type="list",
deflt="unix",
values=[("inet", "inet"), ("unix", "unix")],
help=_("Mode used to access the PDP server"))
help=ugettext_lazy("Mode used to access the PDP server"))
parameters.register_admin("AM_PDP_HOST", type="string",
deflt="localhost",
help=_("PDP server address (if inet mode)"))
help=ugettext_lazy("PDP server address (if inet mode)"))
parameters.register_admin("AM_PDP_PORT", type="int",
deflt=9998,
help=_("PDP server port (if inet mode)"))
help=ugettext_lazy("PDP server port (if inet mode)"))
parameters.register_admin("AM_PDP_SOCKET", type="string",
deflt=_("/var/amavis/amavisd.sock"),
help=_("Path to the PDP server socket (if unix mode)"))
deflt="/var/amavis/amavisd.sock",
help=ugettext_lazy("Path to the PDP server socket (if unix mode)"))
parameters.register_admin("CHECK_REQUESTS_INTERVAL", type="int",
deflt=30,
help=_("Interval between two release requests checks"))
help=ugettext_lazy("Interval between two release requests checks"))
parameters.register_admin("USER_CAN_RELEASE", type="list_yesno", deflt="no",
help=_("Allow users to directly release their messages"))
help=ugettext_lazy("Allow users to directly release their messages"))
parameters.register_admin("SELF_SERVICE", type="list_yesno", deflt="no",
help=_("Activate the 'self-service' mode"))
help=ugettext_lazy("Activate the 'self-service' mode"))
parameters.register_user(
"MESSAGES_PER_PAGE", type="int", deflt=40,
label="Number of displayed emails per page",
help=_("Sets the maximum number of messages displayed in a page")
help=ugettext_lazy("Sets the maximum number of messages displayed in a page")
)
def destroy():
@@ -88,9 +87,8 @@ def menu(target, user):
if target == "top_menu":
return [
{"name" : "quarantine",
"label" : ugettext("Quarantine"),
"url" : reverse('modoboa.extensions.amavis_quarantine.views.index'),
"img" : static_url("pics/quarantine.png")}
"label" : _("Quarantine"),
"url" : reverse('modoboa.extensions.amavis_quarantine.views.index')}
]
return []
@@ -133,7 +131,7 @@ $(document).ready(function() {
success_cb: function(data) {
var $link = $("#nbrequests");
if (data.requests > 0) {
$link.html(data.requests + " " + gettext("pending requests"));
$link.html(data.requests + " " + "{{ text }}");
$link.parent().removeClass('hidden');
} else {
$link.parent().addClass('hidden');
@@ -144,7 +142,7 @@ $(document).ready(function() {
</script>""")
url = reverse("modoboa.extensions.amavis_quarantine.views.nbrequests")
interval = int(parameters.get_admin("CHECK_REQUESTS_INTERVAL")) * 1000
return [tpl.render(Context(dict(url=url, interval=interval)))]
return [tpl.render(Context(dict(url=url, interval=interval, text=_("pending requests"))))]
@events.observe("TopNotifications")
def display_requests(user):
+5 -5
View File
@@ -1,7 +1,7 @@
# coding: utf-8
from datetime import datetime
from django.utils.translation import ugettext as _, ugettext_noop
from django.utils.translation import ugettext as _, ugettext_lazy
from django.db.models import Q
from modoboa.lib import tables
from modoboa.lib.webutils import static_url
@@ -20,10 +20,10 @@ class Qtable(tables.Table):
sortable=False
)
rstatus = tables.ImgColumn("rstatus", width='25px')
from_ = tables.Column("from", label=ugettext_noop("From"), limit=30)
subject = tables.Column("subject", label=ugettext_noop("Subject"), limit=40)
time = tables.Column("date", label=ugettext_noop("Date"))
to = tables.Column("to", label=ugettext_noop("To"), sortable=False)
from_ = tables.Column("from", label=ugettext_lazy("From"), limit=30)
subject = tables.Column("subject", label=ugettext_lazy("Subject"), limit=40)
time = tables.Column("date", label=ugettext_lazy("Date"))
to = tables.Column("to", label=ugettext_lazy("To"), sortable=False)
cols_order = []
+2 -2
View File
@@ -7,7 +7,7 @@ The *limits* extension
from django.contrib.auth.models import Permission, Group
from django.db import IntegrityError
from django.contrib.contenttypes.models import ContentType
from django.utils.translation import ugettext_noop as _, ugettext
from django.utils.translation import ugettext as _
from django.core.urlresolvers import reverse
from modoboa.lib import events
from modoboa.lib.webutils import static_url
@@ -52,7 +52,7 @@ def infos():
return {
"name" : "Limits",
"version" : "1.0",
"description" : ugettext("Limits for objects creation"),
"description" : _("Per administrator resources to limit the number of objects they can create"),
"url" : baseurl
}
+13 -12
View File
@@ -1,24 +1,24 @@
# coding: utf-8
from django import forms
from django.utils.translation import ugettext_noop as _
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import User, Group
from models import *
from lib import *
class ResourcePoolForm(forms.Form):
domain_admins_limit = forms.IntegerField(
ugettext_noop("Max domain admins"),
help_text=ugettext_noop("Maximum number of domain administrators that can be created by this user")
label=ugettext_lazy("Domain admins"),
help_text=ugettext_lazy("Maximum number of domain administrators this user can create")
)
domains_limit = forms.IntegerField(ugettext_noop("Max domains"),
help_text=ugettext_noop("Maximum number of domains that can be created by this user"))
domain_aliases_limit = forms.IntegerField(ugettext_noop("Max domain aliases"),
help_text=ugettext_noop("Maximum number of domain aliases that can be created by this user"))
mailboxes_limit = forms.IntegerField(ugettext_noop("Max mailboxes"),
help_text=ugettext_noop("Maximum number of mailboxes that can be created by this user"))
mailbox_aliases_limit = forms.IntegerField(ugettext_noop("Max mailbox aliases"),
help_text=ugettext_noop("Maximum number of mailbox aliases that can be created by this user"))
domains_limit = forms.IntegerField(label=ugettext_lazy("Domains"),
help_text=ugettext_lazy("Maximum number of domains this user can create"))
domain_aliases_limit = forms.IntegerField(label=ugettext_lazy("Domain aliases"),
help_text=ugettext_lazy("Maximum number of domain aliases this user can create"))
mailboxes_limit = forms.IntegerField(label=ugettext_lazy("Mailboxes"),
help_text=ugettext_lazy("Maximum number of mailboxes this user can create"))
mailbox_aliases_limit = forms.IntegerField(label=ugettext_lazy("Mailbox aliases"),
help_text=ugettext_lazy("Maximum number of mailbox aliases this user can create"))
def __init__(self, *args, **kwargs):
if kwargs.has_key("instance"):
@@ -29,6 +29,7 @@ class ResourcePoolForm(forms.Form):
if self.account.group != "Resellers":
del self.fields["domain_admins_limit"]
del self.fields["domains_limit"]
del self.fields["domain_aliases_limit"]
self.load_from_user(self.account)
def check_limit_value(self, lname):
@@ -57,7 +58,7 @@ class ResourcePoolForm(forms.Form):
def allocate_from_pool(self, limit, pool):
ol = pool.get_limit(limit.name)
if ol.maxvalue == -2:
raise BadLimitValue(_("Your pool is not initialized yet"))
raise BadLimitValue(_("Your resources are not initialized yet"))
newvalue = self.cleaned_data[limit.name]
if newvalue == -1 and ol.maxvalue != -1:
raise BadLimitValue(_("You're not allowed to define unlimited values"))
+1 -1
View File
@@ -20,7 +20,7 @@ class UnsifficientResource(ModoboaException):
self.limit = limit
def __str__(self):
return _("Not enough resource into your pool")
return _("Not enough resources")
class BadLimitValue(ModoboaException):
pass
+6 -6
View File
@@ -2,15 +2,15 @@
from django.db import models
from django.contrib.contenttypes import generic
from django.utils.translation import ugettext as _, ugettext_noop
from django.utils.translation import ugettext as _, ugettext_lazy
from modoboa.admin.models import User
limits_tpl = [
("domain_admins_limit", ugettext_noop("Domain admins")),
("domains_limit", ugettext_noop("Domains")),
("domain_aliases_limit", ugettext_noop("Domain aliases")),
("mailboxes_limit", ugettext_noop("Mailboxes")),
("mailbox_aliases_limit", ugettext_noop("Mailbox aliases"))
("domain_admins_limit", ugettext_lazy("Domain admins")),
("domains_limit", ugettext_lazy("Domains")),
("domain_aliases_limit", ugettext_lazy("Domain aliases")),
("mailboxes_limit", ugettext_lazy("Mailboxes")),
("mailbox_aliases_limit", ugettext_lazy("Mailbox aliases"))
]
class LimitsPool(models.Model):
@@ -1,6 +1,6 @@
{% load i18n libextras %}
<div class="well">
<h6>{% trans "Resource usage" %}</h6>{% for l in limits %}
<h6>{% trans "Resources usage" %}</h6>{% for l in limits %}
<div class="resource">
{{ l.label }} ({{ l }})
<div rel="tooltip" title="{{ l.curvalue }}/{{ l.maxvalue }}" class="progress {% progress_color l.usage %}"><div class="bar" style="width: {{ l }}"></div></div>
+4 -4
View File
@@ -8,7 +8,7 @@ functionality into Postfix.
"""
from django.conf.urls.defaults import include
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_noop as _, ugettext
from django.utils.translation import ugettext as _, ugettext_lazy
from modoboa.lib import events, parameters
from modoboa.lib.webutils import static_url
from models import *
@@ -17,7 +17,7 @@ def infos():
return {
"name" : "Postfix autoreply",
"version" : "1.0",
"description" : ugettext("Auto-reply (vacation) functionality using Postfix"),
"description" : _("Auto-reply (vacation) functionality using Postfix"),
"url" : "postfix_autoreply"
}
@@ -42,7 +42,7 @@ def load():
parameters.register_admin(
"AUTOREPLIES_TIMEOUT",
type="int", deflt=86400,
help=_("Timeout in seconds between two auto-replies to the same recipient")
help=ugettext_lazy("Timeout in seconds between two auto-replies to the same recipient")
)
def destroy():
@@ -65,7 +65,7 @@ def menu(target, user):
return [
{"name" : "autoreply",
"url" : reverse(views.autoreply),
"label" : ugettext("Auto-reply message"),
"label" : ugettext_lazy("Auto-reply message"),
"modal": True,
"modalcb" : "arform_cb"}
]
+9 -9
View File
@@ -1,5 +1,5 @@
# coding: utf-8
from django.utils.translation import ugettext_noop as _, ugettext
from django.utils.translation import ugettext as _, ugettext_lazy
from django.core.urlresolvers import reverse
from modoboa.lib import events, parameters
from modoboa.lib.webutils import static_url
@@ -12,24 +12,24 @@ def load():
parameters.register_admin("SERVER", type="string",
deflt="127.0.0.1",
help=_("Address of your MANAGESIEVE server"))
help=ugettext_lazy("Address of your MANAGESIEVE server"))
parameters.register_admin("PORT", type="int", deflt="2000",
help=_("Listening port of your MANAGESIEVE server"))
help=ugettext_lazy("Listening port of your MANAGESIEVE server"))
parameters.register_admin("STARTTLS", type="list_yesno", deflt="no",
help=_("Use the STARTTLS extension"))
help=ugettext_lazy("Use the STARTTLS extension"))
values = [('AUTO', 'auto')]
for m in SUPPORTED_AUTH_MECHS:
values += [(m, m.lower())]
parameters.register_admin("AUTHENTICATION_MECH", type="list", deflt="auto",
values=values,
help=_("Prefered authentication mechanism"))
help=ugettext_lazy("Prefered authentication mechanism"))
# User parameters
parameters.register_user("EDITOR_MODE", type="list", deflt="raw",
label=_("Editor mode"),
label=ugettext_lazy("Editor mode"),
values=[("raw", "raw"), ("gui", "simplified")],
help=_("Select the mode you want the editor to work in"))
help=ugettext_lazy("Select the mode you want the editor to work in"))
def destroy():
events.unregister("UserMenuDisplay", menu)
@@ -39,7 +39,7 @@ def infos():
return {
"name" : "Sieve filters",
"version" : "1.0",
"description" : ugettext("Plugin to easily create server-side filters"),
"description" : _("Plugin to easily create server-side filters"),
"url" : "sfilters"
}
@@ -53,7 +53,7 @@ def menu(target, user):
return []
return [
{"name" : "sievefilters",
"label" : ugettext("Message filters"),
"label" : _("Message filters"),
"url" : reverse(views.index),
"img" : "icon-check"}
]
+2 -2
View File
@@ -1,6 +1,6 @@
from django import forms
from django.http import QueryDict
from django.utils.translation import ugettext as _, ugettext_noop
from django.utils.translation import ugettext as _, ugettext_lazy
from django.forms.widgets import RadioFieldRenderer, RadioSelect, RadioInput
from django.utils.safestring import mark_safe
from django.utils.html import conditional_escape
@@ -11,7 +11,7 @@ class FiltersSetForm(forms.Form):
name = forms.CharField()
active = forms.BooleanField(label=gender("Active", "m"), required=False,
initial=False,
help_text=ugettext_noop("Check to activate this filters set"))
help_text=ugettext_lazy("Check to activate this filters set"))
class CustomRadioInput(RadioInput):
def __unicode__(self):
+7 -7
View File
@@ -8,7 +8,7 @@ sent, received, bounced, rejected
"""
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_noop as _, ugettext
from django.utils.translation import ugettext as _, ugettext_lazy
from django.conf.urls.defaults import *
from modoboa.lib import events, parameters
from modoboa.lib.webutils import static_url
@@ -17,23 +17,23 @@ def infos():
return {
"name" : "Statistics",
"version" : "1.0",
"description" : ugettext("Graphical statistics about emails traffic using RRDtool"),
"description" : _("Graphical statistics about emails traffic using RRDtool"),
"url" : "stats"
}
def load():
parameters.register_admin("LOGFILE", type="string",
deflt="/var/log/mail.log",
help=_("Path to log file used to collect statistics"))
help=ugettext_lazy("Path to log file used to collect statistics"))
parameters.register_admin("RRD_ROOTDIR", type="string",
deflt="/tmp/modoboa",
help=_("Path to directory where RRD files are stored"))
help=ugettext_lazy("Path to directory where RRD files are stored"))
parameters.register_admin("IMG_ROOTDIR", type="string",
deflt="/tmp/modoboa",
help=_("Path to directory where PNG files are stored"))
help=ugettext_lazy("Path to directory where PNG files are stored"))
parameters.register_admin("GRAPHS_LOCATION", type="string",
deflt="graphs",
help=_("Graphics location (to build URLs)"))
help=ugettext_lazy("Graphics location (to build URLs)"))
def destroy():
events.unregister("AdminMenuDisplay", menu)
@@ -44,6 +44,6 @@ def menu(target, user):
return []
return [
{"name" : "stats",
"label" : ugettext("Statistics"),
"label" : _("Statistics"),
"url" : reverse('fullindex')}
]
+9 -9
View File
@@ -1,5 +1,5 @@
# coding: utf-8
from django.utils.translation import ugettext as _, ugettext_noop
from django.utils.translation import ugettext as _, ugettext_lazy
from modoboa.lib.webutils import _render, _render_to_string, ajax_simple_response
from modoboa.admin.models import Domain, Mailbox
from django.contrib.auth.decorators \
@@ -8,14 +8,14 @@ from modoboa.extensions.stats.grapher import *
from modoboa.lib.exceptions import *
graph_types = ['AVERAGE', 'MAX']
graph_list = [{"name" : "traffic", "label" : ugettext_noop("Average normal traffic")},
{"name" : "badtraffic", "label" : ugettext_noop("Average bad traffic")},
{"name" : "size", "label" : ugettext_noop("Average normal traffic size")}]
periods = [{"name" : "day", "label" : ugettext_noop("Day")},
{"name" : "week", "label" : ugettext_noop("Week")},
{"name" : "month", "label" : ugettext_noop("Month")},
{"name" : "year", "label" : ugettext_noop("Year")},
{"name" : "custom", "label" : ugettext_noop("Custom")}]
graph_list = [{"name" : "traffic", "label" : ugettext_lazy("Average normal traffic")},
{"name" : "badtraffic", "label" : ugettext_lazy("Average bad traffic")},
{"name" : "size", "label" : ugettext_lazy("Average normal traffic size")}]
periods = [{"name" : "day", "label" : ugettext_lazy("Day")},
{"name" : "week", "label" : ugettext_lazy("Week")},
{"name" : "month", "label" : ugettext_lazy("Month")},
{"name" : "year", "label" : ugettext_lazy("Year")},
{"name" : "custom", "label" : ugettext_lazy("Custom")}]
@login_required
@permission_required("admin.view_mailboxes")
+29 -29
View File
@@ -1,5 +1,5 @@
# coding: utf-8
from django.utils.translation import ugettext_noop as _, ugettext
from django.utils.translation import ugettext as _, ugettext_lazy
from django.core.urlresolvers import reverse
from modoboa.lib import events, parameters
from modoboa.lib.webutils import static_url
@@ -9,58 +9,58 @@ def load():
parameters.register_admin("IMAP_SERVER", type="string",
deflt="127.0.0.1",
help=_("Address of your IMAP server"))
help=ugettext_lazy("Address of your IMAP server"))
parameters.register_admin("IMAP_SECURED", type="list_yesno",
deflt="no",
help=_("Use a secured connection to access IMAP server"))
help=ugettext_lazy("Use a secured connection to access IMAP server"))
parameters.register_admin("IMAP_PORT", type="int", deflt="143",
help=_("Listening port of your IMAP server"))
help=ugettext_lazy("Listening port of your IMAP server"))
parameters.register_admin("SMTP_SERVER", type="string",
deflt="127.0.0.1",
help=_("Address of your SMTP server"))
help=ugettext_lazy("Address of your SMTP server"))
parameters.register_admin("SMTP_SECURED_MODE", type="list",
values=[("none", _("None")),
values=[("none", ugettext_lazy("None")),
("starttls", "STARTTLS"),
("ssl", "SSL/TLS")],
deflt="none",
help=_("Use a secured connection to access SMTP server"))
help=ugettext_lazy("Use a secured connection to access SMTP server"))
parameters.register_admin("SMTP_PORT", type="int", deflt="25",
help=_("Listening port of your SMTP server"))
help=ugettext_lazy("Listening port of your SMTP server"))
parameters.register_admin("SMTP_AUTHENTICATION", type="list_yesno",
deflt="no",
help=_("Server needs authentication"))
help=ugettext_lazy("Server needs authentication"))
parameters.register_admin("MAX_ATTACHMENT_SIZE", type="int", deflt=2048,
help=_("Maximum attachment size in bytes (or KB, MB, GB if specified)"))
help=ugettext_lazy("Maximum attachment size in bytes (or KB, MB, GB if specified)"))
parameters.register_user("MESSAGES_PER_PAGE", type="int", deflt=40,
label=_("Number of displayed emails per page"),
help=_("Sets the maximum number of messages displayed in a page"))
label=ugettext_lazy("Number of displayed emails per page"),
help=ugettext_lazy("Sets the maximum number of messages displayed in a page"))
parameters.register_user("REFRESH_INTERVAL", type="int", deflt=300,
label=_("Listing refresh rate"),
help=_("Automatic folder refresh rate (in seconds)"))
label=ugettext_lazy("Listing refresh rate"),
help=ugettext_lazy("Automatic folder refresh rate (in seconds)"))
parameters.register_user("TRASH_FOLDER", type="string", deflt="Trash",
label=_("Trash folder"),
help=_("Folder where deleted messages go"))
label=ugettext_lazy("Trash folder"),
help=ugettext_lazy("Folder where deleted messages go"))
parameters.register_user("SENT_FOLDER", type="string", deflt="Sent",
label=_("Sent folder"),
help=_("Folder where copies of sent messages go"))
label=ugettext_lazy("Sent folder"),
help=ugettext_lazy("Folder where copies of sent messages go"))
parameters.register_user("DRAFTS_FOLDER", type="string", deflt="Drafts",
label=_("Drafts folder"),
help=_("Folder where drafts go"))
label=ugettext_lazy("Drafts folder"),
help=ugettext_lazy("Folder where drafts go"))
parameters.register_user("SIGNATURE", type="text", deflt="",
label=_("Signature text"),
help=_("User defined email signature"))
label=ugettext_lazy("Signature text"),
help=ugettext_lazy("User defined email signature"))
parameters.register_user("EDITOR", type="list", deflt="plain",
label=_("Default editor"),
label=ugettext_lazy("Default editor"),
values=[("html", "html"), ("plain", "text")],
help=_("The default editor to use when composing a message"))
help=ugettext_lazy("The default editor to use when composing a message"))
parameters.register_user("DISPLAYMODE", type="list", deflt="plain",
label=_("Default message display mode"),
label=ugettext_lazy("Default message display mode"),
values=[("html", "html"), ("plain", "text")],
help=_("The default mode used when displaying a message"))
help=ugettext_lazy("The default mode used when displaying a message"))
parameters.register_user("ENABLE_LINKS", type="list_yesno", deflt="no",
label=_("Enable HTML links display"),
help=_("Enable/Disable HTML links display"))
label=ugettext_lazy("Enable HTML links display"),
help=ugettext_lazy("Enable/Disable HTML links display"))
def destroy():
events.unregister("UserMenuDisplay", menu)
@@ -70,7 +70,7 @@ def infos():
return {
"name" : "Webmail",
"version" : "1.0",
"description" : ugettext("Simple IMAP webmail"),
"description" : _("Simple IMAP webmail"),
"url" : "webmail"
}
+1 -1
View File
@@ -1,5 +1,5 @@
from django import forms
from django.utils.translation import ugettext_noop as _
from django.utils.translation import ugettext_lazy as _
class ComposeMailForm(forms.Form):
from_ = forms.CharField(label=_("From"))
+4 -4
View File
@@ -8,7 +8,7 @@ import email
import lxml
from django.core.files.uploadhandler import FileUploadHandler, StopUpload, SkipFile
from django.http import HttpResponse
from django.utils.translation import ugettext as _, ugettext_noop as __
from django.utils.translation import ugettext as _, ugettext_lazy
from django.conf import settings
from modoboa.lib import u2u_decode, tables, imap_utf7, parameters
from modoboa.lib.webutils import static_url, size2integer
@@ -30,9 +30,9 @@ class WMtable(tables.Table):
)
flags = tables.ImgColumn("flags", width="4%")
withatts = tables.ImgColumn("withatts", width="2%")
subject = tables.Column("subject", label=__("Subject"), width="50%", limit=60)
from_ = tables.Column("from", width="20%", label=__("From"), limit=30)
date = tables.Column("date", width="10%", label=__("Date"))
subject = tables.Column("subject", label=ugettext_lazy("Subject"), width="50%", limit=60)
from_ = tables.Column("from", width="20%", label=ugettext_lazy("From"), limit=30)
date = tables.Column("date", width="10%", label=ugettext_lazy("Date"))
cols_order = ["select", "withatts", "flags", "subject", "from_", "date"]
+1 -2
View File
@@ -32,5 +32,4 @@ class CommonExceptionCatcher(object):
if not request.is_ajax():
return _render_error(request, user_context=dict(error=str(exception)))
return ajax_response(request, status="ko", respmsg=str(exception),
norefresh=True)
return ajax_response(request, status="ko", respmsg=unicode(exception), norefresh=True)
File diff suppressed because it is too large Load Diff
+66 -45
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Modoboa-0.8.8\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-01-10 11:09+0100\n"
"POT-Creation-Date: 2012-04-25 14:47+0200\n"
"PO-Revision-Date: 2012-01-10 22:49+0100\n"
"Last-Translator: Patrick Ben Koetter <p@state-of-mind.de>\n"
"Language-Team: DE <p@state-of-mind.fr>\n"
@@ -17,31 +17,41 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: extensions/amavis_quarantine/static/js/quarantine.js:41
msgid "Delete this message?"
msgstr "Diese Nachricht löschen?"
#: extensions/amavis_quarantine/static/js/quarantine.js:49
msgid "Release this message?"
msgstr "Diese Nachricht freilassen?"
#: extensions/amavis_quarantine/static/js/quarantine.js:107
#: extensions/amavis_quarantine/static/js/quarantine.js:126
msgid "Release this selection?"
msgstr "Diese Auswahl freilassen?"
#: extensions/amavis_quarantine/static/js/quarantine.js:114
#: extensions/amavis_quarantine/static/js/quarantine.js:130
msgid "Delete this selection?"
msgstr "Diese Auswahl löschen?"
#: extensions/amavis_quarantine/static/js/quarantine.js:148
#: extensions/amavis_quarantine/static/js/selfservice.js:22
msgid "Release this message?"
msgstr "Diese Nachricht freilassen?"
#: extensions/amavis_quarantine/static/js/quarantine.js:152
#: extensions/amavis_quarantine/static/js/selfservice.js:26
msgid "Delete this message?"
msgstr "Diese Nachricht löschen?"
#: extensions/amavis_quarantine/static/js/quarantine.js:169
msgid "View full headers"
msgstr ""
#: extensions/amavis_quarantine/static/js/quarantine.js:174
msgid "Hide full headers"
msgstr ""
#: extensions/sievefilters/static/js/lib.js:14
msgid "Remove this filter?"
msgstr "Diesen Filter entfernen?"
#: extensions/sievefilters/static/js/lib.js:116
#: extensions/sievefilters/static/js/lib.js:117
msgid "Save changes?"
msgstr "Änderungen speichern?"
#: extensions/sievefilters/static/js/lib.js:143
#: extensions/sievefilters/static/js/lib.js:144
msgid "Remove filters set?"
msgstr "Diesen Filter entfernen?"
@@ -50,52 +60,63 @@ msgid "Activate this filters set?"
msgstr "Diesen Filter aktivieren?"
#: extensions/sievefilters/static/js/lib.js:169
#: extensions/sievefilters/static/js/lib.js:224
msgid "active"
msgstr "aktiv"
#: extensions/webmail/static/js/fdmenu.js:31
msgid "Edit folder"
msgstr "Ordner bearbeiten"
#: extensions/stats/static/js/stats.js:28
msgid "Search a domain"
msgstr ""
#: extensions/webmail/static/js/fdmenu.js:63
msgid "Folder deleted"
msgstr "Ordner gelöscht"
#: extensions/webmail/static/js/webmail.js:499
#, fuzzy
msgid "Remove the selected mailbox?"
msgstr "Diese Auswahl entfernen?"
#: extensions/webmail/static/js/webmail.js:95
msgid "Sending..."
msgstr "Sende …"
#: extensions/webmail/static/js/webmail.js:513
msgid "Mailbox removed"
msgstr ""
#: extensions/webmail/static/js/webmail.js:229
#: extensions/webmail/static/js/webmail.js:254
#: static/js/anchor_nav.js:215
msgid "Done"
msgstr "Abgeschlossen"
#: static/js/admin.js:17
msgid "No domain administrator defined"
msgstr ""
#: extensions/webmail/static/js/webmail.js:243
msgid "Waiting..."
msgstr "Warte..."
#: static/js/confirmation.js:45
msgid "Cancel"
msgstr ""
#: static/js/anchor_nav.js:10
#: static/js/confirmation.js:84 static/js/history.js:229
msgid "Internal Error"
msgstr ""
#: static/js/history.js:10
msgid "Loading..."
msgstr "Lade..."
#: static/js/common.js:17
msgid "Message sent"
msgstr "Nachrichten gesendet"
#: static/js/common.js:188
#: static/js/searchbar.js:20
msgid "Search..."
msgstr "Suchen..."
#: static/js/domains.js:61
msgid "Remove this selection?"
msgstr "Diese Auswahl entfernen?"
#~ msgid "Edit folder"
#~ msgstr "Ordner bearbeiten"
#: static/js/preferences.js:14
msgid "Preferences saved"
msgstr "Einstellungen gespeichert"
#~ msgid "Folder deleted"
#~ msgstr "Ordner gelöscht"
#: static/js/settings.js:14
msgid "Parameters saved"
msgstr "Parameter gespeichert"
#~ msgid "Sending..."
#~ msgstr "Sende …"
#~ msgid "Done"
#~ msgstr "Abgeschlossen"
#~ msgid "Waiting..."
#~ msgstr "Warte..."
#~ msgid "Message sent"
#~ msgstr "Nachrichten gesendet"
#~ msgid "Preferences saved"
#~ msgstr "Einstellungen gespeichert"
#~ msgid "Parameters saved"
#~ msgstr "Parameter gespeichert"
File diff suppressed because it is too large Load Diff
+40 -42
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-01-10 11:09+0100\n"
"POT-Creation-Date: 2012-04-25 14:47+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"
@@ -17,31 +17,41 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: extensions/amavis_quarantine/static/js/quarantine.js:41
msgid "Delete this message?"
msgstr ""
#: extensions/amavis_quarantine/static/js/quarantine.js:49
msgid "Release this message?"
msgstr ""
#: extensions/amavis_quarantine/static/js/quarantine.js:107
#: extensions/amavis_quarantine/static/js/quarantine.js:126
msgid "Release this selection?"
msgstr ""
#: extensions/amavis_quarantine/static/js/quarantine.js:114
#: extensions/amavis_quarantine/static/js/quarantine.js:130
msgid "Delete this selection?"
msgstr ""
#: extensions/amavis_quarantine/static/js/quarantine.js:148
#: extensions/amavis_quarantine/static/js/selfservice.js:22
msgid "Release this message?"
msgstr ""
#: extensions/amavis_quarantine/static/js/quarantine.js:152
#: extensions/amavis_quarantine/static/js/selfservice.js:26
msgid "Delete this message?"
msgstr ""
#: extensions/amavis_quarantine/static/js/quarantine.js:169
msgid "View full headers"
msgstr ""
#: extensions/amavis_quarantine/static/js/quarantine.js:174
msgid "Hide full headers"
msgstr ""
#: extensions/sievefilters/static/js/lib.js:14
msgid "Remove this filter?"
msgstr ""
#: extensions/sievefilters/static/js/lib.js:116
#: extensions/sievefilters/static/js/lib.js:117
msgid "Save changes?"
msgstr ""
#: extensions/sievefilters/static/js/lib.js:143
#: extensions/sievefilters/static/js/lib.js:144
msgid "Remove filters set?"
msgstr ""
@@ -50,50 +60,38 @@ msgid "Activate this filters set?"
msgstr ""
#: extensions/sievefilters/static/js/lib.js:169
#: extensions/sievefilters/static/js/lib.js:224
msgid "active"
msgstr ""
#: extensions/webmail/static/js/fdmenu.js:31
msgid "Edit folder"
#: extensions/stats/static/js/stats.js:28
msgid "Search a domain"
msgstr ""
#: extensions/webmail/static/js/fdmenu.js:63
msgid "Folder deleted"
#: extensions/webmail/static/js/webmail.js:499
msgid "Remove the selected mailbox?"
msgstr ""
#: extensions/webmail/static/js/webmail.js:95
msgid "Sending..."
#: extensions/webmail/static/js/webmail.js:513
msgid "Mailbox removed"
msgstr ""
#: extensions/webmail/static/js/webmail.js:229
#: extensions/webmail/static/js/webmail.js:254 static/js/anchor_nav.js:215
msgid "Done"
#: static/js/admin.js:17
msgid "No domain administrator defined"
msgstr ""
#: extensions/webmail/static/js/webmail.js:243
msgid "Waiting..."
#: static/js/confirmation.js:45
msgid "Cancel"
msgstr ""
#: static/js/anchor_nav.js:10
#: static/js/confirmation.js:84 static/js/history.js:229
msgid "Internal Error"
msgstr ""
#: static/js/history.js:10
msgid "Loading..."
msgstr ""
#: static/js/common.js:17
msgid "Message sent"
msgstr ""
#: static/js/common.js:188
#: static/js/searchbar.js:20
msgid "Search..."
msgstr ""
#: static/js/domains.js:61
msgid "Remove this selection?"
msgstr ""
#: static/js/preferences.js:14
msgid "Preferences saved"
msgstr ""
#: static/js/settings.js:14
msgid "Parameters saved"
msgstr ""
File diff suppressed because it is too large Load Diff
+65 -47
View File
@@ -1,49 +1,59 @@
# Modoboa spanish translation.
# Copyright (C) 2012
# This file is distributed under the same license as the Modoboa package.
#
#
# Translators:
# Pedro Gracia <lasarux@neuroomante.com>, 2011.
# Pedro Gracia <pedro.gracia@impulzia.com>, 2010, 2011.
msgid ""
msgstr ""
"Project-Id-Version: Modoboa-0.8.8\n"
"Report-Msgid-Bugs-To: http://dev.modoboa.org/\n"
"POT-Creation-Date: 2012-01-10 11:09+0100\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-04-25 14:47+0200\n"
"PO-Revision-Date: 2012-01-10 10:34+0000\n"
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>\n"
"Language-Team: ES <LL@li.org>\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: extensions/amavis_quarantine/static/js/quarantine.js:41
msgid "Delete this message?"
msgstr "¿Eliminar este mensaje?"
#: extensions/amavis_quarantine/static/js/quarantine.js:49
msgid "Release this message?"
msgstr "¿Publicar este mensaje?"
#: extensions/amavis_quarantine/static/js/quarantine.js:107
#: extensions/amavis_quarantine/static/js/quarantine.js:126
msgid "Release this selection?"
msgstr "¿Publicar esta selección?"
#: extensions/amavis_quarantine/static/js/quarantine.js:114
#: extensions/amavis_quarantine/static/js/quarantine.js:130
msgid "Delete this selection?"
msgstr "¿Eliminar esta selección?"
#: extensions/amavis_quarantine/static/js/quarantine.js:148
#: extensions/amavis_quarantine/static/js/selfservice.js:22
msgid "Release this message?"
msgstr "¿Publicar este mensaje?"
#: extensions/amavis_quarantine/static/js/quarantine.js:152
#: extensions/amavis_quarantine/static/js/selfservice.js:26
msgid "Delete this message?"
msgstr "¿Eliminar este mensaje?"
#: extensions/amavis_quarantine/static/js/quarantine.js:169
msgid "View full headers"
msgstr ""
#: extensions/amavis_quarantine/static/js/quarantine.js:174
msgid "Hide full headers"
msgstr ""
#: extensions/sievefilters/static/js/lib.js:14
msgid "Remove this filter?"
msgstr "¿Eliminar este filtro?"
#: extensions/sievefilters/static/js/lib.js:116
#: extensions/sievefilters/static/js/lib.js:117
msgid "Save changes?"
msgstr "¿Guardar cambios?"
#: extensions/sievefilters/static/js/lib.js:143
#: extensions/sievefilters/static/js/lib.js:144
msgid "Remove filters set?"
msgstr "¿Eliminar este conjunto de filtros?"
@@ -52,52 +62,60 @@ msgid "Activate this filters set?"
msgstr "¿Activar este conjunto de filtros?"
#: extensions/sievefilters/static/js/lib.js:169
#: extensions/sievefilters/static/js/lib.js:224
msgid "active"
msgstr "Activar"
#: extensions/webmail/static/js/fdmenu.js:31
msgid "Edit folder"
msgstr "Editar carpeta"
#: extensions/stats/static/js/stats.js:28
msgid "Search a domain"
msgstr ""
#: extensions/webmail/static/js/fdmenu.js:63
msgid "Folder deleted"
msgstr "Carpeta eliminada"
#: extensions/webmail/static/js/webmail.js:499
#, fuzzy
msgid "Remove the selected mailbox?"
msgstr "¿Publicar esta selección?"
#: extensions/webmail/static/js/webmail.js:95
msgid "Sending..."
msgstr "Enviando..."
#: extensions/webmail/static/js/webmail.js:513
msgid "Mailbox removed"
msgstr ""
#: extensions/webmail/static/js/webmail.js:229
#: extensions/webmail/static/js/webmail.js:254 static/js/anchor_nav.js:215
msgid "Done"
msgstr "Hecho"
#: static/js/admin.js:17
msgid "No domain administrator defined"
msgstr ""
#: extensions/webmail/static/js/webmail.js:243
msgid "Waiting..."
msgstr "Esperando..."
#: static/js/confirmation.js:45
msgid "Cancel"
msgstr ""
#: static/js/anchor_nav.js:10
#: static/js/confirmation.js:84 static/js/history.js:229
msgid "Internal Error"
msgstr ""
#: static/js/history.js:10
msgid "Loading..."
msgstr "Cargando..."
#: static/js/common.js:17
msgid "Message sent"
msgstr ""
#: static/js/common.js:188
#: static/js/searchbar.js:20
msgid "Search..."
msgstr "Buscar..."
#: static/js/domains.js:61
msgid "Remove this selection?"
msgstr ""
#~ msgid "Edit folder"
#~ msgstr "Editar carpeta"
#: static/js/preferences.js:14
msgid "Preferences saved"
msgstr "Preferencias guardas"
#~ msgid "Folder deleted"
#~ msgstr "Carpeta eliminada"
#: static/js/settings.js:14
msgid "Parameters saved"
msgstr "Parámetros guardados"
#~ msgid "Sending..."
#~ msgstr "Enviando..."
#~ msgid "Done"
#~ msgstr "Hecho"
#~ msgid "Waiting..."
#~ msgstr "Esperando..."
#~ msgid "Preferences saved"
#~ msgstr "Preferencias guardas"
#~ msgid "Parameters saved"
#~ msgstr "Parámetros guardados"
File diff suppressed because it is too large Load Diff
+49 -51
View File
@@ -1,13 +1,13 @@
# Modoboa french translation
# Copyright (C) 2009-2011
# Copyright (C) 2009-2012
# This file is distributed under the same license as the Modoboa package.
# Antoine Nguyen <tonio@ngyn.org>, 2009-2011.
# Antoine Nguyen <tonio@ngyn.org>, 2009-2012.
#
msgid ""
msgstr ""
"Project-Id-Version: modoboa-0.8.8\n"
"Project-Id-Version: modoboa-0.9\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-01-10 11:09+0100\n"
"POT-Creation-Date: 2012-04-25 14:47+0200\n"
"PO-Revision-Date: 2011-01-07 10:00+0100\n"
"Last-Translator: Antoine Nguyen <tonio@ngyn.org>\n"
"Language-Team: FR <tonio@ngyn.org>\n"
@@ -16,31 +16,41 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: extensions/amavis_quarantine/static/js/quarantine.js:41
msgid "Delete this message?"
msgstr "Supprimer ce message?"
#: extensions/amavis_quarantine/static/js/quarantine.js:49
msgid "Release this message?"
msgstr "Relâcher cette message?"
#: extensions/amavis_quarantine/static/js/quarantine.js:107
#: extensions/amavis_quarantine/static/js/quarantine.js:126
msgid "Release this selection?"
msgstr "Relâcher cette sélection?"
#: extensions/amavis_quarantine/static/js/quarantine.js:114
#: extensions/amavis_quarantine/static/js/quarantine.js:130
msgid "Delete this selection?"
msgstr "Supprimer cette sélection?"
#: extensions/amavis_quarantine/static/js/quarantine.js:148
#: extensions/amavis_quarantine/static/js/selfservice.js:22
msgid "Release this message?"
msgstr "Relâcher cette message?"
#: extensions/amavis_quarantine/static/js/quarantine.js:152
#: extensions/amavis_quarantine/static/js/selfservice.js:26
msgid "Delete this message?"
msgstr "Supprimer ce message?"
#: extensions/amavis_quarantine/static/js/quarantine.js:169
msgid "View full headers"
msgstr "Voir les entêtes complets"
#: extensions/amavis_quarantine/static/js/quarantine.js:174
msgid "Hide full headers"
msgstr "Cacher les entêtes complets"
#: extensions/sievefilters/static/js/lib.js:14
msgid "Remove this filter?"
msgstr "Supprimer ce filtre?"
#: extensions/sievefilters/static/js/lib.js:116
#: extensions/sievefilters/static/js/lib.js:117
msgid "Save changes?"
msgstr "Sauvegarder les changements?"
msgstr "Enregistrer les changements?"
#: extensions/sievefilters/static/js/lib.js:143
#: extensions/sievefilters/static/js/lib.js:144
msgid "Remove filters set?"
msgstr "Supprimer ce jeu de filtres?"
@@ -49,50 +59,38 @@ msgid "Activate this filters set?"
msgstr "Activer ce jeu de filtres?"
#: extensions/sievefilters/static/js/lib.js:169
#: extensions/sievefilters/static/js/lib.js:224
msgid "active"
msgstr "actif"
#: extensions/webmail/static/js/fdmenu.js:31
msgid "Edit folder"
msgstr "Editer le dossier"
#: extensions/stats/static/js/stats.js:28
msgid "Search a domain"
msgstr "Checher un domaine"
#: extensions/webmail/static/js/fdmenu.js:63
msgid "Folder deleted"
msgstr "Dossier supprimé"
#: extensions/webmail/static/js/webmail.js:499
msgid "Remove the selected mailbox?"
msgstr "Supprimer la boite sélectionnée?"
#: extensions/webmail/static/js/webmail.js:95
msgid "Sending..."
msgstr "Envoi..."
#: extensions/webmail/static/js/webmail.js:513
msgid "Mailbox removed"
msgstr "Boite aux lettres supprimées"
#: extensions/webmail/static/js/webmail.js:229
#: extensions/webmail/static/js/webmail.js:254 static/js/anchor_nav.js:215
msgid "Done"
msgstr "Effectué"
#: static/js/admin.js:17
msgid "No domain administrator defined"
msgstr "Aucun administrateur de domaine défini"
#: extensions/webmail/static/js/webmail.js:243
msgid "Waiting..."
msgstr "En attente..."
#: static/js/confirmation.js:45
msgid "Cancel"
msgstr "Annuler"
#: static/js/anchor_nav.js:10
#: static/js/confirmation.js:84 static/js/history.js:229
msgid "Internal Error"
msgstr "Erreur interne"
#: static/js/history.js:10
msgid "Loading..."
msgstr "Chargement..."
#: static/js/common.js:17
msgid "Message sent"
msgstr "Message envoyé"
#: static/js/common.js:188
#: static/js/searchbar.js:20
msgid "Search..."
msgstr "Chercher..."
#: static/js/domains.js:61
msgid "Remove this selection?"
msgstr "Supprimer cette sélection?"
#: static/js/preferences.js:14
msgid "Preferences saved"
msgstr "Préférences enregistrées"
#: static/js/settings.js:14
msgid "Parameters saved"
msgstr "Paramètres enregistrés"
+2 -3
View File
@@ -1,5 +1,4 @@
{% extends "admin/header.html" %}
{% load admin_extras libextras %}
{% extends "admin/header.html" %}{% load i18n admin_extras libextras %}
{% block html_head %}
{{ block.super }}
<script type="text/javascript" src="{{ MEDIA_URL }}js/dynamic_input.js"></script>
@@ -10,7 +9,7 @@ $(document).ready(function() {
}).blur(function() {
var $this = $(this);
if ($this.attr("value") == "") {
$this.attr("value", {% if squery %}"{{ squery }}"{% else %}gettext("Search"){% endif %});
$this.attr("value", {% if squery %}"{{ squery }}"{% else %}"{% trans 'Search' %}"{% endif %});
}
});
});
+3 -3
View File
@@ -1,13 +1,13 @@
# coding: utf-8
from modoboa.lib import parameters, events
from django.utils.translation import ugettext_noop as _
from django.utils.translation import ugettext_lazy
parameters.register_user("LANG", type="list", deflt="en",
label=_("Prefered language"),
label=ugettext_lazy("Prefered language"),
values=[("de", "deutsch"), ("en", "english"),
("es", "español"), ("fr", "français")],
help=_("Prefered language to display pages"),
help=ugettext_lazy("Prefered language to display pages"),
app="general")
@events.observe("GetStaticContent")
+4 -2
View File
@@ -22,8 +22,10 @@ def index(request):
def changepassword(request, tplname="common/generic_modal_form.html"):
res = events.raiseQueryEvent("PasswordChange", request.user)
if True in res:
ctx = dict(error=_("Password change is disabled for this user"))
return _render_error(request, user_context=ctx)
from modoboa.lib.exceptions import ModoboaException
raise ModoboaException(_("Password change is disabled for this user"))
# ctx = dict(error=_("Password change is disabled for this user"))
# return _render_error(request, user_context=ctx)
ctx = dict(
title=_("Change password"),