Browse Source

Merge branch '0.16.x'

Rafał Pitoń 7 years ago
parent
commit
a0b6cce1ba

+ 1 - 1
.tx/config

@@ -1,6 +1,6 @@
 [main]
 [main]
 host = https://www.transifex.com
 host = https://www.transifex.com
-lang_map = sr@latin:sr_Latn, zh_CN:zh_Hans, zh_TW:zh_Hant
+lang_map = sr@latin:sr_Latn, zh_CN:zh_Hans, zh_TW:zh_Hant, tr_TR:tr
 
 
 [misago.django]
 [misago.django]
 file_filter = misago/locale/<lang>/LC_MESSAGES/django.po
 file_filter = misago/locale/<lang>/LC_MESSAGES/django.po

+ 1 - 1
misago/__init__.py

@@ -1 +1 @@
-__version__ = '0.15.0'
+__version__ = '0.16.0'

+ 4 - 2
misago/categories/tests/test_categories_admin_views.py

@@ -439,6 +439,8 @@ class CategoryAdminDeleteViewTests(CategoryAdminTestCase):
         self.assertEqual(response.status_code, 302)
         self.assertEqual(response.status_code, 302)
         self.assertEqual(Category.objects.all_categories().count(), 6)
         self.assertEqual(Category.objects.all_categories().count(), 6)
         self.assertEqual(Thread.objects.count(), 10)
         self.assertEqual(Thread.objects.count(), 10)
+        for thread in Thread.objects.all():
+            self.assertEqual(thread.category_id, self.category_d.pk)
 
 
         self.assertValidTree([
         self.assertValidTree([
             (self.root, 0, 1, 14),
             (self.root, 0, 1, 14),
@@ -484,8 +486,8 @@ class CategoryAdminDeleteViewTests(CategoryAdminTestCase):
             (self.category_f, 2, 7, 8),
             (self.category_f, 2, 7, 8),
         ])
         ])
 
 
-    def test_delete_leaf_category(self):
-        """category was deleted and its contents were moved"""
+    def test_delete_leaf_category_and_contents(self):
+        """leaf category was deleted with contents"""
         for _ in range(10):
         for _ in range(10):
             testutils.post_thread(self.category_d)
             testutils.post_thread(self.category_d)
         self.assertEqual(Thread.objects.count(), 10)
         self.assertEqual(Thread.objects.count(), 10)

BIN
misago/locale/fr/LC_MESSAGES/django.mo


+ 266 - 266
misago/locale/fr/LC_MESSAGES/django.po

@@ -27,7 +27,7 @@ msgstr "Autorisations"
 
 
 #: acl/admin.py:33 users/forms/admin.py:410
 #: acl/admin.py:33 users/forms/admin.py:410
 msgid "User roles"
 msgid "User roles"
-msgstr " Rôles de l'utilisateur"
+msgstr " Rôles d'utilisateurs"
 
 
 #: acl/forms.py:9 categories/forms.py:236
 #: acl/forms.py:9 categories/forms.py:236
 msgid "Role name"
 msgid "Role name"
@@ -80,7 +80,7 @@ msgstr "Modérateur des fils de discussion privés"
 
 
 #: acl/panels.py:8
 #: acl/panels.py:8
 msgid "Misago User ACL"
 msgid "Misago User ACL"
-msgstr "Misago Utilisateur ACL"
+msgstr "ACL utilisateur Misago"
 
 
 #: acl/panels.py:18
 #: acl/panels.py:18
 msgid "Anonymous user"
 msgid "Anonymous user"
@@ -97,23 +97,23 @@ msgstr "Le formulaire contient des erreurs."
 #: acl/views.py:65 categories/views/permsadmin.py:71
 #: acl/views.py:65 categories/views/permsadmin.py:71
 #, python-format
 #, python-format
 msgid "New role \"%(name)s\" has been saved."
 msgid "New role \"%(name)s\" has been saved."
-msgstr "Le nouveau rôle \"%(name)s\" a été sauvegardé."
+msgstr "Le nouveau rôle « %(name)s » a été sauvegardé."
 
 
 #: acl/views.py:69 categories/views/permsadmin.py:75
 #: acl/views.py:69 categories/views/permsadmin.py:75
 #, python-format
 #, python-format
 msgid "Role \"%(name)s\" has been changed."
 msgid "Role \"%(name)s\" has been changed."
-msgstr "Le rôle \"%(name)s\" a été modifié."
+msgstr "Le rôle « %(name)s » a été modifié."
 
 
 #: acl/views.py:75 categories/views/permsadmin.py:81
 #: acl/views.py:75 categories/views/permsadmin.py:81
 #, python-format
 #, python-format
 msgid "Role \"%(name)s\" is special role and can't be deleted."
 msgid "Role \"%(name)s\" is special role and can't be deleted."
 msgstr ""
 msgstr ""
-"Le rôle \"%(name)s\" est un rôle spécial et ne peut donc pas être supprimé."
+"Le rôle « %(name)s » est un rôle spécial et ne peut donc pas être supprimé."
 
 
 #: acl/views.py:80 categories/views/permsadmin.py:86
 #: acl/views.py:80 categories/views/permsadmin.py:86
 #, python-format
 #, python-format
 msgid "Role \"%(name)s\" has been deleted."
 msgid "Role \"%(name)s\" has been deleted."
-msgstr "Le rôle \"%(name)s\" a été supprimé."
+msgstr "Le rôle « %(name)s » a été supprimé."
 
 
 #: admin/admin.py:11 templates/misago/admin/index.html:5
 #: admin/admin.py:11 templates/misago/admin/index.html:5
 msgid "Home"
 msgid "Home"
@@ -121,7 +121,7 @@ msgstr "Accueil"
 
 
 #: admin/auth.py:36
 #: admin/auth.py:36
 msgid "Your admin session has expired."
 msgid "Your admin session has expired."
-msgstr "Votre session administrateur a expirée."
+msgstr "Votre session administrateur a expiré."
 
 
 #: admin/views/auth.py:39
 #: admin/views/auth.py:39
 msgid "Your admin session has been closed."
 msgid "Your admin session has been closed."
@@ -129,7 +129,7 @@ msgstr "Votre session administrateur a été fermée."
 
 
 #: admin/views/generic/list.py:38
 #: admin/views/generic/list.py:38
 msgid "Selected: 0"
 msgid "Selected: 0"
-msgstr "Sélectionnés: 0"
+msgstr "Sélectionné : 0"
 
 
 #: admin/views/generic/list.py:39
 #: admin/views/generic/list.py:39
 msgid "Select items"
 msgid "Select items"
@@ -137,21 +137,21 @@ msgstr "Sélectionner des éléments"
 
 
 #: admin/views/generic/list.py:292 admin/views/generic/list.py:297
 #: admin/views/generic/list.py:292 admin/views/generic/list.py:297
 msgid "You have to select one or more items."
 msgid "You have to select one or more items."
-msgstr "Vous devez selectionner au moins un element."
+msgstr "Vous devez sélectionner au moins un élément."
 
 
 #: admin/views/generic/list.py:312
 #: admin/views/generic/list.py:312
 msgid "Action is not allowed."
 msgid "Action is not allowed."
-msgstr "Cette action n'est pas autorisee."
+msgstr "Cette action n'est pas autorisée."
 
 
 #: admin/views/index.py:70
 #: admin/views/index.py:70
 #, python-format
 #, python-format
 msgid "Outdated: %(current)s! (latest: %(latest)s)"
 msgid "Outdated: %(current)s! (latest: %(latest)s)"
-msgstr "Caduc: %(current)s! (dernier: %(latest)s)"
+msgstr "Caduc : %(current)s ! (dernier : %(latest)s)"
 
 
 #: admin/views/index.py:78
 #: admin/views/index.py:78
 #, python-format
 #, python-format
 msgid "Up to date! (%(current)s)"
 msgid "Up to date! (%(current)s)"
-msgstr "Mis à jour ! (%(current)s)"
+msgstr "Mis à jour ! (%(current)s)"
 
 
 #: admin/views/index.py:87
 #: admin/views/index.py:87
 msgid "Failed to connect to GitHub API. Try again later."
 msgid "Failed to connect to GitHub API. Try again later."
@@ -170,7 +170,7 @@ msgstr "Hiérarchie des catégories"
 
 
 #: categories/admin.py:62
 #: categories/admin.py:62
 msgid "Category roles"
 msgid "Category roles"
-msgstr "Rôles de la catégorie."
+msgstr "Rôles de catégories"
 
 
 #: categories/forms.py:47 users/forms/admin.py:384
 #: categories/forms.py:47 users/forms/admin.py:384
 msgid "Name"
 msgid "Name"
@@ -198,7 +198,7 @@ msgstr ""
 
 
 #: categories/forms.py:63
 #: categories/forms.py:63
 msgid "Closed category"
 msgid "Closed category"
-msgstr "Catégorie closes"
+msgstr "Catégorie fermée"
 
 
 #: categories/forms.py:65
 #: categories/forms.py:65
 msgid "Only members with valid permissions can post in closed categories."
 msgid "Only members with valid permissions can post in closed categories."
@@ -290,7 +290,7 @@ msgstr "Catégorie mère"
 
 
 #: categories/forms.py:159
 #: categories/forms.py:159
 msgid "Copy permissions"
 msgid "Copy permissions"
-msgstr "Autorisations de copier"
+msgstr "Copier les permissions depuis"
 
 
 #: categories/forms.py:161
 #: categories/forms.py:161
 msgid ""
 msgid ""
@@ -298,22 +298,22 @@ msgid ""
 "category selected here."
 "category selected here."
 msgstr ""
 msgstr ""
 "Vous pouvez remplacer les autorisations de cette catégorie par les "
 "Vous pouvez remplacer les autorisations de cette catégorie par les "
-"autorisations copiées de la catégorie actuellement sélectionnée."
+"autorisations copiées depuis la catégorie sélectionnée."
 
 
 #: categories/forms.py:165
 #: categories/forms.py:165
 msgid "Don't copy permissions"
 msgid "Don't copy permissions"
-msgstr "Ne pas copier les autorisations"
+msgstr "Ne pas copier les permissions"
 
 
 #: categories/forms.py:169
 #: categories/forms.py:169
 msgid "Archive"
 msgid "Archive"
-msgstr "Archive"
+msgstr "Archiver"
 
 
 #: categories/forms.py:171
 #: categories/forms.py:171
 msgid ""
 msgid ""
 "Instead of being deleted, pruned threads can be moved to designated "
 "Instead of being deleted, pruned threads can be moved to designated "
 "category."
 "category."
 msgstr ""
 msgstr ""
-"Au lieu d'être supprimé, les fils de discussion obsolètes peuvent être "
+"Au lieu d'être supprimés, les fils de discussion obsolètes peuvent être "
 "déplacés vers une catégorie."
 "déplacés vers une catégorie."
 
 
 #: categories/forms.py:175
 #: categories/forms.py:175
@@ -340,11 +340,11 @@ msgstr "Déplacer les fils de discussion de cette catégorie vers"
 
 
 #: categories/forms.py:214 categories/forms.py:228
 #: categories/forms.py:214 categories/forms.py:228
 msgid "Delete with category"
 msgid "Delete with category"
-msgstr "Supprimer ainsi que la catégorie"
+msgstr "Supprimer avec la catégorie"
 
 
 #: categories/forms.py:226
 #: categories/forms.py:226
 msgid "Move child categories to"
 msgid "Move child categories to"
-msgstr "Déplacer la catégorie fille vers"
+msgstr "Déplacer les catégories filles vers"
 
 
 #: categories/forms.py:247 categories/forms.py:262
 #: categories/forms.py:247 categories/forms.py:262
 #: templates/misago/acl_debug.html:15
 #: templates/misago/acl_debug.html:15
@@ -400,8 +400,8 @@ msgstr "Peut voir le contenu d'une catégorie"
 #, python-format
 #, python-format
 msgid "You don't have permission to browse \"%(category)s\" contents."
 msgid "You don't have permission to browse \"%(category)s\" contents."
 msgstr ""
 msgstr ""
-"Vous n'avez pas le permission de parcourir le contenu de la catégorie "
-"\"%(category)s\" ."
+"Vous n'avez pas le permission de parcourir le contenu de la catégorie « "
+"%(category)s »."
 
 
 #: categories/views/categoriesadmin.py:17
 #: categories/views/categoriesadmin.py:17
 msgid "Requested category does not exist."
 msgid "Requested category does not exist."
@@ -410,32 +410,32 @@ msgstr "La catégorie demandée n'existe pas."
 #: categories/views/categoriesadmin.py:96
 #: categories/views/categoriesadmin.py:96
 #, python-format
 #, python-format
 msgid "New category \"%(name)s\" has been saved."
 msgid "New category \"%(name)s\" has been saved."
-msgstr "La nouvelle catégorie \"%(name)s\" a été sauvegardée."
+msgstr "La nouvelle catégorie « %(name)s » a été sauvegardée."
 
 
 #: categories/views/categoriesadmin.py:100
 #: categories/views/categoriesadmin.py:100
 #, python-format
 #, python-format
 msgid "Category \"%(name)s\" has been edited."
 msgid "Category \"%(name)s\" has been edited."
-msgstr "La catégorie \"%(name)s\" a été modifiée."
+msgstr "La catégorie « %(name)s » a été modifiée."
 
 
 #: categories/views/categoriesadmin.py:104
 #: categories/views/categoriesadmin.py:104
 #, python-format
 #, python-format
 msgid "Category \"%(name)s\" has been deleted."
 msgid "Category \"%(name)s\" has been deleted."
-msgstr "La catégorie \"%(name)s\" a été supprimée."
+msgstr "La catégorie « %(name)s » a été supprimée."
 
 
 #: categories/views/categoriesadmin.py:154
 #: categories/views/categoriesadmin.py:154
 #, python-format
 #, python-format
 msgid "Category \"%(name)s\" has been moved below \"%(other)s\"."
 msgid "Category \"%(name)s\" has been moved below \"%(other)s\"."
-msgstr "La catégorie \"%(name)s\" a été déplacée en dessous de \"%(other)s\"."
+msgstr "La catégorie « %(name)s » a été déplacée en dessous de « %(other)s »."
 
 
 #: categories/views/categoriesadmin.py:170
 #: categories/views/categoriesadmin.py:170
 #, python-format
 #, python-format
 msgid "Category \"%(name)s\" has been moved above \"%(other)s\"."
 msgid "Category \"%(name)s\" has been moved above \"%(other)s\"."
-msgstr "La catégorie \"%(name)s\" a été déplacée au dessus de \"%(other)s\"."
+msgstr "La catégorie « %(name)s » a été déplacée au dessus de « %(other)s »."
 
 
 #: categories/views/permsadmin.py:133
 #: categories/views/permsadmin.py:133
 #, python-format
 #, python-format
 msgid "Category %(name)s permissions have been changed."
 msgid "Category %(name)s permissions have been changed."
-msgstr "Les autorisations de la catégorie %(name)s ont été modifiées."
+msgstr "Les permissions de la catégorie %(name)s ont été modifiées."
 
 
 #: categories/views/permsadmin.py:147
 #: categories/views/permsadmin.py:147
 msgid "Category permissions"
 msgid "Category permissions"
@@ -490,7 +490,7 @@ msgstr "Le groupe de paramètres n'a pas été trouvé."
 
 
 #: conf/views.py:49
 #: conf/views.py:49
 msgid "Changes in settings have been saved!"
 msgid "Changes in settings have been saved!"
-msgstr "Les changements de paramètres ont été enregistrés!"
+msgstr "Les changements de paramètres ont été enregistrés !"
 
 
 #: core/admin.py:10
 #: core/admin.py:10
 msgid "System"
 msgid "System"
@@ -612,7 +612,7 @@ msgstr "Cette action n'est pas autorisée pour les invités."
 #: templates/misago/threadslist/threads.html:18
 #: templates/misago/threadslist/threads.html:18
 #, python-format
 #, python-format
 msgid "page: %(page)s"
 msgid "page: %(page)s"
-msgstr "page: %(page)s"
+msgstr "page : %(page)s"
 
 
 #: core/validators.py:9
 #: core/validators.py:9
 msgid "Value has to contain alpha-numerical characters."
 msgid "Value has to contain alpha-numerical characters."
@@ -719,11 +719,11 @@ msgstr "Termes de service"
 #: markup/finalise.py:22
 #: markup/finalise.py:22
 #, python-format
 #, python-format
 msgid "%(title)s has written:"
 msgid "%(title)s has written:"
-msgstr "%(title)s a écrit:"
+msgstr "%(title)s a écrit :"
 
 
 #: markup/finalise.py:24
 #: markup/finalise.py:24
 msgid "Quoted message:"
 msgid "Quoted message:"
-msgstr "Message cité:"
+msgstr "Message cité :"
 
 
 #: project_template/project_name/settings.py:347
 #: project_template/project_name/settings.py:347
 msgid "Personal"
 msgid "Personal"
@@ -829,7 +829,7 @@ msgid ""
 "the \"Send link\" button."
 "the \"Send link\" button."
 msgstr ""
 msgstr ""
 "Pour recevoir ce lien, entrez l'adresse électronique de votre compte et "
 "Pour recevoir ce lien, entrez l'adresse électronique de votre compte et "
-"appuyez sur le bouton \"Envoyer un lien\"."
+"appuyez sur le bouton « Envoyer un lien »."
 
 
 #: templates/misago/activation/request.html:45
 #: templates/misago/activation/request.html:45
 msgid "To request new activation link please enable JavaScript."
 msgid "To request new activation link please enable JavaScript."
@@ -858,7 +858,7 @@ msgid ""
 "%(filetype)s, %(size)s, uploaded by %(uploader)s %(uploaded_on)s from "
 "%(filetype)s, %(size)s, uploaded by %(uploader)s %(uploaded_on)s from "
 "%(uploader_ip)s."
 "%(uploader_ip)s."
 msgstr ""
 msgstr ""
-"%(filetype)s, %(size)s, télé-déposé par %(uploader)s %(uploaded_on)s depuis "
+"%(filetype)s, %(size)s, télédéposé par %(uploader)s %(uploaded_on)s depuis "
 "%(uploader_ip)s."
 "%(uploader_ip)s."
 
 
 #: templates/misago/admin/attachments/list.html:53
 #: templates/misago/admin/attachments/list.html:53
@@ -879,12 +879,11 @@ msgstr "Supprimer"
 
 
 #: templates/misago/admin/attachments/list.html:70
 #: templates/misago/admin/attachments/list.html:70
 msgid "No attachments matching search criteria exist."
 msgid "No attachments matching search criteria exist."
-msgstr ""
-"Il n'existe pas de pièces jointes correspondant à des critères de recherche."
+msgstr "Aucune pièce jointe correspondant à ces critères de recherche."
 
 
 #: templates/misago/admin/attachments/list.html:72
 #: templates/misago/admin/attachments/list.html:72
 msgid "No attachments currently exist."
 msgid "No attachments currently exist."
-msgstr "Aucune pièce jointe n'existe actuellement."
+msgstr "Aucune pièce jointe actuellement."
 
 
 #: templates/misago/admin/attachments/list.html:79
 #: templates/misago/admin/attachments/list.html:79
 msgid "Search attachments"
 msgid "Search attachments"
@@ -892,7 +891,7 @@ msgstr "Rechercher des pièces jointes"
 
 
 #: templates/misago/admin/attachments/list.html:112
 #: templates/misago/admin/attachments/list.html:112
 msgid "Are you sure you want to delete this attachment?"
 msgid "Are you sure you want to delete this attachment?"
-msgstr "Êtes-vous sûr de vouloir supprimer cette pièce jointe?"
+msgstr "Êtes-vous sûr⋅e de vouloir supprimer cette pièce jointe ?"
 
 
 #: templates/misago/admin/attachmenttypes/form.html:9
 #: templates/misago/admin/attachmenttypes/form.html:9
 #: templates/misago/admin/attachmenttypes/form.html:18
 #: templates/misago/admin/attachmenttypes/form.html:18
@@ -998,7 +997,7 @@ msgstr "Aucun bannissement prononcé."
 
 
 #: templates/misago/admin/bans/list.html:86
 #: templates/misago/admin/bans/list.html:86
 msgid "Are you sure you want to remove this ban?"
 msgid "Are you sure you want to remove this ban?"
-msgstr "Êtes-vous certain de vouloir supprimer ce bannissement?"
+msgstr "Êtes-vous certain de vouloir supprimer ce bannissement ?"
 
 
 #: templates/misago/admin/bans/list.html:95
 #: templates/misago/admin/bans/list.html:95
 msgid "Search bans"
 msgid "Search bans"
@@ -1006,7 +1005,7 @@ msgstr "Rechercher un bannissement"
 
 
 #: templates/misago/admin/base_thin.html:8
 #: templates/misago/admin/base_thin.html:8
 msgid "Misago Administration"
 msgid "Misago Administration"
-msgstr "Administration de Misago "
+msgstr "Administration de Misago"
 
 
 #: templates/misago/admin/categories/delete.html:6
 #: templates/misago/admin/categories/delete.html:6
 #: templates/misago/admin/categories/delete.html:13
 #: templates/misago/admin/categories/delete.html:13
@@ -1016,7 +1015,7 @@ msgid ""
 "Delete category: %(category)s\n"
 "Delete category: %(category)s\n"
 msgstr ""
 msgstr ""
 "\n"
 "\n"
-"Supprimer la catégorie: %(category)s\n"
+"Supprimer la catégorie : %(category)s\n"
 
 
 #: templates/misago/admin/categories/delete.html:21
 #: templates/misago/admin/categories/delete.html:21
 #, python-format
 #, python-format
@@ -1026,7 +1025,7 @@ msgid ""
 "  "
 "  "
 msgstr ""
 msgstr ""
 "\n"
 "\n"
-"  Supprimer la catégorie: %(category)s\n"
+"  Supprimer la catégorie : %(category)s\n"
 "  "
 "  "
 
 
 #: templates/misago/admin/categories/delete.html:31
 #: templates/misago/admin/categories/delete.html:31
@@ -1085,7 +1084,7 @@ msgid ""
 "%(category)s: Permissions\n"
 "%(category)s: Permissions\n"
 msgstr ""
 msgstr ""
 "\n"
 "\n"
-"%(category)s: Autorisations\n"
+"%(category)s : Autorisations\n"
 
 
 #: templates/misago/admin/categoryroles/categoryroles.html:16
 #: templates/misago/admin/categoryroles/categoryroles.html:16
 #, python-format
 #, python-format
@@ -1095,7 +1094,7 @@ msgid ""
 "  "
 "  "
 msgstr ""
 msgstr ""
 "\n"
 "\n"
-"  %(category)s: Autorisations\n"
+"  %(category)s : Autorisations\n"
 "  "
 "  "
 
 
 #: templates/misago/admin/categoryroles/categoryroles.html:48
 #: templates/misago/admin/categoryroles/categoryroles.html:48
@@ -1124,7 +1123,7 @@ msgstr "Annuler"
 #: templates/misago/admin/categoryroles/categoryroles.html:64
 #: templates/misago/admin/categoryroles/categoryroles.html:64
 #: templates/misago/admin/categoryroles/rolecategories.html:67
 #: templates/misago/admin/categoryroles/rolecategories.html:67
 msgid "Are you sure you want to abandon changes?"
 msgid "Are you sure you want to abandon changes?"
-msgstr "Êtes-vous sûr de vouloir abandonner les changements?"
+msgstr "Êtes-vous sûr de vouloir abandonner les changements ?"
 
 
 #: templates/misago/admin/categoryroles/form.html:9
 #: templates/misago/admin/categoryroles/form.html:9
 #: templates/misago/admin/categoryroles/form.html:18
 #: templates/misago/admin/categoryroles/form.html:18
@@ -1153,7 +1152,7 @@ msgstr "Aucun rôle de catégorie n'est actuellement défini."
 #: templates/misago/admin/categoryroles/list.html:53
 #: templates/misago/admin/categoryroles/list.html:53
 #: templates/misago/admin/roles/list.html:69
 #: templates/misago/admin/roles/list.html:69
 msgid "Are you sure you want to delete this role?"
 msgid "Are you sure you want to delete this role?"
-msgstr "Êtes-vous sûr de vouloir supprimer ce rôle?"
+msgstr "Êtes-vous sûr de vouloir supprimer ce rôle ?"
 
 
 #: templates/misago/admin/categoryroles/rolecategories.html:6
 #: templates/misago/admin/categoryroles/rolecategories.html:6
 #, python-format
 #, python-format
@@ -1162,7 +1161,7 @@ msgid ""
 "%(role)s: Category permissions\n"
 "%(role)s: Category permissions\n"
 msgstr ""
 msgstr ""
 "\n"
 "\n"
-"%(role)s: Droits d’accès aux catégories\n"
+"%(role)s : Droits d’accès aux catégories\n"
 
 
 #: templates/misago/admin/categoryroles/rolecategories.html:16
 #: templates/misago/admin/categoryroles/rolecategories.html:16
 #, python-format
 #, python-format
@@ -1172,12 +1171,12 @@ msgid ""
 "  "
 "  "
 msgstr ""
 msgstr ""
 "\n"
 "\n"
-"  %(role)s: Droits d’accès aux catégories\n"
+"  %(role)s : Droits d’accès aux catégories\n"
 "  "
 "  "
 
 
 #: templates/misago/admin/conf/group.html:61
 #: templates/misago/admin/conf/group.html:61
 msgid "Change settings"
 msgid "Change settings"
-msgstr "Modifier les parametres"
+msgstr "Modifier les paramètres"
 
 
 #: templates/misago/admin/errorpages/403.html:5
 #: templates/misago/admin/errorpages/403.html:5
 #: templates/misago/errorpages/403.html:5
 #: templates/misago/errorpages/403.html:5
@@ -1262,11 +1261,11 @@ msgstr "Enregistrer et en ajouter une autre"
 
 
 #: templates/misago/admin/generic/list.html:21
 #: templates/misago/admin/generic/list.html:21
 msgid "Sort:"
 msgid "Sort:"
-msgstr "Trier:"
+msgstr "Trier :"
 
 
 #: templates/misago/admin/generic/list.html:25
 #: templates/misago/admin/generic/list.html:25
 msgid "Change sorting to:"
 msgid "Change sorting to:"
