Enhance translation tooling (#360)

* Add a `make update-translations` command

To collect new strings to be translated from code.

Totally cheated on @Glandos commands :-)

Ref #336
Ref https://github.com/spiral-project/ihatemoney/issues/336#issue-322069517

* Document translation process

Fix #336

* Drop noisy location comments from .po files

Fix #339

* Drop .pot header

As it serves no purpose with our translation workflow.
.po header could be removed also, but pybabel has no option for that.

Ref #339
This commit is contained in:
JocelynDelalande 2018-08-05 14:59:39 +02:00 committed by Alexis Metaireau
parent c1b5eb1375
commit fc9781b8c0
4 changed files with 30 additions and 298 deletions

View file

@ -40,6 +40,10 @@ release: $(DEV_STAMP)
build-translations: build-translations:
$(VENV)/bin/pybabel compile -d ihatemoney/translations $(VENV)/bin/pybabel compile -d ihatemoney/translations
update-translations:
$(VENV)/bin/pybabel extract --strip-comments --omit-header --no-location --mapping-file ihatemoney/babel.cfg -o ihatemoney/messages.pot ihatemoney
$(VENV)/bin/pybabel update -i ihatemoney/messages.pot -d ihatemoney/translations/
create-database-revision: create-database-revision:
@read -p "Please enter a message describing this revision: " rev_message; \ @read -p "Please enter a message describing this revision: " rev_message; \
$(PYTHON) -m ihatemoney.manage db migrate -d ihatemoney/migrations -m "$${rev_message}" $(PYTHON) -m ihatemoney.manage db migrate -d ihatemoney/migrations -m "$${rev_message}"

View file

