aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--budget/babel.cfg3
-rw-r--r--budget/forms.py67
-rw-r--r--budget/messages.pot445
-rw-r--r--budget/models.py1
-rw-r--r--budget/requirements.txt1
-rw-r--r--budget/run.py11
-rw-r--r--budget/templates/add_bill.html2
-rw-r--r--budget/templates/authenticate.html4
-rw-r--r--budget/templates/create_project.html2
-rw-r--r--budget/templates/edit_bill.html4
-rw-r--r--budget/templates/edit_project.html2
-rw-r--r--budget/templates/forms.html16
-rw-r--r--budget/templates/home.html16
-rw-r--r--budget/templates/invitation_mail.en (renamed from budget/templates/invitation_mail)0
-rw-r--r--budget/templates/invitation_mail.fr9
-rw-r--r--budget/templates/layout.html18
-rw-r--r--budget/templates/list_bills.html20
-rw-r--r--budget/templates/password_reminder.en (renamed from budget/templates/password_reminder)0
-rw-r--r--budget/templates/password_reminder.fr7
-rw-r--r--budget/templates/password_reminder.html2
-rw-r--r--budget/templates/recent_projects.html2
-rw-r--r--budget/templates/reminder_mail.en (renamed from budget/templates/reminder_mail)0
-rw-r--r--budget/templates/reminder_mail.fr8
-rw-r--r--budget/templates/send_invites.html14
-rw-r--r--budget/translations/fr/LC_MESSAGES/messages.mobin0 -> 7198 bytes
-rw-r--r--budget/translations/fr/LC_MESSAGES/messages.po450
-rw-r--r--budget/web.py41
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
new file mode 100644
index 0000000..5360b8d
--- /dev/null
+++ b/budget/translations/fr/LC_MESSAGES/messages.mo
Binary files differ
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)