-msgstr "Changer le tri par:"
+msgstr "Changer le tri par :"
 
 
 #: templates/misago/admin/generic/list.html:50
 #: templates/misago/admin/generic/list.html:50
 msgid "Change search"
 msgid "Change search"
@@ -1334,11 +1333,11 @@ msgstr "Dernier"
 
 
 #: templates/misago/admin/index.html:13
 #: templates/misago/admin/index.html:13
 msgid "Administration Home"
 msgid "Administration Home"
-msgstr "Accueil admnistration"
+msgstr "Accueil administration"
 
 
 #: templates/misago/admin/index.html:33
 #: templates/misago/admin/index.html:33
 msgid "Misago version"
 msgid "Misago version"
-msgstr "Version Misago"
+msgstr "Version de Misago"
 
 
 #: templates/misago/admin/index.html:56
 #: templates/misago/admin/index.html:56
 msgid "Check version"
 msgid "Check version"
@@ -1346,7 +1345,7 @@ msgstr "Vérifier la version"
 
 
 #: templates/misago/admin/index.html:62
 #: templates/misago/admin/index.html:62
 msgid "This feature requires \"packaging\" python module."
 msgid "This feature requires \"packaging\" python module."
-msgstr "Cette fonction demande un module de \"packaging\" python"
+msgstr "Cette fonction requiert le module Python nommé « packaging »"
 
 
 #: templates/misago/admin/index.html:76
 #: templates/misago/admin/index.html:76
 msgid "DB Contents"
 msgid "DB Contents"
@@ -1375,7 +1374,7 @@ msgstr "Utilisateurs inactifs"
 
 
 #: templates/misago/admin/index.html:122
 #: templates/misago/admin/index.html:122
 msgid "Checking..."
 msgid "Checking..."
-msgstr "Vérification..."
+msgstr "Vérification"
 
 
 #: templates/misago/admin/login.html:5
 #: templates/misago/admin/login.html:5
 msgid "Log in"
 msgid "Log in"
@@ -1412,7 +1411,7 @@ msgstr "S'enregistrer"
 
 
 #: templates/misago/admin/logout.html:8
 #: templates/misago/admin/logout.html:8
 msgid "Log out?"
 msgid "Log out?"
-msgstr "Se déconnecter?"
+msgstr "Vous déconnecter ?"
 
 
 #: templates/misago/admin/logout.html:19
 #: templates/misago/admin/logout.html:19
 msgid "Log out from admin"
 msgid "Log out from admin"
@@ -1487,7 +1486,7 @@ msgstr "Aucun rang n'est actuellement défini."
 
 
 #: templates/misago/admin/ranks/list.html:125
 #: templates/misago/admin/ranks/list.html:125
 msgid "Are you sure you want to delete this rank?"
 msgid "Are you sure you want to delete this rank?"
-msgstr "Êtes-vous sûr de vouloir supprimer ce rang?"
+msgstr "Êtes-vous sûr de vouloir supprimer ce rang ?"
 
 
 #: templates/misago/admin/roles/list.html:38
 #: templates/misago/admin/roles/list.html:38
 msgid "Users with role"
 msgid "Users with role"
@@ -1504,7 +1503,7 @@ msgstr "Utilisateurs bannis"
 
 
 #: templates/misago/admin/users/ban.html:16
 #: templates/misago/admin/users/ban.html:16
 msgid "Ban selected users:"
 msgid "Ban selected users:"
-msgstr "Interdire les utilisateurs sélectionnés:"
+msgstr "Interdire les utilisateurs sélectionnés :"
 
 
 #: templates/misago/admin/users/ban.html:35
 #: templates/misago/admin/users/ban.html:35
 #: templates/misago/admin/users/edit.html:103
 #: templates/misago/admin/users/edit.html:103
@@ -1524,7 +1523,7 @@ msgstr "Supprimer les utilisateurs avec le contenu"
 
 
 #: templates/misago/admin/users/delete.html:17
 #: templates/misago/admin/users/delete.html:17
 msgid "Deleting users..."
 msgid "Deleting users..."
-msgstr "Suppression des utilisateurs..."
+msgstr "Suppression des utilisateurs"
 
 
 #: templates/misago/admin/users/delete.html:32
 #: templates/misago/admin/users/delete.html:32
 #: templates/misago/admin/users/delete.html:36
 #: templates/misago/admin/users/delete.html:36
@@ -1538,7 +1537,7 @@ msgstr "Compte"
 
 
 #: templates/misago/admin/users/delete.html:59
 #: templates/misago/admin/users/delete.html:59
 msgid "deleting..."
 msgid "deleting..."
-msgstr "suppression..."
+msgstr "suppression"
 
 
 #: templates/misago/admin/users/delete.html:60
 #: templates/misago/admin/users/delete.html:60
 msgid "done"
 msgid "done"
@@ -1582,7 +1581,7 @@ msgstr "Options du forum"
 
 
 #: templates/misago/admin/users/edit.html:137
 #: templates/misago/admin/users/edit.html:137
 msgid "Automatic subscription preferences"
 msgid "Automatic subscription preferences"
-msgstr "Préférences d' abonnement automatique"
+msgstr "Préférences d'abonnement automatique"
 
 
 #: templates/misago/admin/users/edit.html:144
 #: templates/misago/admin/users/edit.html:144
 msgid "Account status"
 msgid "Account status"
@@ -1685,7 +1684,7 @@ msgstr "Permanent"
 #: templates/misago/admin/warnings/list.html:45
 #: templates/misago/admin/warnings/list.html:45
 #: templates/misago/admin/warnings/list.html:63
 #: templates/misago/admin/warnings/list.html:63
 msgid "Not restricted"
 msgid "Not restricted"
-msgstr "Non limité"
+msgstr "Non restreint"
 
 
 #: templates/misago/admin/warnings/list.html:50
 #: templates/misago/admin/warnings/list.html:50
 #: templates/misago/admin/warnings/list.html:68
 #: templates/misago/admin/warnings/list.html:68
@@ -1703,11 +1702,11 @@ msgstr "Aucun niveau d'avertissement n'est actuellement défini."
 
 
 #: templates/misago/admin/warnings/list.html:135
 #: templates/misago/admin/warnings/list.html:135
 msgid "Are you sure you want to delete this warning level?"
 msgid "Are you sure you want to delete this warning level?"
-msgstr "Êtes-vous sûr de vouloir supprimer ce niveau d'avertissement?"
+msgstr "Êtes-vous sûr de vouloir supprimer ce niveau d'avertissement ?"
 
 
 #: templates/misago/auth.html:10
 #: templates/misago/auth.html:10
 msgid "Log out"
 msgid "Log out"
-msgstr "Se deconnecter"
+msgstr "Se déconnecter"
 
 
 #: templates/misago/categories/base.html:22
 #: templates/misago/categories/base.html:22
 #: templates/misago/categories/base.html:48
 #: templates/misago/categories/base.html:48
@@ -1731,11 +1730,11 @@ msgstr "Aucune catégorie n'existe ou vous n'êtes pas autorisé à les voir"
 
 
 #: templates/misago/categories/icon.html:4
 #: templates/misago/categories/icon.html:4
 msgid "This category has no new posts. (closed)"
 msgid "This category has no new posts. (closed)"
-msgstr "Cette catégorie n'a pas de nouveaux messages. (close)"
+msgstr "Cette catégorie n'a pas de nouveaux messages. (fermée)"
 
 
 #: templates/misago/categories/icon.html:10
 #: templates/misago/categories/icon.html:10
 msgid "This category has new posts. (closed)"
 msgid "This category has new posts. (closed)"
-msgstr "Cette catégorie a de nouveaux messages. (close)"
+msgstr "Cette catégorie contient de nouveaux messages. (fermée)"
 
 
 #: templates/misago/categories/icon.html:18
 #: templates/misago/categories/icon.html:18
 msgid "This category has no new posts."
 msgid "This category has no new posts."
@@ -1790,7 +1789,7 @@ msgstr "%(user)s, votre compte a été activé par l'administrateur du forum."
 #: templates/misago/emails/register/complete.html:18
 #: templates/misago/emails/register/complete.html:18
 #: templates/misago/emails/register/inactive.html:31
 #: templates/misago/emails/register/inactive.html:31
 msgid "this form"
 msgid "this form"
-msgstr "ce forum"
+msgstr "ce formulaire"
 
 
 #: templates/misago/emails/activation/by_admin.html:14
 #: templates/misago/emails/activation/by_admin.html:14
 #, python-format
 #, python-format
@@ -1800,18 +1799,19 @@ msgstr "Vous pouvez maintenant vous connecter à l'aide de %(login_form)s."
 #: templates/misago/emails/activation/by_admin.txt:10
 #: templates/misago/emails/activation/by_admin.txt:10
 msgid "You can now sign in to it using the form below:"
 msgid "You can now sign in to it using the form below:"
 msgstr ""
 msgstr ""
-"Vous pouvez maintenant vous connecter en utilisant le formulaire ci-dessous:"
+"Vous pouvez maintenant vous connecter en utilisant le formulaire ci-dessous "
+":"
 
 
 #: templates/misago/emails/activation/by_user.html:6
 #: templates/misago/emails/activation/by_user.html:6
 #: templates/misago/emails/activation/by_user.txt:6
 #: templates/misago/emails/activation/by_user.txt:6
 #, python-format
 #, python-format
 msgid "%(user)s, to activate your account click the below link:"
 msgid "%(user)s, to activate your account click the below link:"
-msgstr "%(user)s, pour activer votre compte, cliquez sur le lien ci-dessous:"
+msgstr "%(user)s, pour activer votre compte, cliquez sur le lien ci-dessous :"
 
 
 #: templates/misago/emails/activation/by_user.html:11
 #: templates/misago/emails/activation/by_user.html:11
 #: templates/misago/emails/register/inactive.html:27
 #: templates/misago/emails/register/inactive.html:27
 msgid "Activate my account!"
 msgid "Activate my account!"
-msgstr "Activer mon compte!"
+msgstr "Activer mon compte !"
 
 
 #: templates/misago/emails/change_email.html:6
 #: templates/misago/emails/change_email.html:6
 #: templates/misago/emails/change_email.txt:6
 #: templates/misago/emails/change_email.txt:6
@@ -1852,8 +1852,8 @@ msgstr ""
 #: templates/misago/emails/change_password_form_link.txt:10
 #: templates/misago/emails/change_password_form_link.txt:10
 msgid "To change your account password click the link below:"
 msgid "To change your account password click the link below:"
 msgstr ""
 msgstr ""
-"Pour changer le mot de passe de votre compte, cliquez sur le lien ci-"
-"dessous:"
+"Pour changer le mot de passe de votre compte, cliquez sur le lien ci-dessous"
+" :"
 
 
 #: templates/misago/emails/change_password_form_link.html:16
 #: templates/misago/emails/change_password_form_link.html:16
 msgid "Set new password"
 msgid "Set new password"
@@ -1871,7 +1871,7 @@ msgstr ""
 #: templates/misago/emails/privatethread/added.html:14
 #: templates/misago/emails/privatethread/added.html:14
 #: templates/misago/emails/privatethread/added.txt:10
 #: templates/misago/emails/privatethread/added.txt:10
 msgid "To read this thread click the link below:"
 msgid "To read this thread click the link below:"
-msgstr "Pour lire ce fil de discussion, cliquez sur le lien ci-dessous :"
+msgstr "Pour lire ce fil de discussion, cliquez sur le lien ci-dessous :"
 
 
 #: templates/misago/emails/privatethread/added.txt:6
 #: templates/misago/emails/privatethread/added.txt:6
 #, python-format
 #, python-format
@@ -1887,7 +1887,7 @@ msgstr ""
 #: templates/misago/emails/register/inactive.txt:6
 #: templates/misago/emails/register/inactive.txt:6
 #, python-format
 #, python-format
 msgid "%(user)s, thank you for joining us!"
 msgid "%(user)s, thank you for joining us!"
-msgstr "%(user)s, merci de nous avoir rejoint!"
+msgstr "%(user)s, merci de nous avoir rejoint !"
 
 
 #: templates/misago/emails/register/complete.html:12
 #: templates/misago/emails/register/complete.html:12
 #: templates/misago/emails/register/complete.txt:10
 #: templates/misago/emails/register/complete.txt:10
@@ -1898,7 +1898,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Vous pouvez maintenant rejoindre des fils de discussion sur nos forums. "
 "Vous pouvez maintenant rejoindre des fils de discussion sur nos forums. "
 "Pourquoi ne pas venir faire un tour et partager votre avis, faire part de "
 "Pourquoi ne pas venir faire un tour et partager votre avis, faire part de "
-"vos connaissances avec le reste de la communauté?"
+"vos connaissances avec le reste de la communauté ?"
 
 
 #: templates/misago/emails/register/complete.html:20
 #: templates/misago/emails/register/complete.html:20
 #, python-format
 #, python-format
@@ -1911,7 +1911,7 @@ msgstr ""
 msgid "You can always sign in to your account using the form below:"
 msgid "You can always sign in to your account using the form below:"
 msgstr ""
 msgstr ""
 "Vous pouvez toujours vous connecter à votre compte en utilisant le "
 "Vous pouvez toujours vous connecter à votre compte en utilisant le "
-"formulaire ci-dessous:"
+"formulaire ci-dessous :"
 
 
 #: templates/misago/emails/register/inactive.html:7
 #: templates/misago/emails/register/inactive.html:7
 #: templates/misago/emails/register/inactive.txt:10
 #: templates/misago/emails/register/inactive.txt:10
@@ -1934,7 +1934,7 @@ msgstr ""
 #: templates/misago/emails/register/inactive.html:17
 #: templates/misago/emails/register/inactive.html:17
 #: templates/misago/emails/register/inactive.txt:20
 #: templates/misago/emails/register/inactive.txt:20
 msgid "Thank you for your patience and see you soon!"
 msgid "Thank you for your patience and see you soon!"
-msgstr "Merci pour votre patience et à bientôt!"
+msgstr "Merci pour votre patience et à bientôt !"
 
 
 #: templates/misago/emails/register/inactive.html:22
 #: templates/misago/emails/register/inactive.html:22
 #: templates/misago/emails/register/inactive.txt:25
 #: templates/misago/emails/register/inactive.txt:25
@@ -1943,7 +1943,7 @@ msgid ""
 "activate your account. To do so, simply click the link below:"
 "activate your account. To do so, simply click the link below:"
 msgstr ""
 msgstr ""
 "Avant de pouvoir participer aux discussions sur nos forums, vous devez "
 "Avant de pouvoir participer aux discussions sur nos forums, vous devez "
-"activer votre compte. Pour cela, cliquez simplement sur le lien ci-dessous:"
+"activer votre compte. Pour cela, cliquez simplement sur le lien ci-dessous :"
 
 
 #: templates/misago/emails/register/inactive.html:33
 #: templates/misago/emails/register/inactive.html:33
 #, python-format
 #, python-format
@@ -1960,7 +1960,7 @@ msgid ""
 "below:"
 "below:"
 msgstr ""
 msgstr ""
 "Une fois votre compte activé, vous pouvez toujours vous connecter à l'aide "
 "Une fois votre compte activé, vous pouvez toujours vous connecter à l'aide "
-"du formulaire ci-dessous"
+"du formulaire ci-dessous :"
 
 
 #: templates/misago/emails/thread/reply.html:9
 #: templates/misago/emails/thread/reply.html:9
 #, python-format
 #, python-format
@@ -1974,7 +1974,7 @@ msgstr ""
 #: templates/misago/emails/thread/reply.html:14
 #: templates/misago/emails/thread/reply.html:14
 #: templates/misago/emails/thread/reply.txt:10
 #: templates/misago/emails/thread/reply.txt:10
 msgid "To read this reply, click the below link:"
 msgid "To read this reply, click the below link:"
-msgstr "Pour lire cette réponse, cliquez sur le lien ci-dessous:"
+msgstr "Pour lire cette réponse, cliquez sur le lien ci-dessous :"
 
 
 #: templates/misago/emails/thread/reply.html:17
 #: templates/misago/emails/thread/reply.html:17
 msgid "Go to reply"
 msgid "Go to reply"
@@ -2019,11 +2019,11 @@ msgstr "Cette page n'a pas été atteinte par un chemin normal."
 
 
 #: templates/misago/errorpages/banned.html:5
 #: templates/misago/errorpages/banned.html:5
 msgid "You are banned"
 msgid "You are banned"
-msgstr "Vous êtes banni"
+msgstr "Vous êtes banni⋅e"
 
 
 #: templates/misago/errorpages/banned.html:9
 #: templates/misago/errorpages/banned.html:9
 msgid "You are banned from accessing this page."
 msgid "You are banned from accessing this page."
-msgstr "Vous ne pouvez plus acceder a cette page."
+msgstr "Vous ne pouvez plus accéder à cette page."
 
 
 #: templates/misago/errorpages/banned.html:35
 #: templates/misago/errorpages/banned.html:35
 #, python-format
 #, python-format
@@ -2049,7 +2049,7 @@ msgstr "Pour une expérience complète, activez JavaScript."
 
 
 #: templates/misago/forgottenpassword/error.html:5
 #: templates/misago/forgottenpassword/error.html:5
 msgid "Change forgotten password error"
 msgid "Change forgotten password error"
-msgstr "Erreur: mot de passe oublié"
+msgstr "Erreur pendant la modification du mot de passe oublié"
 
 
 #: templates/misago/forgottenpassword/error.html:18
 #: templates/misago/forgottenpassword/error.html:18
 msgid "Can't change forgotten password."
 msgid "Can't change forgotten password."
@@ -2241,7 +2241,7 @@ msgstr "%(title)s, joint le %(joined_on)s"
 msgid "Wrote %(posts)s post."
 msgid "Wrote %(posts)s post."
 msgid_plural "Wrote %(posts)s posts."
 msgid_plural "Wrote %(posts)s posts."
 msgstr[0] "A écrit %(posts)s postes"
 msgstr[0] "A écrit %(posts)s postes"
-msgstr[1] "A écrit %(posts)sposts"
+msgstr[1] "A écrit %(posts)s posts"
 
 
 #: templates/misago/profile/base.html:25
 #: templates/misago/profile/base.html:25
 #, python-format
 #, python-format
@@ -2426,7 +2426,7 @@ msgstr "Rechercher sur le site"
 
 
 #: templates/misago/search.html:45
 #: templates/misago/search.html:45
 msgid "Loading search..."
 msgid "Loading search..."
-msgstr "Recherche en cours..."
+msgstr "Recherche en cours"
 
 
 #: templates/misago/thread/paginator.html:41
 #: templates/misago/thread/paginator.html:41
 #, python-format
 #, python-format
@@ -2633,7 +2633,7 @@ msgstr[1] "%(replies)s réponses"
 #: templates/misago/thread/stats.html:83
 #: templates/misago/thread/stats.html:83
 #, python-format
 #, python-format
 msgid "last reply by %(user)s %(date)s"
 msgid "last reply by %(user)s %(date)s"
-msgstr "Dernière réponse par %(user)s le %(date)s"
+msgstr "Dernière réponse par %(user)s %(date)s"
 
 
 #: templates/misago/thread/thread.html:18
 #: templates/misago/thread/thread.html:18
 #, python-format
 #, python-format
@@ -2666,13 +2666,12 @@ msgstr "Il n'y a pas de fil de discussion dans cette catégorie."
 
 
 #: templates/misago/threadslist/base.html:65
 #: templates/misago/threadslist/base.html:65
 msgid "There are no threads on this forum... yet!"
 msgid "There are no threads on this forum... yet!"
-msgstr ""
-"Il n'y a aucun fil de discussion sur ce forum... pour l'instant du moins !"
+msgstr "Il n'y a aucun fil de discussion sur ce forum… pour l'instant !"
 
 
 #: templates/misago/threadslist/base.html:69
 #: templates/misago/threadslist/base.html:69
 #: templates/misago/threadslist/private_threads.html:67
 #: templates/misago/threadslist/private_threads.html:67
 msgid "Why not start one yourself?"
 msgid "Why not start one yourself?"
-msgstr "Pourquoi ne pas en commencer un vous même?"
+msgstr "Pourquoi ne pas en commencer un vous-même ?"
 
 
 #: templates/misago/threadslist/base.html:73
 #: templates/misago/threadslist/base.html:73
 #: templates/misago/threadslist/private_threads.html:70
 #: templates/misago/threadslist/private_threads.html:70
@@ -2739,7 +2738,7 @@ msgid_plural "%(posters)s most active posters from last %(days)s days."
 msgstr[0] ""
 msgstr[0] ""
 " %(posters)s ont été les utilisateurs les plus actifs depuis %(days)sjours"
 " %(posters)s ont été les utilisateurs les plus actifs depuis %(days)sjours"
 msgstr[1] ""
 msgstr[1] ""
-"%(posters)s ont été les utilisateurs les plus actifs depuis%(days)sjours"
+"%(posters)s ont été les utilisateurs les plus actifs depuis%(days)s jours"
 
 
 #: templates/misago/userslists/active_posters.html:16
 #: templates/misago/userslists/active_posters.html:16
 #: templates/misago/userslists/active_posters.html:34
 #: templates/misago/userslists/active_posters.html:34
@@ -2767,7 +2766,7 @@ msgstr[1] "%(users)s ont ce rang"
 
 
 #: templates/misago/userslists/rank.html:119
 #: templates/misago/userslists/rank.html:119
 msgid "There are no users with this rank at the moment."
 msgid "There are no users with this rank at the moment."
-msgstr "Il n'y a aucun utilisateur avec ce rang pour le moment"
+msgstr "Il n'y a aucun utilisateur avec ce rang pour le moment."
 
 
 #: templates/misago/userslists/usercard.html:42
 #: templates/misago/userslists/usercard.html:42
 #: templates/misago/userslists/usercard.html:45
 #: templates/misago/userslists/usercard.html:45
@@ -2793,27 +2792,27 @@ msgstr "Types de pièces jointes"
 
 
 #: threads/api/attachments.py:19
 #: threads/api/attachments.py:19
 msgid "You don't have permission to upload new files."
 msgid "You don't have permission to upload new files."
-msgstr "Vous n'êtes pas autorisé à télé-déposer de nouveaux fichiers"
+msgstr "Vous n'êtes pas autorisé⋅e à télédéposer de nouveaux fichiers."
 
 
 #: threads/api/attachments.py:29
 #: threads/api/attachments.py:29
 msgid "No file has been uploaded."
 msgid "No file has been uploaded."
-msgstr "Aucun fichier n'a été télé-déposé"
+msgstr "Aucun fichier télédéposé."
 
 
 #: threads/api/attachments.py:50
 #: threads/api/attachments.py:50
 msgid "Uploaded image was corrupted or invalid."
 msgid "Uploaded image was corrupted or invalid."
-msgstr "L'image télé-déposé était corrompu ou invalide"
+msgstr "L'image télédéposée était corrompue ou invalide."
 
 
 #: threads/api/attachments.py:81
 #: threads/api/attachments.py:81
 msgid "You can't upload files of this type."
 msgid "You can't upload files of this type."
-msgstr "Vous ne pouvez pas déposer de fichiers de ce type"
+msgstr "Vous ne pouvez pas télédéposer de fichiers de ce type."
 
 
 #: threads/api/attachments.py:86
 #: threads/api/attachments.py:86
 #, python-format
 #, python-format
 msgid ""
 msgid ""
 "You can't upload files larger than %(limit)s (your file has %(upload)s)."
 "You can't upload files larger than %(limit)s (your file has %(upload)s)."
 msgstr ""
 msgstr ""
-"Vous ne pouvez pas télé-déposer des fichiers plus larges que %(limit)s "
-"(votre fichier a %(upload)s)"
+"Vous ne pouvez pas télédéposer des fichiers plus larges que %(limit)s (votre"
+" fichier fait %(upload)s)"
 
 
 #: threads/api/attachments.py:96
 #: threads/api/attachments.py:96
 #, python-format
 #, python-format
@@ -2821,8 +2820,8 @@ msgid ""
 "You can't upload files of this type larger than %(limit)s (your file has "
 "You can't upload files of this type larger than %(limit)s (your file has "
 "%(upload)s)."
 "%(upload)s)."
 msgstr ""
 msgstr ""
-"Vous ne pouvez pas télé-déposer de fichiers de ce type plus larges "
-"que%(limit)s(votre fichier a %(upload)s)"
+"Vous ne pouvez pas télédéposer de fichiers de ce type plus larges "
+"que%(limit)s(votre fichier fait %(upload)s)"
 
 
 #: threads/api/postendpoints/edits.py:89
 #: threads/api/postendpoints/edits.py:89
 msgid "Edits record is unavailable for this post."
 msgid "Edits record is unavailable for this post."
@@ -2857,8 +2856,8 @@ msgstr "Vous ne pouvez pas séparer les messages de ce fil de discussion."
 #, python-format
 #, python-format
 msgid "You don't have permission to remove \"%(attachment)s\" attachment."
 msgid "You don't have permission to remove \"%(attachment)s\" attachment."
 msgstr ""
 msgstr ""
-"Vous n'avez pas la permission de supprimer la pièce jointe "
-"\"%(attachment)s\""
+"Vous n'avez pas la permission de supprimer la pièce-jointe « %(attachment)s "
+"»."
 
 
 #: threads/api/postingendpoint/attachments.py:128
 #: threads/api/postingendpoint/attachments.py:128
 #, python-format
 #, python-format
@@ -2894,12 +2893,13 @@ msgstr ""
 #: threads/api/postingendpoint/emailnotification.py:39
 #: threads/api/postingendpoint/emailnotification.py:39
 #, python-format
 #, python-format
 msgid "%(user)s has replied to your thread \"%(thread)s\""
 msgid "%(user)s has replied to your thread \"%(thread)s\""
-msgstr "%(user)s a répondu à votre fil de discussion \"%(thread)s\""
+msgstr "%(user)s a répondu à votre fil de discussion « %(thread)s »"
 
 
 #: threads/api/postingendpoint/emailnotification.py:41
 #: threads/api/postingendpoint/emailnotification.py:41
 #, python-format
 #, python-format
 msgid "%(user)s has replied to thread \"%(thread)s\" that you are watching"
 msgid "%(user)s has replied to thread \"%(thread)s\" that you are watching"