@ -89,6 +89,22 @@ Feel free to provide us mockups or to involve yourself into the discussions
hapenning on the github issue tracker. All ideas are welcome. Of course, if you hapenning on the github issue tracker. All ideas are welcome. Of course, if you
know how to implement them, feel free to fork and make a pull request. know how to implement them, feel free to fork and make a pull request.
As a translator
---------------
Collect all new strings to translate::
$ make update-translations
Add missing translations to *.po* files inside *translations/* dir using your
favorite text editor.
Compile them into *.mo* files::
$ make compile-translations
Commit both *.mo* and *.po*.
End-user End-user
-------- --------

View file

@ -1,43 +1,18 @@
# Translations template for PROJECT.
# Copyright (C) 2018 ORGANIZATION
# This file is distributed under the same license as the PROJECT project.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2018.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2018-05-15 21:43+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 2.5.3\n"
#: forms.py:46
msgid "Project name" msgid "Project name"
msgstr "" msgstr ""
#: forms.py:47 forms.py:71 forms.py:88
msgid "Private code" msgid "Private code"
msgstr "" msgstr ""
#: forms.py:48
msgid "Email" msgid "Email"
msgstr "" msgstr ""
#: forms.py:70 forms.py:87 forms.py:98
msgid "Project identifier" msgid "Project identifier"
msgstr "" msgstr ""
#: forms.py:72
msgid "Create the project" msgid "Create the project"
msgstr "" msgstr ""
#: forms.py:77
msgid "" msgid ""
"The project identifier is used to log in and for the URL of the project. " "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 " "We tried to generate an identifier for you but a project with this "
@ -45,499 +20,377 @@ msgid ""
"be able to remember" "be able to remember"
msgstr "" msgstr ""
#: forms.py:89 forms.py:94
msgid "Get in" msgid "Get in"
msgstr "" msgstr ""
#: forms.py:93
msgid "Admin password" msgid "Admin password"
msgstr "" msgstr ""
#: forms.py:99
msgid "Send me the code by email" msgid "Send me the code by email"
msgstr "" msgstr ""
#: forms.py:103
msgid "This project does not exists" msgid "This project does not exists"
msgstr "" msgstr ""
#: forms.py:108
msgid "Password mismatch" msgid "Password mismatch"
msgstr "" msgstr ""
#: forms.py:109
msgid "Password" msgid "Password"
msgstr "" msgstr ""
#: forms.py:110
msgid "Password confirmation" msgid "Password confirmation"
msgstr "" msgstr ""
#: forms.py:111
msgid "Reset password" msgid "Reset password"
msgstr "" msgstr ""
#: forms.py:115
msgid "Date" msgid "Date"
msgstr "" msgstr ""
#: forms.py:116
msgid "What?" msgid "What?"
msgstr "" msgstr ""
#: forms.py:117
msgid "Payer" msgid "Payer"
msgstr "" msgstr ""
#: forms.py:118
msgid "Amount paid" msgid "Amount paid"
msgstr "" msgstr ""
#: forms.py:119 templates/forms.html:100 templates/list_bills.html:101
msgid "For whom?" msgid "For whom?"
msgstr "" msgstr ""
#: forms.py:121
msgid "Submit" msgid "Submit"
msgstr "" msgstr ""
#: forms.py:122
msgid "Submit and add a new one" msgid "Submit and add a new one"
msgstr "" msgstr ""
#: forms.py:146
msgid "Bills can't be null" msgid "Bills can't be null"
msgstr "" msgstr ""
#: forms.py:151
msgid "Name" msgid "Name"
msgstr "" msgstr ""
#: forms.py:152
msgid "Weight" msgid "Weight"
msgstr "" msgstr ""
#: forms.py:153 templates/forms.html:123
msgid "Add" msgid "Add"
msgstr "" msgstr ""
#: forms.py:162
msgid "User name incorrect" msgid "User name incorrect"
msgstr "" msgstr ""
#: forms.py:167
msgid "This project already have this member" msgid "This project already have this member"
msgstr "" msgstr ""
#: forms.py:183
msgid "People to notify" msgid "People to notify"
msgstr "" msgstr ""
#: forms.py:184
msgid "Send invites" msgid "Send invites"
msgstr "" msgstr ""
#: forms.py:190
#, python-format #, python-format
msgid "The email %(email)s is not valid" msgid "The email %(email)s is not valid"
msgstr "" msgstr ""
#: forms.py:196
msgid "What do you want to download ?" msgid "What do you want to download ?"
msgstr "" msgstr ""
#: forms.py:199
msgid "bills" msgid "bills"
msgstr "" msgstr ""
#: forms.py:199
msgid "transactions" msgid "transactions"
msgstr "" msgstr ""
#: forms.py:201
msgid "Export file format" msgid "Export file format"
msgstr "" msgstr ""
#: web.py:129
msgid "Too many failed login attempts, please retry later." msgid "Too many failed login attempts, please retry later."
msgstr "" msgstr ""
#: web.py:144
#, python-format #, python-format
msgid "This admin password is not the right one. Only %(num)d attempts left." msgid "This admin password is not the right one. Only %(num)d attempts left."
msgstr "" msgstr ""
#: web.py:167
msgid "You either provided a bad token or no project identifier." msgid "You either provided a bad token or no project identifier."
msgstr "" msgstr ""
#: web.py:195
msgid "This private code is not the right one" msgid "This private code is not the right one"
msgstr "" msgstr ""
#: web.py:242
#, python-format #, python-format
msgid "You have just created '%(project)s' to share your expenses" msgid "You have just created '%(project)s' to share your expenses"
msgstr "" msgstr ""
#: web.py:260
#, python-format #, python-format
msgid "%(msg_compl)sThe project identifier is %(project)s" msgid "%(msg_compl)sThe project identifier is %(project)s"
msgstr "" msgstr ""
#: web.py:281
msgid "A link to reset your password has been sent to your email." msgid "A link to reset your password has been sent to your email."
msgstr "" msgstr ""
#: web.py:291
msgid "No token provided" msgid "No token provided"
msgstr "" msgstr ""
#: web.py:294
msgid "Invalid token" msgid "Invalid token"
msgstr "" msgstr ""
#: web.py:297
msgid "Unknown project" msgid "Unknown project"
msgstr "" msgstr ""
#: web.py:303
msgid "Password successfully reset." msgid "Password successfully reset."
msgstr "" msgstr ""
#: web.py:351
msgid "Project successfully deleted" msgid "Project successfully deleted"
msgstr "" msgstr ""
#: web.py:401
#, python-format #, python-format
msgid "You have been invited to share your expenses for %(project)s" msgid "You have been invited to share your expenses for %(project)s"
msgstr "" msgstr ""
#: web.py:408
msgid "Your invitations have been sent" msgid "Your invitations have been sent"
msgstr "" msgstr ""
#: web.py:439
#, python-format #, python-format
msgid "%(member)s had been added" msgid "%(member)s had been added"
msgstr "" msgstr ""
#: web.py:452
#, python-format #, python-format
msgid "%(name)s is part of this project again" msgid "%(name)s is part of this project again"
msgstr "" msgstr ""
#: web.py:461
#, python-format #, python-format
msgid "" msgid ""
"User '%(name)s' has been deactivated. It will still appear in the users " "User '%(name)s' has been deactivated. It will still appear in the users "
"list until its balance becomes zero." "list until its balance becomes zero."
msgstr "" msgstr ""
#: web.py:465
#, python-format #, python-format
msgid "User '%(name)s' has been removed" msgid "User '%(name)s' has been removed"
msgstr "" msgstr ""
#: web.py:480
#, python-format #, python-format
msgid "User '%(name)s' has been edited" msgid "User '%(name)s' has been edited"
msgstr "" msgstr ""
#: web.py:500
msgid "The bill has been added" msgid "The bill has been added"
msgstr "" msgstr ""
#: web.py:520
msgid "The bill has been deleted" msgid "The bill has been deleted"
msgstr "" msgstr ""
#: web.py:538
msgid "The bill has been modified" msgid "The bill has been modified"
msgstr "" msgstr ""
#: templates/add_bill.html:9 templates/edit_member.html:9
msgid "Back to the list" msgid "Back to the list"
msgstr "" msgstr ""
#: templates/admin.html:10
msgid "Administration tasks are currently disabled." msgid "Administration tasks are currently disabled."
msgstr "" msgstr ""
#: templates/authenticate.html:6
msgid "The project you are trying to access do not exist, do you want to" msgid "The project you are trying to access do not exist, do you want to"
msgstr "" msgstr ""
#: templates/authenticate.html:8
msgid "create it" msgid "create it"
msgstr "" msgstr ""
#: templates/authenticate.html:8
msgid "?" msgid "?"
msgstr "" msgstr ""
#: templates/create_project.html:4
msgid "Create a new project" msgid "Create a new project"
msgstr "" msgstr ""
#: templates/dashboard.html:5
msgid "Project" msgid "Project"
msgstr "" msgstr ""
#: templates/dashboard.html:5
msgid "Number of members" msgid "Number of members"
msgstr "" msgstr ""
#: templates/dashboard.html:5
msgid "Number of bills" msgid "Number of bills"
msgstr "" msgstr ""
#: templates/dashboard.html:5
msgid "Newest bill" msgid "Newest bill"
msgstr "" msgstr ""
#: templates/dashboard.html:5
msgid "Oldest bill" msgid "Oldest bill"
msgstr "" msgstr ""
#: templates/dashboard.html:5 templates/list_bills.html:101
msgid "Actions" msgid "Actions"
msgstr "" msgstr ""
#: templates/dashboard.html:17 templates/list_bills.html:65
#: templates/list_bills.html:111
msgid "edit" msgid "edit"
msgstr "" msgstr ""
#: templates/dashboard.html:18 templates/forms.html:83
#: templates/list_bills.html:112
msgid "delete" msgid "delete"
msgstr "" msgstr ""
#: templates/dashboard.html:25
msgid "The Dashboard is currently deactivated." msgid "The Dashboard is currently deactivated."
msgstr "" msgstr ""
#: templates/edit_project.html:6 templates/list_bills.html:24
msgid "you sure?" msgid "you sure?"
msgstr "" msgstr ""
#: templates/edit_project.html:11
msgid "Edit this project" msgid "Edit this project"
msgstr "" msgstr ""
#: templates/edit_project.html:15
msgid "Download this project's data" msgid "Download this project's data"
msgstr "" msgstr ""
#: templates/forms.html:27
msgid "Can't remember the password?" msgid "Can't remember the password?"
msgstr "" msgstr ""
#: templates/forms.html:30
msgid "Cancel" msgid "Cancel"
msgstr "" msgstr ""
#: templates/forms.html:82
msgid "Edit the project" msgid "Edit the project"
msgstr "" msgstr ""
#: templates/forms.html:91
msgid "Edit this bill" msgid "Edit this bill"
msgstr "" msgstr ""
#: templates/forms.html:91 templates/list_bills.html:89
msgid "Add a bill" msgid "Add a bill"
msgstr "" msgstr ""
#: templates/forms.html:103
msgid "Select all" msgid "Select all"
msgstr "" msgstr ""
#: templates/forms.html:103
msgid "Select none" msgid "Select none"
msgstr "" msgstr ""
#: templates/forms.html:122
msgid "Type user name here" msgid "Type user name here"
msgstr "" msgstr ""
#: templates/forms.html:129
msgid "Edit this member" msgid "Edit this member"
msgstr "" msgstr ""
#: templates/forms.html:145
msgid "Send the invitations" msgid "Send the invitations"
msgstr "" msgstr ""
#: templates/forms.html:146
msgid "No, thanks" msgid "No, thanks"
msgstr "" msgstr ""
#: templates/forms.html:157
msgid "Download" msgid "Download"
msgstr "" msgstr ""
#: templates/home.html:7
msgid "Manage your shared <br>expenses, easily" msgid "Manage your shared <br>expenses, easily"
msgstr "" msgstr ""
#: templates/home.html:9
msgid "Try out the demo" msgid "Try out the demo"
msgstr "" msgstr ""
#: templates/home.html:13
msgid "You're sharing a house?" msgid "You're sharing a house?"
msgstr "" msgstr ""
#: templates/home.html:13
msgid "Going on holidays with friends?" msgid "Going on holidays with friends?"
msgstr "" msgstr ""
#: templates/home.html:13
msgid "Simply sharing money with others?" msgid "Simply sharing money with others?"
msgstr "" msgstr ""
#: templates/home.html:13
msgid "We can help!" msgid "We can help!"
msgstr "" msgstr ""
#: templates/home.html:21
msgid "Log to an existing project" msgid "Log to an existing project"
msgstr "" msgstr ""
#: templates/home.html:25
msgid "log in" msgid "log in"
msgstr "" msgstr ""
#: templates/home.html:26
msgid "can't remember your password?" msgid "can't remember your password?"
msgstr "" msgstr ""
#: templates/home.html:34 templates/home.html:42
msgid "or create a new one" msgid "or create a new one"
msgstr "" msgstr ""
#: templates/home.html:38
msgid "let's get started" msgid "let's get started"
msgstr "" msgstr ""
#: templates/home.html:51
msgid "" msgid ""
"This access code will be sent to your friends. It is stored as-is by the " "This access code will be sent to your friends. It is stored as-is by the "
"server, so don\\'t reuse a personal password!" "server, so don\\'t reuse a personal password!"
msgstr "" msgstr ""
#: templates/layout.html:5
msgid "Account manager" msgid "Account manager"
msgstr "" msgstr ""
#: templates/layout.html:39
msgid "Bills" msgid "Bills"
msgstr "" msgstr ""
#: templates/layout.html:40
msgid "Settle" msgid "Settle"
msgstr "" msgstr ""
#: templates/layout.html:41
msgid "Statistics" msgid "Statistics"
msgstr "" msgstr ""
#: templates/layout.html:48
msgid "options" msgid "options"
msgstr "" msgstr ""
#: templates/layout.html:50
msgid "Project settings" msgid "Project settings"
msgstr "" msgstr ""
#: templates/layout.html:54
msgid "switch to" msgid "switch to"
msgstr "" msgstr ""
#: templates/layout.html:57
msgid "Start a new project" msgid "Start a new project"
msgstr "" msgstr ""
#: templates/layout.html:59
msgid "Logout" msgid "Logout"
msgstr "" msgstr ""
#: templates/layout.html:66
msgid "Dashboard" msgid "Dashboard"
msgstr "" msgstr ""
#: templates/layout.html:89
msgid "This is a free software" msgid "This is a free software"
msgstr "" msgstr ""
#: templates/layout.html:89
msgid "you can contribute and improve it!" msgid "you can contribute and improve it!"
msgstr "" msgstr ""
#: templates/list_bills.html:63
msgid "deactivate" msgid "deactivate"
msgstr "" msgstr ""
#: templates/list_bills.html:70
msgid "reactivate" msgid "reactivate"
msgstr "" msgstr ""
#: templates/list_bills.html:82
msgid "Invite people to join this project!" msgid "Invite people to join this project!"
msgstr "" msgstr ""
#: templates/list_bills.html:83
msgid "Add a new bill" msgid "Add a new bill"
msgstr "" msgstr ""
#: templates/list_bills.html:101
msgid "When?" msgid "When?"
msgstr "" msgstr ""
#: templates/list_bills.html:101
msgid "Who paid?" msgid "Who paid?"
msgstr "" msgstr ""
#: templates/list_bills.html:101
msgid "For what?" msgid "For what?"
msgstr "" msgstr ""
#: templates/list_bills.html:101 templates/settle_bills.html:22
msgid "How much?" msgid "How much?"
msgstr "" msgstr ""
#: templates/list_bills.html:109
msgid "each" msgid "each"
msgstr "" msgstr ""
#: templates/list_bills.html:120
msgid "Nothing to list yet. You probably want to" msgid "Nothing to list yet. You probably want to"
msgstr "" msgstr ""
#: templates/list_bills.html:120
msgid "add a bill" msgid "add a bill"
msgstr "" msgstr ""
#: templates/password_reminder.html:4
msgid "Password reminder" msgid "Password reminder"
msgstr "" msgstr ""
#: templates/recent_projects.html:2
msgid "Your projects" msgid "Your projects"
msgstr "" msgstr ""
#: templates/reset_password.html:7
msgid "Reset your password" msgid "Reset your password"
msgstr "" msgstr ""
#: templates/send_invites.html:4
msgid "Invite people to join this project" msgid "Invite people to join this project"
msgstr "" msgstr ""
#: templates/send_invites.html:5
msgid "" msgid ""
"Specify a (comma separated) list of email adresses you want to notify " "Specify a (comma separated) list of email adresses you want to notify "
"about the\n" "about the\n"
@ -545,34 +398,27 @@ msgid ""
" for you." " for you."
msgstr "" msgstr ""
#: templates/send_invites.html:7
msgid "" msgid ""
"If you prefer, you can share the project identifier and the shared\n" "If you prefer, you can share the project identifier and the shared\n"
"password by other communication means. Or even directly share the " "password by other communication means. Or even directly share the "
"following link:" "following link:"
msgstr "" msgstr ""
#: templates/settle_bills.html:22
msgid "Who pays?" msgid "Who pays?"
msgstr "" msgstr ""
#: templates/settle_bills.html:22
msgid "To whom?" msgid "To whom?"
msgstr "" msgstr ""
#: templates/statistics.html:21
msgid "Who?" msgid "Who?"
msgstr "" msgstr ""
#: templates/statistics.html:21
msgid "Paid" msgid "Paid"
msgstr "" msgstr ""
#: templates/statistics.html:21
msgid "Spent" msgid "Spent"
msgstr "" msgstr ""
#: templates/statistics.html:21
msgid "Balance" msgid "Balance"
msgstr "" msgstr ""

View file

@ -7,39 +7,32 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PROJECT VERSION\n" "Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2018-05-15 21:43+0200\n" "POT-Creation-Date: 2018-07-16 23:26+0200\n"
"PO-Revision-Date: 2018-05-15 22:00+0200\n" "PO-Revision-Date: 2018-05-15 22:00+0200\n"
"Last-Translator: Adrien CLERC <>\n" "Last-Translator: Adrien CLERC <>\n"
"Language-Team: fr <LL@li.org>\n"
"Language: fr\n" "Language: fr\n"
"Language-Team: fr <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n" "Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Virtaal 0.7.1\n"
"Generated-By: Babel 2.5.3\n" "Generated-By: Babel 2.5.3\n"
#: forms.py:46
msgid "Project name" msgid "Project name"
msgstr "Nom de projet" msgstr "Nom de projet"
#: forms.py:47 forms.py:71 forms.py:88
msgid "Private code" msgid "Private code"
msgstr "Code daccès" msgstr "Code daccès"
#: forms.py:48
msgid "Email" msgid "Email"
msgstr "Email" msgstr "Email"
#: forms.py:70 forms.py:87 forms.py:98
msgid "Project identifier" msgid "Project identifier"
msgstr "Identifiant du projet" msgstr "Identifiant du projet"
#: forms.py:72
msgid "Create the project" msgid "Create the project"
msgstr "Créer le projet" msgstr "Créer le projet"
#: forms.py:77
msgid "" msgid ""
"The project identifier is used to log in and for the URL of the project. " "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 " "We tried to generate an identifier for you but a project with this "
@ -48,507 +41,386 @@ msgid ""
msgstr "" msgstr ""
"Lidentifiant du projet est utilisé pour se connecter et pour lURL du " "Lidentifiant du projet est utilisé pour se connecter et pour lURL du "
"projet. Nous avons essayé de générer un identifiant mais celui ci existe " "projet. Nous avons essayé de générer un identifiant mais celui ci existe "
"déjà. Merci de créer un nouvel identifiant que vous serez capable de retenir" "déjà. Merci de créer un nouvel identifiant que vous serez capable de "
"retenir"
#: forms.py:89 forms.py:94
msgid "Get in" msgid "Get in"
msgstr "Entrer" msgstr "Entrer"
#: forms.py:93
msgid "Admin password" msgid "Admin password"
msgstr "Mot de passe administrateur" msgstr "Mot de passe administrateur"
#: forms.py:99
msgid "Send me the code by email" msgid "Send me the code by email"
msgstr "Envoyez moi le code par email" msgstr "Envoyez moi le code par email"
#: forms.py:103
msgid "This project does not exists" msgid "This project does not exists"
msgstr "Ce projet nexiste pas" msgstr "Ce projet nexiste pas"
#: forms.py:108
msgid "Password mismatch" msgid "Password mismatch"
msgstr "Les mots de passe sont différents" msgstr "Les mots de passe sont différents"
#: forms.py:109
msgid "Password" msgid "Password"
msgstr "Mot de passe" msgstr "Mot de passe"
#: forms.py:110
msgid "Password confirmation" msgid "Password confirmation"
msgstr "Confirmation du mot de passe" msgstr "Confirmation du mot de passe"
#: forms.py:111
msgid "Reset password" msgid "Reset password"
msgstr "Réinitialiser le mot de passe" msgstr "Réinitialiser le mot de passe"
#: forms.py:115
msgid "Date" msgid "Date"
msgstr "Date" msgstr "Date"
#: forms.py:116
msgid "What?" msgid "What?"
msgstr "Quoi ?" msgstr "Quoi ?"
#: forms.py:117
msgid "Payer" msgid "Payer"
msgstr "Payeur" msgstr "Payeur"
#: forms.py:118
msgid "Amount paid" msgid "Amount paid"
msgstr "Montant" msgstr "Montant"
#: forms.py:119 templates/forms.html:100 templates/list_bills.html:101
msgid "For whom?" msgid "For whom?"
msgstr "Pour qui ?" msgstr "Pour qui ?"
#: forms.py:121
msgid "Submit" msgid "Submit"
msgstr "Valider" msgstr "Valider"
#: forms.py:122
msgid "Submit and add a new one" msgid "Submit and add a new one"
msgstr "Valider et ajouter une autre facture" msgstr "Valider et ajouter une autre facture"
#: forms.py:146
msgid "Bills can't be null" msgid "Bills can't be null"
msgstr "Le montant dune facture ne peut pas être nul" msgstr "Le montant dune facture ne peut pas être nul"
#: forms.py:151
msgid "Name" msgid "Name"
msgstr "Nom" msgstr "Nom"
#: forms.py:152
msgid "Weight" msgid "Weight"
msgstr "Parts" msgstr "Parts"
#: forms.py:153 templates/forms.html:123
msgid "Add" msgid "Add"
msgstr "Ajouter" msgstr "Ajouter"
#: forms.py:162
msgid "User name incorrect" msgid "User name incorrect"
msgstr "Nom dutilisateur incorrect" msgstr "Nom dutilisateur incorrect"
#: forms.py:167
msgid "This project already have this member" msgid "This project already have this member"
msgstr "Ce membre existe déjà pour ce projet" msgstr "Ce membre existe déjà pour ce projet"
#: forms.py:183
msgid "People to notify" msgid "People to notify"
msgstr "Personnes à prévenir" msgstr "Personnes à prévenir"
#: forms.py:184
msgid "Send invites" msgid "Send invites"
msgstr "Envoyer les invitations" msgstr "Envoyer les invitations"
#: forms.py:190
#, python-format #, python-format
msgid "The email %(email)s is not valid" msgid "The email %(email)s is not valid"
msgstr "Lemail %(email)s est invalide" msgstr "Lemail %(email)s est invalide"
#: forms.py:196
msgid "What do you want to download ?" msgid "What do you want to download ?"
msgstr "Que voulez-vous télécharger ?" msgstr "Que voulez-vous télécharger ?"
#: forms.py:199
msgid "bills" msgid "bills"
msgstr "factures" msgstr "factures"
#: forms.py:199
msgid "transactions" msgid "transactions"
msgstr "remboursements" msgstr "remboursements"
#: forms.py:201
msgid "Export file format" msgid "Export file format"
msgstr "Format du fichier dexport" msgstr "Format du fichier dexport"
#: web.py:129
msgid "Too many failed login attempts, please retry later." msgid "Too many failed login attempts, please retry later."
msgstr "Trop d'échecs dauthentification successifs, veuillez réessayer plus tard." msgstr "Trop d'échecs dauthentification successifs, veuillez réessayer plus tard."
#: web.py:144
#, python-format #, python-format
msgid "This admin password is not the right one. Only %(num)d attempts left." msgid "This admin password is not the right one. Only %(num)d attempts left."
msgstr "" msgstr ""
"Le mot de passe administrateur que vous avez entré nest pas correct. " "Le mot de passe administrateur que vous avez entré nest pas correct. "
"Plus que %(num)d tentatives." "Plus que %(num)d tentatives."
#: web.py:167
msgid "You either provided a bad token or no project identifier." msgid "You either provided a bad token or no project identifier."
msgstr "Lidentifiant du projet ou le token fourni nest pas correct." msgstr "Lidentifiant du projet ou le token fourni nest pas correct."
#: web.py:195
msgid "This private code is not the right one" msgid "This private code is not the right one"
msgstr "Le code que vous avez entré nest pas correct" msgstr "Le code que vous avez entré nest pas correct"
#: web.py:242
#, python-format #, python-format
msgid "You have just created '%(project)s' to share your expenses" msgid "You have just created '%(project)s' to share your expenses"
msgstr "Vous venez de créer « %(project)s » pour partager vos dépenses" msgstr "Vous venez de créer « %(project)s » pour partager vos dépenses"
#: web.py:260
#, python-format #, python-format
msgid "%(msg_compl)sThe project identifier is %(project)s" msgid "%(msg_compl)sThe project identifier is %(project)s"
msgstr "%(msg_compl)sLidentifiant de ce projet est %(project)s" msgstr "%(msg_compl)sLidentifiant de ce projet est %(project)s"
#: web.py:281
msgid "A link to reset your password has been sent to your email." msgid "A link to reset your password has been sent to your email."
msgstr "Un lien pour changer votre mot de passe vous a été envoyé par mail." msgstr "Un lien pour changer votre mot de passe vous a été envoyé par mail."
#: web.py:291
msgid "No token provided" msgid "No token provided"
msgstr "Aucun token na été fourni" msgstr "Aucun token na été fourni"
#: web.py:294
msgid "Invalid token" msgid "Invalid token"
msgstr "Token invalide" msgstr "Token invalide"
#: web.py:297
msgid "Unknown project" msgid "Unknown project"
msgstr "Project inconnu" msgstr "Project inconnu"
#: web.py:303
msgid "Password successfully reset." msgid "Password successfully reset."
msgstr "Le mot de passe a été changé avec succès." msgstr "Le mot de passe a été changé avec succès."
#: web.py:351
msgid "Project successfully deleted" msgid "Project successfully deleted"
msgstr "Projet supprimé" msgstr "Projet supprimé"
#: web.py:401
#, python-format #, python-format
msgid "You have been invited to share your expenses for %(project)s" msgid "You have been invited to share your expenses for %(project)s"
msgstr "Vous avez été invité à partager vos dépenses pour %(project)s" msgstr "Vous avez été invité à partager vos dépenses pour %(project)s"
#: web.py:408
msgid "Your invitations have been sent" msgid "Your invitations have been sent"
msgstr "Vos invitations ont bien été envoyées" msgstr "Vos invitations ont bien été envoyées"
#: web.py:439
#, python-format #, python-format
msgid "%(member)s had been added" msgid "%(member)s had been added"
msgstr "%(member)s a bien été ajouté" msgstr "%(member)s a bien été ajouté"
#: web.py:452
#, python-format #, python-format
msgid "%(name)s is part of this project again" msgid "%(name)s is part of this project again"
msgstr "%(name)s a rejoint le projet" msgstr "%(name)s a rejoint le projet"
#: web.py:461
#, python-format #, python-format
msgid "" msgid ""
"User '%(name)s' has been deactivated. It will still appear in the users " "User '%(name)s' has been deactivated. It will still appear in the users "
"list until its balance becomes zero." "list until its balance becomes zero."
msgstr "" msgstr ""
"Le membre « %(name)s » a été désactivé. Il continuera dapparaître jusqu'à " "Le membre « %(name)s » a été désactivé. Il continuera dapparaître "
"ce que son solde soit nul." "jusqu'à ce que son solde soit nul."
#: web.py:465
#, python-format #, python-format
msgid "User '%(name)s' has been removed" msgid "User '%(name)s' has been removed"
msgstr "Le membre « %(name)s » a été supprimé" msgstr "Le membre « %(name)s » a été supprimé"
#: web.py:480
#, python-format #, python-format
msgid "User '%(name)s' has been edited" msgid "User '%(name)s' has been edited"
msgstr "Le membre « %(name)s » a été édité" msgstr "Le membre « %(name)s » a été édité"
#: web.py:500
msgid "The bill has been added" msgid "The bill has been added"
msgstr "La facture a bien été ajoutée" msgstr "La facture a bien été ajoutée"
#: web.py:520
msgid "The bill has been deleted" msgid "The bill has been deleted"
msgstr "La facture a été supprimée" msgstr "La facture a été supprimée"
#: web.py:538
msgid "The bill has been modified" msgid "The bill has been modified"
msgstr "La facture a été modifiée" msgstr "La facture a été modifiée"
#: templates/add_bill.html:9 templates/edit_member.html:9
msgid "Back to the list" msgid "Back to the list"
msgstr "Retourner à la liste" msgstr "Retourner à la liste"
#: templates/admin.html:10
msgid "Administration tasks are currently disabled." msgid "Administration tasks are currently disabled."
msgstr "Les tâches dadministration sont actuellement désactivées." msgstr "Les tâches dadministration sont actuellement désactivées."
#: templates/authenticate.html:6
msgid "The project you are trying to access do not exist, do you want to" msgid "The project you are trying to access do not exist, do you want to"
msgstr "Le projet auquel vous essayez daccéder nexiste pas, souhaitez vous" msgstr "Le projet auquel vous essayez daccéder nexiste pas, souhaitez vous"
#: templates/authenticate.html:8
msgid "create it" msgid "create it"
msgstr "le créer" msgstr "le créer"
#: templates/authenticate.html:8
msgid "?" msgid "?"
msgstr " ?" msgstr " ?"
#: templates/create_project.html:4
msgid "Create a new project" msgid "Create a new project"
msgstr "Créer un nouveau projet" msgstr "Créer un nouveau projet"
#: templates/dashboard.html:5
msgid "Project" msgid "Project"
msgstr "Projets" msgstr "Projets"
#: templates/dashboard.html:5
msgid "Number of members" msgid "Number of members"
msgstr "Nombre de membres" msgstr "Nombre de membres"
#: templates/dashboard.html:5
msgid "Number of bills" msgid "Number of bills"
msgstr "Nombre de factures" msgstr "Nombre de factures"
#: templates/dashboard.html:5
msgid "Newest bill" msgid "Newest bill"
msgstr "Facture la plus récente" msgstr "Facture la plus récente"
#: templates/dashboard.html:5
msgid "Oldest bill" msgid "Oldest bill"
msgstr "Facture la plus ancienne" msgstr "Facture la plus ancienne"
#: templates/dashboard.html:5 templates/list_bills.html:101
msgid "Actions" msgid "Actions"
msgstr "Actions" msgstr "Actions"
#: templates/dashboard.html:17 templates/list_bills.html:65
#: templates/list_bills.html:111
msgid "edit" msgid "edit"
msgstr "éditer" msgstr "éditer"
#: templates/dashboard.html:18 templates/forms.html:83
#: templates/list_bills.html:112
msgid "delete" msgid "delete"
msgstr "supprimer" msgstr "supprimer"
#: templates/dashboard.html:25
msgid "The Dashboard is currently deactivated." msgid "The Dashboard is currently deactivated."
msgstr "Le tableau de bord est actuellement désactivée." msgstr "Le tableau de bord est actuellement désactivée."
#: templates/edit_project.html:6 templates/list_bills.html:24
msgid "you sure?" msgid "you sure?"
msgstr "cest sûr ?" msgstr "cest sûr ?"
#: templates/edit_project.html:11
msgid "Edit this project" msgid "Edit this project"
msgstr "Éditer ce projet" msgstr "Éditer ce projet"
#: templates/edit_project.html:15
msgid "Download this project's data" msgid "Download this project's data"
msgstr "Télécharger les données de ce projet" msgstr "Télécharger les données de ce projet"
#: templates/forms.html:27
msgid "Can't remember the password?" msgid "Can't remember the password?"
msgstr "Vous ne vous souvenez plus du code daccès ?" msgstr "Vous ne vous souvenez plus du code daccès ?"
#: templates/forms.html:30
msgid "Cancel" msgid "Cancel"
msgstr "Annuler" msgstr "Annuler"
#: templates/forms.html:82
msgid "Edit the project" msgid "Edit the project"
msgstr "Éditer le projet" msgstr "Éditer le projet"
#: templates/forms.html:91
msgid "Edit this bill" msgid "Edit this bill"
msgstr "Éditer cette facture" msgstr "Éditer cette facture"
#: templates/forms.html:91 templates/list_bills.html:89
msgid "Add a bill" msgid "Add a bill"
msgstr "Ajouter une facture" msgstr "Ajouter une facture"
#: templates/forms.html:103
msgid "Select all" msgid "Select all"
msgstr "Tout cocher" msgstr "Tout cocher"
#: templates/forms.html:103
msgid "Select none" msgid "Select none"
msgstr "Tout décocher" msgstr "Tout décocher"
#: templates/forms.html:122
msgid "Type user name here" msgid "Type user name here"
msgstr "Nouveau participant" msgstr "Nouveau participant"
#: templates/forms.html:129
msgid "Edit this member" msgid "Edit this member"
msgstr "Éditer ce participant" msgstr "Éditer ce participant"
#: templates/forms.html:145
msgid "Send the invitations" msgid "Send the invitations"
msgstr "Envoyer les invitations" msgstr "Envoyer les invitations"
#: templates/forms.html:146
msgid "No, thanks" msgid "No, thanks"
msgstr "Non merci" msgstr "Non merci"
#: templates/forms.html:157
msgid "Download" msgid "Download"
msgstr "Télécharger" msgstr "Télécharger"
#: templates/home.html:7
msgid "Manage your shared <br>expenses, easily" msgid "Manage your shared <br>expenses, easily"
msgstr "Gérez vos dépenses <br>partagées, facilement" msgstr "Gérez vos dépenses <br>partagées, facilement"
#: templates/home.html:9
msgid "Try out the demo" msgid "Try out the demo"
msgstr "Essayez la démo" msgstr "Essayez la démo"
#: templates/home.html:13
msgid "You're sharing a house?" msgid "You're sharing a house?"
msgstr "Vous êtes en colocation ?" msgstr "Vous êtes en colocation ?"
#: templates/home.html:13
msgid "Going on holidays with friends?" msgid "Going on holidays with friends?"
msgstr "Partez en vacances avec des amis ?" msgstr "Partez en vacances avec des amis ?"
#: templates/home.html:13
msgid "Simply sharing money with others?" msgid "Simply sharing money with others?"
msgstr "Ça vous arrive de partager de largent avec dautres ?" msgstr "Ça vous arrive de partager de largent avec dautres ?"
#: templates/home.html:13
msgid "We can help!" msgid "We can help!"
msgstr "On peut vous aider !" msgstr "On peut vous aider !"
#: templates/home.html:21
msgid "Log to an existing project" msgid "Log to an existing project"
msgstr "Se connecter à un projet existant" msgstr "Se connecter à un projet existant"
#: templates/home.html:25
msgid "log in" msgid "log in"
msgstr "se connecter" msgstr "se connecter"
#: templates/home.html:26
msgid "can't remember your password?" msgid "can't remember your password?"
msgstr "vous ne vous souvenez plus du code daccès ?" msgstr "vous ne vous souvenez plus du code daccès ?"
#: templates/home.html:34 templates/home.html:42
msgid "or create a new one" msgid "or create a new one"
msgstr "ou créez en un nouveau" msgstr "ou créez en un nouveau"
#: templates/home.html:38
msgid "let's get started" msgid "let's get started"
msgstr "cest parti !" msgstr "cest parti !"
#: templates/home.html:51
msgid "" msgid ""
"This access code will be sent to your friends. It is stored as-is by the " "This access code will be sent to your friends. It is stored as-is by the "
"server, so don\\'t reuse a personal password!" "server, so don\\'t reuse a personal password!"
msgstr "" msgstr ""
"Ce code daccès va être envoyé à vos amis et stocké en clair sur le serveur. " "Ce code daccès va être envoyé à vos amis et stocké en clair sur le "
"Nutilisez pas un mot de passe personnel !" "serveur. Nutilisez pas un mot de passe personnel !"
#: templates/layout.html:5
msgid "Account manager" msgid "Account manager"
msgstr "Gestion de comptes" msgstr "Gestion de comptes"
#: templates/layout.html:39
msgid "Bills" msgid "Bills"
msgstr "Factures" msgstr "Factures"
#: templates/layout.html:40
msgid "Settle" msgid "Settle"
msgstr "Remboursements" msgstr "Remboursements"
#: templates/layout.html:41
msgid "Statistics" msgid "Statistics"
msgstr "Statistiques" msgstr "Statistiques"
#: templates/layout.html:48
msgid "options" msgid "options"
msgstr "options" msgstr "options"
#: templates/layout.html:50
msgid "Project settings" msgid "Project settings"
msgstr "Options du projet" msgstr "Options du projet"
#: templates/layout.html:54
msgid "switch to" msgid "switch to"
msgstr "aller à" msgstr "aller à"
#: templates/layout.html:57
msgid "Start a new project" msgid "Start a new project"
msgstr "Nouveau projet" msgstr "Nouveau projet"
#: templates/layout.html:59
msgid "Logout" msgid "Logout"
msgstr "Se déconnecter" msgstr "Se déconnecter"
#: templates/layout.html:66
msgid "Dashboard" msgid "Dashboard"
msgstr "Tableau de bord" msgstr "Tableau de bord"
#: templates/layout.html:89
msgid "This is a free software" msgid "This is a free software"
msgstr "Ceci est un logiciel libre" msgstr "Ceci est un logiciel libre"
#: templates/layout.html:89
msgid "you can contribute and improve it!" msgid "you can contribute and improve it!"
msgstr "vous pouvez y contribuer et laméliorer !" msgstr "vous pouvez y contribuer et laméliorer !"
#: templates/list_bills.html:63
msgid "deactivate" msgid "deactivate"
msgstr "désactiver" msgstr "désactiver"
#: templates/list_bills.html:70
msgid "reactivate" msgid "reactivate"
msgstr "ré-activer" msgstr "ré-activer"
#: templates/list_bills.html:82
msgid "Invite people to join this project!" msgid "Invite people to join this project!"
msgstr "Invitez dautres personnes à rejoindre ce projet !" msgstr "Invitez dautres personnes à rejoindre ce projet !"
#: templates/list_bills.html:83
msgid "Add a new bill" msgid "Add a new bill"
msgstr "Nouvelle facture" msgstr "Nouvelle facture"
#: templates/list_bills.html:101
msgid "When?" msgid "When?"
msgstr "Quand ?" msgstr "Quand ?"
#: templates/list_bills.html:101
msgid "Who paid?" msgid "Who paid?"
msgstr "Qui a payé ?" msgstr "Qui a payé ?"
#: templates/list_bills.html:101
msgid "For what?" msgid "For what?"
msgstr "Pour quoi ?" msgstr "Pour quoi ?"
#: templates/list_bills.html:101 templates/settle_bills.html:22
msgid "How much?" msgid "How much?"
msgstr "Combien ?" msgstr "Combien ?"
#: templates/list_bills.html:109
msgid "each" msgid "each"
msgstr "chacun" msgstr "chacun"
#: templates/list_bills.html:120
msgid "Nothing to list yet. You probably want to" msgid "Nothing to list yet. You probably want to"
msgstr "Rien à lister pour linstant. Vous voulez surement" msgstr "Rien à lister pour linstant. Vous voulez surement"
#: templates/list_bills.html:120
msgid "add a bill" msgid "add a bill"
msgstr "ajouter une facture" msgstr "ajouter une facture"
#: templates/password_reminder.html:4
msgid "Password reminder" msgid "Password reminder"
msgstr "Rappel du code daccès" msgstr "Rappel du code daccès"
#: templates/recent_projects.html:2
msgid "Your projects" msgid "Your projects"
msgstr "Vos projets" msgstr "Vos projets"
#: templates/reset_password.html:7
msgid "Reset your password" msgid "Reset your password"
msgstr "Changez votre mot de passe" msgstr "Changez votre mot de passe"
#: templates/send_invites.html:4
msgid "Invite people to join this project" msgid "Invite people to join this project"
msgstr "Invitez des personnes à rejoindre ce projet" msgstr "Invitez des personnes à rejoindre ce projet"
#: templates/send_invites.html:5
msgid "" msgid ""
"Specify a (comma separated) list of email adresses you want to notify " "Specify a (comma separated) list of email adresses you want to notify "
"about the\n" "about the\n"
@ -558,7 +430,6 @@ msgstr ""
"Entrez les adresses des personnes que vous souhaitez inviter,\n" "Entrez les adresses des personnes que vous souhaitez inviter,\n"
"séparées par des virgules, on soccupe de leur envoyer un email." "séparées par des virgules, on soccupe de leur envoyer un email."
#: templates/send_invites.html:7
msgid "" msgid ""
"If you prefer, you can share the project identifier and the shared\n" "If you prefer, you can share the project identifier and the shared\n"
"password by other communication means. Or even directly share the " "password by other communication means. Or even directly share the "
@ -568,27 +439,21 @@ msgstr ""
"et son mot de passe par un autre moyen de communication. Ou directement " "et son mot de passe par un autre moyen de communication. Ou directement "
"partager le lien suivant :" "partager le lien suivant :"
#: templates/settle_bills.html:22
msgid "Who pays?" msgid "Who pays?"
msgstr "Qui doit payer ?" msgstr "Qui doit payer ?"
#: templates/settle_bills.html:22
msgid "To whom?" msgid "To whom?"
msgstr "Pour qui ?" msgstr "Pour qui ?"
#: templates/statistics.html:21
msgid "Who?" msgid "Who?"
msgstr "Qui ?" msgstr "Qui ?"
#: templates/statistics.html:21
msgid "Paid" msgid "Paid"
msgstr "A payé" msgstr "A payé"
#: templates/statistics.html:21
msgid "Spent" msgid "Spent"
msgstr "A dépensé" msgstr "A dépensé"
#: templates/statistics.html:21
msgid "Balance" msgid "Balance"
msgstr "Solde" msgstr "Solde"
@ -623,3 +488,4 @@ msgstr "Solde"
#~ msgid "Invite" #~ msgid "Invite"
#~ msgstr "Invitez" #~ msgstr "Invitez"