diff options
Diffstat (limited to 'budget')
27 files changed, 1037 insertions, 108 deletions
diff --git a/budget/babel.cfg b/budget/babel.cfg new file mode 100644 index 0000000..f0234b3 --- /dev/null +++ b/budget/babel.cfg @@ -0,0 +1,3 @@ +[python: **.py] +[jinja2: **/templates/**.html] +extensions=jinja2.ext.autoescape,jinja2.ext.with_ diff --git a/budget/forms.py b/budget/forms.py index 862cbc6..046323a 100644 --- a/budget/forms.py +++ b/budget/forms.py @@ -1,4 +1,5 @@ from flaskext.wtf import * +from flaskext.babel import gettext as _ from flask import request from wtforms.widgets import html_params @@ -40,10 +41,10 @@ def get_billform_for(project, set_default=True, **kwargs): class EditProjectForm(Form): - name = TextField("Project name", validators=[Required()]) - password = TextField("Private code", validators=[Required()]) - contact_email = TextField("Email", validators=[Required(), Email()]) - submit = SubmitField("Edit the project") + name = TextField(_("Project name"), validators=[Required()]) + password = TextField(_("Private code"), validators=[Required()]) + contact_email = TextField(_("Email"), validators=[Required(), Email()]) + submit = SubmitField(_("Edit the project")) def save(self): """Create a new project with the information given by this form. @@ -65,46 +66,39 @@ class EditProjectForm(Form): class ProjectForm(EditProjectForm): - id = TextField("Project identifier", validators=[Required()]) - password = PasswordField("Private code", validators=[Required()]) - submit = SubmitField("Create the project") + id = TextField(_("Project identifier"), validators=[Required()]) + password = PasswordField(_("Private code"), validators=[Required()]) + submit = SubmitField(_("Create the project")) def validate_id(form, field): form.id.data = slugify(field.data) if Project.query.get(form.id.data): - raise ValidationError(Markup("""The project identifier is used - to log in and for the URL of the project. - We tried to generate an identifier for you but - a project with this identifier already exists. - Please create a new identifier you will be able - to remember. - """)) + raise ValidationError(Markup(_("The project identifier is used to log in and for the URL of the project. We tried to generate an identifier for you but a project with this identifier already exists. Please create a new identifier you will be able to remember."))) class AuthenticationForm(Form): - id = TextField("Project identifier", validators=[Required()]) - password = PasswordField("Private code", validators=[Required()]) - submit = SubmitField("Get in") + id = TextField(_("Project identifier"), validators=[Required()]) + password = PasswordField(_("Private code"), validators=[Required()]) + submit = SubmitField(_("Get in")) class PasswordReminder(Form): - id = TextField("Project identifier", validators=[Required()]) - submit = SubmitField("Send me the code by email") + id = TextField(_("Project identifier"), validators=[Required()]) + submit = SubmitField(_("Send me the code by email")) def validate_id(form, field): if not Project.query.get(field.data): - raise ValidationError("This project does not exists") - + raise ValidationError(_("This project does not exists")) class BillForm(Form): - date = DateField("Date", validators=[Required()], default=datetime.now) - what = TextField("What?", validators=[Required()]) - payer = SelectField("Payer", validators=[Required()], coerce=int) - amount = DecimalField("Amount payed", validators=[Required()]) - payed_for = SelectMultipleField("Who has to pay for this?", + date = DateField(_("Date"), validators=[Required()], default=datetime.now) + what = TextField(_("What?"), validators=[Required()]) + payer = SelectField(_("Payer"), validators=[Required()], coerce=int) + amount = DecimalField(_("Amount payed"), validators=[Required()]) + payed_for = SelectMultipleField(_("Who has to pay for this?"), validators=[Required()], widget=select_multi_checkbox, coerce=int) - submit = SubmitField("Send the bill") + submit = SubmitField(_("Send the bill")) def save(self, bill, project): bill.payer_id=self.payer.data @@ -129,8 +123,8 @@ class BillForm(Form): class MemberForm(Form): - name = TextField("Name", validators=[Required()]) - submit = SubmitField("Add a member") + name = TextField(_("Name"), validators=[Required()]) + submit = SubmitField(_("Add a member")) def __init__(self, project, *args, **kwargs): super(MemberForm, self).__init__(*args, **kwargs) @@ -140,7 +134,7 @@ class MemberForm(Form): if Person.query.filter(Person.name == field.data)\ .filter(Person.project == form.project)\ .filter(Person.activated == True).all(): - raise ValidationError("This project already have this member") + raise ValidationError(_("This project already have this member")) def save(self, project, person): # if the user is already bound to the project, just reactivate him @@ -150,17 +144,18 @@ class MemberForm(Form): return person class InviteForm(Form): - emails = TextAreaField("People to notify") - submit = SubmitField("Send invites") + emails = TextAreaField(_("People to notify")) + submit = SubmitField(_("Send invites")) def validate_emails(form, field): validator = Email() for email in [email.strip() for email in form.emails.data.split(",")]: if not validator.regex.match(email): - raise ValidationError("The email %s is not valid" % email) + raise ValidationError(_("The email %(email)s is not valid", + email=email)) class CreateArchiveForm(Form): - start_date = DateField("Start date", validators=[Required(),]) - end_date = DateField("End date", validators=[Required(),]) - name = TextField("Name for this archive (optional)") + start_date = DateField(_("Start date"), validators=[Required(),]) + end_date = DateField(_("End date"), validators=[Required(),]) + name = TextField(_("Name for this archive (optional)")) diff --git a/budget/messages.pot b/budget/messages.pot new file mode 100644 index 0000000..acfae12 --- /dev/null +++ b/budget/messages.pot @@ -0,0 +1,445 @@ +# Translations template for PROJECT. +# Copyright (C) 2011 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2011. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2011-10-15 00:42+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" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 0.9.6\n" + +#: forms.py:44 +msgid "Project name" +msgstr "" + +#: forms.py:45 forms.py:70 forms.py:81 +msgid "Private code" +msgstr "" + +#: forms.py:46 +msgid "Email" +msgstr "" + +#: forms.py:47 +msgid "Edit the project" +msgstr "" + +#: forms.py:69 forms.py:80 forms.py:86 +msgid "Project identifier" +msgstr "" + +#: forms.py:71 templates/send_invites.html:5 +msgid "Create the project" +msgstr "" + +#: forms.py:76 +msgid "" +"The project identifier is used to log in and for the URL of the project. " +"We tried to generate an identifier for you but a project with this " +"identifier already exists. Please create a new identifier you will be " +"able to remember." +msgstr "" + +#: forms.py:82 +msgid "Get in" +msgstr "" + +#: forms.py:87 +msgid "Send me the code by email" +msgstr "" + +#: forms.py:91 +msgid "This project does not exists" +msgstr "" + +#: forms.py:95 +msgid "Date" +msgstr "" + +#: forms.py:96 +msgid "What?" +msgstr "" + +#: forms.py:97 +msgid "Payer" +msgstr "" + +#: forms.py:98 +msgid "Amount payed" +msgstr "" + +#: forms.py:99 +msgid "Who has to pay for this?" +msgstr "" + +#: forms.py:101 +msgid "Send the bill" +msgstr "" + +#: forms.py:126 +msgid "Name" +msgstr "" + +#: forms.py:127 +msgid "Add a member" +msgstr "" + +#: forms.py:137 +msgid "This project already have this member" +msgstr "" + +#: forms.py:147 +msgid "People to notify" +msgstr "" + +#: forms.py:148 +msgid "Send invites" +msgstr "" + +#: forms.py:154 +#, python-format +msgid "The email %s is not valid" +msgstr "" + +#: forms.py:158 +msgid "Start date" +msgstr "" + +#: forms.py:159 +msgid "End date" +msgstr "" + +#: forms.py:160 +msgid "Name for this archive (optional)" +msgstr "" + +#: web.py:91 +msgid "This private code is not the right one" +msgstr "" + +#: web.py:139 +#, python-format +msgid "You have just created '%(projec)s' to share your expenses" +msgstr "" + +#: web.py:150 +#, python-format +msgid "The project identifier is %(project)s" +msgstr "" + +#: web.py:167 +msgid "a mail has been sent to you with the password" +msgstr "" + +#: web.py:225 +#, python-format +msgid "You have been invited to share your expenses for %(project)s" +msgstr "" + +#: web.py:232 +msgid "Your invitations have been sent" +msgstr "" + +#: web.py:253 +#, python-format +msgid "%(member)s had been added" +msgstr "" + +#: web.py:265 +#, python-format +msgid "%(name)s is part of this project again" +msgstr "" + +#: web.py:273 +#, python-format +msgid "User '%(name)s' has been deactivated" +msgstr "" + +#: web.py:275 +#, python-format +msgid "User '%(name)s' has been removed" +msgstr "" + +#: web.py:288 +msgid "The bill has been added" +msgstr "" + +#: web.py:303 +msgid "The bill has been deleted" +msgstr "" + +#: web.py:321 +msgid "The bill has been modified" +msgstr "" + +#: web.py:338 +msgid "The data from XX to XX has been archived" +msgstr "" + +#: templates/add_bill.html:4 templates/edit_bill.html:4 +msgid "Back to the list" +msgstr "" + +#: templates/authenticate.html:6 +msgid "" +"The project you are trying to access do not exist, do you want \n" +"to" +msgstr "" + +#: templates/authenticate.html:7 +msgid "create it" +msgstr "" + +#: templates/authenticate.html:7 +msgid "?" +msgstr "" + +#: templates/create_project.html:4 +msgid "Create a new project" +msgstr "" + +#: templates/edit_bill.html:8 +msgid "Edit a bill" +msgstr "" + +#: templates/edit_project.html:4 +msgid "Edit this project" +msgstr "" + +#: templates/forms.html:24 +msgid "Can't remember the password?" +msgstr "" + +#: templates/forms.html:27 +msgid "Cancel" +msgstr "" + +#: templates/forms.html:75 +msgid "Edit this bill" +msgstr "" + +#: templates/forms.html:75 +msgid "Add a bill" +msgstr "" + +#: templates/forms.html:91 +msgid "Add a new user" +msgstr "" + +#: templates/forms.html:99 +msgid "Send the invitations" +msgstr "" + +#: templates/forms.html:100 +msgid "No, thanks" +msgstr "" + +#: templates/forms.html:106 +msgid "Create an archive" +msgstr "" + +#: templates/forms.html:112 +msgid "Create the archive" +msgstr "" + +#: templates/home.html:9 +msgid "Manage your shared <br>expenses, easily" +msgstr "" + +#: templates/home.html:10 +msgid "Try out the demo" +msgstr "" + +#: templates/home.html:13 +msgid "You're sharing a house?" +msgstr "" + +#: templates/home.html:13 +msgid "Going on holidays with friends?" +msgstr "" + +#: templates/home.html:13 +msgid "Simply sharing money with others?" +msgstr "" + +#: templates/home.html:13 +msgid "We can help!" +msgstr "" + +#: templates/home.html:26 +msgid "Log to an existing project" +msgstr "" + +#: templates/home.html:28 +msgid "log in" +msgstr "" + +#: templates/home.html:29 +msgid "can't remember your password?" +msgstr "" + +#: templates/home.html:34 +msgid "or create a new one" +msgstr "" + +#: templates/home.html:36 +msgid "let's get started" +msgstr "" + +#: templates/layout.html:5 +msgid "Account manager" +msgstr "" + +#: templates/layout.html:48 +msgid "Bills" +msgstr "" + +#: templates/layout.html:49 +msgid "Archives" +msgstr "" + +#: templates/layout.html:53 +msgid "options" +msgstr "" + +#: templates/layout.html:55 +msgid "Project settings" +msgstr "" + +#: templates/layout.html:59 +msgid "switch to" +msgstr "" + +#: templates/layout.html:62 +msgid "Start a new project" +msgstr "" + +#: templates/layout.html:64 +msgid "Logout" +msgstr "" + +#: templates/layout.html:85 +msgid "This is a free software" +msgstr "" + +#: templates/layout.html:85 +msgid "you can contribute and improve it!" +msgstr "" + +#: templates/list_bills.html:30 +msgid "you sure?" +msgstr "" + +#: templates/list_bills.html:45 +msgid "Balance" +msgstr "" + +#: templates/list_bills.html:56 templates/list_bills.html:88 +msgid "delete" +msgstr "" + +#: templates/list_bills.html:56 +msgid "reactivate" +msgstr "" + +#: templates/list_bills.html:68 +msgid "The project identifier is" +msgstr "" + +#: templates/list_bills.html:68 +msgid "remember it or add this page to you bookmarks!" +msgstr "" + +#: templates/list_bills.html:70 +msgid "Add a new bill" +msgstr "" + +#: templates/list_bills.html:72 +msgid "hide this form" +msgstr "" + +#: templates/list_bills.html:78 +msgid "When?" +msgstr "" + +#: templates/list_bills.html:78 +msgid "Who paid?" +msgstr "" + +#: templates/list_bills.html:78 +msgid "For what?" +msgstr "" + +#: templates/list_bills.html:78 +msgid "Owers" +msgstr "" + +#: templates/list_bills.html:78 +msgid "How much?" +msgstr "" + +#: templates/list_bills.html:78 +msgid "Actions" +msgstr "" + +#: templates/list_bills.html:87 +msgid "edit" +msgstr "" + +#: templates/list_bills.html:95 +msgid "Nothing to list yet. You probably want to" +msgstr "" + +#: templates/list_bills.html:95 +msgid "add a bill" +msgstr "" + +#: templates/password_reminder.html:4 +msgid "Password reminder" +msgstr "" + +#: templates/recent_projects.html:2 +msgid "Your projects" +msgstr "" + +#: templates/send_invites.html:6 +msgid "Invite people" +msgstr "" + +#: templates/send_invites.html:7 +msgid "Use it!" +msgstr "" + +#: templates/send_invites.html:11 +msgid "Invite people to join this project" +msgstr "" + +#: templates/send_invites.html:12 +msgid "" +"Specify a (coma separated) list of email adresses you want to notify " +"about the \n" +"creation of this budget management project and we will send them an email" +" for you." +msgstr "" + +#: templates/send_invites.html:14 +msgid "If you prefer, you can" +msgstr "" + +#: templates/send_invites.html:14 +msgid "skip this step" +msgstr "" + +#: templates/send_invites.html:14 +msgid "and notify them yourself" +msgstr "" + diff --git a/budget/models.py b/budget/models.py index f84194e..a73f8e9 100644 --- a/budget/models.py +++ b/budget/models.py @@ -176,4 +176,3 @@ class Archive(db.Model): def __repr__(self): return "<Archive>" - diff --git a/budget/requirements.txt b/budget/requirements.txt index e254ef4..16e3f11 100644 --- a/budget/requirements.txt +++ b/budget/requirements.txt @@ -2,3 +2,4 @@ flask flask-wtf flask-sqlalchemy flask-mail +flask-babel diff --git a/budget/run.py b/budget/run.py index 39b297e..9bb07f4 100644 --- a/budget/run.py +++ b/budget/run.py @@ -1,4 +1,4 @@ -from web import main, db, mail +from web import main, db, mail, babel from api import api import os @@ -10,7 +10,6 @@ app.config.from_object("default_settings") app.register_blueprint(main) app.register_blueprint(api) - # db db.init_app(app) db.app = app @@ -19,6 +18,14 @@ db.create_all() # mail mail.init_app(app) +# translations +babel.init_app(app) + +@babel.localeselector +def get_locale(): + return request.accept_languages.best_match(['fr', 'en']) + + def main(): app.run(host="0.0.0.0", debug=True) diff --git a/budget/templates/add_bill.html b/budget/templates/add_bill.html index 3b29896..6349730 100644 --- a/budget/templates/add_bill.html +++ b/budget/templates/add_bill.html @@ -1,7 +1,7 @@ {% extends "layout.html" %} {% block top_menu %} -<a href="{{ url_for(".list_bills") }}">Back to the list</a> +<a href="{{ url_for(".list_bills") }}">{{ _("Back to the list") }}</a> {% endblock %} {% block content %} diff --git a/budget/templates/authenticate.html b/budget/templates/authenticate.html index 83839e1..7af2440 100644 --- a/budget/templates/authenticate.html +++ b/budget/templates/authenticate.html @@ -3,8 +3,8 @@ <h2>Authentication</h2> {% if create_project %} -<p class="info">The project you are trying to access do not exist, do you want -to <a href="{{ url_for(".create_project", project_id=create_project) }}">create it</a>? +<p class="info">{{ _("The project you are trying to access do not exist, do you want +to") }} <a href="{{ url_for(".create_project", project_id=create_project) }}">{{ _("create it") }}</a>{{ _("?") }} </p> {% endif %} <form action="" method="POST" accept-charset="utf-8"> diff --git a/budget/templates/create_project.html b/budget/templates/create_project.html index 41b8fd0..cbf1622 100644 --- a/budget/templates/create_project.html +++ b/budget/templates/create_project.html @@ -1,7 +1,7 @@ {% extends "layout.html" %} {% block content %} -<h2>Create a new project</h2> +<h2>{{ _("Create a new project") }}</h2> <form method="post"> {{ forms.create_project(form) }} </form> diff --git a/budget/templates/edit_bill.html b/budget/templates/edit_bill.html index 9c272ae..cb55d69 100644 --- a/budget/templates/edit_bill.html +++ b/budget/templates/edit_bill.html @@ -1,11 +1,11 @@ {% extends "layout.html" %} {% block top_menu %} -<a href="{{ url_for(".list_bills") }}">Back to the list</a> +<a href="{{ url_for(".list_bills") }}">{{ _("Back to the list") }}</a> {% endblock %} {% block content %} -<h2>Edit a bill</h2> +<h2>{{ _("Edit a bill") }}</h2> <div class="container span-24 add-bill uniForm" style="width: 400px"> <form action="" method="post" class=uniForm"> diff --git a/budget/templates/edit_project.html b/budget/templates/edit_project.html index c69045d..0349fe7 100644 --- a/budget/templates/edit_project.html +++ b/budget/templates/edit_project.html @@ -1,7 +1,7 @@ {% extends "layout.html" %} {% block content %} -<h2>Edit this project</h2> +<h2>{{ _("Edit this project") }}</h2> <form method="post"> {{ forms.edit_project(form) }} </form> diff --git a/budget/templates/forms.html b/budget/templates/forms.html index beb714b..3a3d5ba 100644 --- a/budget/templates/forms.html +++ b/budget/templates/forms.html @@ -21,10 +21,10 @@ <div class="actions"> <button type="submit" class="btn primary">{{ field.name }}</button> {% if home %} - <a href="{{ url_for(".remind_password") }}">Can't remember the password?</a> + <a href="{{ url_for(".remind_password") }}">{{ _("Can't remember the password?") }}</a> {% endif %} {% if cancel %} - <button id="cancel-form" type="reset" class="btn">Cancel</button> + <button id="cancel-form" type="reset" class="btn">{{ _("Cancel") }}</button> {% endif %} </div> {% endmacro %} @@ -72,7 +72,7 @@ {% macro add_bill(form, edit=False) %} <fieldset> - <legend>{% if edit %}Edit this {% else %}Add a {% endif %}bill</legend> + <legend>{% if edit %}{{ _("Edit this bill") }} {% else %}{{ _("Add a bill") }} {% endif %}</legend> {% include "display_errors.html" %} {{ form.hidden_tag() }} {{ input(form.date) }} @@ -88,7 +88,7 @@ {% macro add_member(form) %} {{ form.hidden_tag() }} {{ form.name }} - <button class="btn">Add a new user</button> + <button class="btn">{{ _("Add a new user") }}</button> {% endmacro %} @@ -96,20 +96,20 @@ {{ form.hidden_tag() }} {{ input(form.emails) }} <div class="actions"> - <button class="btn primary">Send the invitations</button> - <a href="{{ url_for(".list_bills") }}">No, thanks</a> + <button class="btn primary">{{ _("Send the invitations") }}</button> + <a href="{{ url_for(".list_bills") }}">{{ _("No, thanks") }}</a> </div> {% endmacro %} {% macro create_archive(form) %} <fieldset> - <legend>Create an archive</legend> + <legend>{{ _("Create an archive") }}</legend> {{ form.hidden_tag() }} {{ input(form.start_date) }} {{ input(form.end_date) }} </fieldset> <div class="actions"> - <button class="btn">Create the archive</button> + <button class="btn">{{ _("Create the archive") }}</button> </div> {% endmacro %} diff --git a/budget/templates/home.html b/budget/templates/home.html index bf74767..1073a49 100644 --- a/budget/templates/home.html +++ b/budget/templates/home.html @@ -6,11 +6,11 @@ {% block header %} <div id="header"> <div class="slide"> - <h1><span>Manage your shared <br>expenses, easily</span></h1> - <a href="{{ url_for(".demo") }}" class="about_link">Try out the demo</a> + <h1><span>{{ _("Manage your shared <br>expenses, easily") }}</span></h1> + <a href="{{ url_for(".demo") }}" class="about_link">{{ _("Try out the demo") }}</a> </div> <div class="additional-content"> - <p>You're sharing a house?<br /> Going on holidays with friends?<br /> Simply sharing money with others? <br /><strong>We can help!</strong></p> + <p>{{ _("You're sharing a house?") }}<br /> {{ _("Going on holidays with friends?") }}<br /> {{ _("Simply sharing money with others?") }} <br /><strong>{{ _("We can help!") }}</strong></p> </div> </div> @@ -23,17 +23,17 @@ <div class="row"> <div class="span8 columns"> <form action="{{ url_for(".authenticate") }}" method="post"> - <h3>Log to an existing project...</h3> + <h3>{{ _("Log to an existing project") }}...</h3> {{ forms.authenticate(auth_form, home=True) }} - <button class="btn">log in</button> - <a class="password-reminder" href="{{ url_for(".remind_password") }}">can't remember your password?</a> + <button class="btn">{{ _("log in") }}</button> + <a class="password-reminder" href="{{ url_for(".remind_password") }}">{{ _("can't remember your password?") }}</a> </form> </div> <div class="span8 columns"> <form class="create" action="{{ url_for(".create_project") }}" method="post"> - <h3>...or create a new one</h3> + <h3>...{{ _("or create a new one") }}</h3> {{ forms.create_project(project_form, home=True) }} - <button class="btn">let's get started</button> + <button class="btn">{{ _("let's get started") }}</button> </form> </div> </div> diff --git a/budget/templates/invitation_mail b/budget/templates/invitation_mail.en index 4f5bbf0..4f5bbf0 100644 --- a/budget/templates/invitation_mail +++ b/budget/templates/invitation_mail.en diff --git a/budget/templates/invitation_mail.fr b/budget/templates/invitation_mail.fr new file mode 100644 index 0000000..3a2b956 --- /dev/null +++ b/budget/templates/invitation_mail.fr @@ -0,0 +1,9 @@ +Salut, + +Quelqu'un avec l'addresse email "{{ g.project.contact_email }}" vuos à invité à partager vos dépenses pour "{{ g.project.name }}". + +C'est aussi simple que de dire qui à payé pour quoi, pour qui, et combien celà à coûté, on s'occuppe du reste. + +Vous pouvez accéder à la page ici: {{ config['SITE_URL'] }}{{ url_for(".list_bills") }}, le code est "{{ g.project.password }}". + +Have fun, diff --git a/budget/templates/layout.html b/budget/templates/layout.html index 2b7c11e..1406bd9 100644 --- a/budget/templates/layout.html +++ b/budget/templates/layout.html @@ -2,7 +2,7 @@ <!DOCTYPE html> <html> <head> - <title>Account manager</title> + <title>{{ _("Account manager") }}</title> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <link rel=stylesheet type=text/css href="{{ url_for("static", filename='main.css') }}"> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> @@ -45,23 +45,23 @@ <h3><a class="logo" href="{% if g.project %}{{ url_for(".list_bills") }}{% endif %}">#! money?</a></h3> {% if g.project %} <ul> - <li class="active"><a href="">Bills</a></li> - <li><a href="">Archives</a></li> + <li class="active"><a href="">{{ _("Bills") }}</a></li> + <li><a href="">{{ _("Archives") }}</a></li> </ul> <ul class="nav secondary-nav"> <li class="menu"> - <a href="#" class="menu"><strong>{{ g.project.name }}</strong> options</a> + <a href="#" class="menu"><strong>{{ g.project.name }}</strong> {{ _("options") }}</a> <ul class="menu-dropdown" style="display: none; "> - <li><a href="{{ url_for(".edit_project") }}">Project settings</a></li> + <li><a href="{{ url_for(".edit_project") }}">{{ _("Project settings") }}</a></li> <li class="divider"></li> {% for id, name in session['projects'] %} {% if id != g.project.id %} - <li><a href="{{ url_for(".list_bills", project_id=id) }}">switch to {{ name }}</a></li> + <li><a href="{{ url_for(".list_bills", project_id=id) }}">{{ _("switch to") }} {{ name }}</a></li> {% endif %} {% endfor %} - <li><a href="{{ url_for(".create_project") }}">Start a new project</a></li> + <li><a href="{{ url_for(".create_project") }}">{{ _("Start a new project") }}</a></li> <li class="divider"></li> - <li><a href="{{ url_for(".exit") }}">Logout</a></li> + <li><a href="{{ url_for(".exit") }}">{{ _("Logout") }}</a></li> </ul> </li> </ul> @@ -82,7 +82,7 @@ {% endblock %} {% block footer %} <div id="footer"> - <p><a href="https://github.com/ametaireau/budget-manager">This is a free software</a>, you can contribute and improve it!</p> + <p><a href="https://github.com/ametaireau/budget-manager">{{ _("This is a free software") }}</a>, {{ _("you can contribute and improve it!") }}</p> </div> {% endblock %} diff --git a/budget/templates/list_bills.html b/budget/templates/list_bills.html index f37e1fe..0325a94 100644 --- a/budget/templates/list_bills.html +++ b/budget/templates/list_bills.html @@ -27,7 +27,7 @@ if ($(this).hasClass("confirm")){ return true; } - $(this).html("you sure?"); + $(this).html("{{_("you sure?")}}"); $(this).addClass("confirm"); return false; }); @@ -42,7 +42,7 @@ {% endblock %} {% block sidebar %} - <h2>Balance</h2> +<h2>{{ _("Balance") }}</h2> <table class="balance"> {% set balance = g.project.get_balance() %} @@ -53,7 +53,7 @@ <td class="{% if balance[member] > 0 %}positive{% elif balance[member] < 0 %}negative{% endif %}"> {% if balance[member] > 0 %}+{% endif %}{{ balance[member] }} </td> - <td> {% if member.activated %}<a class="remove" href="{{ url_for(".remove_member", member_id=member.id) }}">delete</a>{% else %}<a href="{{ url_for(".reactivate", member_id=member.id) }}">reactivate</a>{% endif %}</td> + <td> {% if member.activated %}<a class="remove" href="{{ url_for(".remove_member", member_id=member.id) }}">{{ _("delete") }}</a>{% else %}<a href="{{ url_for(".reactivate", member_id=member.id) }}">{{ _("reactivate") }}</a>{% endif %}</td> </tr> {% endif %} {% endfor %} @@ -65,17 +65,17 @@ {% endblock %} {% block content %} -<div class="identifier">The project identifier is <a href="{{ url_for(".list_bills") }}">{{ g.project.id }}</a>, remember it or add this page to you bookmarks!</div> +<div class="identifier">{{ _("The project identifier is") }} <a href="{{ url_for(".list_bills") }}">{{ g.project.id }}</a>, {{ _("remember it or add this page to you bookmarks!") }}</div> <br /><br /> -<a id="new-bill" href="{{ url_for(".add_bill") }}" class="primary">Add a new bill</a> +<a id="new-bill" href="{{ url_for(".add_bill") }}" class="primary">{{ _("Add a new bill") }}</a> <form id="bill-form" action="{{ url_for(".add_bill") }}" method="post" style="display: none"> - <a id="hide-bill-form" href="#">hide this form</a> + <a id="hide-bill-form" href="#">{{ _("hide this form") }}</a> {{ forms.add_bill(bill_form) }} </form> {% if bills.count() > 0 %} <table class="list_bills common-table zebra-striped"> - <thead><tr><th>When?</th><th>Who paid?</th><th>For what?</th><th>Owers</th><th>How much?</th><th>Actions</th></tr></thead> + <thead><tr><th>{{ _("When?") }}</th><th>{{ _("Who paid?") }}</th><th>{{ _("For what?") }}</th><th>{{ _("Owers") }}</th><th>{{ _("How much?") }}</th><th>{{ _("Actions") }}</th></tr></thead> <tbody> {% for bill in bills %} <tr class="{{ loop.cycle("odd", "even") }}"> @@ -84,15 +84,15 @@ <td>{{ bill.what }}</td> <td>{% for ower in bill.owers %}{{ ower.name }} {% endfor %}</td> <td>{{ bill.amount }} ({{ bill.pay_each() }} each)</td> - <td><a href="{{ url_for(".edit_bill", bill_id=bill.id) }}">edit</a> - <a class="delete" href="{{ url_for(".delete_bill", bill_id=bill.id) }}">delete</a></td> + <td><a href="{{ url_for(".edit_bill", bill_id=bill.id) }}">{{ _("edit") }}</a> + <a class="delete" href="{{ url_for(".delete_bill", bill_id=bill.id) }}">{{ _("delete") }}</a></td> </tr> {% endfor %} </tbody> </table> {% else %} - <p>Nothing to list yet. You probably want to <a id="empty-new-bill" href="{{ url_for(".add_bill") }}">add a bill</a> ?</p> + <p>{{ _("Nothing to list yet. You probably want to") }} <a id="empty-new-bill" href="{{ url_for(".add_bill") }}">{{ _("add a bill") }}</a> ?</p> {% endif %} </div> {% endblock %} diff --git a/budget/templates/password_reminder b/budget/templates/password_reminder.en index fc24a6f..fc24a6f 100644 --- a/budget/templates/password_reminder +++ b/budget/templates/password_reminder.en diff --git a/budget/templates/password_reminder.fr b/budget/templates/password_reminder.fr new file mode 100644 index 0000000..58f04e3 --- /dev/null +++ b/budget/templates/password_reminder.fr @@ -0,0 +1,7 @@ +Salut, + +Vous avez demandez des informations sur votre mot de passe pour "{{ project.name }}". + +Vous pouvez y accéder ici {{ config['SITE_URL'] }}{{ url_for(".list_bills", project_id=project.id) }}, le code d'accès est "{{ project.password }}". + +Faites en bon usage ! diff --git a/budget/templates/password_reminder.html b/budget/templates/password_reminder.html index 0110cb8..89e399e 100644 --- a/budget/templates/password_reminder.html +++ b/budget/templates/password_reminder.html @@ -1,7 +1,7 @@ {% extends "layout.html" %} {% block content %} -<h2>Password reminder</h2> +<h2>{{ _("Password reminder") }}</h2> <form method="post"> {{ forms.remind_password(form) }} </form> diff --git a/budget/templates/recent_projects.html b/budget/templates/recent_projects.html index 91e1dd6..df4972d 100644 --- a/budget/templates/recent_projects.html +++ b/budget/templates/recent_projects.html @@ -1,5 +1,5 @@ {% if 'projects' in session %} - <h3>Your projects</h3> +<h3>{{ _("Your projects") }}</h3> <ul> {% for id, name in session['projects'] %} <li><a href="{{ url_for("list_bills", project_id=id) }}">{{ name }}</a></li> diff --git a/budget/templates/reminder_mail b/budget/templates/reminder_mail.en index b2e3a65..b2e3a65 100644 --- a/budget/templates/reminder_mail +++ b/budget/templates/reminder_mail.en diff --git a/budget/templates/reminder_mail.fr b/budget/templates/reminder_mail.fr new file mode 100644 index 0000000..8130218 --- /dev/null +++ b/budget/templates/reminder_mail.fr @@ -0,0 +1,8 @@ +Hey, + +Vous venez de créer le projet "{{ g.project.name }}" pour partager vos dépenses. + +Vous pouvez y accéder ici: {{ config['SITE_URL'] }}{{ url_for(".list_bills") }} (l'identifieur est {{ g.project.id }}), +et le code d'accès "{{ g.project.password }}". + +Faites en bon usage ! diff --git a/budget/templates/send_invites.html b/budget/templates/send_invites.html index ec68333..9883cba 100644 --- a/budget/templates/send_invites.html +++ b/budget/templates/send_invites.html @@ -2,16 +2,16 @@ {% block sidebar %} <ol> - <li>Create the project</li> - <li><strong>Invite people</strong></li> - <li><a href="{{ url_for(".list_bills") }}">Use it!</a></li> + <li>{{ _("Create the project") }}</li> + <li><strong>{{ _("Invite people") }}</strong></li> + <li><a href="{{ url_for(".list_bills") }}">{{ _("Use it!") }}</a></li> </ol> {% endblock %} {% block content %} -<h2>Invite people to join this project</h2> -<p>Specify a (coma separated) list of email adresses you want to notify about the -creation of this budget management project and we will send them an email for you.</p> -<p>If you prefer, you can <a href="{{ url_for(".list_bills") }}">skip this step</a> and notify them yourself</p> +<h2>{{ _("Invite people to join this project") }}</h2> +<p>{{ _("Specify a (coma separated) list of email adresses you want to notify about the +creation of this budget management project and we will send them an email for you.") }}</p> +<p>{{ _("If you prefer, you can") }} <a href="{{ url_for(".list_bills") }}">{{ _("skip this step") }}</a> {{ _("and notify them yourself") }}</p> {% include "display_errors.html" %} <form class="invites" method="post" accept-charset="utf-8"> diff --git a/budget/translations/fr/LC_MESSAGES/messages.mo b/budget/translations/fr/LC_MESSAGES/messages.mo Binary files differnew file mode 100644 index 0000000..5360b8d --- /dev/null +++ b/budget/translations/fr/LC_MESSAGES/messages.mo diff --git a/budget/translations/fr/LC_MESSAGES/messages.po b/budget/translations/fr/LC_MESSAGES/messages.po new file mode 100644 index 0000000..e29ff48 --- /dev/null +++ b/budget/translations/fr/LC_MESSAGES/messages.po @@ -0,0 +1,450 @@ +# French translations for PROJECT. +# Copyright (C) 2011 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2011-10-15 00:42+0200\n" +"PO-Revision-Date: 2011-10-14 23:51+0200\n" +"Last-Translator: Alexis Métaireau <alexis@notmyidea.org>\n" +"Language-Team: fr <LL@li.org>\n" +"Plural-Forms: nplurals=2; plural=(n > 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 0.9.6\n" + +#: forms.py:44 +msgid "Project name" +msgstr "Nom de projet" + +#: forms.py:45 forms.py:70 forms.py:81 +msgid "Private code" +msgstr "Code d'accès" + +#: forms.py:46 +msgid "Email" +msgstr "Email" + +#: forms.py:47 +msgid "Edit the project" +msgstr "Éditer le projet" + +#: forms.py:69 forms.py:80 forms.py:86 +msgid "Project identifier" +msgstr "Identifiant de projet" + +#: forms.py:71 templates/send_invites.html:5 +msgid "Create the project" +msgstr "Créer le projet" + +#: forms.py:76 +msgid "" +"The project identifier is used to log in and for the URL of the project. " +"We tried to generate an identifier for you but a project with this " +"identifier already exists. Please create a new identifier you will be " +"able to remember." +msgstr "" +"L'identifiant de projet est utilisé pour se connecter et dans l'URL du " +"projetNous avons essayé de générer une identifiant pour ce projet mais " +"celui ci existedéjà. Merci de créer un nouvel identifiant que vous serez " +"capable de retenir" + +#: forms.py:82 +msgid "Get in" +msgstr "Entrer" + +#: forms.py:87 +msgid "Send me the code by email" +msgstr "Envoyez moi le code par email" + +#: forms.py:91 +msgid "This project does not exists" +msgstr "Ce projet n'existe pas" + +#: forms.py:95 +msgid "Date" +msgstr "Date" + +#: forms.py:96 +msgid "What?" +msgstr "Quoi ?" + +#: forms.py:97 +msgid "Payer" +msgstr "Payeur" + +#: forms.py:98 +msgid "Amount payed" +msgstr "Montant" + +#: forms.py:99 +msgid "Who has to pay for this?" +msgstr "Qui doit payer pour ça ?" + +#: forms.py:101 +msgid "Send the bill" +msgstr "Enregistrer la facture" + +#: forms.py:126 +msgid "Name" +msgstr "Nom" + +#: forms.py:127 +msgid "Add a member" +msgstr "Ajouter un membre" + +#: forms.py:137 +msgid "This project already have this member" +msgstr "Ce membre existe déjà pour ce projet" + +#: forms.py:147 +msgid "People to notify" +msgstr "Personnes à prévenir" + +#: forms.py:148 +msgid "Send invites" +msgstr "Envoyer les invitations" + +#: forms.py:154 +#, python-format +msgid "The email %s is not valid" +msgstr "L'email %s est invalide" + +#: forms.py:158 +msgid "Start date" +msgstr "Date de départ" + +#: forms.py:159 +msgid "End date" +msgstr "Date de fin" + +#: forms.py:160 +msgid "Name for this archive (optional)" +msgstr "Nom pour cette archive" + +#: web.py:91 +msgid "This private code is not the right one" +msgstr "Le code que vous avez entré n'est pas correct" + +#: web.py:139 +#, python-format +msgid "You have just created '%(project)s' to share your expenses" +msgstr "Vous venez de créer '%(project)s' pour partager vos dépenses" + +#: web.py:150 +#, python-format +msgid "The project identifier is %(project)s" +msgstr "L'identifiant de ce projet est '%(project)s'" + +#: web.py:167 +msgid "a mail has been sent to you with the password" +msgstr "Un email vous à été envoyé avec le mot de passe" + +#: web.py:225 +#, python-format +msgid "You have been invited to share your expenses for %(project)s" +msgstr "Vous avez été invité à partager vos dépenses pour %(project)s" + +#: web.py:232 +msgid "Your invitations have been sent" +msgstr "Vos invitations ont bien été envoyées" + +#: web.py:253 +#, python-format +msgid "%(member)s had been added" +msgstr "%(member)s à bien été ajouté" + +#: web.py:265 +#, python-format +msgid "%(name)s is part of this project again" +msgstr "%(name)s à rejoint le projet" + +#: web.py:273 +#, python-format +msgid "User '%(name)s' has been deactivated" +msgstr "Le membre '%(name)s' à été désactivé" + +#: web.py:275 +#, python-format +msgid "User '%(name)s' has been removed" +msgstr "Le membre '%(name)s' à été supprimé" + +#: web.py:288 +msgid "The bill has been added" +msgstr "La facture à bien été ajoutée" + +#: web.py:303 +msgid "The bill has been deleted" +msgstr "La facture à été supprimée" + +#: web.py:321 +msgid "The bill has been modified" +msgstr "La facture à été modifiée" + +#: web.py:338 +msgid "The data from XX to XX has been archived" +msgstr "Les données de XX à XX ont été archivées" + +#: templates/add_bill.html:4 templates/edit_bill.html:4 +msgid "Back to the list" +msgstr "Retourner à la liste" + +#: templates/authenticate.html:6 +msgid "" +"The project you are trying to access do not exist, do you want \n" +"to" +msgstr "Le projet auquel vous essayez d'acceder n'existe pas. Souhaitez vous" + +#: templates/authenticate.html:7 +msgid "create it" +msgstr "le créer" + +#: templates/authenticate.html:7 +msgid "?" +msgstr " ?" + +#: templates/create_project.html:4 +msgid "Create a new project" +msgstr "Créer un nouveau projet" + +#: templates/edit_bill.html:8 +msgid "Edit a bill" +msgstr "Éditer une facture" + +#: templates/edit_project.html:4 +msgid "Edit this project" +msgstr "Éditer ce projet" + +#: templates/forms.html:24 +msgid "Can't remember the password?" +msgstr "Vous ne vous rappelez plus du code d'accès ?" + +#: templates/forms.html:27 +msgid "Cancel" +msgstr "Annuler" + +#: templates/forms.html:75 +msgid "Edit this bill" +msgstr "Éditer cette facture" + +#: templates/forms.html:75 +msgid "Add a bill" +msgstr "Ajouter une facture" + +#: templates/forms.html:91 +msgid "Add a new user" +msgstr "Ajouter un membre" + +#: templates/forms.html:99 +msgid "Send the invitations" +msgstr "Envoyer les invitations" + +#: templates/forms.html:100 +msgid "No, thanks" +msgstr "Non merci" + +#: templates/forms.html:106 +msgid "Create an archive" +msgstr "Créer une archive" + +#: templates/forms.html:112 +msgid "Create the archive" +msgstr "Créer l'archive" + +#: templates/home.html:9 +msgid "Manage your shared <br>expenses, easily" +msgstr "Gérez vos dépenses<br> partagées, facilement" + +#: templates/home.html:10 +msgid "Try out the demo" +msgstr "Essayez la démo" + +#: templates/home.html:13 +msgid "You're sharing a house?" +msgstr "Vous êtes en colocation ?" + +#: templates/home.html:13 +msgid "Going on holidays with friends?" +msgstr "Partez en vacances avec des amis ?" + +#: templates/home.html:13 +msgid "Simply sharing money with others?" +msgstr "Ça vous arrive de partager de l'argent avec d'autres ?" + +#: templates/home.html:13 +msgid "We can help!" +msgstr "On peut vous aider !" + +#: templates/home.html:26 +msgid "Log to an existing project" +msgstr "Se connecter à un projet existant" + +#: templates/home.html:28 +msgid "log in" +msgstr "se connecter" + +#: templates/home.html:29 +msgid "can't remember your password?" +msgstr "vous ne vous rappelez plus du code d'accès ?" + +#: templates/home.html:34 +msgid "or create a new one" +msgstr "ou créez en un nouveau" + +#: templates/home.html:36 +msgid "let's get started" +msgstr "c'est parti !" + +#: templates/layout.html:5 +msgid "Account manager" +msgstr "Gestion de comptes" + +#: templates/layout.html:48 +msgid "Bills" +msgstr "Factures" + +#: templates/layout.html:49 +msgid "Archives" +msgstr "Archives" + +#: templates/layout.html:53 +msgid "options" +msgstr "options" + +#: templates/layout.html:55 +msgid "Project settings" +msgstr "Options du projet" + +#: templates/layout.html:59 +msgid "switch to" +msgstr "aller à" + +#: templates/layout.html:62 +msgid "Start a new project" +msgstr "Démarrer un nouveau projet" + +#: templates/layout.html:64 +msgid "Logout" +msgstr "Se déconnecter" + +#: templates/layout.html:85 +msgid "This is a free software" +msgstr "Ceci est un logiciel libre" + +#: templates/layout.html:85 +msgid "you can contribute and improve it!" +msgstr "vous pouvez y contribuer et l'améliorer" + +#: templates/list_bills.html:30 +msgid "you sure?" +msgstr "c'est sûr ?" + +#: templates/list_bills.html:45 +msgid "Balance" +msgstr "Balance" + +#: templates/list_bills.html:56 templates/list_bills.html:88 +msgid "delete" +msgstr "supprimer" + +#: templates/list_bills.html:56 +msgid "reactivate" +msgstr "ré-activer" + +#: templates/list_bills.html:68 +msgid "The project identifier is" +msgstr "L'identifiant de ce projet est" + +#: templates/list_bills.html:68 +msgid "remember it or add this page to you bookmarks!" +msgstr "rapellez vous en !" + +#: templates/list_bills.html:70 +msgid "Add a new bill" +msgstr "Nouvelle facture" + +#: templates/list_bills.html:72 +msgid "hide this form" +msgstr "cacher ce formulaire" + +#: templates/list_bills.html:78 +msgid "When?" +msgstr "Quand ?" + +#: templates/list_bills.html:78 +msgid "Who paid?" +msgstr "Qui à payé ?" + +#: templates/list_bills.html:78 +msgid "For what?" +msgstr "Pour quoi ?" + +#: templates/list_bills.html:78 +msgid "Owers" +msgstr "Pour qui ?" + +#: templates/list_bills.html:78 +msgid "How much?" +msgstr "Combien ?" + +#: templates/list_bills.html:78 +msgid "Actions" +msgstr "Actions" + +#: templates/list_bills.html:87 +msgid "edit" +msgstr "éditer" + +#: templates/list_bills.html:95 +msgid "Nothing to list yet. You probably want to" +msgstr "Rien à lister pour l'instant. Vous voulez surement" + +#: templates/list_bills.html:95 +msgid "add a bill" +msgstr "ajouter une facture" + +#: templates/password_reminder.html:4 +msgid "Password reminder" +msgstr "Rappel du code d'accès" + +#: templates/recent_projects.html:2 +msgid "Your projects" +msgstr "Vos projets" + +#: templates/send_invites.html:6 +msgid "Invite people" +msgstr "Invitez des gens" + +#: templates/send_invites.html:7 +msgid "Use it!" +msgstr "Utilisez le !" + +#: templates/send_invites.html:11 +msgid "Invite people to join this project" +msgstr "Invitez des personnes à rejoindre ce projet" + +#: templates/send_invites.html:12 +msgid "" +"Specify a (coma separated) list of email adresses you want to notify " +"about the \n" +"creation of this budget management project and we will send them an email" +" for you." +msgstr "" +"Entrez l'addresse des personnes que vous souhaitez inviter, séparée par " +"des virgules. On s'occupe de leur envoyer un email." + +#: templates/send_invites.html:14 +msgid "If you prefer, you can" +msgstr "Si vous préférez vous pouvez" + +#: templates/send_invites.html:14 +msgid "skip this step" +msgstr "sauter cette étape" + +#: templates/send_invites.html:14 +msgid "and notify them yourself" +msgstr "et les notifier vous même" diff --git a/budget/web.py b/budget/web.py index 8b251a1..263c1db 100644 --- a/budget/web.py +++ b/budget/web.py @@ -2,6 +2,7 @@ from collections import defaultdict from flask import * from flaskext.mail import Mail, Message +from flaskext.babel import Babel, get_locale, gettext as _ import werkzeug # local modules @@ -22,6 +23,8 @@ and `add_project_id` for a quick overview main = Blueprint("main", __name__) mail = Mail() +babel = Babel() + @main.url_defaults def add_project_id(endpoint, values): @@ -85,7 +88,7 @@ def authenticate(project_id=None): if request.method == "POST": if form.validate(): if not form.password.data == project.password: - form.errors['password'] = ["This private code is not the right one"] + form.errors['password'] = [_("This private code is not the right one")] else: # maintain a list of visited projects if "projects" not in session: @@ -133,9 +136,10 @@ def create_project(): # send reminder email g.project = project - message_title = "You have just created '%s' to share your expenses" % g.project.name + message_title = _("You have just created '%(project)s' to share your expenses", + project=g.project.name) - message_body = render_template("reminder_mail") + message_body = render_template("reminder_mail.%s" % get_locale().language) msg = Message(message_title, body=message_body, @@ -143,7 +147,7 @@ def create_project(): mail.send(msg) # redirect the user to the next step (invite) - flash("The project identifier is %s" % project.id) + flash(_("The project identifier is %(project)s", project=project.id)) return redirect(url_for(".invite", project_id=project.id)) return render_template("create_project.html", form=form) @@ -158,9 +162,10 @@ def remind_password(): # send the password reminder mail.send(Message("password recovery", - body=render_template("password_reminder", project=project), + body=render_template("password_reminder.%s" % get_locale().language, + project=project), recipients=[project.contact_email])) - flash("a mail has been sent to you with the password") + flash(_("a mail has been sent to you with the password")) return render_template("password_reminder.html", form=form) @@ -216,16 +221,16 @@ def invite(): if form.validate(): # send the email - message_body = render_template("invitation_mail") + message_body = render_template("invitation_mail.%s" % get_locale().language) - message_title = "You have been invited to share your"\ - + " expenses for %s" % g.project.name + message_title = _("You have been invited to share your expenses for %(project)s", + project=g.project.name) msg = Message(message_title, body=message_body, recipients=[email.strip() for email in form.emails.data.split(",")]) mail.send(msg) - flash("You invitations have been sent") + flash(_("Your invitations have been sent")) return redirect(url_for(".list_bills")) return render_template("send_invites.html", form=form) @@ -246,7 +251,7 @@ def add_member(): if form.validate(): member = form.save(g.project, Person()) db.session.commit() - flash("%s is had been added" % member.name) + flash(_("%(member)s had been added", member=member.name)) return redirect(url_for(".list_bills")) return render_template("add_member.html", form=form) @@ -258,7 +263,7 @@ def reactivate(member_id): if person: person[0].activated = True db.session.commit() - flash("%s is part of this project again" % person[0].name) + flash(_("%(name)s is part of this project again", name=person[0].name)) return redirect(url_for(".list_bills")) @@ -266,9 +271,9 @@ def reactivate(member_id): def remove_member(member_id): member = g.project.remove_member(member_id) if member.activated == False: - flash("User '%s' has been desactivated" % member.name) + flash(_("User '%(name)s' has been deactivated", name=member.name)) else: - flash("User '%s' has been removed" % member.name) + flash(_("User '%(name)s' has been removed", name=member.name)) return redirect(url_for(".list_bills")) @@ -281,7 +286,7 @@ def add_bill(): db.session.add(form.save(bill, g.project)) db.session.commit() - flash("The bill has been added") + flash(_("The bill has been added")) return redirect(url_for('.list_bills')) return render_template("add_bill.html", form=form) @@ -296,7 +301,7 @@ def delete_bill(bill_id): db.session.delete(bill) db.session.commit() - flash("The bill has been deleted") + flash(_("The bill has been deleted")) return redirect(url_for('.list_bills')) @@ -314,7 +319,7 @@ def edit_bill(bill_id): form.save(bill, g.project) db.session.commit() - flash("The bill has been modified") + flash(_("The bill has been modified")) return redirect(url_for('.list_bills')) form.fill(bill) @@ -331,6 +336,6 @@ def create_archive(): if request.method == "POST": if form.validate(): pass - flash("The data from XX to XX has been archived") + flash(_("The data from XX to XX has been archived")) return render_template("create_archive.html", form=form) |