-msgstr "%(user)s a répondu au fil de discussion \"%(thread)s\" que vous suivez"
+msgstr ""
+"%(user)s a répondu au fil de discussion « %(thread)s » que vous suivez"
 
 
 #: threads/api/postingendpoint/floodprotection.py:25
 #: threads/api/postingendpoint/floodprotection.py:25
 msgid "You can't post message so quickly after previous one."
 msgid "You can't post message so quickly after previous one."
@@ -2938,12 +2938,12 @@ msgstr[0] ""
 "en avez ajouté %(added)s)."
 "en avez ajouté %(added)s)."
 msgstr[1] ""
 msgstr[1] ""
 "Vous ne pouvez pas ajouter plus de %(users)s utilisateurs au fil de "
 "Vous ne pouvez pas ajouter plus de %(users)s utilisateurs au fil de "
-"discussion privé (Vous en avez ajouté %(added)s)."
+"discussion privé (vous en avez ajouté %(added)s)."
 
 
 #: threads/api/postingendpoint/participants.py:85
 #: threads/api/postingendpoint/participants.py:85
 #, python-format
 #, python-format
 msgid "One or more users could not be found: %(usernames)s"
 msgid "One or more users could not be found: %(usernames)s"
-msgstr "Un ou plusieurs utilisateurs n’ont pas été trouvés : %(usernames)s"
+msgstr "Un ou plusieurs utilisateurs n’ont pas été trouvés : %(usernames)s"
 
 
 #: threads/api/postingendpoint/reply.py:81 threads/validators.py:80
 #: threads/api/postingendpoint/reply.py:81 threads/validators.py:80
 msgid "You have to enter a message."
 msgid "You have to enter a message."
@@ -2967,7 +2967,7 @@ msgstr ""
 #: threads/api/threadendpoints/merge.py:118
 #: threads/api/threadendpoints/merge.py:118
 #: threads/serializers/moderation.py:418 threads/serializers/moderation.py:465
 #: threads/serializers/moderation.py:418 threads/serializers/moderation.py:465
 msgid "Invalid choice."
 msgid "Invalid choice."
-msgstr "Choix non valide."
+msgstr "Choix invalide."
 
 
 #: threads/api/threadendpoints/patch.py:52
 #: threads/api/threadendpoints/patch.py:52
 msgid "Invalid thread title."
 msgid "Invalid thread title."
@@ -3149,8 +3149,8 @@ msgstr ""
 "Si vous souhaitez limiter les options possibles pour télécharger ce type de "
 "Si vous souhaitez limiter les options possibles pour télécharger ce type de "
 "fichiers aux utilisateurs ayant des rôles spécifiques, sélectionnez-les dans"
 "fichiers aux utilisateurs ayant des rôles spécifiques, sélectionnez-les dans"
 " cette liste. Autrement, si vous ne choisissez aucun rôle, tous les "
 " cette liste. Autrement, si vous ne choisissez aucun rôle, tous les "
-"utilisateurs disposant de l'autorisation de v des fichiers pourront "
-"télécharger des pièces jointes de ce type de fichier."
+"utilisateurs disposant de l'autorisation de télécharger des fichiers "
+"pourront télécharger des pièces jointes de ce type de fichier."
 
 
 #: threads/migrations/0002_threads_settings.py:17
 #: threads/migrations/0002_threads_settings.py:17
 #: threads/migrations/0004_update_settings.py:17
 #: threads/migrations/0004_update_settings.py:17
@@ -3253,8 +3253,8 @@ msgstr ""
 #, python-format
 #, python-format
 msgid "%(user)s has invited you to participate in private thread \"%(thread)s\""
 msgid "%(user)s has invited you to participate in private thread \"%(thread)s\""
 msgstr ""
 msgstr ""
-"%(user)s vous a invité à participer au fil de discussion privé "
-"\"%(thread)s\""
+"%(user)s vous a invité à participer au fil de discussion privé « %(thread)s "
+"»"
 
 
 #: threads/permissions/attachments.py:15
 #: threads/permissions/attachments.py:15
 msgid "Max attached file size (in kb)"
 msgid "Max attached file size (in kb)"
@@ -3557,24 +3557,25 @@ msgstr ""
 #: threads/permissions/privatethreads.py:255
 #: threads/permissions/privatethreads.py:255
 #, python-format
 #, python-format
 msgid "%(user)s can't participate in private threads."
 msgid "%(user)s can't participate in private threads."
-msgstr "%(user)sne peut pas participer aux fils de discussion privés."
+msgstr "%(user)s ne peut pas participer aux fils de discussion privés."
 
 
 #: threads/permissions/privatethreads.py:262
 #: threads/permissions/privatethreads.py:262
 #, python-format
 #, python-format
 msgid "%(user)s is blocking you."
 msgid "%(user)s is blocking you."
-msgstr "%(user)svous bloque."
+msgstr "%(user)s vous bloque."
 
 
 #: threads/permissions/privatethreads.py:266
 #: threads/permissions/privatethreads.py:266
 #, python-format
 #, python-format
 msgid "%(user)s is not allowing invitations to private threads."
 msgid "%(user)s is not allowing invitations to private threads."
 msgstr ""
 msgstr ""
-"%(user)sne permet pas d'invitations dans les fils de discussion privés."
+"%(user)s ne permet pas d'invitations dans les fils de discussion privés."
 
 
 #: threads/permissions/privatethreads.py:270
 #: threads/permissions/privatethreads.py:270
 #, python-format
 #, python-format
 msgid "%(user)s limits invitations to private threads to followed users."
 msgid "%(user)s limits invitations to private threads to followed users."
 msgstr ""
 msgstr ""
-"%(user)slimite les invitations aux fils privés pour les utilisateurs suivis."
+"%(user)s limite les invitations aux fils privés pour les utilisateurs "
+"suivis."
 
 
 #: threads/permissions/threads.py:76
 #: threads/permissions/threads.py:76
 msgid "Can see unapproved content list"
 msgid "Can see unapproved content list"
@@ -3587,7 +3588,7 @@ msgid ""
 "being available on all threads lists, it will only display threads belonging"
 "being available on all threads lists, it will only display threads belonging"
 " to categories in which the user has permission to approve content."
 " to categories in which the user has permission to approve content."
 msgstr ""
 msgstr ""
-"Permet l'accès à des onglets \"non approuvés\" dans les listes de "
+"Permet l'accès à des onglets « non approuvés » dans les listes de "
 "discussions, pour lister facilement les fils de discussion qui ne sont pas "
 "discussions, pour lister facilement les fils de discussion qui ne sont pas "
 "approuvés ou qui contiennent des messages non approuvés. Bien que l'onglet "
 "approuvés ou qui contiennent des messages non approuvés. Bien que l'onglet "
 "soit disponible sur toutes les listes de discussion, il ne montrera que les "
 "soit disponible sur toutes les listes de discussion, il ne montrera que les "
@@ -3605,7 +3606,7 @@ msgid ""
 "categories threads lists, it will only display threads belonging to "
 "categories threads lists, it will only display threads belonging to "
 "categories in which the user has permission to see posts reports."
 "categories in which the user has permission to see posts reports."
 msgstr ""
 msgstr ""
-"Permet l'accès à des onglets \"signalés\" dans les listes de discussions, "
+"Permet l'accès à des onglets « signalés » dans les listes de discussions, "
 "pour lister facilement les fils de discussion qui contiennent des messages "
 "pour lister facilement les fils de discussion qui contiennent des messages "
 "signalés. Bien que l'onglet soit disponible sur toutes les listes de "
 "signalés. Bien que l'onglet soit disponible sur toutes les listes de "
 "discussion, il n'affichera que les fils de discussions appartenant aux "
 "discussion, il n'affichera que les fils de discussions appartenant aux "
@@ -4463,7 +4464,7 @@ msgid "No more than %(limit)s post can be deleted at single time."
 msgid_plural "No more than %(limit)s posts can be deleted at single time."
 msgid_plural "No more than %(limit)s posts can be deleted at single time."
 msgstr[0] "Pas plus d'%(limit)s message ne peut être supprimé simultanément"
 msgstr[0] "Pas plus d'%(limit)s message ne peut être supprimé simultanément"
 msgstr[1] ""
 msgstr[1] ""
-"Pas plus de %(limit)s messages ne peuvent être supprimés simultanément"
+"Pas plus de %(limit)s messages ne peuvent être supprimés simultanément."
 
 
 #: threads/serializers/moderation.py:85
 #: threads/serializers/moderation.py:85
 msgid "One or more posts to delete could not be found."
 msgid "One or more posts to delete could not be found."
@@ -4471,7 +4472,7 @@ msgstr "Un ou plusieurs messages à supprimer n'ont pas été trouvés."
 
 
 #: threads/serializers/moderation.py:91
 #: threads/serializers/moderation.py:91
 msgid "You have to select at least two posts to merge."
 msgid "You have to select at least two posts to merge."
-msgstr "Vous devez sélectionner au minimum 2 postes à fusionner"
+msgstr "Vous devez sélectionner au minimum 2 postes à fusionner."
 
 
 #: threads/serializers/moderation.py:112
 #: threads/serializers/moderation.py:112
 #, python-format
 #, python-format
@@ -4655,8 +4656,8 @@ msgstr[0] ""
 "Vous ne pouvez pas ajouter plus de %(limit_value)soption à un seul sondage "
 "Vous ne pouvez pas ajouter plus de %(limit_value)soption à un seul sondage "
 "(%(show_value)s ajoutées)."
 "(%(show_value)s ajoutées)."
 msgstr[1] ""
 msgstr[1] ""
-"Vous ne pouvez pas ajouter plus de %(limit_value)soptions à un seul sondage "
-"(%(show_value)s ajoutées)."
+"Vous ne pouvez pas ajouter plus de %(limit_value)s options à un seul sondage"
+" (%(show_value)s ajoutées)."
 
 
 #: threads/serializers/poll.py:155
 #: threads/serializers/poll.py:155
 msgid "Number of allowed choices can't be greater than number of all choices."
 msgid "Number of allowed choices can't be greater than number of all choices."
@@ -4669,7 +4670,7 @@ msgstr ""
 msgid "This poll disallows voting for more than %(choices)s choice."
 msgid "This poll disallows voting for more than %(choices)s choice."
 msgid_plural "This poll disallows voting for more than %(choices)s choices."
 msgid_plural "This poll disallows voting for more than %(choices)s choices."
 msgstr[0] "Ce sondage ne permet pas de voter pour plus de %(choices)schoix"
 msgstr[0] "Ce sondage ne permet pas de voter pour plus de %(choices)schoix"
-msgstr[1] "Ce sondage ne permet pas de voter pour plus de %(choices)schoix"
+msgstr[1] "Ce sondage ne permet pas de voter pour plus de %(choices)s choix"
 
 
 #: threads/serializers/pollvote.py:39
 #: threads/serializers/pollvote.py:39
 msgid "One or more of poll choices were invalid."
 msgid "One or more of poll choices were invalid."
@@ -4687,7 +4688,7 @@ msgstr "%(user)s aime cela."
 #: threads/templatetags/misago_poststags.py:29
 #: threads/templatetags/misago_poststags.py:29
 #, python-format
 #, python-format
 msgid "%(users)s like this."
 msgid "%(users)s like this."
-msgstr "%(users)s aiment cela"
+msgstr "%(users)s aiment cela."
 
 
 #: threads/templatetags/misago_poststags.py:34
 #: threads/templatetags/misago_poststags.py:34
 #, python-format
 #, python-format
@@ -4703,7 +4704,7 @@ msgstr "%(users)s et %(last_user)s"
 
 
 #: threads/threadtypes/thread.py:16
 #: threads/threadtypes/thread.py:16
 msgid "None (will become top level category)"
 msgid "None (will become top level category)"
-msgstr "Aucune (Cette catégorie deviendra une catégorie parente)"
+msgstr "Aucune (cette catégorie deviendra une catégorie parente)"
 
 
 #: threads/validators.py:30
 #: threads/validators.py:30
 msgid "Requested category could not be found."
 msgid "Requested category could not be found."
@@ -4711,7 +4712,7 @@ msgstr "La catégorie demandée n'a pas été trouvée."
 
 
 #: threads/validators.py:33
 #: threads/validators.py:33
 msgid "You don't have permission to access this category."
 msgid "You don't have permission to access this category."
-msgstr "Vous n'avez pas les droits pour accéder à cette catégorie"
+msgstr "Vous n'avez pas les droits pour accéder à cette catégorie."
 
 
 #: threads/validators.py:45
 #: threads/validators.py:45
 #, python-format
 #, python-format
@@ -4741,7 +4742,7 @@ msgstr[0] ""
 " %(show_value)s)."
 " %(show_value)s)."
 msgstr[1] ""
 msgstr[1] ""
 "Le titre du fil ne peut pas dépasser %(limit_value)s caractères "
 "Le titre du fil ne peut pas dépasser %(limit_value)s caractères "
-"(Actuellement %(show_value)s)."
+"(actuellement %(show_value)s)."
 
 
 #: threads/validators.py:69
 #: threads/validators.py:69
 msgid "Thread title should contain alpha-numeric characters."
 msgid "Thread title should contain alpha-numeric characters."
@@ -4765,7 +4766,7 @@ msgstr[0] ""
 "(Actuellement %(show_value)s)."
 "(Actuellement %(show_value)s)."
 msgstr[1] ""
 msgstr[1] ""
 "Le message affiché doit comporter au moins %(limit_value)s caractères "
 "Le message affiché doit comporter au moins %(limit_value)s caractères "
-"(Actuellement %(show_value)s)."
+"(actuellement %(show_value)s)."
 
 
 #: threads/validators.py:97
 #: threads/validators.py:97
 #, python-format
 #, python-format
@@ -4780,7 +4781,7 @@ msgstr[0] ""
 "(Actuellement %(show_value)s)."
 "(Actuellement %(show_value)s)."
 msgstr[1] ""
 msgstr[1] ""
 "Le message affiché ne peut pas dépasser %(limit_value)s  caractères "
 "Le message affiché ne peut pas dépasser %(limit_value)s  caractères "
-"(Actuellement %(show_value)s)."
+"(actuellement %(show_value)s)."
 
 
 #: threads/viewmodels/threads.py:27
 #: threads/viewmodels/threads.py:27
 msgid "Your threads"
 msgid "Your threads"
@@ -4872,7 +4873,7 @@ msgstr "Fichiers de taille plus importante"
 
 
 #: threads/views/admin/attachments.py:31
 #: threads/views/admin/attachments.py:31
 msgid "With attachments: 0"
 msgid "With attachments: 0"
-msgstr "Avec pièces jointes :0"
+msgstr "Avec pièces jointes : 0"
 
 
 #: threads/views/admin/attachments.py:32
 #: threads/views/admin/attachments.py:32
 msgid "Select attachments"
 msgid "Select attachments"
@@ -4884,16 +4885,16 @@ msgstr "Supprimer les pièces jointes"
 
 
 #: threads/views/admin/attachments.py:38
 #: threads/views/admin/attachments.py:38
 msgid "Are you sure you want to delete selected attachments?"
 msgid "Are you sure you want to delete selected attachments?"
-msgstr "Etes vous sûr de vouloir supprimer les pièces jointes sélectionnées ?"
+msgstr "Etes vous sûr de vouloir supprimer les pièces jointes sélectionnées ?"
 
 
 #: threads/views/admin/attachments.py:63
 #: threads/views/admin/attachments.py:63
 msgid "Selected attachments have been deleted."
 msgid "Selected attachments have been deleted."
-msgstr "Les pièces jointes sélectionnées ont été supprimées"
+msgstr "Les pièces jointes sélectionnées ont été supprimées."
 
 
 #: threads/views/admin/attachments.py:84
 #: threads/views/admin/attachments.py:84
 #, python-format
 #, python-format
 msgid "Attachment \"%(filename)s\" has been deleted."
 msgid "Attachment \"%(filename)s\" has been deleted."
-msgstr "La pièce jointe \"%(filename)s\" a été supprimée"
+msgstr "La pièce jointe « %(filename)s » a été supprimée"
 
 
 #: threads/views/admin/attachmenttypes.py:15
 #: threads/views/admin/attachmenttypes.py:15
 msgid "Requested attachment type could not be found."
 msgid "Requested attachment type could not be found."
@@ -4902,12 +4903,12 @@ msgstr "Le type de pièce jointe requise n'a pu être trouvé"
 #: threads/views/admin/attachmenttypes.py:36
 #: threads/views/admin/attachmenttypes.py:36
 #, python-format
 #, python-format
 msgid "New type \"%(name)s\" has been saved."
 msgid "New type \"%(name)s\" has been saved."
-msgstr "Le nouveau type \"%(name)s\" a été sauvegardé."
+msgstr "Le nouveau type « %(name)s » a été sauvegardé."
 
 
 #: threads/views/admin/attachmenttypes.py:40
 #: threads/views/admin/attachmenttypes.py:40
 #, python-format
 #, python-format
 msgid "Attachment type \"%(name)s\" has been edited."
 msgid "Attachment type \"%(name)s\" has been edited."
-msgstr "le type de pièce jointe  \"%(name)s\" a été modifié"
+msgstr "le type de pièce jointe  « %(name)s » a été modifié."
 
 
 #: threads/views/admin/attachmenttypes.py:47
 #: threads/views/admin/attachmenttypes.py:47
 #, python-format
 #, python-format
@@ -4915,13 +4916,13 @@ msgid ""
 "Attachment type \"%(name)s\" has associated attachments and can't be "
 "Attachment type \"%(name)s\" has associated attachments and can't be "
 "deleted."
 "deleted."
 msgstr ""
 msgstr ""
-"Le type de pièce jointe  \"%(name)s\" est associé à d'autres pièces jointes "
-"et ne peut être supprimé"
+"Le type de pièce jointe  « %(name)s » est associé à d'autres pièces jointes "
+"et ne peut être supprimé."
 
 
 #: threads/views/admin/attachmenttypes.py:53
 #: threads/views/admin/attachmenttypes.py:53
 #, python-format
 #, python-format
 msgid "Attachment type \"%(name)s\" has been deleted."
 msgid "Attachment type \"%(name)s\" has been deleted."
-msgstr "Le type de pièce jointe  \"%(name)s\" a été supprimé"
+msgstr "Le type de pièce jointe  « %(name)s » a été supprimé."
 
 
 #: threads/views/goto.py:115
 #: threads/views/goto.py:115
 msgid ""
 msgid ""
@@ -4929,7 +4930,7 @@ msgid ""
 "post."
 "post."
 msgstr ""
 msgstr ""
 "Une autorisation d'approbation des contenus est nécessaire  pour pouvoir "
 "Une autorisation d'approbation des contenus est nécessaire  pour pouvoir "
-"accéder aux premiers messages non approuvés"
+"accéder aux premiers messages non approuvés."
 
 
 #: users/admin.py:79
 #: users/admin.py:79
 msgid "User Accounts"
 msgid "User Accounts"
@@ -4972,37 +4973,37 @@ msgstr "Votre avatar est verrouillé. Vous ne pouvez le modifier."
 
 
 #: users/api/userendpoints/avatar.py:111
 #: users/api/userendpoints/avatar.py:111
 msgid "This avatar type is not allowed."
 msgid "This avatar type is not allowed."
-msgstr "Cette catégorie d'avatar n'est pas autorisée"
+msgstr "Cette catégorie d'avatar n'est pas autorisée."
 
 
 #: users/api/userendpoints/avatar.py:120
 #: users/api/userendpoints/avatar.py:120
 msgid "Unknown avatar type."
 msgid "Unknown avatar type."
-msgstr "Catégorie d'avatar inconnue"
+msgstr "Catégorie d'avatar inconnue."
 
 
 #: users/api/userendpoints/avatar.py:143
 #: users/api/userendpoints/avatar.py:143
 msgid "New avatar based on your account was set."
 msgid "New avatar based on your account was set."
-msgstr "Un nouvel avatar associé à votre compte a été crée"
+msgstr "Un nouvel avatar associé à votre compte a été crée."
 
 
 #: users/api/userendpoints/avatar.py:149
 #: users/api/userendpoints/avatar.py:149
 msgid "Gravatar was downloaded and set as new avatar."
 msgid "Gravatar was downloaded and set as new avatar."
 msgstr ""
 msgstr ""
 "Le service de centralisation des avatars a été téléchargé et a crée un "
 "Le service de centralisation des avatars a été téléchargé et a crée un "
-"nouvel avatar"
+"nouvel avatar."
 
 
 #: users/api/userendpoints/avatar.py:151
 #: users/api/userendpoints/avatar.py:151
 msgid "No Gravatar is associated with your e-mail address."
 msgid "No Gravatar is associated with your e-mail address."
-msgstr "Aucun Gravatar n'est associé à votre courriel"
+msgstr "Aucun Gravatar n'est associé à votre courriel."
 
 
 #: users/api/userendpoints/avatar.py:153
 #: users/api/userendpoints/avatar.py:153
 msgid "Failed to connect to Gravatar servers."
 msgid "Failed to connect to Gravatar servers."
-msgstr "Echec de connexion aux serveurs Gravatar"
+msgstr "Echec de connexion aux serveurs Gravatar."
 
 
 #: users/api/userendpoints/avatar.py:163
 #: users/api/userendpoints/avatar.py:163
 msgid "Avatar from gallery was set."
 msgid "Avatar from gallery was set."
-msgstr "Un avatar de la bibliothèque a été configuré"
+msgstr "Un avatar de la bibliothèque a été configuré."
 
 
 #: users/api/userendpoints/avatar.py:165
 #: users/api/userendpoints/avatar.py:165
 msgid "Incorrect image."
 msgid "Incorrect image."
-msgstr "image incorrecte"
+msgstr "Image incorrecte."
 
 
 #: users/api/userendpoints/avatar.py:171
 #: users/api/userendpoints/avatar.py:171
 msgid "No file was sent."
 msgid "No file was sent."
@@ -5025,7 +5026,7 @@ msgstr "Confirmer le changement de courriel sur %(forum_name)s forums"
 msgid "E-mail change confirmation link was sent to new address."
 msgid "E-mail change confirmation link was sent to new address."
 msgstr ""
 msgstr ""
 "Un lien permettant de confirmer le changement d'e mail a été envoyé à la "
 "Un lien permettant de confirmer le changement d'e mail a été envoyé à la "
-"nouvelle adresse"
+"nouvelle adresse."
 
 
 #: users/api/userendpoints/changepassword.py:23
 #: users/api/userendpoints/changepassword.py:23
 #, python-format
 #, python-format
@@ -5035,28 +5036,28 @@ msgstr "Confirmer le changement de mot de passe sur  %(forum_name)s forums"
 #: users/api/userendpoints/changepassword.py:31
 #: users/api/userendpoints/changepassword.py:31
 msgid "Password change confirmation link was sent to your address."
 msgid "Password change confirmation link was sent to your address."
 msgstr ""
 msgstr ""
-"Un lien permettant de changer de mot de passe a été envoyé à votre adresse"
+"Un lien permettant de changer de mot de passe a été envoyé à votre adresse."
 
 
 #: users/api/userendpoints/create.py:23
 #: users/api/userendpoints/create.py:23
 msgid "New users registrations are currently closed."
 msgid "New users registrations are currently closed."
-msgstr "Les inscriptions sont closes"
+msgstr "Les inscriptions sont closes."
 
 
 #: users/api/userendpoints/create.py:54
 #: users/api/userendpoints/create.py:54
 msgid "Please try resubmitting the form."
 msgid "Please try resubmitting the form."
-msgstr "Veuillez resoumettre le formulaire"
+msgstr "Veuillez resoumettre le formulaire."
 
 
 #: users/api/userendpoints/create.py:59
 #: users/api/userendpoints/create.py:59
 #, python-format
 #, python-format
 msgid "Welcome on %(forum_name)s forums!"
 msgid "Welcome on %(forum_name)s forums!"
-msgstr "Bienvenue sur  %(forum_name)s forums!"
+msgstr "Bienvenue sur le forum %(forum_name)s !"
 
 
 #: users/api/userendpoints/signature.py:17
 #: users/api/userendpoints/signature.py:17
 msgid "You don't have permission to change signature."
 msgid "You don't have permission to change signature."
-msgstr "Vous n'avez pas le droit de changer d'identifiant"
+msgstr "Vous n'avez pas le droit de changer de signature."
 
 
 #: users/api/userendpoints/signature.py:26
 #: users/api/userendpoints/signature.py:26
 msgid "Your signature is locked. You can't change it."
 msgid "Your signature is locked. You can't change it."
-msgstr "Votre identifiant est verrouillé. Vous ne pouvez le modifier."
+msgstr "Votre signature est verrouillée. Vous ne pouvez pas la modifier."
 
 
 #: users/api/userendpoints/username.py:39
 #: users/api/userendpoints/username.py:39
 msgid "You can't change your username now."
 msgid "You can't change your username now."
@@ -5088,7 +5089,7 @@ msgstr "Vous ne pouvez modifier les options des autres utilisateurs."
 
 
 #: users/api/users.py:109
 #: users/api/users.py:109
 msgid "Your forum options have been changed."
 msgid "Your forum options have been changed."
-msgstr "Vos options ont été modifiées pour ce forum."
+msgstr "Les options de votre forum ont été modifiées."
 
 
 #: users/api/users.py:116
 #: users/api/users.py:116
 msgid "You can't change other users names."
 msgid "You can't change other users names."
@@ -5135,7 +5136,7 @@ msgstr ""
 
 
 #: users/avatars/uploaded.py:45
 #: users/avatars/uploaded.py:45
 msgid "Uploaded image is too big."
 msgid "Uploaded image is too big."
-msgstr "L'image téléchargée est trop volumineuse."
+msgstr "L'image télédéposée est trop volumineuse."
 
 
 #: users/avatars/uploaded.py:50
 #: users/avatars/uploaded.py:50
 msgid "Uploaded image ratio cannot be greater than 16:9."
 msgid "Uploaded image ratio cannot be greater than 16:9."
@@ -5147,23 +5148,23 @@ msgstr "Les données collationnées sont invalides. Veuillez réessayer."
 
 
 #: users/captcha.py:24
 #: users/captcha.py:24
 msgid "Failed to contact reCAPTCHA API."
 msgid "Failed to contact reCAPTCHA API."
