diff --git a/README.md b/README.md
index d9c436ec..f2601943 100644
--- a/README.md
+++ b/README.md
@@ -267,14 +267,18 @@ La documentation plus haut niveau sur le développement est disponible sur [le W
### Regénérer les fichiers de traduction
-Pour regénérer les traductions vous pouvez vous placer à la racine du projet et lancer le script `makemessages`. Il faut penser à ignorer les dossiers ne contenant pas notre code, dont le virtualenv.
+Pour regénérer les traductions vous pouvez vous placer à la racine du projet et lancer le script `makemessages`.
+Il faut penser à ignorer les dossiers ne contenant pas notre code, dont le virtualenv.
+De plus, il faut aussi extraire les variables des fichiers JavaScript.
```bash
-django-admin makemessages -i env
+python3 manage.py makemessages -i env
+python3 manage.py makemessages -i env -e js -d djangojs
```
Une fois les fichiers édités, vous pouvez compiler les nouvelles traductions avec
```bash
-django-admin compilemessages
+python3 manage.py compilemessages
+python3 manage.py compilejsmessages
```
diff --git a/ansible/roles/7-postinstall/tasks/main.yml b/ansible/roles/7-postinstall/tasks/main.yml
index 6f3017a5..604327e6 100644
--- a/ansible/roles/7-postinstall/tasks/main.yml
+++ b/ansible/roles/7-postinstall/tasks/main.yml
@@ -1,4 +1,10 @@
---
+- name: Collect static files
+ command: /var/www/note_kfet/env/bin/python manage.py collectstatic --noinput
+ args:
+ chdir: /var/www/note_kfet
+ become_user: www-data
+
- name: Migrate Django database
command: /var/www/note_kfet/env/bin/python manage.py migrate
args:
@@ -11,14 +17,14 @@
chdir: /var/www/note_kfet
become_user: www-data
+- name: Compile JavaScript messages
+ command: /var/www/note_kfet/env/bin/python manage.py compilejsmessages
+ args:
+ chdir: /var/www/note_kfet
+ become_user: www-data
+
- name: Install initial fixtures
command: /var/www/note_kfet/env/bin/python manage.py loaddata initial
args:
chdir: /var/www/note_kfet
become_user: postgres
-
-- name: Collect static files
- command: /var/www/note_kfet/env/bin/python manage.py collectstatic --noinput
- args:
- chdir: /var/www/note_kfet
- become_user: www-data
diff --git a/apps/activity/templates/activity/activity_detail.html b/apps/activity/templates/activity/activity_detail.html
index c3a40891..0ba1d481 100644
--- a/apps/activity/templates/activity/activity_detail.html
+++ b/apps/activity/templates/activity/activity_detail.html
@@ -30,7 +30,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
headers: {"X-CSRFTOKEN": CSRF_TOKEN}
})
.done(function() {
- addMsg('Invité supprimé','success');
+ addMsg('{% trans "Guest deleted" %}', 'success');
$("#guests_table").load(location.pathname + " #guests_table");
})
.fail(function(xhr, textStatus, error) {
diff --git a/apps/activity/templates/activity/activity_entry.html b/apps/activity/templates/activity/activity_entry.html
index d778490f..0a0e8015 100644
--- a/apps/activity/templates/activity/activity_entry.html
+++ b/apps/activity/templates/activity/activity_entry.html
@@ -86,10 +86,10 @@ SPDX-License-Identifier: GPL-3.0-or-later
}).done(function () {
if (target.hasClass("table-info"))
addMsg(
- "Entrée effectuée, mais attention : la personne n'est plus adhérente Kfet.",
+ "{% trans "Entry done, but caution: the user is not a Kfet member." %}",
"warning", 10000);
else
- addMsg("Entrée effectuée !", "success", 4000);
+ addMsg("Entry made!", "success", 4000);
reloadTable(true);
}).fail(function (xhr) {
errMsg(xhr.responseJSON, 4000);
@@ -121,10 +121,10 @@ SPDX-License-Identifier: GPL-3.0-or-later
}).done(function () {
if (target.hasClass("table-info"))
addMsg(
- "Entrée effectuée, mais attention : la personne n'est plus adhérente Kfet.",
+ "{% trans "Entry done, but caution: the user is not a Kfet member." %}",
"warning", 10000);
else
- addMsg("Entrée effectuée !", "success", 4000);
+ addMsg("{% trans "Entry done!" %}", "success", 4000);
reloadTable(true);
}).fail(function (xhr) {
errMsg(xhr.responseJSON, 4000);
diff --git a/apps/member/static/member/js/alias.js b/apps/member/static/member/js/alias.js
index 444e1bcf..d445dafd 100644
--- a/apps/member/static/member/js/alias.js
+++ b/apps/member/static/member/js/alias.js
@@ -14,7 +14,7 @@ function create_alias (e) {
}).done(function () {
// Reload table
$('#alias_table').load(location.pathname + ' #alias_table')
- addMsg('Alias ajouté', 'success')
+ addMsg(gettext('Alias successfully added'), 'success')
}).fail(function (xhr, _textStatus, _error) {
errMsg(xhr.responseJSON)
})
@@ -22,7 +22,7 @@ function create_alias (e) {
/**
* On click of "delete", delete the alias
- * @param Integer button_id Alias id to remove
+ * @param button_id:Integer Alias id to remove
*/
function delete_button (button_id) {
$.ajax({
@@ -30,7 +30,7 @@ function delete_button (button_id) {
method: 'DELETE',
headers: { 'X-CSRFTOKEN': CSRF_TOKEN }
}).done(function () {
- addMsg('Alias supprimé', 'success')
+ addMsg(gettext('Alias successfully deleted'), 'success')
$('#alias_table').load(location.pathname + ' #alias_table')
}).fail(function (xhr, _textStatus, _error) {
errMsg(xhr.responseJSON)
diff --git a/apps/note/static/note/js/consos.js b/apps/note/static/note/js/consos.js
index 78909600..3c16af98 100644
--- a/apps/note/static/note/js/consos.js
+++ b/apps/note/static/note/js/consos.js
@@ -222,17 +222,14 @@ function consume (source, source_alias, dest, quantity, amount, reason, type, ca
if (!isNaN(source.balance)) {
const newBalance = source.balance - quantity * amount
if (newBalance <= -5000) {
- addMsg('Attention, La transaction depuis la note ' + source_alias + ' a été réalisée avec ' +
- 'succès, mais la note émettrice ' + source_alias + ' est en négatif sévère.',
- 'danger', 30000)
+ addMsg(interpolate(gettext('Warning, the transaction from the note %s succeed, ' +
+ 'but the emitter note %s is very negative.', [source_alias, source_alias])), 'danger', 30000)
} else if (newBalance < 0) {
- addMsg('Attention, La transaction depuis la note ' + source_alias + ' a été réalisée avec ' +
- 'succès, mais la note émettrice ' + source_alias + ' est en négatif.',
- 'warning', 30000)
+ addMsg(interpolate(gettext('Warning, the transaction from the note %s succeed, ' +
+ 'but the emitter note %s is negative.', [source_alias, source_alias])), 'warning', 30000)
}
if (source.membership && source.membership.date_end < new Date().toISOString()) {
- addMsg('Attention : la note émettrice ' + source.name + " n'est plus adhérente.",
- 'danger', 30000)
+ addMsg(interpolate(gettext('Warning, the emitter note %s is no more a BDE member.', [source_alias])), 'danger', 30000)
}
}
reset()
@@ -253,7 +250,7 @@ function consume (source, source_alias, dest, quantity, amount, reason, type, ca
template: template
}).done(function () {
reset()
- addMsg("La transaction n'a pas pu être validée pour cause de solde insuffisant.", 'danger', 10000)
+ addMsg(gettext("The transaction couldn't be validated because of insufficient balance."), 'danger', 10000)
}).fail(function () {
reset()
errMsg(e.responseJSON)
diff --git a/apps/note/static/note/js/transfer.js b/apps/note/static/note/js/transfer.js
index e8b6cf52..02388545 100644
--- a/apps/note/static/note/js/transfer.js
+++ b/apps/note/static/note/js/transfer.js
@@ -239,20 +239,20 @@ $('#btn_transfer').click(function () {
if (!amount_field.val() || isNaN(amount_field.val()) || amount_field.val() <= 0) {
amount_field.addClass('is-invalid')
- $('#amount-required').html('Ce champ est requis et doit comporter un nombre décimal strictement positif.')
+ $('#amount-required').html('' + gettext('This field is required and must contain a decimal positive number.') + '')
error = true
}
const amount = Math.floor(100 * amount_field.val())
if (amount > 2147483647) {
amount_field.addClass('is-invalid')
- $('#amount-required').html('Le montant ne doit pas excéder 21474836.47 €.')
+ $('#amount-required').html('' + gettext('The amount must stay under 21,474,836.47 €.') + '')
error = true
}
if (!reason_field.val() && $('#type_transfer').is(':checked')) {
reason_field.addClass('is-invalid')
- $('#reason-required').html('Ce champ est requis.')
+ $('#reason-required').html('' + gettext('This field is required.') + '')
error = true
}
@@ -278,9 +278,8 @@ $('#btn_transfer').click(function () {
[...sources_notes_display].forEach(function (source) {
[...dests_notes_display].forEach(function (dest) {
if (source.note.id === dest.note.id) {
- addMsg('Attention : la transaction de ' + pretty_money(amount) + ' de la note ' + source.name +
- ' vers la note ' + dest.name + " n'a pas été faite car il s'agit de la même note au départ" +
- " et à l'arrivée.", 'warning', 10000)
+ addMsg(interpolate(gettext('Warning: the transaction of %s from %s to %s was not made because ' +
+ 'it is the same source and destination note.'), [pretty_money(amount), source.name, dest.name]), 'warning', 10000)
LOCK = false
return
}
@@ -300,43 +299,35 @@ $('#btn_transfer').click(function () {
destination_alias: dest.name
}).done(function () {
if (source.note.membership && source.note.membership.date_end < new Date().toISOString()) {
- addMsg('Attention : la note émettrice ' + source.name + " n'est plus adhérente.",
- 'danger', 30000)
+ addMsg(interpolate(gettext('Warning, the emitter note %s is no more a BDE member.'), [source.name]), 'danger', 30000)
}
if (dest.note.membership && dest.note.membership.date_end < new Date().toISOString()) {
- addMsg('Attention : la note destination ' + dest.name + " n'est plus adhérente.",
- 'danger', 30000)
+ addMsg(interpolate(gettext('Warning, the destination note %s is no more a BDE member.'), [source.name]), 'danger', 30000)
}
if (!isNaN(source.note.balance)) {
const newBalance = source.note.balance - source.quantity * dest.quantity * amount
if (newBalance <= -5000) {
- addMsg('Le transfert de ' +
- pretty_money(source.quantity * dest.quantity * amount) + ' de la note ' +
- source.name + ' vers la note ' + dest.name + ' a été fait avec succès, ' +
- 'mais la note émettrice est en négatif sévère.', 'danger', 10000)
+ addMsg(interpolate(gettext('Warning, the transaction of %s from the note %s to the note %s succeed, but the emitter note %s is very negative.'),
+ [pretty_money(source.quantity * dest.quantity * amount), source.name, dest.name, source.name]), 'danger', 10000)
reset()
return
} else if (newBalance < 0) {
- addMsg('Le transfert de ' +
- pretty_money(source.quantity * dest.quantity * amount) + ' de la note ' +
- source.name + ' vers la note ' + dest.name + ' a été fait avec succès, ' +
- 'mais la note émettrice est en négatif.', 'warning', 10000)
+ addMsg(interpolate(gettext('Warning, the transaction of %s from the note %s to the note %s succeed, but the emitter note %s is negative.'),
+ [pretty_money(source.quantity * dest.quantity * amount), source.name, dest.name, source.name]), 'danger', 10000)
reset()
return
}
}
- addMsg('Le transfert de ' +
- pretty_money(source.quantity * dest.quantity * amount) + ' de la note ' + source.name +
- ' vers la note ' + dest.name + ' a été fait avec succès !', 'success', 10000)
+ addMsg(interpolate(gettext('Transfer of %s from %s to %s succeed!'),
+ [pretty_money(source.quantity * dest.quantity * amount), source.name, dest.name]), 'success', 10000)
reset()
}).fail(function (err) { // do it again but valid = false
const errObj = JSON.parse(err.responseText)
if (errObj.non_field_errors) {
- addMsg('Le transfert de ' +
- pretty_money(source.quantity * dest.quantity * amount) + ' de la note ' + source.name +
- ' vers la note ' + dest.name + ' a échoué : ' + errObj.non_field_errors, 'danger')
+ addMsg(interpolate(gettext('Transfer of %s from %s to %s failed: %s'),
+ [pretty_money(source.quantity * dest.quantity * amount), source.name, dest.name, errObj.non_field_errors]), 'danger')
LOCK = false
return
}
@@ -356,17 +347,15 @@ $('#btn_transfer').click(function () {
destination: dest.note.id,
destination_alias: dest.name
}).done(function () {
- addMsg('Le transfert de ' +
- pretty_money(source.quantity * dest.quantity * amount) + ' de la note ' + source.name +
- ' vers la note ' + dest.name + ' a échoué : Solde insuffisant', 'danger', 10000)
+ addMsg(interpolate(gettext('Transfer of %s from %s to %s failed: %s'),
+ [pretty_money(source.quantity * dest.quantity * amount), source.name, + dest.name, gettext('insufficient funds')]), 'danger', 10000)
reset()
}).fail(function (err) {
const errObj = JSON.parse(err.responseText)
let error = errObj.detail ? errObj.detail : errObj.non_field_errors
if (!error) { error = err.responseText }
- addMsg('Le transfert de ' +
- pretty_money(source.quantity * dest.quantity * amount) + ' de la note ' + source.name +
- ' vers la note ' + dest.name + ' a échoué : ' + error, 'danger')
+ addMsg(interpolate(gettext('Transfer of %s from %s to %s failed: %s'),
+ [pretty_money(source.quantity * dest.quantity * amount), source.name, + dest.name, error]), 'danger')
LOCK = false
})
})
@@ -412,14 +401,14 @@ $('#btn_transfer').click(function () {
first_name: $('#first_name').val(),
bank: $('#bank').val()
}).done(function () {
- addMsg('Le crédit/retrait a bien été effectué !', 'success', 10000)
- if (user_note.membership && user_note.membership.date_end < new Date().toISOString()) { addMsg('Attention : la note ' + alias + " n'est plus adhérente.", 'danger', 10000) }
+ addMsg(gettext('Credit/debit succeed!'), 'success', 10000)
+ if (user_note.membership && user_note.membership.date_end < new Date().toISOString()) { addMsg(gettext('Warning, the emitter note %s is no more a BDE member.'), 'danger', 10000) }
reset()
}).fail(function (err) {
const errObj = JSON.parse(err.responseText)
let error = errObj.detail ? errObj.detail : errObj.non_field_errors
if (!error) { error = err.responseText }
- addMsg('Le crédit/retrait a échoué : ' + error, 'danger', 10000)
+ addMsg(interpolate(gettext('Credit/debit failed: %s'), [error]), 'danger', 10000)
LOCK = false
})
}
diff --git a/apps/permission/fixtures/initial.json b/apps/permission/fixtures/initial.json
index 7700f3e8..2f3d064a 100644
--- a/apps/permission/fixtures/initial.json
+++ b/apps/permission/fixtures/initial.json
@@ -2855,6 +2855,22 @@
"description": "Voir n'importe quel utilisateur qui est adhérent BDE"
}
},
+ {
+ "model": "permission.permission",
+ "pk": 183,
+ "fields": {
+ "model": [
+ "note",
+ "note"
+ ],
+ "query": "{}",
+ "type": "change",
+ "mask": 1,
+ "field": "display_image",
+ "permanent": false,
+ "description": "Changer l'image de n'importe quelle note"
+ }
+ },
{
"model": "permission.role",
"pk": 1,
@@ -3070,7 +3086,8 @@
175,
176,
177,
- 178
+ 178,
+ 183
]
}
},
@@ -3253,7 +3270,12 @@
175,
176,
177,
- 178
+ 178,
+ 179,
+ 180,
+ 181,
+ 182,
+ 183
]
}
},
diff --git a/apps/scripts b/apps/scripts
index 654492f9..dbe7bf65 160000
--- a/apps/scripts
+++ b/apps/scripts
@@ -1 +1 @@
-Subproject commit 654492f9e9262c37fecb43261f02557aeb6e1cc1
+Subproject commit dbe7bf65917df40b0ce476f357d04726e20b406f
diff --git a/entrypoint.sh b/entrypoint.sh
index dfd68977..f04bf16d 100755
--- a/entrypoint.sh
+++ b/entrypoint.sh
@@ -14,6 +14,7 @@ fi
# Set up Django project
python3 manage.py collectstatic --noinput
python3 manage.py compilemessages
+python3 manage.py compilejsmessages
python3 manage.py migrate
if [ "$1" ]; then
diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po
index 90f99283..f467f889 100644
--- a/locale/de/LC_MESSAGES/django.po
+++ b/locale/de/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-10-07 11:42+0200\n"
+"POT-Creation-Date: 2020-11-15 23:26+0100\n"
"PO-Revision-Date: 2020-09-13 12:39+0200\n"
"Last-Translator: elkmaennchen \n"
"Language-Team: \n"
@@ -279,11 +279,17 @@ msgstr "Kontostand"
msgid "Guests list"
msgstr "Gastliste"
+#: apps/activity/templates/activity/activity_detail.html:33
+#, fuzzy
+#| msgid "Guests list"
+msgid "Guest deleted"
+msgstr "Gastliste"
+
#: apps/activity/templates/activity/activity_entry.html:14
#: apps/note/models/transactions.py:256
#: apps/note/templates/note/transaction_form.html:16
#: apps/note/templates/note/transaction_form.html:148
-#: note_kfet/templates/base.html:70
+#: note_kfet/templates/base.html:73
msgid "Transfer"
msgstr "Überweisen"
@@ -308,6 +314,17 @@ msgstr "Eintritte"
msgid "Return to activity page"
msgstr "Zurück zur Veranstaltungseite"
+#: apps/activity/templates/activity/activity_entry.html:89
+#: apps/activity/templates/activity/activity_entry.html:124
+msgid "Entry done, but caution: the user is not a Kfet member."
+msgstr ""
+
+#: apps/activity/templates/activity/activity_entry.html:127
+#, fuzzy
+#| msgid "Entry page"
+msgid "Entry done!"
+msgstr "Eintrittseite"
+
#: apps/activity/templates/activity/activity_form.html:16
#: apps/member/templates/member/add_members.html:46
#: apps/member/templates/member/club_form.html:16
@@ -378,7 +395,7 @@ msgstr "Einladen"
msgid "Create new activity"
msgstr "Neue Veranstaltung schaffen"
-#: apps/activity/views.py:67 note_kfet/templates/base.html:88
+#: apps/activity/views.py:67 note_kfet/templates/base.html:91
msgid "Activities"
msgstr "Veranstaltungen"
@@ -1620,7 +1637,7 @@ msgstr "Tatsen finden"
msgid "Update button"
msgstr "Tatse bearbeiten"
-#: apps/note/views.py:151 note_kfet/templates/base.html:64
+#: apps/note/views.py:151 note_kfet/templates/base.html:67
msgid "Consumptions"
msgstr "Verbräuche"
@@ -1798,7 +1815,7 @@ msgstr ""
"diesen Parametern zu erstellen. Bitte korrigieren Sie Ihre Daten und "
"versuchen Sie es erneut."
-#: apps/permission/views.py:110 note_kfet/templates/base.html:106
+#: apps/permission/views.py:110 note_kfet/templates/base.html:109
msgid "Rights"
msgstr "Rechten"
@@ -2007,7 +2024,7 @@ msgstr ""
msgid "Invalidate pre-registration"
msgstr "Ungültige Vorregistrierung"
-#: apps/treasury/apps.py:12 note_kfet/templates/base.html:94
+#: apps/treasury/apps.py:12 note_kfet/templates/base.html:97
msgid "Treasury"
msgstr "Quaestor"
@@ -2409,7 +2426,7 @@ msgstr "Krediten von der Société générale handeln"
#: apps/wei/apps.py:10 apps/wei/models.py:49 apps/wei/models.py:50
#: apps/wei/models.py:61 apps/wei/models.py:167
-#: note_kfet/templates/base.html:100
+#: note_kfet/templates/base.html:103
msgid "WEI"
msgstr "WEI"
@@ -3021,34 +3038,34 @@ msgstr "Reset"
msgid "The ENS Paris-Saclay BDE note."
msgstr "Die BDE ENS-Paris-Saclay Note."
-#: note_kfet/templates/base.html:76
+#: note_kfet/templates/base.html:79
msgid "Users"
msgstr "Users"
-#: note_kfet/templates/base.html:82
+#: note_kfet/templates/base.html:85
msgid "Clubs"
msgstr "Clubs"
-#: note_kfet/templates/base.html:111
+#: note_kfet/templates/base.html:114
msgid "Admin"
msgstr "Admin"
-#: note_kfet/templates/base.html:125
+#: note_kfet/templates/base.html:128
msgid "My account"
msgstr "Mein Konto"
-#: note_kfet/templates/base.html:128
+#: note_kfet/templates/base.html:131
msgid "Log out"
msgstr "Abmelden"
-#: note_kfet/templates/base.html:136
+#: note_kfet/templates/base.html:139
#: note_kfet/templates/registration/signup.html:6
#: note_kfet/templates/registration/signup.html:11
#: note_kfet/templates/registration/signup.html:28
msgid "Sign up"
msgstr "Registrieren"
-#: note_kfet/templates/base.html:143
+#: note_kfet/templates/base.html:146
#: note_kfet/templates/registration/login.html:6
#: note_kfet/templates/registration/login.html:15
#: note_kfet/templates/registration/login.html:38
diff --git a/locale/de/LC_MESSAGES/djangojs.po b/locale/de/LC_MESSAGES/djangojs.po
new file mode 100644
index 00000000..935a61cb
--- /dev/null
+++ b/locale/de/LC_MESSAGES/djangojs.po
@@ -0,0 +1,119 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR , YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-11-15 23:21+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: LANGUAGE \n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: apps/member/static/member/js/alias.js:17
+msgid "Alias successfully added"
+msgstr ""
+
+#: apps/member/static/member/js/alias.js:33
+msgid "Alias successfully deleted"
+msgstr ""
+
+#: apps/note/static/note/js/consos.js:225
+#, javascript-format
+msgid ""
+"Warning, the transaction from the note %s succeed, but the emitter note %s "
+"is very negative."
+msgstr ""
+
+#: apps/note/static/note/js/consos.js:228
+#, javascript-format
+msgid ""
+"Warning, the transaction from the note %s succeed, but the emitter note %s "
+"is negative."
+msgstr ""
+
+#: apps/note/static/note/js/consos.js:232
+#: apps/note/static/note/js/transfer.js:298
+#: apps/note/static/note/js/transfer.js:401
+#, javascript-format
+msgid "Warning, the emitter note %s is no more a BDE member."
+msgstr ""
+
+#: apps/note/static/note/js/consos.js:253
+msgid "The transaction couldn't be validated because of insufficient balance."
+msgstr ""
+
+#: apps/note/static/note/js/transfer.js:238
+msgid "This field is required and must contain a decimal positive number."
+msgstr ""
+
+#: apps/note/static/note/js/transfer.js:245
+msgid "The amount must stay under 21,474,836.47 €."
+msgstr ""
+
+#: apps/note/static/note/js/transfer.js:251
+msgid "This field is required."
+msgstr ""
+
+#: apps/note/static/note/js/transfer.js:277
+#, javascript-format
+msgid ""
+"Warning: the transaction of %s from %s to %s was not made because it is the "
+"same source and destination note."
+msgstr ""
+
+#: apps/note/static/note/js/transfer.js:301
+#, javascript-format
+msgid "Warning, the destination note %s is no more a BDE member."
+msgstr ""
+
+#: apps/note/static/note/js/transfer.js:307
+#, javascript-format
+msgid ""
+"Warning, the transaction of %s from the note %s to the note %s succeed, but "
+"the emitter note %s is very negative."
+msgstr ""
+
+#: apps/note/static/note/js/transfer.js:312
+#, javascript-format
+msgid ""
+"Warning, the transaction of %s from the note %s to the note %s succeed, but "
+"the emitter note %s is negative."
+msgstr ""
+
+#: apps/note/static/note/js/transfer.js:318
+#, javascript-format
+msgid "Transfer of %s from %s to %s succeed!"
+msgstr ""
+
+#: apps/note/static/note/js/transfer.js:325
+#: apps/note/static/note/js/transfer.js:346
+#: apps/note/static/note/js/transfer.js:353
+#, javascript-format
+msgid "Transfer of %s from %s to %s failed: %s"
+msgstr ""
+
+#: apps/note/static/note/js/transfer.js:347
+msgid "insufficient funds"
+msgstr ""
+
+#: apps/note/static/note/js/transfer.js:400
+msgid "Credit/debit succeed!"
+msgstr ""
+
+#: apps/note/static/note/js/transfer.js:407
+#, javascript-format
+msgid "Credit/debit failed: %s"
+msgstr ""
+
+#: note_kfet/static/js/base.js:366
+msgid "An error occured while (in)validating this transaction:"
+msgstr ""
diff --git a/locale/es/LC_MESSAGES/django.po b/locale/es/LC_MESSAGES/django.po
index 2b3b47a5..b726917d 100644
--- a/locale/es/LC_MESSAGES/django.po
+++ b/locale/es/LC_MESSAGES/django.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-10-07 11:42+0200\n"
-"PO-Revision-Date: 2020-09-19 14:56+0200\n"
+"POT-Creation-Date: 2020-11-15 23:26+0100\n"
+"PO-Revision-Date: 2020-11-17 23:47+0100\n"
"Last-Translator: elkmaennchen \n"
"Language-Team: \n"
"Language: es\n"
@@ -278,11 +278,15 @@ msgstr "Saldo de la cuenta"
msgid "Guests list"
msgstr "Lista de los invitados"
+#: apps/activity/templates/activity/activity_detail.html:33
+msgid "Guest deleted"
+msgstr "Invitados suprimidos"
+
#: apps/activity/templates/activity/activity_entry.html:14
#: apps/note/models/transactions.py:256
#: apps/note/templates/note/transaction_form.html:16
#: apps/note/templates/note/transaction_form.html:148
-#: note_kfet/templates/base.html:70
+#: note_kfet/templates/base.html:73
msgid "Transfer"
msgstr "Transferencia"
@@ -307,6 +311,15 @@ msgstr "Entradas"
msgid "Return to activity page"
msgstr "Regresar a la página de la actividad"
+#: apps/activity/templates/activity/activity_entry.html:89
+#: apps/activity/templates/activity/activity_entry.html:124
+msgid "Entry done, but caution: the user is not a Kfet member."
+msgstr "Entrada echa, pero cuidado : el usuario no es un miembro de la Kfet."
+
+#: apps/activity/templates/activity/activity_entry.html:127
+msgid "Entry done!"
+msgstr "Entrada echa !"
+
#: apps/activity/templates/activity/activity_form.html:16
#: apps/member/templates/member/add_members.html:46
#: apps/member/templates/member/club_form.html:16
@@ -377,7 +390,7 @@ msgstr "Invitar"
msgid "Create new activity"
msgstr "Crear una nueva actividad"
-#: apps/activity/views.py:67 note_kfet/templates/base.html:88
+#: apps/activity/views.py:67 note_kfet/templates/base.html:91
msgid "Activities"
msgstr "Actividades"
@@ -586,7 +599,7 @@ msgstr "sección"
#: apps/member/models.py:46
msgid "e.g. \"1A0\", \"9A♥\", \"SAPHIRE\""
-msgstr "e.g. \"1A0\", \"9A♥\", \"SAPHIRE\""
+msgstr "i.e. \"1A0\", \"9A♥\", \"SAPHIRE\""
#: apps/member/models.py:54 apps/wei/templates/wei/weimembership_form.html:32
msgid "department"
@@ -1617,7 +1630,7 @@ msgstr "Buscar un botón"
msgid "Update button"
msgstr "Modificar el botón"
-#: apps/note/views.py:151 note_kfet/templates/base.html:64
+#: apps/note/views.py:151 note_kfet/templates/base.html:67
msgid "Consumptions"
msgstr "Consumiciones"
@@ -1793,7 +1806,7 @@ msgid ""
"with these parameters. Please correct your data and retry."
msgstr ""
-#: apps/permission/views.py:110 note_kfet/templates/base.html:106
+#: apps/permission/views.py:110 note_kfet/templates/base.html:109
msgid "Rights"
msgstr "Permisos"
@@ -1810,18 +1823,20 @@ msgid "This email address is already used."
msgstr "Este correo electrónico ya esta utilizado."
#: apps/registration/forms.py:49
-#, fuzzy
-#| msgid "You already opened an account in the Société générale."
msgid ""
"I declare that I opened a bank account in the Société générale with the BDE "
"partnership."
-msgstr "Usted ya abrió una cuenta a la Société Générale."
+msgstr ""
+"Declaro que ya abrió una cuenta a la Société Générale en colaboración con el "
+"BDE."
#: apps/registration/forms.py:50
msgid ""
"Warning: this engages you to open your bank account. If you finally decides "
"to don't open your account, you will have to pay the BDE membership."
msgstr ""
+"Cuidado : esto le obliga abrir su cuenta bancaria. Si cambia de idea y no "
+"abre su cuenta bancaria, tendrá que pagar su afiliación al BDE."
#: apps/registration/forms.py:58
msgid "Register to the WEI"
@@ -1832,7 +1847,7 @@ msgid ""
"Check this case if you want to register to the WEI. If you hesitate, you "
"will be able to register later, after validating your account in the Kfet."
msgstr ""
-"Marcar esta casilla si usted quiere registrarse en el WEI. Si duda, podrá "
+"Marcar esta casilla si usted quiere registrarse en el WEI. Si duda, podrá "
"registrarse más tarde, después de validar su cuenta Note Kfet."
#: apps/registration/forms.py:105
@@ -1892,11 +1907,9 @@ msgid "Validate account"
msgstr "Validar la cuenta"
#: apps/registration/templates/registration/future_profile_detail.html:62
-#, fuzzy
-#| msgid "You already opened an account in the Société générale."
msgid ""
"The user declared that he/she opened a bank account in the Société générale."
-msgstr "Usted ya abrió una cuenta a la Société Générale."
+msgstr "El usuario declara que ya abrió una cuenta a la Société Générale."
#: apps/registration/templates/registration/future_profile_detail.html:71
#: apps/wei/templates/wei/weimembership_form.html:127
@@ -2001,7 +2014,7 @@ msgstr ""
msgid "Invalidate pre-registration"
msgstr "Invalidar la afiliación"
-#: apps/treasury/apps.py:12 note_kfet/templates/base.html:94
+#: apps/treasury/apps.py:12 note_kfet/templates/base.html:97
msgid "Treasury"
msgstr "Tesorería"
@@ -2398,7 +2411,7 @@ msgstr "Gestionar los créditos de la Société Générale"
#: apps/wei/apps.py:10 apps/wei/models.py:49 apps/wei/models.py:50
#: apps/wei/models.py:61 apps/wei/models.py:167
-#: note_kfet/templates/base.html:100
+#: note_kfet/templates/base.html:103
msgid "WEI"
msgstr "WEI"
@@ -2997,40 +3010,40 @@ msgstr ""
#: note_kfet/templates/autocomplete_model.html:14
msgid "Reset"
-msgstr ""
+msgstr "Reiniciar"
#: note_kfet/templates/base.html:14
msgid "The ENS Paris-Saclay BDE note."
msgstr "La note del BDE de la ENS Paris-Saclay."
-#: note_kfet/templates/base.html:76
+#: note_kfet/templates/base.html:79
msgid "Users"
msgstr "Usuarios"
-#: note_kfet/templates/base.html:82
+#: note_kfet/templates/base.html:85
msgid "Clubs"
msgstr "Clubs"
-#: note_kfet/templates/base.html:111
+#: note_kfet/templates/base.html:114
msgid "Admin"
msgstr ""
-#: note_kfet/templates/base.html:125
+#: note_kfet/templates/base.html:128
msgid "My account"
msgstr "Mi cuenta"
-#: note_kfet/templates/base.html:128
+#: note_kfet/templates/base.html:131
msgid "Log out"
msgstr "Desconectarse"
-#: note_kfet/templates/base.html:136
+#: note_kfet/templates/base.html:139
#: note_kfet/templates/registration/signup.html:6
#: note_kfet/templates/registration/signup.html:11
#: note_kfet/templates/registration/signup.html:28
msgid "Sign up"
msgstr "Registrar"
-#: note_kfet/templates/base.html:143
+#: note_kfet/templates/base.html:146
#: note_kfet/templates/registration/login.html:6
#: note_kfet/templates/registration/login.html:15
#: note_kfet/templates/registration/login.html:38
@@ -3043,10 +3056,12 @@ msgid ""
"You are not a BDE member anymore. Please renew your membership if you want "
"to use the note."
msgstr ""
+"Usted ya no está miembro del BDE. Por favor renueva su afiliación si quiere "
+"usar la note."
#: note_kfet/templates/base.html:160
msgid "You are not a Kfet member, so you can't use your note account."
-msgstr ""
+msgstr "Usted no es un miembro de la Kfet, no puede usar su cuenta note."
#: note_kfet/templates/base.html:166
msgid ""
@@ -3064,6 +3079,10 @@ msgid ""
"yet. This verification procedure may last a few days. Please make sure that "
"you go to the end of the account creation."
msgstr ""
+"Usted declaró que abrió una cuenta bancaria a la Société Générale. El banco "
+"no convalidó la cuenta al BDE, así que el bonus de 80€ no fue dado y la "
+"afiliación no está pagada. El proceso de convalidación puede durar unos "
+"días. Por favor comprueba que fue hasta el final de la creación de la cuenta."
#: note_kfet/templates/base.html:194
msgid "Contact us"
@@ -3188,7 +3207,6 @@ msgstr ""
#~ msgid "Central Authentication Service"
#~ msgstr "Servicio Central de Autentificación"
-#, python-format
#~ msgid ""
#~ "A new version of the application is available. This instance runs "
#~ "%(VERSION)s and the last version is %(LAST_VERSION)s. Please consider "
diff --git a/locale/es/LC_MESSAGES/djangojs.po b/locale/es/LC_MESSAGES/djangojs.po
new file mode 100644
index 00000000..50782bb8
--- /dev/null
+++ b/locale/es/LC_MESSAGES/djangojs.po
@@ -0,0 +1,129 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR , YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-11-15 23:21+0100\n"
+"PO-Revision-Date: 2020-11-21 12:23+0100\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Last-Translator: elkmaennchen \n"
+"Language-Team: \n"
+"X-Generator: Poedit 2.3\n"
+
+#: apps/member/static/member/js/alias.js:17
+msgid "Alias successfully added"
+msgstr "Alias añadido con éxito"
+
+#: apps/member/static/member/js/alias.js:33
+msgid "Alias successfully deleted"
+msgstr "Alias suprimido con éxito"
+
+#: apps/note/static/note/js/consos.js:225
+#, javascript-format
+msgid ""
+"Warning, the transaction from the note %s succeed, but the emitter note %s "
+"is very negative."
+msgstr ""
+"Cuidado, la transacción de %s fue un éxito, pero la note %s está muy "
+"negativa."
+
+#: apps/note/static/note/js/consos.js:228
+#, javascript-format
+msgid ""
+"Warning, the transaction from the note %s succeed, but the emitter note %s "
+"is negative."
+msgstr ""
+"Cuidado, la transacción de %s fue un éxito, pero la note %s está negativa."
+
+#: apps/note/static/note/js/consos.js:232
+#: apps/note/static/note/js/transfer.js:298
+#: apps/note/static/note/js/transfer.js:401
+#, javascript-format
+msgid "Warning, the emitter note %s is no more a BDE member."
+msgstr "Cuidado, la note remitente %s no está más miembro del BDE."
+
+#: apps/note/static/note/js/consos.js:253
+msgid "The transaction couldn't be validated because of insufficient balance."
+msgstr ""
+"La transacción no pudo ser validada por culpa de saldo demasiado bajo."
+
+#: apps/note/static/note/js/transfer.js:238
+msgid "This field is required and must contain a decimal positive number."
+msgstr "Este campo obligatorio requiere un número decimal positivo."
+
+#: apps/note/static/note/js/transfer.js:245
+msgid "The amount must stay under 21,474,836.47 €."
+msgstr "El monto no puede superar los 21 474 836,47 €."
+
+#: apps/note/static/note/js/transfer.js:251
+msgid "This field is required."
+msgstr "Este campo es obligatorio."
+
+#: apps/note/static/note/js/transfer.js:277
+#, javascript-format
+msgid ""
+"Warning: the transaction of %s from %s to %s was not made because it is the "
+"same source and destination note."
+msgstr ""
+"Cuidado : la transacción de %s de %s a %s no fue echa porque la fuente y el "
+"destino son iguales."
+
+#: apps/note/static/note/js/transfer.js:301
+#, javascript-format
+msgid "Warning, the destination note %s is no more a BDE member."
+msgstr "Cuidado, la note destino %s no está más miembro del BDE."
+
+#: apps/note/static/note/js/transfer.js:307
+#, javascript-format
+msgid ""
+"Warning, the transaction of %s from the note %s to the note %s succeed, but "
+"the emitter note %s is very negative."
+msgstr ""
+"Cuidado, la transacción de %s de la note %s a la note %s fue un éxito, pero "
+"la note fuente %s está muy negativa."
+
+#: apps/note/static/note/js/transfer.js:312
+#, javascript-format
+msgid ""
+"Warning, the transaction of %s from the note %s to the note %s succeed, but "
+"the emitter note %s is negative."
+msgstr ""
+"Cuidado, la transacción de %s de la note %s a la note %s fue un éxito, pero "
+"la note fuente %s está negativa."
+
+#: apps/note/static/note/js/transfer.js:318
+#, javascript-format
+msgid "Transfer of %s from %s to %s succeed!"
+msgstr "¡ La transacción de %s de %s a %s fue un éxito !"
+
+#: apps/note/static/note/js/transfer.js:325
+#: apps/note/static/note/js/transfer.js:346
+#: apps/note/static/note/js/transfer.js:353
+#, javascript-format
+msgid "Transfer of %s from %s to %s failed: %s"
+msgstr "La transacción de %s de %s a %s fue un fracaso : %s"
+
+#: apps/note/static/note/js/transfer.js:347
+msgid "insufficient funds"
+msgstr "fundos insuficientes"
+
+#: apps/note/static/note/js/transfer.js:400
+msgid "Credit/debit succeed!"
+msgstr "¡ Crédito/débito tubo éxito !"
+
+#: apps/note/static/note/js/transfer.js:407
+#, javascript-format
+msgid "Credit/debit failed: %s"
+msgstr "Crédito/débito falló : %s"
+
+#: note_kfet/static/js/base.js:366
+msgid "An error occured while (in)validating this transaction:"
+msgstr "Un error ocurrió durante la (in)validación de esta transacción :"
diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po
index 5b36834c..60409669 100644
--- a/locale/fr/LC_MESSAGES/django.po
+++ b/locale/fr/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-10-07 11:42+0200\n"
+"POT-Creation-Date: 2020-11-15 23:26+0100\n"
"PO-Revision-Date: 2020-09-13 12:36+0200\n"
"Last-Translator: elkmaennchen \n"
"Language-Team: \n"
@@ -279,11 +279,15 @@ msgstr "Solde du compte"
msgid "Guests list"
msgstr "Liste des invités"
+#: apps/activity/templates/activity/activity_detail.html:33
+msgid "Guest deleted"
+msgstr "Invité supprimé"
+
#: apps/activity/templates/activity/activity_entry.html:14
#: apps/note/models/transactions.py:256
#: apps/note/templates/note/transaction_form.html:16
#: apps/note/templates/note/transaction_form.html:148
-#: note_kfet/templates/base.html:70
+#: note_kfet/templates/base.html:73
msgid "Transfer"
msgstr "Virement"
@@ -308,6 +312,16 @@ msgstr "Entrées"
msgid "Return to activity page"
msgstr "Retour à la page de l'activité"
+#: apps/activity/templates/activity/activity_entry.html:89
+#: apps/activity/templates/activity/activity_entry.html:124
+msgid "Entry done, but caution: the user is not a Kfet member."
+msgstr ""
+"Entrée effectuée, mais attention : la personne n'est pas un adhérent Kfet."
+
+#: apps/activity/templates/activity/activity_entry.html:127
+msgid "Entry done!"
+msgstr "Entrée effectuée !"
+
#: apps/activity/templates/activity/activity_form.html:16
#: apps/member/templates/member/add_members.html:46
#: apps/member/templates/member/club_form.html:16
@@ -378,7 +392,7 @@ msgstr "Inviter"
msgid "Create new activity"
msgstr "Créer une nouvelle activité"
-#: apps/activity/views.py:67 note_kfet/templates/base.html:88
+#: apps/activity/views.py:67 note_kfet/templates/base.html:91
msgid "Activities"
msgstr "Activités"
@@ -1622,7 +1636,7 @@ msgstr "Chercher un bouton"
msgid "Update button"
msgstr "Modifier le bouton"
-#: apps/note/views.py:151 note_kfet/templates/base.html:64
+#: apps/note/views.py:151 note_kfet/templates/base.html:67
msgid "Consumptions"
msgstr "Consommations"
@@ -1801,7 +1815,7 @@ msgstr ""
"Vous n'avez pas la permission d'ajouter une instance du modèle « {model} » "
"avec ces paramètres. Merci de les corriger et de réessayer."
-#: apps/permission/views.py:110 note_kfet/templates/base.html:106
+#: apps/permission/views.py:110 note_kfet/templates/base.html:109
msgid "Rights"
msgstr "Droits"
@@ -2008,7 +2022,7 @@ msgstr ""
msgid "Invalidate pre-registration"
msgstr "Invalider l'inscription"
-#: apps/treasury/apps.py:12 note_kfet/templates/base.html:94
+#: apps/treasury/apps.py:12 note_kfet/templates/base.html:97
msgid "Treasury"
msgstr "Trésorerie"
@@ -2408,7 +2422,7 @@ msgstr "Gérer les crédits de la Société générale"
#: apps/wei/apps.py:10 apps/wei/models.py:49 apps/wei/models.py:50
#: apps/wei/models.py:61 apps/wei/models.py:167
-#: note_kfet/templates/base.html:100
+#: note_kfet/templates/base.html:103
msgid "WEI"
msgstr "WEI"
@@ -3020,34 +3034,34 @@ msgstr "Réinitialiser"
msgid "The ENS Paris-Saclay BDE note."
msgstr "La note du BDE de l'ENS Paris-Saclay."
-#: note_kfet/templates/base.html:76
+#: note_kfet/templates/base.html:79
msgid "Users"
msgstr "Utilisateurs"
-#: note_kfet/templates/base.html:82
+#: note_kfet/templates/base.html:85
msgid "Clubs"
msgstr "Clubs"
-#: note_kfet/templates/base.html:111
+#: note_kfet/templates/base.html:114
msgid "Admin"
msgstr "Admin"
-#: note_kfet/templates/base.html:125
+#: note_kfet/templates/base.html:128
msgid "My account"
msgstr "Mon compte"
-#: note_kfet/templates/base.html:128
+#: note_kfet/templates/base.html:131
msgid "Log out"
msgstr "Se déconnecter"
-#: note_kfet/templates/base.html:136
+#: note_kfet/templates/base.html:139
#: note_kfet/templates/registration/signup.html:6
#: note_kfet/templates/registration/signup.html:11
#: note_kfet/templates/registration/signup.html:28
msgid "Sign up"
msgstr "Inscription"
-#: note_kfet/templates/base.html:143
+#: note_kfet/templates/base.html:146
#: note_kfet/templates/registration/login.html:6
#: note_kfet/templates/registration/login.html:15
#: note_kfet/templates/registration/login.html:38
diff --git a/locale/fr/LC_MESSAGES/djangojs.po b/locale/fr/LC_MESSAGES/djangojs.po
new file mode 100644
index 00000000..7d5fd8ce
--- /dev/null
+++ b/locale/fr/LC_MESSAGES/djangojs.po
@@ -0,0 +1,134 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR , YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-11-15 23:21+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: LANGUAGE \n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: apps/member/static/member/js/alias.js:17
+msgid "Alias successfully added"
+msgstr "Alias ajouté avec succès"
+
+#: apps/member/static/member/js/alias.js:33
+msgid "Alias successfully deleted"
+msgstr "Alias supprimé avec succès"
+
+#: apps/note/static/note/js/consos.js:225
+#, javascript-format
+msgid ""
+"Warning, the transaction from the note %s succeed, but the emitter note %s "
+"is very negative."
+msgstr ""
+"Attention, La transaction depuis la note %s a été réalisée avec succès, mais "
+"la note émettrice %s est en négatif sévère."
+
+#: apps/note/static/note/js/consos.js:228
+#, javascript-format
+msgid ""
+"Warning, the transaction from the note %s succeed, but the emitter note %s "
+"is negative."
+msgstr ""
+"Attention, La transaction depuis la note %s a été réalisée avec succès, mais "
+"la note émettrice %s est en négatif."
+
+#: apps/note/static/note/js/consos.js:232
+#: apps/note/static/note/js/transfer.js:298
+#: apps/note/static/note/js/transfer.js:401
+#, javascript-format
+msgid "Warning, the emitter note %s is no more a BDE member."
+msgstr "Attention, la note émettrice %s n'est plus adhérente."
+
+#: apps/note/static/note/js/consos.js:253
+msgid "The transaction couldn't be validated because of insufficient balance."
+msgstr ""
+"La transaction n'a pas pu être validée pour cause de solde insuffisant."
+
+#: apps/note/static/note/js/transfer.js:238
+msgid "This field is required and must contain a decimal positive number."
+msgstr ""
+"Ce champ est requis et doit comporter un nombre décimal strictement positif."
+
+#: apps/note/static/note/js/transfer.js:245
+msgid "The amount must stay under 21,474,836.47 €."
+msgstr "Le montant ne doit pas excéder 21 474 836.47 €."
+
+#: apps/note/static/note/js/transfer.js:251
+msgid "This field is required."
+msgstr "Ce champ est requis."
+
+#: apps/note/static/note/js/transfer.js:277
+#, javascript-format
+msgid ""
+"Warning: the transaction of %s from %s to %s was not made because it is the "
+"same source and destination note."
+msgstr ""
+"Attention : la transaction de %s de la note %s vers la note %s n'a pas été "
+"faite car il s'agit de la même note au départ et à l'arrivée."
+
+#: apps/note/static/note/js/transfer.js:301
+#, javascript-format
+msgid "Warning, the destination note %s is no more a BDE member."
+msgstr "Attention, la note de destination %s n'est plus adhérente."
+
+#: apps/note/static/note/js/transfer.js:307
+#, javascript-format
+msgid ""
+"Warning, the transaction of %s from the note %s to the note %s succeed, but "
+"the emitter note %s is very negative."
+msgstr ""
+"Attention, La transaction de %s depuis la note %s vers la note %s a été "
+"réalisée avec succès, mais la note émettrice %s est en négatif sévère."
+
+#: apps/note/static/note/js/transfer.js:312
+#, javascript-format
+msgid ""
+"Warning, the transaction of %s from the note %s to the note %s succeed, but "
+"the emitter note %s is negative."
+msgstr ""
+"Attention, La transaction de %s depuis la note %s vers la note %s a été "
+"réalisée avec succès, mais la note émettrice %s est en négatif."
+
+#: apps/note/static/note/js/transfer.js:318
+#, javascript-format
+msgid "Transfer of %s from %s to %s succeed!"
+msgstr ""
+"Le transfert de %s de la note %s vers la note %s a été fait avec succès !"
+
+#: apps/note/static/note/js/transfer.js:325
+#: apps/note/static/note/js/transfer.js:346
+#: apps/note/static/note/js/transfer.js:353
+#, javascript-format
+msgid "Transfer of %s from %s to %s failed: %s"
+msgstr "Le transfert de %s de la note %s vers la note %s a échoué : %s"
+
+#: apps/note/static/note/js/transfer.js:347
+msgid "insufficient funds"
+msgstr "solde insuffisant"
+
+#: apps/note/static/note/js/transfer.js:400
+msgid "Credit/debit succeed!"
+msgstr "Le crédit/retrait a bien été effectué !"
+
+#: apps/note/static/note/js/transfer.js:407
+#, javascript-format
+msgid "Credit/debit failed: %s"
+msgstr "Le crédit/retrait a échoué : %s"
+
+#: note_kfet/static/js/base.js:366
+msgid "An error occured while (in)validating this transaction:"
+msgstr ""
+"Une erreur est survenue lors de la validation/dévalidation de cette "
+"transaction :"
diff --git a/note_kfet/static/js/base.js b/note_kfet/static/js/base.js
index 87a99f64..d7772a5a 100644
--- a/note_kfet/static/js/base.js
+++ b/note_kfet/static/js/base.js
@@ -363,8 +363,7 @@ function de_validate (id, validated, resourcetype) {
const errObj = JSON.parse(err.responseText)
let error = errObj.detail ? errObj.detail : errObj.non_field_errors
if (!error) { error = err.responseText }
- addMsg('Une erreur est survenue lors de la validation/dévalidation ' +
- 'de cette transaction : ' + error, 'danger')
+ addMsg(gettext('An error occured while (in)validating this transaction:') + ' ' + error, 'danger')
refreshBalance()
// error if this method doesn't exist. Please define it.
diff --git a/note_kfet/static/js/jsi18n/_default.js b/note_kfet/static/js/jsi18n/_default.js
new file mode 100644
index 00000000..97775e9d
--- /dev/null
+++ b/note_kfet/static/js/jsi18n/_default.js
@@ -0,0 +1,134 @@
+/*
+* You should never see this file.
+* It is here only for compatibility reasons in case of the command `compilejsmessages` was never executed.
+* Please execute this command to generate translation strings.
+*/
+
+(function(globals) {
+
+ var django = globals.django || (globals.django = {});
+
+
+ django.pluralidx = function(n) {
+ var v=(n != 1);
+ if (typeof(v) == 'boolean') {
+ return v ? 1 : 0;
+ } else {
+ return v;
+ }
+ };
+
+
+ /* gettext library */
+
+ django.catalog = django.catalog || {};
+
+
+ if (!django.jsi18n_initialized) {
+ django.gettext = function(msgid) {
+ var value = django.catalog[msgid];
+ if (typeof(value) == 'undefined') {
+ return msgid;
+ } else {
+ return (typeof(value) == 'string') ? value : value[0];
+ }
+ };
+
+ django.ngettext = function(singular, plural, count) {
+ var value = django.catalog[singular];
+ if (typeof(value) == 'undefined') {
+ return (count == 1) ? singular : plural;
+ } else {
+ return value.constructor === Array ? value[django.pluralidx(count)] : value;
+ }
+ };
+
+ django.gettext_noop = function(msgid) { return msgid; };
+
+ django.pgettext = function(context, msgid) {
+ var value = django.gettext(context + '\x04' + msgid);
+ if (value.indexOf('\x04') != -1) {
+ value = msgid;
+ }
+ return value;
+ };
+
+ django.npgettext = function(context, singular, plural, count) {
+ var value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count);
+ if (value.indexOf('\x04') != -1) {
+ value = django.ngettext(singular, plural, count);
+ }
+ return value;
+ };
+
+ django.interpolate = function(fmt, obj, named) {
+ if (named) {
+ return fmt.replace(/%\(\w+\)s/g, function(match){return String(obj[match.slice(2,-2)])});
+ } else {
+ return fmt.replace(/%s/g, function(match){return String(obj.shift())});
+ }
+ };
+
+
+ /* formatting library */
+
+ django.formats = {
+ "DATETIME_FORMAT": "j \\d\\e F \\d\\e Y \\a \\l\\a\\s H:i",
+ "DATETIME_INPUT_FORMATS": [
+ "%d/%m/%Y %H:%M:%S",
+ "%d/%m/%Y %H:%M:%S.%f",
+ "%d/%m/%Y %H:%M",
+ "%d/%m/%y %H:%M:%S",
+ "%d/%m/%y %H:%M:%S.%f",
+ "%d/%m/%y %H:%M",
+ "%Y-%m-%d %H:%M:%S",
+ "%Y-%m-%d %H:%M:%S.%f",
+ "%Y-%m-%d %H:%M",
+ "%Y-%m-%d"
+ ],
+ "DATE_FORMAT": "j \\d\\e F \\d\\e Y",
+ "DATE_INPUT_FORMATS": [
+ "%d/%m/%Y",
+ "%d/%m/%y",
+ "%Y-%m-%d"
+ ],
+ "DECIMAL_SEPARATOR": ",",
+ "FIRST_DAY_OF_WEEK": 1,
+ "MONTH_DAY_FORMAT": "j \\d\\e F",
+ "NUMBER_GROUPING": 3,
+ "SHORT_DATETIME_FORMAT": "d/m/Y H:i",
+ "SHORT_DATE_FORMAT": "d/m/Y",
+ "THOUSAND_SEPARATOR": ".",
+ "TIME_FORMAT": "H:i",
+ "TIME_INPUT_FORMATS": [
+ "%H:%M:%S",
+ "%H:%M:%S.%f",
+ "%H:%M"
+ ],
+ "YEAR_MONTH_FORMAT": "F \\d\\e Y"
+ };
+
+ django.get_format = function(format_type) {
+ var value = django.formats[format_type];
+ if (typeof(value) == 'undefined') {
+ return format_type;
+ } else {
+ return value;
+ }
+ };
+
+ /* add to global namespace */
+ globals.pluralidx = django.pluralidx;
+ globals.gettext = django.gettext;
+ globals.ngettext = django.ngettext;
+ globals.gettext_noop = django.gettext_noop;
+ globals.pgettext = django.pgettext;
+ globals.npgettext = django.npgettext;
+ globals.interpolate = django.interpolate;
+ globals.get_format = django.get_format;
+
+ django.jsi18n_initialized = true;
+ }
+
+}(this));
+
diff --git a/note_kfet/static/js/jsi18n/de.js b/note_kfet/static/js/jsi18n/de.js
new file mode 120000
index 00000000..6fff6d1a
--- /dev/null
+++ b/note_kfet/static/js/jsi18n/de.js
@@ -0,0 +1 @@
+_default.js
\ No newline at end of file
diff --git a/note_kfet/static/js/jsi18n/es.js b/note_kfet/static/js/jsi18n/es.js
new file mode 120000
index 00000000..6fff6d1a
--- /dev/null
+++ b/note_kfet/static/js/jsi18n/es.js
@@ -0,0 +1 @@
+_default.js
\ No newline at end of file
diff --git a/note_kfet/static/js/jsi18n/fr.js b/note_kfet/static/js/jsi18n/fr.js
new file mode 120000
index 00000000..6fff6d1a
--- /dev/null
+++ b/note_kfet/static/js/jsi18n/fr.js
@@ -0,0 +1 @@
+_default.js
\ No newline at end of file
diff --git a/note_kfet/templates/base.html b/note_kfet/templates/base.html
index 71e19f83..77b3b19d 100644
--- a/note_kfet/templates/base.html
+++ b/note_kfet/templates/base.html
@@ -38,6 +38,9 @@ SPDX-License-Identifier: GPL-3.0-or-later
+ {# Translation in javascript files #}
+
+
{# If extra ressources are needed for a form, load here #}
{% if form.media %}
{{ form.media }}
diff --git a/requirements.txt b/requirements.txt
index 46ef2f63..d889dd54 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -7,7 +7,7 @@ django-extensions~=2.1.4
django-filter~=2.1.0
django-htcpcp-tea~=0.3.1
django-mailer~=2.0.1
-django-oauth-toolkit~=1.1.2
+django-oauth-toolkit~=1.3.3
django-phonenumber-field~=5.0.0
django-polymorphic~=2.0.3
djangorestframework~=3.9.0