-msgstr "Tentative de connexion à reCAPTCHA API échouée"
+msgstr "Tentative de connexion à reCAPTCHA API échouée."
 
 
 #: users/captcha.py:34
 #: users/captcha.py:34
 msgid "Entered answer is incorrect."
 msgid "Entered answer is incorrect."
-msgstr "La réponse est incorrecte"
+msgstr "La réponse est incorrecte."
 
 
 #: users/decorators.py:13
 #: users/decorators.py:13
 msgid "This page is not available to signed in users."
 msgid "This page is not available to signed in users."
-msgstr "Cette page n'est pas accessible aux utilisateurs enregistrés"
+msgstr "Cette page n'est pas accessible aux utilisateurs enregistrés."
 
 
 #: users/decorators.py:23
 #: users/decorators.py:23
 msgid "You have to sign in to access this page."
 msgid "You have to sign in to access this page."
-msgstr "Vous devez vous identifier pour accéder à cette page"
+msgstr "Vous devez vous identifier pour accéder à cette page."
 
 
 #: users/djangoadmin.py:30
 #: users/djangoadmin.py:30
 msgid "Misago user data"
 msgid "Misago user data"
-msgstr "Utilisateur de Misago"
+msgstr "Données des utilisateurs Misago"
 
 
 #: users/djangoadmin.py:36
 #: users/djangoadmin.py:36
 msgid "Edit permissions and groups"
 msgid "Edit permissions and groups"
@@ -5188,7 +5189,7 @@ msgstr "Courriel"
 
 
 #: users/forms/admin.py:52
 #: users/forms/admin.py:52
 msgid "All registered members must have \"Member\" role."
 msgid "All registered members must have \"Member\" role."
-msgstr "Tous les membres enregistrés doivent avoir un rôle de \"Membre\"."
+msgstr "Tous les membres enregistrés doivent avoir un rôle de « Membre »."
 
 
 #: users/forms/admin.py:71
 #: users/forms/admin.py:71
 msgid "Is administrator"
 msgid "Is administrator"
@@ -5286,7 +5287,7 @@ msgstr ""
 
 
 #: users/forms/admin.py:138
 #: users/forms/admin.py:138
 msgid "Lock signature"
 msgid "Lock signature"
-msgstr "Verrouiller l'identifiant"
+msgstr "Verrouiller la signature"
 
 
 #: users/forms/admin.py:140
 #: users/forms/admin.py:140
 msgid ""
 msgid ""
@@ -5338,13 +5339,13 @@ msgstr ""
 
 
 #: users/forms/admin.py:248
 #: users/forms/admin.py:248
 msgid "Roles"
 msgid "Roles"
-msgstr "Roles"
+msgstr "Rôles"
 
 
 #: users/forms/admin.py:249
 #: users/forms/admin.py:249
 msgid "Individual roles of this user. All users must have \"member\" role."
 msgid "Individual roles of this user. All users must have \"member\" role."
 msgstr ""
 msgstr ""
 "Les rôles individuels de cet utilisateur. Tous les utilisateurs doivent "
 "Les rôles individuels de cet utilisateur. Tous les utilisateurs doivent "
-"avoir un rôle de \"membre\"."
+"avoir un rôle de « membre »."
 
 
 #: users/forms/admin.py:307
 #: users/forms/admin.py:307
 msgid "Username starts with"
 msgid "Username starts with"
@@ -5356,15 +5357,15 @@ msgstr "Courriel commençant par"
 
 
 #: users/forms/admin.py:309
 #: users/forms/admin.py:309
 msgid "Profile fields contain"
 msgid "Profile fields contain"
-msgstr "Esquisser le contenu des champs"
+msgstr "Les champs de profil contiennent"
 
 
 #: users/forms/admin.py:310
 #: users/forms/admin.py:310
 msgid "Inactive only"
 msgid "Inactive only"
-msgstr "inactif uniquement"
+msgstr "Inactifs uniquement"
 
 
 #: users/forms/admin.py:311
 #: users/forms/admin.py:311
 msgid "Disabled only"
 msgid "Disabled only"
-msgstr "Désactivé uniquement"
+msgstr "Désactivés uniquement"
 
 
 #: users/forms/admin.py:312
 #: users/forms/admin.py:312
 msgid "Admins only"
 msgid "Admins only"
@@ -5376,7 +5377,7 @@ msgstr "Tous les rangs"
 
 
 #: users/forms/admin.py:358
 #: users/forms/admin.py:358
 msgid "All roles"
 msgid "All roles"
-msgstr "Tous les roles"
+msgstr "Tous les rôles"
 
 
 #: users/forms/admin.py:365
 #: users/forms/admin.py:365
 msgid "Has rank"
 msgid "Has rank"
@@ -5391,8 +5392,8 @@ msgid ""
 "Short and descriptive name of all users with this rank. \"The Team\" or "
 "Short and descriptive name of all users with this rank. \"The Team\" or "
 "\"Game Masters\" are good examples."
 "\"Game Masters\" are good examples."
 msgstr ""
 msgstr ""
-"Nom court et descriptif de tous les utilisateurs avec ce rang. \"L'équipe\" "
-"ou  \"les maîtres du jeux\" sont de bons exemples."
+"Nom court et descriptif de tous les utilisateurs avec ce rang. « L'équipe » "
+"ou  « les maîtres du jeux » sont de bons exemples."
 
 
 #: users/forms/admin.py:392
 #: users/forms/admin.py:392
 msgid "User title"
 msgid "User title"
@@ -5404,7 +5405,7 @@ msgid ""
 " \"GM\" or \"Dev\"."
 " \"GM\" or \"Dev\"."
 msgstr ""
 msgstr ""
 "Version unique et optionnelle du rang affiché par les noms utilisateurs. Par"
 "Version unique et optionnelle du rang affiché par les noms utilisateurs. Par"
-" exemple \"GM\" OU \"Dev\""
+" exemple « GM » OU « Dev »."
 
 
 #: users/forms/admin.py:405
 #: users/forms/admin.py:405
 msgid ""
 msgid ""
@@ -5412,7 +5413,7 @@ msgid ""
 "with this rank."
 "with this rank."
 msgstr ""
 msgstr ""
 "Description optionnelle expliquant la fonction ou le statut des membres "
 "Description optionnelle expliquant la fonction ou le statut des membres "
-"distingués par ce rang"
+"distingués par ce rang."
 
 
 #: users/forms/admin.py:414
 #: users/forms/admin.py:414
 msgid "Rank can give additional roles to users with it."
 msgid "Rank can give additional roles to users with it."
@@ -5422,8 +5423,8 @@ msgstr ""
 #: users/forms/admin.py:419
 #: users/forms/admin.py:419
 msgid "Optional css class added to content belonging to this rank owner."
 msgid "Optional css class added to content belonging to this rank owner."
 msgstr ""
 msgstr ""
-"La classe optionnelle css est ajoutée au contenu possédé par le propriétaire"
-" de ce rang"
+"La classe CSS optionnelle est ajoutée au contenu possédé par le propriétaire"
+" de ce rang."
 
 
 #: users/forms/admin.py:422
 #: users/forms/admin.py:422
 msgid "Give rank dedicated tab on users list"
 msgid "Give rank dedicated tab on users list"
@@ -5436,7 +5437,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Sélectionner cette option permettra de rendre les utilisateurs avec ce rang "
 "Sélectionner cette option permettra de rendre les utilisateurs avec ce rang "
 "plus facilement détectable par les autres via une page dédiée sur le forum à"
 "plus facilement détectable par les autres via une page dédiée sur le forum à"
-" la liste des utilisateurs "
+" la liste des utilisateurs."
 
 
 #: users/forms/admin.py:450
 #: users/forms/admin.py:450
 msgid "This name collides with other rank."
 msgid "This name collides with other rank."
@@ -5498,11 +5499,11 @@ msgstr ""
 
 
 #: users/forms/admin.py:497
 #: users/forms/admin.py:497
 msgid "Check type"
 msgid "Check type"
-msgstr "Vérifier le type."
+msgstr "Vérifier le type"
 
 
 #: users/forms/admin.py:502
 #: users/forms/admin.py:502
 msgid "Restrict this ban to registrations"
 msgid "Restrict this ban to registrations"
-msgstr "Restreindre cette interdiction aux enregistrements."
+msgstr "Restreindre cette interdiction aux enregistrements"
 
 
 #: users/forms/admin.py:504
 #: users/forms/admin.py:504
 msgid ""
 msgid ""
@@ -5527,8 +5528,8 @@ msgid ""
 "beginning with \"83.\"."
 "beginning with \"83.\"."
 msgstr ""
 msgstr ""
 "Cette valeur est insensible à la casse et accepte l'astérisque (*) pour les "
 "Cette valeur est insensible à la casse et accepte l'astérisque (*) pour les "
-"résultats bruts. Par exemple, interdire IP pour la valeur \"83. *\" "
-"interdira toutes les adresses IP commençant par \"83.\"."
+"résultats bruts. Par exemple, interdire IP pour la valeur « 83.* » interdira"
+" toutes les adresses IP commençant par « 83. »."
 
 
 #: users/forms/admin.py:518
 #: users/forms/admin.py:518
 msgid "Banned value can't be longer than 250 characters."
 msgid "Banned value can't be longer than 250 characters."
@@ -5581,15 +5582,15 @@ msgstr "Expiré"
 
 
 #: users/forms/auth.py:16
 #: users/forms/auth.py:16
 msgid "Fill out both fields."
 msgid "Fill out both fields."
-msgstr "Remplir les deux champs"
+msgstr "Remplissez les deux champs."
 
 
 #: users/forms/auth.py:17
 #: users/forms/auth.py:17
 msgid "Login or password is incorrect."
 msgid "Login or password is incorrect."
-msgstr "Login ou mot de passe incorrect"
+msgstr "Identifiant ou mot de passe incorrect."
 
 
 #: users/forms/auth.py:18
 #: users/forms/auth.py:18
 msgid "You have to activate your account before you will be able to sign in."
 msgid "You have to activate your account before you will be able to sign in."
-msgstr "Vous devez activer votre compte avant de pouvoir vous identifier"
+msgstr "Vous devez activer votre compte avant de pouvoir vous identifier."
 
 
 #: users/forms/auth.py:20
 #: users/forms/auth.py:20
 msgid ""
 msgid ""
@@ -5597,7 +5598,7 @@ msgid ""
 " sign in."
 " sign in."
 msgstr ""
 msgstr ""
 "Votre compte doit être d'abord activé par un administrateur pour pouvoir "
 "Votre compte doit être d'abord activé par un administrateur pour pouvoir "
-"vous identifier"
+"vous identifier."
 
 
 #: users/forms/auth.py:90
 #: users/forms/auth.py:90
 msgid "Your account does not have admin privileges."
 msgid "Your account does not have admin privileges."
@@ -5618,12 +5619,12 @@ msgstr "Il n'existe pas d'utilisateur avec ce courriel."
 #: users/forms/auth.py:136 users/views/activation.py:46
 #: users/forms/auth.py:136 users/views/activation.py:46
 #, python-format
 #, python-format
 msgid "%(user)s, your account is already active."
 msgid "%(user)s, your account is already active."
-msgstr "%(user)s, votre compte est déjà actif"
+msgstr "%(user)s, votre compte est déjà actif."
 
 
 #: users/forms/auth.py:140
 #: users/forms/auth.py:140
 #, python-format
 #, python-format
 msgid "%(user)s, only administrator may activate your account."
 msgid "%(user)s, only administrator may activate your account."
-msgstr "%(user)s, votre compte ne peut être activé que par administrateur"
+msgstr "%(user)s, votre compte ne peut être activé que par administrateur."
 
 
 #: users/forms/auth.py:147
 #: users/forms/auth.py:147
 msgid ""
 msgid ""
@@ -5643,7 +5644,7 @@ msgstr ""
 
 
 #: users/forms/register.py:34
 #: users/forms/register.py:34
 msgid "This usernane is not allowed."
 msgid "This usernane is not allowed."
-msgstr "Ce nom d'utilisateur n'est pas autorisé"
+msgstr "Ce nom d'utilisateur n'est pas autorisé."
 
 
 #: users/forms/register.py:45 users/validators.py:41
 #: users/forms/register.py:45 users/validators.py:41
 msgid "This e-mail address is not allowed."
 msgid "This e-mail address is not allowed."
@@ -5697,7 +5698,7 @@ msgstr "Ne pas autoriser de nouveaux enregsitrements"
 #: users/migrations/0002_users_settings.py:40
 #: users/migrations/0002_users_settings.py:40
 #: users/migrations/0006_update_settings.py:41
 #: users/migrations/0006_update_settings.py:41
 msgid "Minimum allowed username length."
 msgid "Minimum allowed username length."
-msgstr "Longueur minimale autorisée pour un nom d'utilisateur"
+msgstr "Longueur minimale autorisée pour un nom d'utilisateur."
 
 
 #: users/migrations/0002_users_settings.py:41
 #: users/migrations/0002_users_settings.py:41
 #: users/migrations/0006_update_settings.py:42
 #: users/migrations/0006_update_settings.py:42
@@ -5773,7 +5774,7 @@ msgid ""
 "e-mail address."
 "e-mail address."
 msgstr ""
 msgstr ""
 "Sélectionner quel avatar utiliser quand l'utilisateur n'a aucun avatar "
 "Sélectionner quel avatar utiliser quand l'utilisateur n'a aucun avatar "
-"universel associé à son courriel"
+"universel associé à son courriel."
 
 
 #: users/migrations/0002_users_settings.py:120
 #: users/migrations/0002_users_settings.py:120
 #: users/migrations/0006_update_settings.py:106
 #: users/migrations/0006_update_settings.py:106
@@ -5784,17 +5785,17 @@ msgstr "Taille maximale de l'avatar téléchargé"
 #: users/migrations/0006_update_settings.py:107
 #: users/migrations/0006_update_settings.py:107
 msgid "Enter maximum allowed file size (in KB) for avatar uploads."
 msgid "Enter maximum allowed file size (in KB) for avatar uploads."
 msgstr ""
 msgstr ""
-"Entrer la taille maximale autorisée (in KB) pour les avatars téléchargés"
+"Entrer la taille maximale autorisée (in KB) pour les avatars téléchargés."
 
 
 #: users/migrations/0002_users_settings.py:132
 #: users/migrations/0002_users_settings.py:132
 #: users/migrations/0006_update_settings.py:118
 #: users/migrations/0006_update_settings.py:118
 msgid "Signatures"
 msgid "Signatures"
-msgstr "identifiants"
+msgstr "Signatures"
 
 
 #: users/migrations/0002_users_settings.py:133
 #: users/migrations/0002_users_settings.py:133
 #: users/migrations/0006_update_settings.py:119
 #: users/migrations/0006_update_settings.py:119
 msgid "Maximum allowed signature length."
 msgid "Maximum allowed signature length."
-msgstr "Longueur maximale autorisée pour un identifiant"
+msgstr "Longueur maximale autorisée pour une signature."
 
 
 #: users/migrations/0002_users_settings.py:145
 #: users/migrations/0002_users_settings.py:145
 #: users/migrations/0006_update_settings.py:131
 #: users/migrations/0006_update_settings.py:131
@@ -5806,7 +5807,7 @@ msgstr "Paramètres d'abonnement par défaut"
 #: users/migrations/0006_update_settings.py:136
 #: users/migrations/0006_update_settings.py:136
 #: users/migrations/0006_update_settings.py:155
 #: users/migrations/0006_update_settings.py:155
 msgid "Don't watch"
 msgid "Don't watch"
-msgstr "Ne pas regarder."
+msgstr "Ne pas surveiller"
 
 
 #: users/migrations/0002_users_settings.py:151
 #: users/migrations/0002_users_settings.py:151
 #: users/migrations/0002_users_settings.py:170
 #: users/migrations/0002_users_settings.py:170
@@ -5842,7 +5843,7 @@ msgstr ""
 
 
 #: users/migrations/0002_users_settings.py:193
 #: users/migrations/0002_users_settings.py:193
 msgid "Select CAPTCHA type"
 msgid "Select CAPTCHA type"
-msgstr "Sélectionner un type de CAPTCHA"
+msgstr "Sélectionner le type de CAPTCHA"
 
 
 #: users/migrations/0002_users_settings.py:194
 #: users/migrations/0002_users_settings.py:194
 msgid "CAPTCHA type"
 msgid "CAPTCHA type"
@@ -5879,11 +5880,11 @@ msgstr "Question test"
 
 
 #: users/migrations/0002_users_settings.py:238
 #: users/migrations/0002_users_settings.py:238
 msgid "Question help text"
 msgid "Question help text"
-msgstr "Aide"
+msgstr "Texte d'aide de la question"
 
 
 #: users/migrations/0002_users_settings.py:247
 #: users/migrations/0002_users_settings.py:247
 msgid "Valid answers"
 msgid "Valid answers"
-msgstr "Valider les réponses"
+msgstr "Réponses valides"
 
 
 #: users/migrations/0002_users_settings.py:248
 #: users/migrations/0002_users_settings.py:248
 msgid "Enter each answer in new line. Answers are case-insensitive."
 msgid "Enter each answer in new line. Answers are case-insensitive."
@@ -5894,7 +5895,7 @@ msgstr ""
 #: users/migrations/0004_default_ranks.py:17
 #: users/migrations/0004_default_ranks.py:17
 #: users/migrations/0004_default_ranks.py:18 users/models/user.py:110
 #: users/migrations/0004_default_ranks.py:18 users/models/user.py:110
 msgid "Forum team"
 msgid "Forum team"
-msgstr "équipe du forum"
+msgstr "Équipe du forum"
 
 
 #: users/migrations/0004_default_ranks.py:19
 #: users/migrations/0004_default_ranks.py:19
 msgid "Team"
 msgid "Team"
@@ -5907,11 +5908,11 @@ msgstr "Membres"
 
 
 #: users/models/user.py:37
 #: users/models/user.py:37
 msgid "User must have an email address."
 msgid "User must have an email address."
-msgstr "L'utilisateur doit avoir un courriel"
+msgstr "L'utilisateur doit avoir un courriel."
 
 
 #: users/models/user.py:39
 #: users/models/user.py:39
 msgid "User must have a password."
 msgid "User must have a password."
-msgstr "L'utilisateur doit avoir un mot de passe"
+msgstr "L'utilisateur doit avoir un mot de passe."
 
 
 #: users/models/user.py:145
 #: users/models/user.py:145
 msgid "Notify"
 msgid "Notify"
@@ -5944,7 +5945,7 @@ msgstr "Statut du staff"
 #: users/models/user.py:190
 #: users/models/user.py:190
 msgid "Designates whether the user can log into admin sites."
 msgid "Designates whether the user can log into admin sites."
 msgstr ""
 msgstr ""
-"Indique si l'utilisateur peut se connecter sur les sites administrateurs"
+"Indique si l'utilisateur peut se connecter sur les sites d'administration."
 
 
 #: users/models/user.py:197
 #: users/models/user.py:197
 msgid "active"
 msgid "active"
@@ -5982,27 +5983,27 @@ msgstr ""
 
 
 #: users/permissions/account.py:25
 #: users/permissions/account.py:25
 msgid "Can have signature"
 msgid "Can have signature"
-msgstr "Peut avoir un identifiant"
+msgstr "Peut avoir une signature"
 
 
 #: users/permissions/account.py:26
 #: users/permissions/account.py:26
 msgid "Can put links in signature"
 msgid "Can put links in signature"
-msgstr "Peut mettre un lien dans l'identifiant"
+msgstr "Peut mettre un lien dans la signature"
 
 
 #: users/permissions/account.py:27
 #: users/permissions/account.py:27
 msgid "Can put images in signature"
 msgid "Can put images in signature"
-msgstr "Peut mettre des images dans l'identifiant"
+msgstr "Peut mettre des images dans la signature"
 
 
 #: users/permissions/account.py:29
 #: users/permissions/account.py:29
 msgid "Can use text blocks in signature"
 msgid "Can use text blocks in signature"
-msgstr "Peut utiliser des blocs de texte dans l'identifiant"
+msgstr "Peut utiliser des blocs de texte dans la signature"
 
 
 #: users/permissions/account.py:31
 #: users/permissions/account.py:31
 msgid ""
 msgid ""
 "Controls whether or not users can put quote, code, spoiler blocks and "
 "Controls whether or not users can put quote, code, spoiler blocks and "
 "horizontal lines in signatures."
 "horizontal lines in signatures."
 msgstr ""
 msgstr ""
-"Contrôle si les utilisateurs peuvent insérer des guillemets, du code, des "
-"blocs de spoiler et des lignes horizontales dans les identifiants."
+"Contrôle si les utilisateurs peuvent insérer une citation, du code, des "
+"blocs de spoiler et des lignes horizontales dans les signatures."
 
 
 #: users/permissions/decorators.py:16
 #: users/permissions/decorators.py:16
 msgid "You have to sig in to perform this action."
 msgid "You have to sig in to perform this action."
@@ -6010,7 +6011,7 @@ msgstr "Vous devez vous identifier pour réaliser cette action."
 
 
 #: users/permissions/decorators.py:27
 #: users/permissions/decorators.py:27
 msgid "Only guests can perform this action."
 msgid "Only guests can perform this action."
-msgstr "Seuls les invités peuvent réaliser cette action"
+msgstr "Seuls les invités peuvent réaliser cette action."
 
 
 #: users/permissions/delete.py:25
 #: users/permissions/delete.py:25
 msgid "Maximum age of deleted account (in days)"
 msgid "Maximum age of deleted account (in days)"
@@ -6018,7 +6019,7 @@ msgstr "Ancienneté maximale d'un compte supprimé (en jours)"
 
 
 #: users/permissions/delete.py:26 users/permissions/delete.py:32
 #: users/permissions/delete.py:26 users/permissions/delete.py:32
 msgid "Enter zero to disable this check."
 msgid "Enter zero to disable this check."
-msgstr "Entre zéro pour inactiver cette vérification"
+msgstr "Entre zéro pour inactiver cette vérification."
 
 
 #: users/permissions/delete.py:31
 #: users/permissions/delete.py:31
 msgid "Maximum number of posts on deleted account"
 msgid "Maximum number of posts on deleted account"
@@ -6026,16 +6027,16 @@ msgstr "Nombre maximal de messages d'un compte supprimé"
 
 
 #: users/permissions/delete.py:75
 #: users/permissions/delete.py:75
 msgid "You can't delete users."
 msgid "You can't delete users."
-msgstr "Vous ne pouvez supprimer des utilisateurs"
+msgstr "Vous ne pouvez supprimer des utilisateurs."
 
 
 #: users/permissions/delete.py:78 users/views/admin/users.py:201
 #: users/permissions/delete.py:78 users/views/admin/users.py:201
 #: users/views/admin/users.py:215 users/views/admin/users.py:331
 #: users/views/admin/users.py:215 users/views/admin/users.py:331
 msgid "You can't delete yourself."
 msgid "You can't delete yourself."
-msgstr "Vous ne pouvez supprimer votre compte"
+msgstr "Vous ne pouvez supprimer votre compte."
 
 
 #: users/permissions/delete.py:80
 #: users/permissions/delete.py:80
 msgid "You can't delete administrators."
 msgid "You can't delete administrators."
-msgstr "Vous ne pouvez supprimer des administrateurs"
+msgstr "Vous ne pouvez pas supprimer des administrateurs."
 
 
 #: users/permissions/delete.py:85
 #: users/permissions/delete.py:85
 #, python-format
 #, python-format
@@ -6100,7 +6101,7 @@ msgstr "Peut lever une interdiction"
 
 
 #: users/permissions/moderation.py:49
 #: users/permissions/moderation.py:49
 msgid "Max length, in days, of lifted ban"
 msgid "Max length, in days, of lifted ban"
-msgstr "Durée maximale, en jours, d'une interdiction levée."
+msgstr "Durée maximale, en jours, d'une interdiction levée"
 
 
 #: users/permissions/moderation.py:50
 #: users/permissions/moderation.py:50
 msgid "Enter zero to let moderators lift permanent bans."
 msgid "Enter zero to let moderators lift permanent bans."
@@ -6110,15 +6111,15 @@ msgstr ""
 
 
 #: users/permissions/moderation.py:120
 #: users/permissions/moderation.py:120
 msgid "You can't rename users."
 msgid "You can't rename users."
-msgstr "Vous ne pouvez renommer des utilisateurs"
+msgstr "Vous ne pouvez renommer des utilisateurs."
 
 
 #: users/permissions/moderation.py:122
 #: users/permissions/moderation.py:122
 msgid "You can't rename administrators."
 msgid "You can't rename administrators."
-msgstr "Vous ne pouvez renommer des administrateurs"
+msgstr "Vous ne pouvez renommer des administrateurs."
 
 
 #: users/permissions/moderation.py:130
 #: users/permissions/moderation.py:130
 msgid "You can't moderate avatars."
 msgid "You can't moderate avatars."
-msgstr "Vous pouvez modérer des avatars."
+msgstr "Vous ne pouvez pas modérer des avatars."
 
 
 #: users/permissions/moderation.py:132
 #: users/permissions/moderation.py:132
 msgid "You can't moderate administrators avatars."
 msgid "You can't moderate administrators avatars."
@@ -6126,11 +6127,11 @@ msgstr "Vous ne pouvez pas modérer les avatars des administrateurs."
 
 
 #: users/permissions/moderation.py:140
 #: users/permissions/moderation.py:140
 msgid "You can't moderate signatures."
 msgid "You can't moderate signatures."
-msgstr "Vous ne pouvez pas modérer des identifiants."
+msgstr "Vous ne pouvez pas modérer des signatures."
 
 
 #: users/permissions/moderation.py:142
 #: users/permissions/moderation.py:142
 msgid "You can't moderate administrators signatures."
 msgid "You can't moderate administrators signatures."
-msgstr "Vous ne pouvez pas modérer les identifiants des administrateurs."
+msgstr "Vous ne pouvez pas modérer les signatures des administrateurs."
 
 
 #: users/permissions/moderation.py:151
 #: users/permissions/moderation.py:151
 msgid "You have to sign in to edit profile details."
 msgid "You have to sign in to edit profile details."
@@ -6146,11 +6147,11 @@ msgstr "Vous ne pouvez pas modifier les détails des administrateurs."
 
 
 #: users/permissions/moderation.py:164
 #: users/permissions/moderation.py:164
 msgid "You can't ban users."
 msgid "You can't ban users."
-msgstr "Vous ne pouvez bannir des utilisateurs"
+msgstr "Vous ne pouvez pas bannir d'utilisateurs."
 
 
 #: users/permissions/moderation.py:166
 #: users/permissions/moderation.py:166
 msgid "You can't ban administrators."
 msgid "You can't ban administrators."
-msgstr "Vous ne pouvez bannir des administrateurs"
+msgstr "Vous ne pouvez bannir d'administrateurs."
 
 
 #: users/permissions/moderation.py:174
 #: users/permissions/moderation.py:174
 msgid "You can't lift bans."
 msgid "You can't lift bans."
@@ -6158,7 +6159,7 @@ msgstr "Vous ne pouvez pas lever des interdictions."
 
 
 #: users/permissions/moderation.py:177
 #: users/permissions/moderation.py:177
 msgid "This user is not banned."
 msgid "This user is not banned."
-msgstr "Cet utilisateur n'est pas banni"
+msgstr "Cet utilisateur n'est pas banni."
 
 
 #: users/permissions/moderation.py:182
 #: users/permissions/moderation.py:182
 msgid "You can't lift permanent bans."
 msgid "You can't lift permanent bans."
@@ -6199,7 +6200,7 @@ msgstr "Profils utilisateur"
 
 
 #: users/permissions/profiles.py:46
 #: users/permissions/profiles.py:46
 msgid "Can follow other users"
 msgid "Can follow other users"
-msgstr "Vous pouvez suivre d'autres utilisateurs"
+msgstr "Peut suivre d'autres utilisateurs"
 
 
 #: users/permissions/profiles.py:47
 #: users/permissions/profiles.py:47
 msgid "Can be blocked by other users"
 msgid "Can be blocked by other users"
@@ -6215,27 +6216,27 @@ msgstr "Peut voir les adresses IPs des membres"
 
 
 #: users/permissions/profiles.py:52
 #: users/permissions/profiles.py:52
 msgid "Can see members that hide their presence"
 msgid "Can see members that hide their presence"
-msgstr "Vous pouvez visualiser les membres qui cachent leur présence. "
+msgstr "Vous pouvez voir les membres qui cachent leur présence. "
 
 
 #: users/permissions/profiles.py:114
 #: users/permissions/profiles.py:114
 msgid "You can't browse users list."
 msgid "You can't browse users list."
-msgstr "Vous ne pouvez pas aller voir la liste des utilisateurs"
+msgstr "Vous ne pouvez pas aller voir la liste des utilisateurs."
 
 
 #: users/permissions/profiles.py:123
 #: users/permissions/profiles.py:123
 msgid "You can't follow other users."
 msgid "You can't follow other users."
-msgstr "Vous ne pouvez suivre d'autres utilisateurs"
+msgstr "Vous ne pouvez pas suivre d'autres utilisateurs."
 
 
 #: users/permissions/profiles.py:125
 #: users/permissions/profiles.py:125
 msgid "You can't add yourself to followed."
 msgid "You can't add yourself to followed."
-msgstr "Vous ne pouvez vous ajouter aux personnes suivies."
+msgstr "Vous ne pouvez pas vous ajouter aux personnes suivies."
 
 
 #: users/permissions/profiles.py:134
 #: users/permissions/profiles.py:134
 msgid "You can't block administrators."
 msgid "You can't block administrators."
-msgstr "Vous ne pouvez bloquer les administrateurs."
+msgstr "Vous ne pouvez pas bloquer les administrateurs."
 
 
 #: users/permissions/profiles.py:136
 #: users/permissions/profiles.py:136
 msgid "You can't block yourself."
 msgid "You can't block yourself."
-msgstr "Vous ne pouvez vous bloquer vous mêmes"
+msgstr "Vous ne pouvez pas vous bloquer vous mêmes"
 
 
 #: users/permissions/profiles.py:138
 #: users/permissions/profiles.py:138
 #, python-format
 #, python-format
@@ -6270,7 +6271,7 @@ msgstr "Non précisé"
 
 
 #: users/profilefields/default.py:32
 #: users/profilefields/default.py:32
 msgid "Not telling"
 msgid "Not telling"
-msgstr "Ne pas dire"
+msgstr "N'en dit rien"
 
 
 #: users/profilefields/default.py:33
 #: users/profilefields/default.py:33
 msgid "Female"
 msgid "Female"
@@ -6292,7 +6293,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Si vous disposez d'un site internet que vous souhaitez partager sur votre "
 "Si vous disposez d'un site internet que vous souhaitez partager sur votre "
 "profil, vous pouvez renseigner son adresse ici. Ne pas oublier de débuter "
 "profil, vous pouvez renseigner son adresse ici. Ne pas oublier de débuter "
-"l'adresse http soit par \"http://\" soit par  \"https://\" pour qu'elle soit"
+"l'adresse http soit par « http:// » soit par  « https:// » pour qu'elle soit"
 " valide."
 " valide."
 
 
 #: users/profilefields/default.py:50
 #: users/profilefields/default.py:50
@@ -6310,7 +6311,7 @@ msgstr ""
 
 
 #: users/profilefields/default.py:59
 #: users/profilefields/default.py:59
 msgid "Twitter handle"
 msgid "Twitter handle"
-msgstr "Un pseudo twitter"
+msgstr "Pseudo twitter"
 
 
 #: users/profilefields/default.py:63
 #: users/profilefields/default.py:63
 #, python-format
 #, python-format
@@ -6321,8 +6322,8 @@ msgid ""
 msgstr ""
 msgstr ""
 "Si vous avez un compte Twitter, vous pouvez renseigner ici votre identifiant"
 "Si vous avez un compte Twitter, vous pouvez renseigner ici votre identifiant"
 " Twitter pour que d'autres utilisateurs puissent vous trouver.  Faire "
 " Twitter pour que d'autres utilisateurs puissent vous trouver.  Faire "
-"débuter votre identifiant par le signe \"@\" sign n'est pas obligatoire. "
-"Soit \"@%(slug)s\" soit \"%(slug)s\"  sont des valeurs acceptables."
+"débuter votre identifiant par le signe « @ » sign n'est pas obligatoire. "
+"Soit « @%(slug)s » soit « %(slug)s » sont des valeurs acceptables."
 
 
 #: users/profilefields/default.py:79
 #: users/profilefields/default.py:79
 msgid "This is not a valid twitter handle."
 msgid "This is not a valid twitter handle."
@@ -6330,11 +6331,11 @@ msgstr "Ceci n'est pas un pseudo twitter valide."
 
 
 #: users/profilefields/default.py:85
 #: users/profilefields/default.py:85
 msgid "Join IP"
 msgid "Join IP"
-msgstr "Inscrit (IP)"
+msgstr "IP d'inscription"
 
 
 #: users/profilefields/default.py:99
 #: users/profilefields/default.py:99
 msgid "Last IP"
 msgid "Last IP"
-msgstr "Dernier IP"
+msgstr "Dernière IP"
 
 
 #: users/search.py:24
 #: users/search.py:24
 msgid "You don't have permission to search users."
 msgid "You don't have permission to search users."
@@ -6346,24 +6347,23 @@ msgstr "Votre adresse IP est bannie."
 
 
 #: users/serializers/ban.py:41
 #: users/serializers/ban.py:41
 msgid "You are banned."
 msgid "You are banned."
-msgstr "Vous êtes banni"
+msgstr "Vous êtes banni⋅e."
 
 
 #: users/serializers/options.py:49
 #: users/serializers/options.py:49
 msgid "Signature is too long."
 msgid "Signature is too long."
-msgstr "L'identifiant est trop long"
+msgstr "La signature est trop longue."
 
 
 #: users/serializers/options.py:61
 #: users/serializers/options.py:61
 msgid "Enter new username."
 msgid "Enter new username."
-msgstr "Entrer le nouveau nom d'utilisateur"
+msgstr "Entrer le nouveau nom d'utilisateur."
 
 
 #: users/serializers/options.py:64
 #: users/serializers/options.py:64
 msgid "New username is same as current one."
 msgid "New username is same as current one."
-msgstr ""
-"Le nouveau nom d'utilisateur est le même que celui actuellement utilisé"
+msgstr "Le nouveau nom d'utilisateur est le même que l'actuel."
 
 
 #: users/serializers/options.py:81 users/serializers/options.py:95
 #: users/serializers/options.py:81 users/serializers/options.py:95
 msgid "Entered password is invalid."
 msgid "Entered password is invalid."
-msgstr "Le mot de passe saisi est non valide"
+msgstr "Le mot de passe saisi est invalide."
 
 
 #: users/serializers/options.py:100
 #: users/serializers/options.py:100
 msgid "You have to enter new e-mail address."
 msgid "You have to enter new e-mail address."
@@ -6371,11 +6371,11 @@ msgstr "Vous devez entrer un nouveau courriel."
 
 
 #: users/serializers/options.py:103
 #: users/serializers/options.py:103
 msgid "New e-mail is same as current one."
 msgid "New e-mail is same as current one."
-msgstr "La nouveau courriel est le même que celui actuellement utilisé."
+msgstr "La nouveau courriel est le même que l'actuel."
 
 
 #: users/validators.py:29
 #: users/validators.py:29
 msgid "This e-mail address is not available."
 msgid "This e-mail address is not available."
-msgstr "Ce courriel n'est pas disponible"
+msgstr "Ce courriel n'est pas disponible."
 
 
 #: users/validators.py:56
 #: users/validators.py:56
 msgid "This username is not available."
 msgid "This username is not available."
@@ -6417,7 +6417,7 @@ msgstr ""
 
 
 #: users/validators.py:136
 #: users/validators.py:136
 msgid "This email is not allowed."
 msgid "This email is not allowed."
-msgstr "Ce courriel est non autorisé."
+msgstr "Ce courriel n'est pas autorisé."
 
 
 #: users/views/activation.py:51
 #: users/views/activation.py:51
 #, python-format
 #, python-format
@@ -6431,7 +6431,7 @@ msgstr ""
 #: users/views/activation.py:76
 #: users/views/activation.py:76
 #, python-format
 #, python-format
 msgid "%(user)s, your account has been activated!"
 msgid "%(user)s, your account has been activated!"
-msgstr "%(user)s, votre compte a été activé !"
+msgstr "%(user)s, votre compte a été activé !"
 
 
 #: users/views/admin/bans.py:14
 #: users/views/admin/bans.py:14
 msgid "Requested ban does not exist."
 msgid "Requested ban does not exist."
@@ -6439,19 +6439,19 @@ msgstr "L'interdiction requise n’existe pas."
 
 
 #: users/views/admin/bans.py:30
 #: users/views/admin/bans.py:30
 msgid "With bans: 0"
 msgid "With bans: 0"
-msgstr "Avec interdictions :0."
+msgstr "Avec interdictions : 0"
 
 
 #: users/views/admin/bans.py:31
 #: users/views/admin/bans.py:31
 msgid "Select bans"
 msgid "Select bans"
-msgstr "Sélectionner les interdictions."
+msgstr "Sélectionner les interdictions"
 
 
 #: users/views/admin/bans.py:35
 #: users/views/admin/bans.py:35
 msgid "Remove bans"
 msgid "Remove bans"
-msgstr "Enlever les interdictions."
+msgstr "Enlever les interdictions"
 
 
 #: users/views/admin/bans.py:36
 #: users/views/admin/bans.py:36
 msgid "Are you sure you want to remove those bans?"
 msgid "Are you sure you want to remove those bans?"
-msgstr "Etes vous certain de vouloir supprimer ces interdictions ?"
+msgstr "Etes vous certain de vouloir supprimer ces interdictions ?"
 
 
 #: users/views/admin/bans.py:42
 #: users/views/admin/bans.py:42
 msgid "Selected bans have been removed."
 msgid "Selected bans have been removed."
@@ -6460,12 +6460,12 @@ msgstr "Les interdictions sélectionnées ont été supprimées."
 #: users/views/admin/bans.py:46
 #: users/views/admin/bans.py:46
 #, python-format
 #, python-format
 msgid "New ban \"%(name)s\" has been saved."
 msgid "New ban \"%(name)s\" has been saved."
-msgstr "La nouvelle interdiction  \"%(name)s\" a été sauvegardée."
+msgstr "La nouvelle interdiction « %(name)s » a été sauvegardée."
 
 
 #: users/views/admin/bans.py:50
 #: users/views/admin/bans.py:50
 #, python-format
 #, python-format
 msgid "Ban \"%(name)s\" has been edited."
 msgid "Ban \"%(name)s\" has been edited."
-msgstr "Le bannissement \"%(name)s\" a été modifié."
+msgstr "Le bannissement « %(name)s » a été modifié."
 
 
 #: users/views/admin/bans.py:57
 #: users/views/admin/bans.py:57
 #, python-format
 #, python-format
@@ -6479,49 +6479,49 @@ msgstr "Le rang demandé n'existe pas."
 #: users/views/admin/ranks.py:33
 #: users/views/admin/ranks.py:33
 #, python-format
 #, python-format
 msgid "New rank \"%(name)s\" has been saved."
 msgid "New rank \"%(name)s\" has been saved."
-msgstr "Le nouveau rang \"%(name)s\" a été sauvegardé."
+msgstr "Le nouveau rang « %(name)s » a été sauvegardé."
 
 
 #: users/views/admin/ranks.py:37
 #: users/views/admin/ranks.py:37
 #, python-format
 #, python-format
 msgid "Rank \"%(name)s\" has been edited."
 msgid "Rank \"%(name)s\" has been edited."
-msgstr "Le rang \"%(name)s\" a été modifié."
+msgstr "Le rang « %(name)s » a été modifié."
 
 
 #: users/views/admin/ranks.py:44
 #: users/views/admin/ranks.py:44
 #, python-format
 #, python-format
 msgid "Rank \"%(name)s\" is default rank and can't be deleted."
 msgid "Rank \"%(name)s\" is default rank and can't be deleted."
-msgstr "Le rang \"%(name)s\"est le rang par défaut et ne peut être supprimé."
+msgstr "Le rang « %(name)s » est le rang par défaut et ne peut être supprimé."
 
 
 #: users/views/admin/ranks.py:47
 #: users/views/admin/ranks.py:47
 #, python-format
 #, python-format
 msgid "Rank \"%(name)s\" is assigned to users and can't be deleted."
 msgid "Rank \"%(name)s\" is assigned to users and can't be deleted."
 msgstr ""
 msgstr ""
-"Le rang \"%(name)s\" a été attribué à des utilisateurs et ne peut être "
+"Le rang « %(name)s » a été attribué à des utilisateurs et ne peut être "
 "supprimé."
 "supprimé."
 
 
 #: users/views/admin/ranks.py:52
 #: users/views/admin/ranks.py:52
 #, python-format
 #, python-format
 msgid "Rank \"%(name)s\" has been deleted."
 msgid "Rank \"%(name)s\" has been deleted."
-msgstr "Le rang \"%(name)s\" a été supprimé."
+msgstr "Le rang « %(name)s » a été supprimé."
 
 
 #: users/views/admin/ranks.py:69
 #: users/views/admin/ranks.py:69
 #, python-format
 #, python-format
 msgid "Rank \"%(name)s\" has been moved below \"%(other)s\"."
 msgid "Rank \"%(name)s\" has been moved below \"%(other)s\"."
-msgstr "Le rang\"%(name)s\" a été placé sous le rang  \"%(other)s\"."
+msgstr "Le rang « %(name)s » a été placé sous le rang « %(other)s »."
 
 
 #: users/views/admin/ranks.py:87
 #: users/views/admin/ranks.py:87
 #, python-format
 #, python-format
 msgid "Rank \"%(name)s\" has been moved above \"%(other)s\"."
 msgid "Rank \"%(name)s\" has been moved above \"%(other)s\"."
-msgstr "Le rang \"%(name)s\" a été déplacé au-dessus\"%(other)s\"."
+msgstr "Le rang « %(name)s » a été déplacé au-dessus de « %(other)s »."
 
 
 #: users/views/admin/ranks.py:101
 #: users/views/admin/ranks.py:101
 #, python-format
 #, python-format
 msgid "Rank \"%(name)s\" is already default."
 msgid "Rank \"%(name)s\" is already default."
-msgstr "Le rang \"%(name)s\" est déjà le rang par défaut."
+msgstr "Le rang « %(name)s » est déjà le rang par défaut."
 
 
 #: users/views/admin/ranks.py:106
 #: users/views/admin/ranks.py:106
 #, python-format
 #, python-format
 msgid "Rank \"%(name)s\" has been made default."
 msgid "Rank \"%(name)s\" has been made default."
-msgstr "Le rang \"%(name)s\"  est défini comme rang par défaut"
+msgstr "Le rang « %(name)s » a été défini comme rang par défaut."
 
 
 #: users/views/admin/users.py:59
 #: users/views/admin/users.py:59
 msgid "Biggest posters"
 msgid "Biggest posters"
@@ -6533,7 +6533,7 @@ msgstr "intervenants les moins actifs"
 
 
 #: users/views/admin/users.py:62
 #: users/views/admin/users.py:62
 msgid "With users: 0"
 msgid "With users: 0"
-msgstr "Avec des utilisateurs : 0"
+msgstr "Avec des utilisateurs : 0"
 
 
 #: users/views/admin/users.py:63
 #: users/views/admin/users.py:63
 msgid "Select users"
 msgid "Select users"
@@ -6549,7 +6549,7 @@ msgstr "Supprimer des comptes"
 
 
 #: users/views/admin/users.py:79
 #: users/views/admin/users.py:79
 msgid "Are you sure you want to delete selected users?"
 msgid "Are you sure you want to delete selected users?"
-msgstr "Etes vous certain de supprimer les utilisateurs sélectionnés  ?"
+msgstr "Etes vous certain de supprimer les utilisateurs sélectionnés ?"
 
 
 #: users/views/admin/users.py:83
 #: users/views/admin/users.py:83
 msgid "Delete all"
 msgid "Delete all"
@@ -6560,17 +6560,17 @@ msgid ""
 "Are you sure you want to delete selected users? This will also delete all "
 "Are you sure you want to delete selected users? This will also delete all "
 "content associated with their accounts."
 "content associated with their accounts."
 msgstr ""
 msgstr ""
-"Etes vous certain de vouloir supprimer les utilisateurs sélectionnés ? cela "
+"Etes vous certain de vouloir supprimer les utilisateurs sélectionnés ? Cela "
 "supprimera également tous les contenus associés à leurs comptes."
 "supprimera également tous les contenus associés à leurs comptes."
 
 
 #: users/views/admin/users.py:107
 #: users/views/admin/users.py:107
 msgid "You have to select inactive users."
 msgid "You have to select inactive users."
-msgstr "Vous devez sélectionner les utilisateurs inactifs."
+msgstr "Vous devez sélectionner des utilisateurs inactifs."
 
 
 #: users/views/admin/users.py:114
 #: users/views/admin/users.py:114
 #, python-format
 #, python-format
 msgid "Your account on %(forum_name)s forums has been activated"
 msgid "Your account on %(forum_name)s forums has been activated"
-msgstr "Votre compte sur les %(forum_name)s forums a été activés."
+msgstr "Votre compte sur le forum %(forum_name)s a été activé."
 
 
 #: users/views/admin/users.py:119
 #: users/views/admin/users.py:119
 msgid "Selected users accounts have been activated."
 msgid "Selected users accounts have been activated."
@@ -6598,12 +6598,12 @@ msgstr "Les utilisateurs sélectionnés ont été supprimés."
 #: users/views/admin/users.py:232
 #: users/views/admin/users.py:232
 #, python-format
 #, python-format
 msgid "New user \"%(user)s\" has been registered."
 msgid "New user \"%(user)s\" has been registered."
-msgstr "Le nouvel utilisateur \"%(user)s\" a été enregistré."
+msgstr "Le nouvel utilisateur « %(user)s » a été enregistré."
 
 
 #: users/views/admin/users.py:261
 #: users/views/admin/users.py:261
 #, python-format
 #, python-format
 msgid "User \"%(user)s\" has been edited."
 msgid "User \"%(user)s\" has been edited."
-msgstr "L'utilisateur \"%(user)s\" a été modifié."
+msgstr "L'utilisateur « %(user)s » a été modifié."
 
 
 #: users/views/admin/users.py:328
 #: users/views/admin/users.py:328
 msgid "This action can't be accessed directly."
 msgid "This action can't be accessed directly."
@@ -6614,7 +6614,7 @@ msgstr "Il n'est pas possible de réaliser cette action directement."
 msgid ""
 msgid ""
 "%(user)s, your link has expired. Please request new link and try again."
 "%(user)s, your link has expired. Please request new link and try again."
 msgstr ""
 msgstr ""
-"%(user)s, Votre lien a expiré. Veuillez demande un nouveau lien et "
+"%(user)s, votre lien a expiré. Veuillez demande un nouveau lien et "
 "réessayer."
 "réessayer."
 
 
 #: users/views/forgottenpassword.py:42
 #: users/views/forgottenpassword.py:42

BIN
misago/locale/fr/LC_MESSAGES/djangojs.mo


+ 126 - 131
misago/locale/fr/LC_MESSAGES/djangojs.po

@@ -96,7 +96,7 @@ msgstr "Ce banissement expire le %(expires_on)s."
 
 
 #: static/misago/js/misago.js:1 static/misago/js/misago.js:11
 #: static/misago/js/misago.js:1 static/misago/js/misago.js:11
 msgid "This ban expires %(expires_on)s."
 msgid "This ban expires %(expires_on)s."
-msgstr "Ce banissement expire le %(expires_on)s."
+msgstr "Ce banissement expire dans %(expires_on)s."
 
 
 #: static/misago/js/misago.js:1 static/misago/js/misago.js:11
 #: static/misago/js/misago.js:1 static/misago/js/misago.js:11
 msgid "This ban has expired."
 msgid "This ban has expired."
@@ -215,7 +215,7 @@ msgstr "Le fichier choisi est trop volumineux. (%(filesize)s)"
 
 
 #: static/misago/js/misago.js:2
 #: static/misago/js/misago.js:2
 msgid "Selected file type is not supported."
 msgid "Selected file type is not supported."
-msgstr "Le fichier sélectionné n'est pas supporté."
+msgstr "Le type de fichier sélectionné n'est pas supporté."
 
 
 #: static/misago/js/misago.js:2
 #: static/misago/js/misago.js:2
 msgid "%(files)s files smaller than %(limit)s"
 msgid "%(files)s files smaller than %(limit)s"
@@ -271,11 +271,11 @@ msgstr "Insérer une barre horizontale"
 
 
 #: static/misago/js/misago.js:2
 #: static/misago/js/misago.js:2
 msgid "Enter link to image"
 msgid "Enter link to image"
-msgstr "Lier vers une image"
+msgstr "Lien vers une image"
 
 
 #: static/misago/js/misago.js:2
 #: static/misago/js/misago.js:2
 msgid "Enter image label (optional)"
 msgid "Enter image label (optional)"
-msgstr "Définir un nom pour l'image (facultatif)"
+msgstr "Donnez un nom à l'image (facultatif)"
 
 
 #: static/misago/js/misago.js:2
 #: static/misago/js/misago.js:2
 msgid "Insert image"
 msgid "Insert image"
@@ -328,7 +328,7 @@ msgstr "Annuler la suppression"
 
 
 #: static/misago/js/misago.js:3
 #: static/misago/js/misago.js:3
 msgid "Error uploading %(filename)s"
 msgid "Error uploading %(filename)s"
-msgstr "Erreur télédéposition %(filename)s"
+msgstr "Erreur pendant le télédépôt de %(filename)s"
 
 
 #: static/misago/js/misago.js:3 static/misago/js/misago.js:8
 #: static/misago/js/misago.js:3 static/misago/js/misago.js:8
 msgid "Dismiss"
 msgid "Dismiss"
@@ -336,7 +336,7 @@ msgstr "Rejeter"
 
 
 #: static/misago/js/misago.js:3
 #: static/misago/js/misago.js:3
 msgid "Uploading %(filename)s... %(progress)s"
 msgid "Uploading %(filename)s... %(progress)s"
-msgstr "Télédéposition %(filename)s... %(progress)s"
+msgstr "Télédépôt de %(filename)s... %(progress)s"
 
 
 #: static/misago/js/misago.js:3
 #: static/misago/js/misago.js:3
 msgid "Upload file"
 msgid "Upload file"
@@ -373,7 +373,7 @@ msgstr "(succes)"
 
 
 #: static/misago/js/misago.js:4
 #: static/misago/js/misago.js:4
 msgid "Are you sure? This will delete other polls."
 msgid "Are you sure? This will delete other polls."
-msgstr "Êtes-vous sûr? Ceci supprimera d'autres sondages."
+msgstr "Êtes-vous sûr⋅e ? Ceci supprimera les autres sondages."
 
 
 #: static/misago/js/misago.js:4
 #: static/misago/js/misago.js:4
 msgid "Merge polls"
 msgid "Merge polls"
@@ -382,7 +382,7 @@ msgstr "Fusionner les sondages"
 #: static/misago/js/misago.js:4
 #: static/misago/js/misago.js:4
 msgid "Select poll to use in merged thread. Other polls will be deleted."
 msgid "Select poll to use in merged thread. Other polls will be deleted."
 msgstr ""
 msgstr ""
-"Sélectionner le sondage a utiliser dans le fil de discussion. Les autres "
+"Sélectionner le sondage à utiliser dans le fil de discussion. Les autres "
 "sondages seront supprimés."
 "sondages seront supprimés."
 
 
 #: static/misago/js/misago.js:4 static/misago/js/misago.js:17
 #: static/misago/js/misago.js:4 static/misago/js/misago.js:17
@@ -401,7 +401,7 @@ msgstr "Rechercher"
 msgid "See full \"%(provider)s\" results page with %(count)s result."
 msgid "See full \"%(provider)s\" results page with %(count)s result."
 msgid_plural "See full \"%(provider)s\" results page with %(count)s results."
 msgid_plural "See full \"%(provider)s\" results page with %(count)s results."
 msgstr[0] "Voir la totalité des %(count)s résultats pour \"%(provider)s\"."
 msgstr[0] "Voir la totalité des %(count)s résultats pour \"%(provider)s\"."
-msgstr[1] "Voir la totalité des %(count)s résultats pour \"%(provider)s\"."
+msgstr[1] "Voir la totalité des %(count)s résultats pour « %(provider)s »."
 
 
 #: static/misago/js/misago.js:4
 #: static/misago/js/misago.js:4
 msgid "Posted by %(poster)s on %(posted_on)s in %(category)s."
 msgid "Posted by %(poster)s on %(posted_on)s in %(category)s."
@@ -409,7 +409,7 @@ msgstr "Posté par %(poster)s le %(posted_on)s dans %(category)s."
 
 
 #: static/misago/js/misago.js:4
 #: static/misago/js/misago.js:4
 msgid "%(title)s, joined on %(joined_on)s"
 msgid "%(title)s, joined on %(joined_on)s"
-msgstr "%(title)s, joint le %(joined_on)s"
+msgstr "%(title)s, membre depuis le %(joined_on)s"
 
 
 #: static/misago/js/misago.js:4 static/misago/js/misago.js:12
 #: static/misago/js/misago.js:4 static/misago/js/misago.js:12
 msgid "Change username"
 msgid "Change username"
@@ -544,15 +544,15 @@ msgstr "Abonnements automatiques"
 
 
 #: static/misago/js/misago.js:5
 #: static/misago/js/misago.js:5
 msgid "Threads I start"
 msgid "Threads I start"
-msgstr "Fils que j'ai démarré"
+msgstr "Fils que je démarre"
 
 
 #: static/misago/js/misago.js:5
 #: static/misago/js/misago.js:5
 msgid "Threads I reply to"
 msgid "Threads I reply to"
-msgstr "Fils auxquels j'ai répondu"
+msgstr "Fils auxquels je réponds"
 
 
 #: static/misago/js/misago.js:5
 #: static/misago/js/misago.js:5
 msgid "Fill out all fields."
 msgid "Fill out all fields."
-msgstr "Remplir tout les champs."
+msgstr "Remplissez tous les champs."
 
 
 #: static/misago/js/misago.js:5
 #: static/misago/js/misago.js:5
 msgid "Change e-mail address"
 msgid "Change e-mail address"
@@ -683,7 +683,7 @@ msgstr "Choisir une étiquette"
 
 
 #: static/misago/js/misago.js:6
 #: static/misago/js/misago.js:6
 msgid "Make voting public"
 msgid "Make voting public"
-msgstr "Rendre le vote publique"
+msgstr "Rendre le vote public"
 
 
 #: static/misago/js/misago.js:6
 #: static/misago/js/misago.js:6
 msgid ""
 msgid ""
@@ -692,15 +692,14 @@ msgid ""
 "can't be changed after poll's creation. Moderators may see voting details "
 "can't be changed after poll's creation. Moderators may see voting details "
 "for all polls."
 "for all polls."
 msgstr ""
 msgstr ""
-"Le fait de rendre le vote publique permettra à chacun d'accéder à la liste "
-"détaillée des votes, indiquant quels utilisateurs ont voté pour quel choix "
-"et à quel moment. Cette option ne peut pas être modifiée après la création "
-"du sondage. A noter, les modérateurs peuvent voir les détails du vote pour "
-"tous les sondages."
+"Rendre le vote public permettra à chacun⋅e d'accéder à la liste détaillée "
+"des votes, indiquant qui a voté pour quel⋅s choix et à quel moment. Cette "
+"option ne peut pas être modifiée après la création du sondage. À noter, les "
+"modérateurs peuvent voir les détails des votes pour tous les sondages."
 
 
 #: static/misago/js/misago.js:6
 #: static/misago/js/misago.js:6
 msgid "Votes are public"
 msgid "Votes are public"
-msgstr "Les votes sont publiques"
+msgstr "Les votes sont publics"
 
 
 #: static/misago/js/misago.js:6
 #: static/misago/js/misago.js:6
 msgid "Votes are hidden"
 msgid "Votes are hidden"
@@ -708,7 +707,7 @@ msgstr "Les votes sont cachés"
 
 
 #: static/misago/js/misago.js:6
 #: static/misago/js/misago.js:6
 msgid "Are you sure you want to discard poll?"
 msgid "Are you sure you want to discard poll?"
-msgstr "Êtes-vous sûr de vouloir supprimer le sondage?"
+msgstr "Êtes-vous sûr de vouloir supprimer le sondage ?"
 
 
 #: static/misago/js/misago.js:6
 #: static/misago/js/misago.js:6
 msgid "Poll has been edited."
 msgid "Poll has been edited."
@@ -716,7 +715,7 @@ msgstr "Le sondage a été modifié."
 
 
 #: static/misago/js/misago.js:6
 #: static/misago/js/misago.js:6
 msgid "Poll has been posted."
 msgid "Poll has been posted."
-msgstr "Le sondage a été publié"
+msgstr "Le sondage a été publié."
 
 
 #: static/misago/js/misago.js:6
 #: static/misago/js/misago.js:6
 msgid "Question and choices"
 msgid "Question and choices"
@@ -752,15 +751,15 @@ msgstr "Choix autorisés"
 
 
 #: static/misago/js/misago.js:6
 #: static/misago/js/misago.js:6
 msgid "Allow vote changes"
 msgid "Allow vote changes"
-msgstr "Autoriser la modification du vote"
+msgstr "Autoriser les modifications du vote"
 
 
 #: static/misago/js/misago.js:6
 #: static/misago/js/misago.js:6
 msgid "Allow participants to change their vote"
 msgid "Allow participants to change their vote"
-msgstr "Autoriser les participants a changer de vote"
+msgstr "Autoriser les participants à changer leur vote"
 
 
 #: static/misago/js/misago.js:6
 #: static/misago/js/misago.js:6
 msgid "Don't allow participants to change their vote"
 msgid "Don't allow participants to change their vote"
-msgstr "Ne pas autoriser les participants à changer leur vote"
+msgstr "Interdire aux participants de changer leur vote"
 
 
 #: static/misago/js/misago.js:6
 #: static/misago/js/misago.js:6
 msgid "Post poll"
 msgid "Post poll"
@@ -782,7 +781,7 @@ msgstr[1] "%(votes)s votes."
 
 
 #: static/misago/js/misago.js:6
 #: static/misago/js/misago.js:6
 msgid "Votes are public."
 msgid "Votes are public."
-msgstr "Les votes sont publiques."
+msgstr "Les votes sont publics."
 
 
 #: static/misago/js/misago.js:6
 #: static/misago/js/misago.js:6
 msgid "%(votes)s vote, %(proc)s% of total."
 msgid "%(votes)s vote, %(proc)s% of total."
@@ -821,8 +820,8 @@ msgstr "Éditer"
 msgid ""
 msgid ""
 "Are you sure you want to delete this poll? This action is not reversible."
 "Are you sure you want to delete this poll? This action is not reversible."
 msgstr ""
 msgstr ""
-"Êtes-vous sûr de vouloir supprimer ce sondage? Cette action est "
-"irréversible!"
+"Êtes-vous sûr de vouloir supprimer ce sondage ? Cette action est "
+"irréversible !"
 
 
 #: static/misago/js/misago.js:6 static/misago/js/misago.js:8
 #: static/misago/js/misago.js:6 static/misago/js/misago.js:8
 #: static/misago/js/misago.js:9 static/misago/js/misago.js:15
 #: static/misago/js/misago.js:9 static/misago/js/misago.js:15
@@ -841,7 +840,7 @@ msgstr[1] "Vous pouvez encore sélectionner %(choices)s choix."
 
 
 #: static/misago/js/misago.js:6
 #: static/misago/js/misago.js:6
 msgid "You can change your vote later."
 msgid "You can change your vote later."
-msgstr "Vous pourrez changer votre vote plus tard."
+msgstr "Vous pourrez modifier votre vote par la suite."
 
 
 #: static/misago/js/misago.js:6
 #: static/misago/js/misago.js:6
 msgid "Votes are final."
 msgid "Votes are final."
@@ -880,8 +879,8 @@ msgid ""
 "Are you sure you with to revert this post to the state from before this "
 "Are you sure you with to revert this post to the state from before this "
 "edit?"
 "edit?"
 msgstr ""
 msgstr ""
-"Êtes-vous sûr de vouloir rétablir la version précédente de cette "
-"publication?"
+"Êtes-vous sûr de vouloir rétablir la version précédente de cette publication"
+" ?"
 
 
 #: static/misago/js/misago.js:7
 #: static/misago/js/misago.js:7
 msgid "Post has been reverted to previous state."
 msgid "Post has been reverted to previous state."
@@ -911,7 +910,7 @@ msgstr "publié le %(posted_on)s"
 
 
 #: static/misago/js/misago.js:7 static/misago/js/misago.js:10
 #: static/misago/js/misago.js:7 static/misago/js/misago.js:10
 msgid "Removed user"
 msgid "Removed user"
-msgstr "Utilisateurs supprimés"
+msgstr "Utilisateur supprimé"
 
 
 #: static/misago/js/misago.js:7
 #: static/misago/js/misago.js:7
 msgid "See post"
 msgid "See post"
@@ -933,7 +932,7 @@ msgstr "Aucun utilisateur n'a aimé cette publication."
 
 
 #: static/misago/js/misago.js:8
 #: static/misago/js/misago.js:8
 msgid "Are you sure you want to discard changes?"
 msgid "Are you sure you want to discard changes?"
-msgstr "Êtes-vous sûr de vouloir rejeter les modifications?"
+msgstr "Êtes-vous sûr de vouloir rejeter les modifications ?"
 
 
 #: static/misago/js/misago.js:8
 #: static/misago/js/misago.js:8
 msgid "You have to enter a message."
 msgid "You have to enter a message."
@@ -949,7 +948,7 @@ msgstr "Modifier la réponse"
 
 
 #: static/misago/js/misago.js:8
 #: static/misago/js/misago.js:8
 msgid "Are you sure you want to discard your reply?"
 msgid "Are you sure you want to discard your reply?"
-msgstr "Êtes-vous sûr de vouloir supprimer votre réponse?"
+msgstr "Êtes-vous sûr de vouloir supprimer votre réponse ?"
 
 
 #: static/misago/js/misago.js:8
 #: static/misago/js/misago.js:8
 msgid "Your reply has been posted."
 msgid "Your reply has been posted."
@@ -961,7 +960,7 @@ msgstr "Répondre au message"
 
 
 #: static/misago/js/misago.js:8
 #: static/misago/js/misago.js:8
 msgid "Are you sure you want to discard private thread?"
 msgid "Are you sure you want to discard private thread?"
-msgstr "Êtes-vous sûr de vouloir supprimer votre fil de discussion privé?"
+msgstr "Êtes-vous sûr de vouloir supprimer votre fil de discussion privé ?"
 
 
 #: static/misago/js/misago.js:8
 #: static/misago/js/misago.js:8
 msgid "You have to enter at least one recipient."
 msgid "You have to enter at least one recipient."
@@ -990,7 +989,7 @@ msgstr "Publier le fil"
 
 
 #: static/misago/js/misago.js:8
 #: static/misago/js/misago.js:8
 msgid "Are you sure you want to discard thread?"
 msgid "Are you sure you want to discard thread?"
-msgstr "Êtes-vous sûr de vouloir supprimer le fil de discussion?"
+msgstr "Êtes-vous sûr de vouloir supprimer le fil de discussion ?"
 
 
 #: static/misago/js/misago.js:8 static/misago/js/misago.js:14
 #: static/misago/js/misago.js:8 static/misago/js/misago.js:14
 #: static/misago/js/misago.js:17
 #: static/misago/js/misago.js:17
@@ -1038,7 +1037,7 @@ msgstr[0] ""
 "(Actuellement % (show_value) s)."
 "(Actuellement % (show_value) s)."
 msgstr[1] ""
 msgstr[1] ""
 "Le titre du fil doit comporter au moins %(limit_value)s caractères "
 "Le titre du fil doit comporter au moins %(limit_value)s caractères "
-"(Actuellement % (show_value) s)."
+"(actuellement %(show_value)s)."
 
 
 #: static/misago/js/misago.js:8
 #: static/misago/js/misago.js:8
 msgid ""
 msgid ""
@@ -1052,7 +1051,7 @@ msgstr[0] ""
 "(Actuellement % (show_value) s)."
 "(Actuellement % (show_value) s)."
 msgstr[1] ""
 msgstr[1] ""
 "Le titre du fil ne peut pas dépasser %(limit_value)s  caractères "
 "Le titre du fil ne peut pas dépasser %(limit_value)s  caractères "
-"(Actuellement % (show_value) s)."
+"(actuellement %(show_value)s)."
 
 
 #: static/misago/js/misago.js:8
 #: static/misago/js/misago.js:8
 msgid ""
 msgid ""
@@ -1066,7 +1065,7 @@ msgstr[0] ""
 "(Actuellement % (show_value) s)."
 "(Actuellement % (show_value) s)."
 msgstr[1] ""
 msgstr[1] ""
 "Le message affiché doit comporter au moins %(limit_value)s caractères "
 "Le message affiché doit comporter au moins %(limit_value)s caractères "
-"(Actuellement % (show_value) s)."
+"(actuellement %(show_value)s)."
 
 
 #: static/misago/js/misago.js:8
 #: static/misago/js/misago.js:8
 msgid ""
 msgid ""
@@ -1079,8 +1078,8 @@ msgstr[0] ""
 "Le message affiché ne peut pas dépasser %(limit_value)s  caractère "
 "Le message affiché ne peut pas dépasser %(limit_value)s  caractère "
 "(Actuellement % (show_value) s)."
 "(Actuellement % (show_value) s)."
 msgstr[1] ""
 msgstr[1] ""
-"Le message affiché ne peut pas dépasser %(limit_value)s  caractères "
-"(Actuellement % (show_value) s)."
+"Le message affiché ne peut pas dépasser %(limit_value)s caractères "
+"(actuellement %(show_value)s)."
 
 
 #: static/misago/js/misago.js:8 static/misago/js/misago.js:9
 #: static/misago/js/misago.js:8 static/misago/js/misago.js:9
 #: static/misago/js/misago.js:15
 #: static/misago/js/misago.js:15
@@ -1096,8 +1095,8 @@ msgstr "Afficher"
 msgid ""
 msgid ""
 "Are you sure you wish to delete this event? This action is not reversible!"
 "Are you sure you wish to delete this event? This action is not reversible!"
 msgstr ""
 msgstr ""
-"Êtes-vous sûr de vouloir supprimer cet événement? Cette action est "
-"irréversible!"
+"Êtes-vous sûr de vouloir supprimer cet événement ? Cette action est "
+"irréversible !"
 
 
 #: static/misago/js/misago.js:8
 #: static/misago/js/misago.js:8
 msgid "Event has been deleted."
 msgid "Event has been deleted."
@@ -1113,7 +1112,7 @@ msgstr "Par %(event_by)s %(event_on)s."
 
 
 #: static/misago/js/misago.js:9
 #: static/misago/js/misago.js:9
 msgid "IP recorded"
 msgid "IP recorded"
-msgstr "IP enregistré"
+msgstr "IP enregistrée"
 
 
 #: static/misago/js/misago.js:9
 #: static/misago/js/misago.js:9
 msgid "Thread title has been changed from %(old_title)s."
 msgid "Thread title has been changed from %(old_title)s."
@@ -1137,7 +1136,7 @@ msgstr "L'utilisateur %(user)s a été ajouté au fil."
 
 
 #: static/misago/js/misago.js:9
 #: static/misago/js/misago.js:9
 msgid "Removed %(user)s from thread."
 msgid "Removed %(user)s from thread."
-msgstr "L'utilisateur %(user)s a été évincé au fil."
+msgstr "L'utilisateur %(user)s a été évincé du fil."
 
 
 #: static/misago/js/misago.js:9 static/misago/js/misago.js:15
 #: static/misago/js/misago.js:9 static/misago/js/misago.js:15
 msgid "Thread has been pinned globally."
 msgid "Thread has been pinned globally."
@@ -1173,7 +1172,7 @@ msgstr "Le fil a été caché."
 
 
 #: static/misago/js/misago.js:9
 #: static/misago/js/misago.js:9
 msgid "Took thread over."
 msgid "Took thread over."
-msgstr "Le fil a été approprié."
+msgstr "Le fil a été approprié."
 
 
 #: static/misago/js/misago.js:9
 #: static/misago/js/misago.js:9
 msgid "Owner has left thread. This thread is now closed."
 msgid "Owner has left thread. This thread is now closed."
@@ -1200,8 +1199,8 @@ msgstr "Cette publication est masquée. Vous ne pouvez pas voir son contenu."
 msgid ""
 msgid ""
 "Are you sure you want to delete this post? This action is not reversible!"
 "Are you sure you want to delete this post? This action is not reversible!"
 msgstr ""
 msgstr ""
-"Êtes-vous sûr de vouloir supprimer cette publication? Cette action est "
-"irréversible!"
+"Êtes-vous sûr de vouloir supprimer cette publication ? Cette action est "
+"irréversible !"
 
 
 #: static/misago/js/misago.js:9
 #: static/misago/js/misago.js:9
 msgid "Post has been deleted."
 msgid "Post has been deleted."
@@ -1209,7 +1208,7 @@ msgstr "La publication a été supprimée."
 
 
 #: static/misago/js/misago.js:9
 #: static/misago/js/misago.js:9
 msgid "Permament link to this post:"
 msgid "Permament link to this post:"
-msgstr "Lien permanent vers cette publication :"
+msgstr "Lien permanent vers cette publication :"
 
 
 #: static/misago/js/misago.js:9
 #: static/misago/js/misago.js:9
 msgid "Permament link"
 msgid "Permament link"
@@ -1261,7 +1260,7 @@ msgstr ""
 
 
 #: static/misago/js/misago.js:9
 #: static/misago/js/misago.js:9
 msgid "You can't move this post at the moment."
 msgid "You can't move this post at the moment."
-msgstr "Vous ne pouvez pas déplacer cette publication en ce moment."
+msgstr "Vous ne pouvez pas déplacer cette publication pour le moment."
 
 
 #: static/misago/js/misago.js:9
 #: static/misago/js/misago.js:9
 msgid "Split post into new thread"
 msgid "Split post into new thread"
@@ -1274,9 +1273,7 @@ msgstr "Oui"
 
 
 #: static/misago/js/misago.js:10
 #: static/misago/js/misago.js:10
 msgid "Selected post was split into new thread."
 msgid "Selected post was split into new thread."
-msgstr ""
-"Le détachement de la publication sélectionnée en un nouveau fil a été "
-"effectué."
+msgstr "La publication a été détachée pour créer un nouveau fil."
 
 
 #: static/misago/js/misago.js:10 static/misago/js/misago.js:15
 #: static/misago/js/misago.js:10 static/misago/js/misago.js:15
 #: static/misago/js/misago.js:18
 #: static/misago/js/misago.js:18
@@ -1328,7 +1325,7 @@ msgstr ""
 
 
 #: static/misago/js/misago.js:10
 #: static/misago/js/misago.js:10
 msgid "%(user)s likes this."
 msgid "%(user)s likes this."
-msgstr "%(user)s aime cela."
+msgstr "%(user)s aime ça."
 
 
 #: static/misago/js/misago.js:10
 #: static/misago/js/misago.js:10
 msgid "%(users)s and %(last_user)s"
 msgid "%(users)s and %(last_user)s"
@@ -1336,13 +1333,13 @@ msgstr "%(users)s et %(last_user)s"
 
 
 #: static/misago/js/misago.js:10
 #: static/misago/js/misago.js:10
 msgid "%(users)s like this."
 msgid "%(users)s like this."
-msgstr "%(user)s aime ça."
+msgstr "%(users)s aiment ça."
 
 
 #: static/misago/js/misago.js:10
 #: static/misago/js/misago.js:10
 msgid "%(users)s and %(likes)s other user like this."
 msgid "%(users)s and %(likes)s other user like this."
 msgid_plural "%(users)s and %(likes)s other users like this."
 msgid_plural "%(users)s and %(likes)s other users like this."
 msgstr[0] "%(users)s et %(likes)s autre utilisateur aime cela."
 msgstr[0] "%(users)s et %(likes)s autre utilisateur aime cela."
-msgstr[1] "%(users)s et %(likes)s autre utilisateurs aiment cela."
+msgstr[1] "%(users)s et %(likes)s autre utilisateurs aiment ça."
 
 
 #: static/misago/js/misago.js:10
 #: static/misago/js/misago.js:10
 msgid "Liked"
 msgid "Liked"
@@ -1354,7 +1351,7 @@ msgstr "J'aime"
 
 
 #: static/misago/js/misago.js:10 static/misago/js/misago.js:16
 #: static/misago/js/misago.js:10 static/misago/js/misago.js:16
 msgid "Reply"
 msgid "Reply"
-msgstr "Répondre"
+msgstr "Citer et répondre"
 
 
 #: static/misago/js/misago.js:10
 #: static/misago/js/misago.js:10
 msgid "New post"
 msgid "New post"
@@ -1403,11 +1400,11 @@ msgstr "L'interdiction de %(username)s est permanente."
 
 
 #: static/misago/js/misago.js:11
 #: static/misago/js/misago.js:11
 msgid "Ban expiration"
 msgid "Ban expiration"
-msgstr "Annulation de l'interdiction"
+msgstr "Expiration de l'interdiction"
 
 
 #: static/misago/js/misago.js:11
 #: static/misago/js/misago.js:11
 msgid "No ban is active at the moment."
 msgid "No ban is active at the moment."
-msgstr "Aucunes interdictions actives pour le moment."
+msgstr "Aucune interdiction active pour le moment."
 
 
 #: static/misago/js/misago.js:11
 #: static/misago/js/misago.js:11
 msgid "You are not sharing any details with others."
 msgid "You are not sharing any details with others."
@@ -1427,11 +1424,11 @@ msgstr "Les informations de %(username)s ont été mises à jour."
 
 
 #: static/misago/js/misago.js:11
 #: static/misago/js/misago.js:11
 msgid "You have no started threads."
 msgid "You have no started threads."
-msgstr "Vous n'avez démarré aucuns fils de discussion."
+msgstr "Vous n'avez démarré aucun fil de discussion."
 
 
 #: static/misago/js/misago.js:11
 #: static/misago/js/misago.js:11
 msgid "%(username)s started no threads."
 msgid "%(username)s started no threads."
-msgstr "%(username)s n'a démarré aucuns fils de discussion."
+msgstr "%(username)s n'a démarré aucun fil de discussion."
 
 
 #: static/misago/js/misago.js:11
 #: static/misago/js/misago.js:11
 msgid "You have started %(threads)s thread."
 msgid "You have started %(threads)s thread."
@@ -1447,7 +1444,7 @@ msgstr[1] "%(username)s a démarré %(threads)s fils de discussion."
 
 
 #: static/misago/js/misago.js:11 static/misago/js/misago.js:12
 #: static/misago/js/misago.js:11 static/misago/js/misago.js:12
 msgid "Loading..."
 msgid "Loading..."
-msgstr "Chargement ..."
+msgstr "Chargement"
 
 
 #: static/misago/js/misago.js:11 static/misago/js/misago.js:18
 #: static/misago/js/misago.js:11 static/misago/js/misago.js:18
 #: static/misago/js/misago.js:19
 #: static/misago/js/misago.js:19
@@ -1456,7 +1453,7 @@ msgstr "Fils de discussion"
 
 
 #: static/misago/js/misago.js:11
 #: static/misago/js/misago.js:11
 msgid "You have posted no messages."
 msgid "You have posted no messages."
-msgstr "Vous n'avez posté aucun message"
+msgstr "Vous n'avez posté aucun message."
 
 
 #: static/misago/js/misago.js:11
 #: static/misago/js/misago.js:11
 msgid "%(username)s posted no messages."
 msgid "%(username)s posted no messages."
@@ -1484,7 +1481,7 @@ msgstr "Montrer davantage (%(more)s)"
 
 
 #: static/misago/js/misago.js:11
 #: static/misago/js/misago.js:11
 msgid "Following"
 msgid "Following"
-msgstr "Suivre"
+msgstr "Suivi⋅e"
 
 
 #: static/misago/js/misago.js:11
 #: static/misago/js/misago.js:11
 msgid "Follow"
 msgid "Follow"
@@ -1528,7 +1525,7 @@ msgstr "Personne ne suit %(username)s."
 
 
 #: static/misago/js/misago.js:11
 #: static/misago/js/misago.js:11
 msgid "Search users..."
 msgid "Search users..."
-msgstr "Recherche les utilisateurs ..."
+msgstr "Recherche les utilisateurs"
 
 
 #: static/misago/js/misago.js:11
 #: static/misago/js/misago.js:11
 msgid "Follows"
 msgid "Follows"
@@ -1544,7 +1541,7 @@ msgstr[1] "Vous suivez %(users)s utilisateurs."
 msgid "%(username)s is following %(users)s user."
 msgid "%(username)s is following %(users)s user."
 msgid_plural "%(username)s is following %(users)s users."
 msgid_plural "%(username)s is following %(users)s users."
 msgstr[0] "%(username)s suit l'utilisateur %(users)s."
 msgstr[0] "%(username)s suit l'utilisateur %(users)s."
-msgstr[1] "%(username)s suit les utilisateurs %(users)s."
+msgstr[1] "%(username)s suit %(users)sutilisateurs."
 
 
 #: static/misago/js/misago.js:11
 #: static/misago/js/misago.js:11
 msgid "You are not following any users."
 msgid "You are not following any users."
@@ -1560,11 +1557,11 @@ msgstr "Le compte de cet utilisateur a été désactivé par un administrateur."
 
 
 #: static/misago/js/misago.js:11 static/misago/js/misago.js:20
 #: static/misago/js/misago.js:11 static/misago/js/misago.js:20
 msgid "Joined on %(joined_on)s"
 msgid "Joined on %(joined_on)s"
-msgstr "A rejoint le %(joined_on)s"
+msgstr "Membre depuis le %(joined_on)s"
 
 
 #: static/misago/js/misago.js:11 static/misago/js/misago.js:20
 #: static/misago/js/misago.js:11 static/misago/js/misago.js:20
 msgid "Joined %(joined_on)s"
 msgid "Joined %(joined_on)s"
-msgstr "A rejoint le %(joined_on)s"
+msgstr "Membre depuis %(joined_on)s"
 
 
 #: static/misago/js/misago.js:11 static/misago/js/misago.js:14
 #: static/misago/js/misago.js:11 static/misago/js/misago.js:14
 #: static/misago/js/misago.js:15
 #: static/misago/js/misago.js:15
@@ -1588,16 +1585,16 @@ msgid ""
 "Locking user avatar will prohibit user from changing his avatar and will "
 "Locking user avatar will prohibit user from changing his avatar and will "
 "reset his/her avatar to default one."
 "reset his/her avatar to default one."
 msgstr ""
 msgstr ""
-"Le verrouillage de l'avatar de l'utilisateur interdit à ce dernier de le "
-"modifier ou de le réinitialiser."
+"Le verrouillage de l'avatar interdit à l'utilisateur⋅rice de le modifier ou "
+"de le réinitialiser."
 
 
 #: static/misago/js/misago.js:12
 #: static/misago/js/misago.js:12
 msgid "Disallow user from changing avatar"
 msgid "Disallow user from changing avatar"
-msgstr "Interdire l'utilisateur de changer d'avatar"
+msgstr "Interdire à l'utilisateur de changer d'avatar"
 
 
 #: static/misago/js/misago.js:12
 #: static/misago/js/misago.js:12
 msgid "Allow user to change avatar"
 msgid "Allow user to change avatar"
-msgstr "Autoriser l'utilisateur de changer d'avatar"
+msgstr "Autoriser l'utilisateur à changer d'avatar"
 
 
 #: static/misago/js/misago.js:12
 #: static/misago/js/misago.js:12
 msgid "User message"
 msgid "User message"
@@ -1608,8 +1605,8 @@ msgid ""
 "Optional message for user explaining why he/she is prohibited form changing "
 "Optional message for user explaining why he/she is prohibited form changing "
 "avatar."
 "avatar."
 msgstr ""
 msgstr ""
-"Message facultatif pour l'utilisateur expliquant pourquoi il / elle est "
-"interdit de modifier l'avatar."
+"Message facultatif pour l'utilisateur expliquant pourquoi ielle est "
+"interdit⋅e de modifier l'avatar."
 
 
 #: static/misago/js/misago.js:12
 #: static/misago/js/misago.js:12
 msgid "Staff message"
 msgid "Staff message"
@@ -1629,14 +1626,14 @@ msgstr "Paramètres avatar"
 
 
 #: static/misago/js/misago.js:12
 #: static/misago/js/misago.js:12
 msgid "Username has been changed."
 msgid "Username has been changed."
-msgstr "L’utilisateur a été changé."
+msgstr "L’identifiant a été modifié."
 
 
 #: static/misago/js/misago.js:12
 #: static/misago/js/misago.js:12
 msgid ""
 msgid ""
 "%(username)s's account, threads, posts and other content has been deleted."
 "%(username)s's account, threads, posts and other content has been deleted."
 msgstr ""
 msgstr ""
-"Le compte utilisateur de %(username)s, fils de discussions, publications et "
-"autres contenus a été supprimé."
+"Le compte de %(username)s, ses fils de discussions, ses publications et "
+"autres contenus ont été supprimés."
 
 
 #: static/misago/js/misago.js:12
 #: static/misago/js/misago.js:12
 msgid ""
 msgid ""
@@ -1651,7 +1648,7 @@ msgstr "Supprimer %(username)s"
 
 
 #: static/misago/js/misago.js:12
 #: static/misago/js/misago.js:12
 msgid "Please wait... (%(countdown)ss)"
 msgid "Please wait... (%(countdown)ss)"
-msgstr "Merci d'attendre ... (%(countdown)ss)"
+msgstr "Merci d'attendre (%(countdown)ss)"
 
 
 #: static/misago/js/misago.js:12
 #: static/misago/js/misago.js:12
 msgid "User content"
 msgid "User content"
@@ -1698,34 +1695,33 @@ msgid "%(username)s's username was changed %(changes)s time."
 msgid_plural "%(username)s's username was changed %(changes)s times."
 msgid_plural "%(username)s's username was changed %(changes)s times."
 msgstr[0] ""
 msgstr[0] ""
 "Le nom d'utilisateur de %(username)s a été modifié %(changes)s fois."
 "Le nom d'utilisateur de %(username)s a été modifié %(changes)s fois."
-msgstr[1] ""
-"Le nom d'utilisateur de %(username)s a été modifié %(changes)s fois."
+msgstr[1] "L'identifiant de %(username)s a été modifié %(changes)s fois."
 
 
 #: static/misago/js/misago.js:12
 #: static/misago/js/misago.js:12
 msgid "Search returned no username changes matching specified criteria."
 msgid "Search returned no username changes matching specified criteria."
 msgstr ""
 msgstr ""
-"La recherche n'a retourné aucun nom d'utilisateur correspondant aux critères"
-" spécifiés."
+"La recherche n'a retourné aucun changement d'identifiant correspondant aux "
+"critères spécifiés."
 
 
 #: static/misago/js/misago.js:12 static/misago/js/misago.js:20
 #: static/misago/js/misago.js:12 static/misago/js/misago.js:20
 msgid "No name changes have been recorded for your account."
 msgid "No name changes have been recorded for your account."
-msgstr "Aucuns changements de nom n'a été enregistré pour votre compte."
+msgstr "Aucun changement d'identifiant n'a été enregistré pour votre compte."
 
 
 #: static/misago/js/misago.js:12
 #: static/misago/js/misago.js:12
 msgid "%(username)s's username was never changed."
 msgid "%(username)s's username was never changed."
-msgstr "Le nom d'utilisateur de %(username)s n'a jamais été changé."
+msgstr "L'identifiant de %(username)s n'a jamais été changé."
 
 
 #: static/misago/js/misago.js:12
 #: static/misago/js/misago.js:12
 msgid "Show older (%(more)s)"
 msgid "Show older (%(more)s)"
-msgstr "Remonter (%(more)s)"
+msgstr "Voir les anciens (%(more)s)"
 
 
 #: static/misago/js/misago.js:12
 #: static/misago/js/misago.js:12
 msgid "Search history..."
 msgid "Search history..."
-msgstr "Recherche dans l'historique..."
+msgstr "Recherche dans l'historique"
 
 
 #: static/misago/js/misago.js:13
 #: static/misago/js/misago.js:13
 msgid "Search..."
 msgid "Search..."
-msgstr "Recherche..."
+msgstr "Recherche"
 
 
 #: static/misago/js/misago.js:13
 #: static/misago/js/misago.js:13
 msgid "New registrations are currently disabled."
 msgid "New registrations are currently disabled."
@@ -1775,7 +1771,7 @@ msgid ""
 "have to activate it before you will be able to sign in."
 "have to activate it before you will be able to sign in."
 msgstr ""
 msgstr ""
 "%(username)s, votre compte a été crée mais un administrateur doit l'activer "
 "%(username)s, votre compte a été crée mais un administrateur doit l'activer "
-"avant de pouvoir vous authentifier."
+"avant que vous puissiez vous authentifier."
 
 
 #: static/misago/js/misago.js:13
 #: static/misago/js/misago.js:13
 msgid ""
 msgid ""
@@ -1795,7 +1791,7 @@ msgstr "Inscription terminée"
 
 
 #: static/misago/js/misago.js:13 static/misago/js/misago.js:24
 #: static/misago/js/misago.js:13 static/misago/js/misago.js:24
 msgid "Enter a valid email address."
 msgid "Enter a valid email address."
-msgstr "Entrer une adresse email valide."
+msgstr "Entrez une adresse email valide."
 
 
 #: static/misago/js/misago.js:13
 #: static/misago/js/misago.js:13
 msgid "Your e-mail address"
 msgid "Your e-mail address"
@@ -1850,11 +1846,11 @@ msgstr "S'authentifier"
 
 
 #: static/misago/js/misago.js:13
 #: static/misago/js/misago.js:13
 msgid "You have to enter search query."
 msgid "You have to enter search query."
-msgstr "Vous devez effectuer une requête."
+msgstr "Vous devez saisir des critères de recherche."
 
 
 #: static/misago/js/misago.js:13
 #: static/misago/js/misago.js:13
 msgid "Search took %(time)s s to complete"
 msgid "Search took %(time)s s to complete"
-msgstr "Recherche effectué en %(time)s s"
+msgstr "Recherche effectuée en %(time)s"
 
 
 #: static/misago/js/misago.js:14
 #: static/misago/js/misago.js:14
 msgid "No threads matching search query have been found."
 msgid "No threads matching search query have been found."
@@ -1890,7 +1886,7 @@ msgstr "Nom d'utilisateur ou e-mail"
 
 
 #: static/misago/js/misago.js:14
 #: static/misago/js/misago.js:14
 msgid "Forgot password?"
 msgid "Forgot password?"
-msgstr "Mot de passe oublié?"
+msgstr "Mot de passe oublié ?"
 
 
 #: static/misago/js/misago.js:14
 #: static/misago/js/misago.js:14
 msgid "Change title"
 msgid "Change title"
@@ -1924,16 +1920,16 @@ msgid ""
 "Are you sure you want to merge selected posts? This action is not "
 "Are you sure you want to merge selected posts? This action is not "
 "reversible!"
 "reversible!"
 msgstr ""
 msgstr ""
-"Êtes-vous sûr de vouloir fusionner les publications sélectionnées? Cette "
-"action est irréversible!"
+"Êtes-vous sûr de vouloir fusionner les publications sélectionnées ? Cette "
+"action est irréversible !"
 
 
 #: static/misago/js/misago.js:14
 #: static/misago/js/misago.js:14
 msgid ""
 msgid ""
 "Are you sure you want to delete selected posts? This action is not "
 "Are you sure you want to delete selected posts? This action is not "
 "reversible!"
 "reversible!"
 msgstr ""
 msgstr ""
-"Êtes-vous sûr de vouloir supprimer les publications sélectionnées? Cette "
-"action est irréversible!"
+"Êtes-vous sûr de vouloir supprimer les publications sélectionnées ? Cette "
+"action est irréversible !"
 
 
 #: static/misago/js/misago.js:15
 #: static/misago/js/misago.js:15
 msgid "Merge"
 msgid "Merge"
@@ -1949,7 +1945,7 @@ msgstr "%(username)s le %(posted_on)s"
 
 
 #: static/misago/js/misago.js:15
 #: static/misago/js/misago.js:15
 msgid "One or more posts could not be changed:"
 msgid "One or more posts could not be changed:"
-msgstr "Un ou plusieurs messages n'ont pas pu ȇtre modifiés:"
+msgstr "Un ou plusieurs messages n'ont pas pu être modifiés :"
 
 
 #: static/misago/js/misago.js:15
 #: static/misago/js/misago.js:15
 msgid "Posts options"
 msgid "Posts options"
@@ -1991,7 +1987,7 @@ msgstr "Le fil est de nouveau visible."
 
 
 #: static/misago/js/misago.js:15
 #: static/misago/js/misago.js:15
 msgid "Are you sure you want to delete this thread?"
 msgid "Are you sure you want to delete this thread?"
-msgstr "Êtes-vous sûr de vouloir supprimer ce fil?"
+msgstr "Êtes-vous sûr de vouloir supprimer ce fil ?"
 
 
 #: static/misago/js/misago.js:15
 #: static/misago/js/misago.js:15
 msgid "Thread has been deleted."
 msgid "Thread has been deleted."
@@ -1999,11 +1995,11 @@ msgstr "Le fil a été supprimé."
 
 
 #: static/misago/js/misago.js:15
 #: static/misago/js/misago.js:15
 msgid "Pin globally"
 msgid "Pin globally"
-msgstr "Épinglés globalement"
+msgstr "Épingler globalement"
 
 
 #: static/misago/js/misago.js:15
 #: static/misago/js/misago.js:15
 msgid "Pin locally"
 msgid "Pin locally"
-msgstr "Épinglés localement"
+msgstr "Épingler localement"
 
 
 #: static/misago/js/misago.js:15
 #: static/misago/js/misago.js:15
 msgid "Unpin"
 msgid "Unpin"
@@ -2085,7 +2081,7 @@ msgstr "Se désabonner"
 
 
 #: static/misago/js/misago.js:16 static/misago/js/misago.js:17
 #: static/misago/js/misago.js:16 static/misago/js/misago.js:17
 msgid "Subscribe"
 msgid "Subscribe"
-msgstr "Souscrire"
+msgstr "S'abonner"
 
 
 #: static/misago/js/misago.js:16 static/misago/js/misago.js:17
 #: static/misago/js/misago.js:16 static/misago/js/misago.js:17
 msgid "Subscribe with e-mail"
 msgid "Subscribe with e-mail"
@@ -2109,7 +2105,7 @@ msgstr "Dernier"
 
 
 #: static/misago/js/misago.js:16
 #: static/misago/js/misago.js:16
 msgid "Last post"
 msgid "Last post"
-msgstr "Dernier commentaire"
+msgstr "Dernier message"
 
 
 #: static/misago/js/misago.js:16 static/misago/js/misago.js:19
 #: static/misago/js/misago.js:16 static/misago/js/misago.js:19
 msgid "Options"
 msgid "Options"
@@ -2117,7 +2113,7 @@ msgstr "Options"
 
 
 #: static/misago/js/misago.js:16
 #: static/misago/js/misago.js:16
 msgid "Add poll"
 msgid "Add poll"
-msgstr "Sondage"
+msgstr "Ajouter un sondage"
 
 
 #: static/misago/js/misago.js:16
 #: static/misago/js/misago.js:16
 msgid ""
 msgid ""
@@ -2142,15 +2138,15 @@ msgstr "Changer l'abonnement"
 
 
 #: static/misago/js/misago.js:18
 #: static/misago/js/misago.js:18
 msgid "Start thread"
 msgid "Start thread"
-msgstr "Démarrer le fil"
+msgstr "Démarrer une discussion"
 
 
 #: static/misago/js/misago.js:18
 #: static/misago/js/misago.js:18
 msgid "Why not start one yourself?"
 msgid "Why not start one yourself?"
-msgstr "Pourquoi ne pas en commencer un vous même?"
+msgstr "Pourquoi ne pas en commencer un vous même ?"
 
 
 #: static/misago/js/misago.js:18
 #: static/misago/js/misago.js:18
 msgid "There are no threads on this forum... yet!"
 msgid "There are no threads on this forum... yet!"
-msgstr "Il n'y a aucun fil sur ce forum... pour l'instant du moins!"
+msgstr "Il n'y a aucun fil sur ce forum… pour l'instant !"
 
 
 #: static/misago/js/misago.js:18
 #: static/misago/js/misago.js:18
 msgid "There are no threads in this category."
 msgid "There are no threads in this category."
@@ -2202,7 +2198,7 @@ msgstr "Vous devez sélectionner au moins deux fil pour les fusionner."
 
 
 #: static/misago/js/misago.js:18
 #: static/misago/js/misago.js:18
 msgid "Are you sure you want to delete selected threads?"
 msgid "Are you sure you want to delete selected threads?"
-msgstr "Êtes-vous sûr de vouloir supprimer les fils sélectionnés?"
+msgstr "Êtes-vous sûr de vouloir supprimer les fils sélectionnés ?"
 
 
 #: static/misago/js/misago.js:18
 #: static/misago/js/misago.js:18
 msgid "Selected threads were deleted."
 msgid "Selected threads were deleted."
@@ -2294,7 +2290,7 @@ msgstr "Tout sélectionner"
 
 
 #: static/misago/js/misago.js:19
 #: static/misago/js/misago.js:19
 msgid "Select none"
 msgid "Select none"
-msgstr "Ne rien sélectionner"
+msgstr "Tout désélectionner"
 
 
 #: static/misago/js/misago.js:19
 #: static/misago/js/misago.js:19
 msgid "All"
 msgid "All"
@@ -2306,7 +2302,7 @@ msgstr "Toutes les discussions"
 
 
 #: static/misago/js/misago.js:19
 #: static/misago/js/misago.js:19
 msgid "My"
 msgid "My"
-msgstr "Mes fils"
+msgstr "Mes"
 
 
 #: static/misago/js/misago.js:19
 #: static/misago/js/misago.js:19
 msgid "My threads"
 msgid "My threads"
@@ -2352,7 +2348,7 @@ msgstr "Vous avez des fils privés non lus."
 
 
 #: static/misago/js/misago.js:19
 #: static/misago/js/misago.js:19
 msgid "Are you sure you want to sign out?"
 msgid "Are you sure you want to sign out?"
-msgstr "Êtes-vous certain de vouloir vous déconnecter?"
+msgstr "Êtes-vous certain⋅e de vouloir vous déconnecter ?"
 
 
 #: static/misago/js/misago.js:19
 #: static/misago/js/misago.js:19
 msgid "See your profile"
 msgid "See your profile"
@@ -2372,27 +2368,28 @@ msgstr "Fils de discussion privés"
 
 
 #: static/misago/js/misago.js:19
 #: static/misago/js/misago.js:19
 msgid "Log out"
 msgid "Log out"
-msgstr "Se deconnecter"
+msgstr "Se déconnecter"
 
 
 #: static/misago/js/misago.js:19
 #: static/misago/js/misago.js:19
 msgid "%(username)s is banned until %(ban_expires)s"
 msgid "%(username)s is banned until %(ban_expires)s"
-msgstr "%(username)s est banni jusqu’à %(ban_expires)s"
+msgstr "%(username)s est banni⋅e jusqu’à %(ban_expires)s"
 
 
 #: static/misago/js/misago.js:19
 #: static/misago/js/misago.js:19
 msgid "%(username)s is banned"
 msgid "%(username)s is banned"
-msgstr "%(username)s est banni"
+msgstr "%(username)s est banni⋅e"
 
 
 #: static/misago/js/misago.js:19
 #: static/misago/js/misago.js:19
 msgid "%(username)s is hiding presence"
 msgid "%(username)s is hiding presence"
-msgstr "%(username)scache sa présence "
+msgstr "%(username)s cache sa présence "
 
 
 #: static/misago/js/misago.js:19
 #: static/misago/js/misago.js:19
 msgid "%(username)s is online (hidden)"
 msgid "%(username)s is online (hidden)"
-msgstr "%(username)sest en ligne (caché)"
+msgstr "%(username)s est en ligne (caché⋅e)"
 
 
 #: static/misago/js/misago.js:19
 #: static/misago/js/misago.js:19
 msgid "%(username)s was last seen %(last_click)s (hidden)"
 msgid "%(username)s was last seen %(last_click)s (hidden)"
-msgstr "%(username)sa été vu pour la dernière fois le %(last_click)s (caché)"
+msgstr ""
+"%(username)s a été vu pour la dernière fois le %(last_click)s (caché⋅e)"
 
 
 #: static/misago/js/misago.js:19
 #: static/misago/js/misago.js:19
 msgid "%(username)s is online"
 msgid "%(username)s is online"
@@ -2404,15 +2401,15 @@ msgstr "%(username)sa été vu pour la dernière fois le %(last_click)s"
 
 
 #: static/misago/js/misago.js:20
 #: static/misago/js/misago.js:20
 msgid "Banned"
 msgid "Banned"
-msgstr "Banni"
+msgstr "Banni⋅e"
 
 
 #: static/misago/js/misago.js:20
 #: static/misago/js/misago.js:20
 msgid "Online (hidden)"
 msgid "Online (hidden)"
-msgstr "En ligne (caché)"
+msgstr "En ligne (caché⋅e)"
 
 
 #: static/misago/js/misago.js:20
 #: static/misago/js/misago.js:20
 msgid "Offline (hidden)"
 msgid "Offline (hidden)"
-msgstr "Hors ligne (caché)"
+msgstr "Hors ligne (caché⋅e)"
 
 
 #: static/misago/js/misago.js:20
 #: static/misago/js/misago.js:20
 msgid "Online"
 msgid "Online"
@@ -2448,8 +2445,7 @@ msgstr "Nombre total de messages"
 msgid "%(posters)s most active poster from last %(days)s days."
 msgid "%(posters)s most active poster from last %(days)s days."
 msgid_plural "%(posters)s most active posters from last %(days)s days."
 msgid_plural "%(posters)s most active posters from last %(days)s days."
 msgstr[0] "%(posters)s a été l'utilisateur le plus actif depuis%(days)sjours"
 msgstr[0] "%(posters)s a été l'utilisateur le plus actif depuis%(days)sjours"
-msgstr[1] ""
-"%(posters)s ont été les utilisateurs les plus actifs depuis%(days)sjours"
+msgstr[1] "%(posters)s utilisateurs les plus actifs depuis%(days)s jours."
 
 
 #: static/misago/js/misago.js:21
 #: static/misago/js/misago.js:21
 msgid "Users"
 msgid "Users"
@@ -2467,7 +2463,7 @@ msgstr "Il n'y plus de membres pour ce rôle."
 
 
 #: static/misago/js/misago.js:21
 #: static/misago/js/misago.js:21
 msgid "There are no users with this rank at the moment."
 msgid "There are no users with this rank at the moment."
-msgstr "Il n'y a aucun utilisateur avec ce rang pour le moment"
+msgstr "Il n'y a aucun utilisateur de ce rang pour le moment."
 
 
 #: static/misago/js/misago.js:21
 #: static/misago/js/misago.js:21
 msgid "yes"
 msgid "yes"
@@ -2487,7 +2483,7 @@ msgstr ""
 
 
 #: static/misago/js/misago.js:22
 #: static/misago/js/misago.js:22
 msgid "You aren't participating in any private threads."
 msgid "You aren't participating in any private threads."
-msgstr "Vous ne participez à aucun fil privé"
+msgstr "Vous ne participez à aucune discussion privée."
 
 
 #: static/misago/js/misago.js:23
 #: static/misago/js/misago.js:23
 msgid "Lost connection with application."
 msgid "Lost connection with application."
@@ -2504,8 +2500,7 @@ msgstr "Une erreur inconnue s'est produite."
 #: static/misago/js/misago.js:23
 #: static/misago/js/misago.js:23
 msgid "Upload was rejected by server as too large."
 msgid "Upload was rejected by server as too large."
 msgstr ""
 msgstr ""
-"La télédéposition a été refusée par le serveur car le fichier est trop "
-"volumineux."
+"Le télédépôt a été refusé par le serveur car le fichier est trop volumineux."
 
 
 #: static/misago/js/misago.js:23
 #: static/misago/js/misago.js:23
 msgid "Failed to load CAPTCHA."
 msgid "Failed to load CAPTCHA."
@@ -2523,15 +2518,15 @@ msgstr ""
 
 
 #: static/misago/js/misago.js:23
 #: static/misago/js/misago.js:23
 msgid "page: %(page)s"
 msgid "page: %(page)s"
-msgstr "page: %(page)s"
+msgstr "page : %(page)s"
 
 
 #: static/misago/js/misago.js:23
 #: static/misago/js/misago.js:23
 msgid "You are already working on other message. Do you want to discard it?"
 msgid "You are already working on other message. Do you want to discard it?"
-msgstr "Vous travaillez déjà sur un autre message. Voulez-vous le jeter?"
+msgstr "Vous travaillez déjà sur un autre message. Voulez-vous l'abandonner ?"
 
 
 #: static/misago/js/misago.js:23
 #: static/misago/js/misago.js:23
 msgid "You are already working on a poll. Do you want to discard it?"
 msgid "You are already working on a poll. Do you want to discard it?"
-msgstr "Vous travaillez déjà sur un sondage. Voulez-vous le jeter?"
+msgstr "Vous travaillez déjà sur un sondage. Voulez-vous l'abandonner ?"
 
 
 #: static/misago/js/misago.js:23
 #: static/misago/js/misago.js:23
 msgid "You don't have permission to perform this action."
 msgid "You don't have permission to perform this action."
@@ -2539,7 +2534,7 @@ msgstr "Vous n'avez pas la permission d'effectuer cette action."
 
 
 #: static/misago/js/misago.js:23
 #: static/misago/js/misago.js:23
 msgid "You are banned"
 msgid "You are banned"
-msgstr "Vous êtes banni"
+msgstr "Vous êtes banni⋅e"
 
 
 #: static/misago/js/misago.js:24
 #: static/misago/js/misago.js:24
 msgid "This field is required."
 msgid "This field is required."
@@ -2557,7 +2552,7 @@ msgstr[0] ""
 "(Actuellement %(show_value)s)."
 "(Actuellement %(show_value)s)."
 msgstr[1] ""
 msgstr[1] ""
 "Assurez-vous que cette valeur comporte au moins  %(limit_value)s caractères "
 "Assurez-vous que cette valeur comporte au moins  %(limit_value)s caractères "
-"(Actuellement %(show_value)s)."
+"(actuellement %(show_value)s)."
 
 
 #: static/misago/js/misago.js:24
 #: static/misago/js/misago.js:24
 msgid ""
 msgid ""
@@ -2571,7 +2566,7 @@ msgstr[0] ""
 "(Actuellement %(show_value)s)."
 "(Actuellement %(show_value)s)."
 msgstr[1] ""
 msgstr[1] ""
 "Assurez-vous que cette valeur comporte au plus  %(limit_value)s caractères "
 "Assurez-vous que cette valeur comporte au plus  %(limit_value)s caractères "
-"(Actuellement %(show_value)s)."
+"(actuellement %(show_value)s)."
 
 
 #: static/misago/js/misago.js:24
 #: static/misago/js/misago.js:24
 msgid "Username must be at least %(limit_value)s character long."
 msgid "Username must be at least %(limit_value)s character long."

BIN
misago/locale/ru/LC_MESSAGES/django.mo


+ 2 - 3
misago/locale/ru/LC_MESSAGES/django.po

@@ -544,7 +544,7 @@ msgstr "Указательный заголовок"
 #: core/migrations/0002_basic_settings.py:36
 #: core/migrations/0002_basic_settings.py:36
 msgid "You may set custon title on forum index by typing it here."
 msgid "You may set custon title on forum index by typing it here."
 msgstr ""
 msgstr ""
-"Мы можете установить настраиваемый заголовок на указателе форума, напечатав "
+"Вы можете установить настраиваемый заголовок на указателе форума, напечатав "
 "его здесь."
 "его здесь."
 
 
 #: core/migrations/0002_basic_settings.py:37
 #: core/migrations/0002_basic_settings.py:37
@@ -647,8 +647,7 @@ msgstr "Ссылка на условия"
 #: legal/migrations/0001_initial.py:34
 #: legal/migrations/0001_initial.py:34
 msgid "If terms of service are located on other page, enter there its link."
 msgid "If terms of service are located on other page, enter there its link."
 msgstr ""
 msgstr ""
-"Если условия сервиса не размещаются на другой странице, введите там их "
-"ссылку."
+"Если условия сервиса размещаются на другой странице, введите там их ссылку."
 
 
 #: legal/migrations/0001_initial.py:44
 #: legal/migrations/0001_initial.py:44
 msgid "Terms contents"
 msgid "Terms contents"

BIN
misago/locale/ru/LC_MESSAGES/djangojs.mo


+ 71 - 30
misago/locale/ru/LC_MESSAGES/djangojs.po

@@ -10,7 +10,7 @@ msgstr ""
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2017-10-20 23:08+0200\n"
 "POT-Creation-Date: 2017-10-20 23:08+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: Katrin Kutepova <blackkatelv@gmail.com>, 2018\n"
+"Last-Translator: Roman Patsev <rpatsev@gmail.com>, 2018\n"
 "Language-Team: Russian (https://www.transifex.com/misago/teams/65369/ru/)\n"
 "Language-Team: Russian (https://www.transifex.com/misago/teams/65369/ru/)\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"
@@ -225,7 +225,7 @@ msgstr "Завершено %(progress)s %"
 
 
 #: static/misago/js/misago.js:2
 #: static/misago/js/misago.js:2
 msgid "No profile details are editable at this time."
 msgid "No profile details are editable at this time."
-msgstr ""
+msgstr "В данный момент редактирование данных профиля недоступно."
 
 
 #: static/misago/js/misago.js:2
 #: static/misago/js/misago.js:2
 msgid "This option is currently unavailable."
 msgid "This option is currently unavailable."
@@ -394,17 +394,24 @@ msgstr "Поиск"
 msgid "See full \"%(provider)s\" results page with %(count)s result."
 msgid "See full \"%(provider)s\" results page with %(count)s result."
 msgid_plural "See full \"%(provider)s\" results page with %(count)s results."
 msgid_plural "See full \"%(provider)s\" results page with %(count)s results."
 msgstr[0] ""
 msgstr[0] ""
+"Показать полные результаты \"%(provider)s\", содержащие %(count)s результат."
 msgstr[1] ""
 msgstr[1] ""
+"Показать полные результаты \"%(provider)s\", содержащие %(count)s "
+"результата."
 msgstr[2] ""
 msgstr[2] ""
+"Показать полные результаты \"%(provider)s\", содержащие %(count)s "
+"результатов."
 msgstr[3] ""
 msgstr[3] ""
+"Показать полные результаты \"%(provider)s\", содержащие %(count)s "
+"результатов."
 
 
 #: static/misago/js/misago.js:4
 #: static/misago/js/misago.js:4
 msgid "Posted by %(poster)s on %(posted_on)s in %(category)s."
 msgid "Posted by %(poster)s on %(posted_on)s in %(category)s."
-msgstr ""
+msgstr "Опубликовано %(poster)s%(posted_on)sв категории \"%(category)s\"."
 
 
 #: static/misago/js/misago.js:4
 #: static/misago/js/misago.js:4
 msgid "%(title)s, joined on %(joined_on)s"
 msgid "%(title)s, joined on %(joined_on)s"
-msgstr ""
+msgstr "%(title)s, присоединился %(joined_on)s"
 
 
 #: static/misago/js/misago.js:4 static/misago/js/misago.js:12
 #: static/misago/js/misago.js:4 static/misago/js/misago.js:12
 msgid "Change username"
 msgid "Change username"
@@ -832,10 +839,10 @@ msgstr "Вы не можете выбрать больше вариантов."
 #: static/misago/js/misago.js:6
 #: static/misago/js/misago.js:6
 msgid "You can select %(choices)s more choice."
 msgid "You can select %(choices)s more choice."
 msgid_plural "You can select %(choices)s more choices."
 msgid_plural "You can select %(choices)s more choices."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
+msgstr[0] "Вы можете выбрать ещё %(choices)s вариант."
+msgstr[1] "Вы можете выбрать ещё %(choices)sварианта."
+msgstr[2] "Вы можете выбрать ещё %(choices)s вариантов."
+msgstr[3] "Вы можете выбрать ещё %(choices)s вариантов."
 
 
 #: static/misago/js/misago.js:6
 #: static/misago/js/misago.js:6
 msgid "You can change your vote later."
 msgid "You can change your vote later."
@@ -920,10 +927,10 @@ msgstr "Нравиться сообщений"
 #: static/misago/js/misago.js:7
 #: static/misago/js/misago.js:7
 msgid "%(likes)s like"
 msgid "%(likes)s like"
 msgid_plural "%(likes)s likes"
 msgid_plural "%(likes)s likes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
+msgstr[0] "%(likes)s лайк"
+msgstr[1] "%(likes)s лайка"
+msgstr[2] "%(likes)s лайков"
+msgstr[3] "%(likes)s лайков"
 
 
 #: static/misago/js/misago.js:7
 #: static/misago/js/misago.js:7
 msgid "No users have liked this post."
 msgid "No users have liked this post."
@@ -1032,9 +1039,17 @@ msgid_plural ""
 "Thread title should be at least %(limit_value)s characters long (it has "
 "Thread title should be at least %(limit_value)s characters long (it has "
 "%(show_value)s)."
 "%(show_value)s)."
 msgstr[0] ""
 msgstr[0] ""
+"Название темы должно быть не короче %(limit_value)s символа (сейчас "
+"%(show_value)s)."
 msgstr[1] ""
 msgstr[1] ""
+"Название темы должно быть не короче %(limit_value)s символов (сейчас "
+"%(show_value)s)."
 msgstr[2] ""
 msgstr[2] ""
+"Название темы должно быть не короче %(limit_value)s символов (сейчас "
+"%(show_value)s)."
 msgstr[3] ""
 msgstr[3] ""
+"Название темы должно быть не короче %(limit_value)s символов (сейчас "
+"%(show_value)s)."
 
 
 #: static/misago/js/misago.js:8
 #: static/misago/js/misago.js:8
 msgid ""
 msgid ""
@@ -1044,9 +1059,17 @@ msgid_plural ""
 "Thread title cannot be longer than %(limit_value)s characters (it has "
 "Thread title cannot be longer than %(limit_value)s characters (it has "
 "%(show_value)s)."
 "%(show_value)s)."
 msgstr[0] ""
 msgstr[0] ""
+"Название темы не должно быть длиннее %(limit_value)s символа (сейчас "
+"%(show_value)s)."
 msgstr[1] ""
 msgstr[1] ""
+"Название темы не должно быть длиннее %(limit_value)s символов (сейчас "
+"%(show_value)s)."
 msgstr[2] ""
 msgstr[2] ""
+"Название темы не должно быть длиннее %(limit_value)s символов (сейчас "
+"%(show_value)s)."
 msgstr[3] ""
 msgstr[3] ""
+"Название темы не должно быть длиннее %(limit_value)s символов (сейчас "
+"%(show_value)s)."
 
 
 #: static/misago/js/misago.js:8
 #: static/misago/js/misago.js:8
 msgid ""
 msgid ""
@@ -1056,9 +1079,17 @@ msgid_plural ""
 "Posted message should be at least %(limit_value)s characters long (it has "
 "Posted message should be at least %(limit_value)s characters long (it has "
 "%(show_value)s)."
 "%(show_value)s)."
 msgstr[0] ""
 msgstr[0] ""
+"Сообщение должно быть не короче %(limit_value)s символа (сейчас "
+"%(show_value)s)."
 msgstr[1] ""
 msgstr[1] ""
+"Сообщение должно быть не короче %(limit_value)s символов (сейчас "
+"%(show_value)s)."
 msgstr[2] ""
 msgstr[2] ""
+"Сообщение должно быть не короче %(limit_value)s символов (сейчас "
+"%(show_value)s)."
 msgstr[3] ""
 msgstr[3] ""
+"Сообщение должно быть не короче %(limit_value)s символов (сейчас "
+"%(show_value)s)."
 
 
 #: static/misago/js/misago.js:8
 #: static/misago/js/misago.js:8
 msgid ""
 msgid ""
@@ -1068,9 +1099,17 @@ msgid_plural ""
 "Posted message cannot be longer than %(limit_value)s characters (it has "
 "Posted message cannot be longer than %(limit_value)s characters (it has "
 "%(show_value)s)."
 "%(show_value)s)."
 msgstr[0] ""
 msgstr[0] ""
+"Сообщение не должно быть длиннее %(limit_value)s символа (сейчас "
+"%(show_value)s)."
 msgstr[1] ""
 msgstr[1] ""
+"Сообщение не должно быть длиннее %(limit_value)s символов (сейчас "
+"%(show_value)s)."
 msgstr[2] ""
 msgstr[2] ""
+"Сообщение не должно быть длиннее %(limit_value)s символов (сейчас "
+"%(show_value)s)."
 msgstr[3] ""
 msgstr[3] ""
+"Сообщение не должно быть длиннее %(limit_value)s символов (сейчас "
+"%(show_value)s)."
 
 
 #: static/misago/js/misago.js:8 static/misago/js/misago.js:9
 #: static/misago/js/misago.js:8 static/misago/js/misago.js:9
 #: static/misago/js/misago.js:15
 #: static/misago/js/misago.js:15
@@ -1093,7 +1132,7 @@ msgstr "Событие было удалено."
 
 
 #: static/misago/js/misago.js:9
 #: static/misago/js/misago.js:9
 msgid "Hidden by %(event_by)s %(event_on)s."
 msgid "Hidden by %(event_by)s %(event_on)s."
-msgstr ""
+msgstr "Скрыто %(event_by)s %(event_on)s."
 
 
 #: static/misago/js/misago.js:9
 #: static/misago/js/misago.js:9
 msgid "By %(event_by)s %(event_on)s."
 msgid "By %(event_by)s %(event_on)s."
@@ -1362,10 +1401,10 @@ msgstr "защищено"
 #: static/misago/js/misago.js:10
 #: static/misago/js/misago.js:10
 msgid "edited %(edits)s time"
 msgid "edited %(edits)s time"
 msgid_plural "edited %(edits)s times"
 msgid_plural "edited %(edits)s times"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
+msgstr[0] "отредактировано %(edits)s раз"
+msgstr[1] "отредактировано %(edits)s раза"
+msgstr[2] "отредактировано %(edits)s раз"
+msgstr[3] "отредактировано %(edits)s раз"
 
 
 #: static/misago/js/misago.js:10
 #: static/misago/js/misago.js:10
 msgid "%(edits)s edit"
 msgid "%(edits)s edit"
@@ -1389,7 +1428,7 @@ msgstr "Сообщение о блокировке для команды"
 
 
 #: static/misago/js/misago.js:11
 #: static/misago/js/misago.js:11
 msgid "%(username)s's ban is permanent."
 msgid "%(username)s's ban is permanent."
-msgstr ""
+msgstr "Блокировка %(username)s постоянна."
 
 
 #: static/misago/js/misago.js:11
 #: static/misago/js/misago.js:11
 msgid "Ban expiration"
 msgid "Ban expiration"
@@ -1405,7 +1444,7 @@ msgstr "Вы не поделились информацией о себе с д
 
 
 #: static/misago/js/misago.js:11
 #: static/misago/js/misago.js:11
 msgid "%(username)s is not sharing any details with others."
 msgid "%(username)s is not sharing any details with others."
-msgstr ""
+msgstr "%(username)s не поделился никакими деталями с другими."
 
 
 #: static/misago/js/misago.js:11
 #: static/misago/js/misago.js:11
 msgid "Details"
 msgid "Details"
@@ -1413,7 +1452,7 @@ msgstr "Детали"
 
 
 #: static/misago/js/misago.js:11
 #: static/misago/js/misago.js:11
 msgid "%(username)s's details have been updated."
 msgid "%(username)s's details have been updated."
-msgstr ""
+msgstr "%(username)sличные данные обновлены."
 
 
 #: static/misago/js/misago.js:11
 #: static/misago/js/misago.js:11
 msgid "You have no started threads."
 msgid "You have no started threads."
@@ -1421,7 +1460,7 @@ msgstr "У вас нет начатых тем."
 
 
 #: static/misago/js/misago.js:11
 #: static/misago/js/misago.js:11
 msgid "%(username)s started no threads."
 msgid "%(username)s started no threads."
-msgstr ""
+msgstr "У %(username)s нет начатых тем."
 
 
 #: static/misago/js/misago.js:11
 #: static/misago/js/misago.js:11
 msgid "You have started %(threads)s thread."
 msgid "You have started %(threads)s thread."
@@ -1454,7 +1493,7 @@ msgstr "Вы не написали сообщений."
 
 
 #: static/misago/js/misago.js:11
 #: static/misago/js/misago.js:11
 msgid "%(username)s posted no messages."
 msgid "%(username)s posted no messages."
-msgstr ""
+msgstr "У %(username)s нет опубликованных сообщений."
 
 
 #: static/misago/js/misago.js:11
 #: static/misago/js/misago.js:11
 msgid "You have posted %(posts)s message."
 msgid "You have posted %(posts)s message."
@@ -1539,10 +1578,10 @@ msgstr "Подписан"
 #: static/misago/js/misago.js:11
 #: static/misago/js/misago.js:11
 msgid "You are following %(users)s user."
 msgid "You are following %(users)s user."
 msgid_plural "You are following %(users)s users."
 msgid_plural "You are following %(users)s users."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
+msgstr[0] "Вы подписаны на %(users)s пользователей."
+msgstr[1] "Вы подписаны на %(users)s пользователей."
+msgstr[2] "Вы подписаны на %(users)s пользователей."
+msgstr[3] "Вы подписаны на %(users)s пользователей."
 
 
 #: static/misago/js/misago.js:11
 #: static/misago/js/misago.js:11
 msgid "%(username)s is following %(users)s user."
 msgid "%(username)s is following %(users)s user."
@@ -1661,7 +1700,7 @@ msgstr "Удалить с аккаунтом пользователя"
 
 
 #: static/misago/js/misago.js:12
 #: static/misago/js/misago.js:12
 msgid "Hide after deleting user's account"
 msgid "Hide after deleting user's account"
-msgstr ""
+msgstr "Скрыть после удаления аккаунта пользователя."
 
 
 #: static/misago/js/misago.js:12
 #: static/misago/js/misago.js:12
 msgid "Return to users list"
 msgid "Return to users list"
@@ -1841,7 +1880,7 @@ msgstr "Войти"
 
 
 #: static/misago/js/misago.js:13
 #: static/misago/js/misago.js:13
 msgid "You have to enter search query."
 msgid "You have to enter search query."
-msgstr ""
+msgstr "Вы дожны ввести поисковый запрос."
 
 
 #: static/misago/js/misago.js:13
 #: static/misago/js/misago.js:13
 msgid "Search took %(time)s s to complete"
 msgid "Search took %(time)s s to complete"
@@ -2451,7 +2490,7 @@ msgstr ""
 
 
 #: static/misago/js/misago.js:21
 #: static/misago/js/misago.js:21
 msgid "There are no users with this rank at the moment."
 msgid "There are no users with this rank at the moment."
-msgstr ""
+msgstr "В данный момент нет пользователей с таким рейтингом."
 
 
 #: static/misago/js/misago.js:21
 #: static/misago/js/misago.js:21
 msgid "yes"
 msgid "yes"
@@ -2485,7 +2524,7 @@ msgstr "Произошла неизвестная ошибка."
 
 
 #: static/misago/js/misago.js:23
 #: static/misago/js/misago.js:23
 msgid "Upload was rejected by server as too large."
 msgid "Upload was rejected by server as too large."
-msgstr ""
+msgstr "Загрузка на сервер была отклонена из-за превышения объема файла."
 
 
 #: static/misago/js/misago.js:23
 #: static/misago/js/misago.js:23
 msgid "Failed to load CAPTCHA."
 msgid "Failed to load CAPTCHA."
@@ -2498,6 +2537,8 @@ msgstr "Пожалуйста, решите простой тест"
 #: static/misago/js/misago.js:23
 #: static/misago/js/misago.js:23
 msgid "This test helps us prevent automated spam registrations on our site."
 msgid "This test helps us prevent automated spam registrations on our site."
 msgstr ""
 msgstr ""
+"Этот тест помогает нам предотвратить автоматическую спам регистрацию на "
+"нашем сайте."
 
 
 #: static/misago/js/misago.js:23
 #: static/misago/js/misago.js:23
 msgid "page: %(page)s"
 msgid "page: %(page)s"

+ 0 - 0
misago/locale/tr_TR/LC_MESSAGES/django.mo → misago/locale/tr/LC_MESSAGES/django.mo


+ 0 - 0
misago/locale/tr_TR/LC_MESSAGES/django.po → misago/locale/tr/LC_MESSAGES/django.po


+ 0 - 0
misago/locale/tr_TR/LC_MESSAGES/djangojs.mo → misago/locale/tr/LC_MESSAGES/djangojs.mo


+ 0 - 0
misago/locale/tr_TR/LC_MESSAGES/djangojs.po → misago/locale/tr/LC_MESSAGES/djangojs.po


+ 2 - 4
misago/threads/tests/test_threadslists.py

@@ -481,7 +481,7 @@ class CategoryThreadsListTests(ThreadsListTestCase):
             override_acl(
             override_acl(
                 self.user, {
                 self.user, {
                     'visible_categories': [test_category.pk],
                     'visible_categories': [test_category.pk],
-                    'browseable_categories': [test_category.pk],
+                    'browseable_categories': [],
                     'categories': {
                     'categories': {
                         test_category.pk: {
                         test_category.pk: {
                             'can_see': 1,
                             'can_see': 1,
@@ -490,14 +490,13 @@ class CategoryThreadsListTests(ThreadsListTestCase):
                     },
                     },
                 }
                 }
             )
             )
-
             response = self.client.get(test_category.get_absolute_url() + url)
             response = self.client.get(test_category.get_absolute_url() + url)
             self.assertEqual(response.status_code, 403)
             self.assertEqual(response.status_code, 403)
 
 
             override_acl(
             override_acl(
                 self.user, {
                 self.user, {
                     'visible_categories': [test_category.pk],
                     'visible_categories': [test_category.pk],
-                    'browseable_categories': [test_category.pk],
+                    'browseable_categories': [],
                     'categories': {
                     'categories': {
                         test_category.pk: {
                         test_category.pk: {
                             'can_see': 1,
                             'can_see': 1,
@@ -506,7 +505,6 @@ class CategoryThreadsListTests(ThreadsListTestCase):
                     },
                     },
                 }
                 }
             )
             )
-
             response = self.client.get(
             response = self.client.get(
                 '%s?category=%s&list=%s' % (self.api_link, test_category.pk, url.strip('/'), )
                 '%s?category=%s&list=%s' % (self.api_link, test_category.pk, url.strip('/'), )
             )
             )

+ 2 - 2
misago/threads/viewmodels/category.py

@@ -51,7 +51,7 @@ class ThreadsRootCategory(ViewModel):
     def get_categories(self, request):
     def get_categories(self, request):
         return [Category.objects.root_category()] + list(
         return [Category.objects.root_category()] + list(
             Category.objects.all_categories().filter(
             Category.objects.all_categories().filter(
-                id__in=request.user.acl_cache['browseable_categories'],
+                id__in=request.user.acl_cache['visible_categories'],
             ).select_related('parent')
             ).select_related('parent')
         )
         )
 
 
@@ -65,7 +65,7 @@ class ThreadsCategory(ThreadsRootCategory):
         for category in categories:
         for category in categories:
             if category.pk == int(kwargs['pk']):
             if category.pk == int(kwargs['pk']):
                 if not category.special_role:
                 if not category.special_role:
-                    # don't check permissions for non-special category
+                    # check permissions for non-special categories
                     allow_see_category(request.user, category)
                     allow_see_category(request.user, category)
                     allow_browse_category(request.user, category)
                     allow_browse_category(request.user, category)
 
 

+ 4 - 0
misago/users/decorators.py

@@ -1,4 +1,6 @@
+from django.conf import settings
 from django.core.exceptions import PermissionDenied
 from django.core.exceptions import PermissionDenied
+from django.shortcuts import redirect
 from django.utils.translation import ugettext as _
 from django.utils.translation import ugettext as _
 
 
 from misago.core.exceptions import Banned
 from misago.core.exceptions import Banned
@@ -20,6 +22,8 @@ def deny_authenticated(f):
 def deny_guests(f):
 def deny_guests(f):
     def decorator(request, *args, **kwargs):
     def decorator(request, *args, **kwargs):
         if request.user.is_anonymous:
         if request.user.is_anonymous:
+            if request.GET.get('ref') == 'login':
+                return redirect(settings.LOGIN_REDIRECT_URL)
             raise PermissionDenied(_("You have to sign in to access this page."))
             raise PermissionDenied(_("You have to sign in to access this page."))
         else:
         else:
             return f(request, *args, **kwargs)
             return f(request, *args, **kwargs)

+ 1 - 1
misago/users/tests/test_auth_views.py

@@ -28,7 +28,7 @@ class AuthViewsTests(TestCase):
         )
         )
 
 
         self.assertEqual(response.status_code, 302)
         self.assertEqual(response.status_code, 302)
-        self.assertEqual(response['location'], '/redirect/')
+        self.assertEqual(response['location'], '/redirect/?ref=login')
 
 
         # invalid redirect (redirects to other site)
         # invalid redirect (redirects to other site)
         response = self.client.post(
         response = self.client.post(

+ 6 - 0
misago/users/tests/test_decorators.py

@@ -32,6 +32,12 @@ class DenyGuestsTests(UserTestCase):
         response = self.client.post(reverse('misago:options'))
         response = self.client.post(reverse('misago:options'))
         self.assertEqual(response.status_code, 403)
         self.assertEqual(response.status_code, 403)
 
 
+    def test_ref_login(self):
+        """deny_guests decorator redirected guest request to homepage if ref=login"""
+        response = self.client.post('{}?ref=login'.format(reverse('misago:options')))
+        self.assertEqual(response.status_code, 302)
+        self.assertEqual(response['location'], reverse('misago:index'))
+
 
 
 class DenyBannedIPTests(UserTestCase):
 class DenyBannedIPTests(UserTestCase):
     def test_success(self):
     def test_success(self):

+ 16 - 4
misago/users/tests/test_useradmin_views.py

@@ -209,16 +209,26 @@ class UserAdminViewsTests(AdminTestCase):
 
 
     def test_mass_delete_accounts(self):
     def test_mass_delete_accounts(self):
         """users list deletes users"""
         """users list deletes users"""
+        # create 10 users to delete
         user_pks = []
         user_pks = []
         for i in range(10):
         for i in range(10):
             test_user = UserModel.objects.create_user(
             test_user = UserModel.objects.create_user(
                 'Bob%s' % i,
                 'Bob%s' % i,
                 'bob%s@test.com' % i,
                 'bob%s@test.com' % i,
                 'pass123',
                 'pass123',
-                requires_activation=1,
+                requires_activation=0,
             )
             )
             user_pks.append(test_user.pk)
             user_pks.append(test_user.pk)
 
 
+        # create 10 more users that won't be deleted
+        for i in range(10):
+            test_user = UserModel.objects.create_user(
+                'Weebl%s' % i,
+                'weebl%s@test.com' % i,
+                'pass123',
+                requires_activation=0,
+            )
+
         response = self.client.post(
         response = self.client.post(
             reverse('misago:admin:users:accounts:index'),
             reverse('misago:admin:users:accounts:index'),
             data={
             data={
@@ -227,7 +237,7 @@ class UserAdminViewsTests(AdminTestCase):
             }
             }
         )
         )
         self.assertEqual(response.status_code, 302)
         self.assertEqual(response.status_code, 302)
-        self.assertEqual(UserModel.objects.count(), 1)
+        self.assertEqual(UserModel.objects.count(), 11)
 
 
     def test_mass_delete_all_self(self):
     def test_mass_delete_all_self(self):
         """its impossible to delete oneself with content"""
         """its impossible to delete oneself with content"""
@@ -304,7 +314,7 @@ class UserAdminViewsTests(AdminTestCase):
         self.assertEqual(UserModel.objects.count(), 11)
         self.assertEqual(UserModel.objects.count(), 11)
 
 
     def test_mass_delete_all(self):
     def test_mass_delete_all(self):
-        """users list deletes users and their content"""
+        """users list mass deleting view has no showstoppers"""
         user_pks = []
         user_pks = []
         for i in range(10):
         for i in range(10):
             test_user = UserModel.objects.create_user(
             test_user = UserModel.objects.create_user(
@@ -323,7 +333,9 @@ class UserAdminViewsTests(AdminTestCase):
             }
             }
         )
         )
         self.assertEqual(response.status_code, 200)
         self.assertEqual(response.status_code, 200)
-        self.assertEqual(UserModel.objects.count(), 11) # no user has been deleted
+         # asser that no user has been deleted, because actuall deleting happens in
+         # dedicated views called via ajax from JavaScript
+        self.assertEqual(UserModel.objects.count(), 11)
 
 
     def test_new_view(self):
     def test_new_view(self):
         """new user view creates account"""
         """new user view creates account"""

+ 5 - 0
misago/users/views/auth.py

@@ -23,6 +23,11 @@ def login(request):
             )
             )
             if is_redirect_safe:
             if is_redirect_safe:
                 redirect_to_path = urlparse(redirect_to).path
                 redirect_to_path = urlparse(redirect_to).path
+                if '?' not in redirect_to_path:
+                    redirect_to_path = '{}?'.format(redirect_to_path)
+                else:
+                    redirect_to_path = '{}&'.format(redirect_to_path)
+                redirect_to_path = '{}ref=login'.format(redirect_to_path)
                 try:
                 try:
                     return redirect(redirect_to_path)
                     return redirect(redirect_to_path)
                 except NoReverseMatch:
                 except NoReverseMatch: