Merge photologue_custom into photologue
This commit is contained in:
parent
8beedb3626
commit
d865a6eb1f
36 changed files with 549 additions and 566 deletions
|
|
@ -8,7 +8,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-01-29 21:58+0000\n"
|
||||
"POT-Creation-Date: 2022-01-30 09:55+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
|
@ -40,19 +40,19 @@ msgstr ""
|
|||
msgid "hash"
|
||||
msgstr ""
|
||||
|
||||
#: photo21/settings.py:162
|
||||
#: photo21/settings.py:161
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: photo21/settings.py:163
|
||||
#: photo21/settings.py:162
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: photo21/settings.py:164
|
||||
#: photo21/settings.py:163
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: photo21/settings.py:165
|
||||
#: photo21/settings.py:164
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -199,6 +199,16 @@ msgstr ""
|
|||
msgid "If any problem, please contact the server owners at"
|
||||
msgstr ""
|
||||
|
||||
#: photo21/templates/account/logout.html:6
|
||||
#: photo21/templates/account/logout.html:11
|
||||
#: photo21/templates/account/logout.html:20
|
||||
msgid "Sign Out"
|
||||
msgstr ""
|
||||
|
||||
#: photo21/templates/account/logout.html:14
|
||||
msgid "Are you sure you want to sign out?"
|
||||
msgstr ""
|
||||
|
||||
#: photo21/templates/account/signup.html:6
|
||||
msgid "Signup"
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-01-29 21:58+0000\n"
|
||||
"POT-Creation-Date: 2022-01-30 09:55+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
|
@ -39,19 +39,19 @@ msgstr ""
|
|||
msgid "hash"
|
||||
msgstr ""
|
||||
|
||||
#: photo21/settings.py:162
|
||||
#: photo21/settings.py:161
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: photo21/settings.py:163
|
||||
#: photo21/settings.py:162
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: photo21/settings.py:164
|
||||
#: photo21/settings.py:163
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: photo21/settings.py:165
|
||||
#: photo21/settings.py:164
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -198,6 +198,16 @@ msgstr ""
|
|||
msgid "If any problem, please contact the server owners at"
|
||||
msgstr ""
|
||||
|
||||
#: photo21/templates/account/logout.html:6
|
||||
#: photo21/templates/account/logout.html:11
|
||||
#: photo21/templates/account/logout.html:20
|
||||
msgid "Sign Out"
|
||||
msgstr ""
|
||||
|
||||
#: photo21/templates/account/logout.html:14
|
||||
msgid "Are you sure you want to sign out?"
|
||||
msgstr ""
|
||||
|
||||
#: photo21/templates/account/signup.html:6
|
||||
msgid "Signup"
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-01-30 07:09+0000\n"
|
||||
"POT-Creation-Date: 2022-01-30 10:06+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
|
@ -42,19 +42,19 @@ msgstr ""
|
|||
msgid "hash"
|
||||
msgstr ""
|
||||
|
||||
#: photo21/settings.py:162
|
||||
#: photo21/settings.py:160
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: photo21/settings.py:163
|
||||
#: photo21/settings.py:161
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: photo21/settings.py:164
|
||||
#: photo21/settings.py:162
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: photo21/settings.py:165
|
||||
#: photo21/settings.py:163
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -206,6 +206,18 @@ msgstr ""
|
|||
msgid "If any problem, please contact the server owners at"
|
||||
msgstr "En cas de problème, contactez les administrateurs à"
|
||||
|
||||
#: photo21/templates/account/logout.html:6
|
||||
#: photo21/templates/account/logout.html:11
|
||||
#: photo21/templates/account/logout.html:20
|
||||
#, fuzzy
|
||||
#| msgid "Sign up"
|
||||
msgid "Sign Out"
|
||||
msgstr "Inscription"
|
||||
|
||||
#: photo21/templates/account/logout.html:14
|
||||
msgid "Are you sure you want to sign out?"
|
||||
msgstr ""
|
||||
|
||||
#: photo21/templates/account/signup.html:6
|
||||
msgid "Signup"
|
||||
msgstr ""
|
||||
|
|
@ -333,48 +345,3 @@ msgstr ""
|
|||
#: photo21/templates/socialaccount/connections.html:54
|
||||
msgid "Add a 3rd Party Account"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "owner"
|
||||
#~ msgstr "propriétaire"
|
||||
|
||||
#~ msgid "Gallery"
|
||||
#~ msgstr "Galerie"
|
||||
|
||||
#~ msgid "-- Create a new gallery --"
|
||||
#~ msgstr "-- Créer une nouvelle galerie --"
|
||||
|
||||
#~ msgid "New gallery title"
|
||||
#~ msgstr "Titre de la nouvelle galerie"
|
||||
|
||||
#~ msgid "New gallery event start date"
|
||||
#~ msgstr "Date de début de l'évènement de la nouvelle galerie"
|
||||
|
||||
#~ msgid "New gallery event end date"
|
||||
#~ msgstr "Date de fin de l'évènement de la nouvelle galerie"
|
||||
|
||||
#~ msgid "New gallery tags"
|
||||
#~ msgstr "Tags de la nouvelle galerie"
|
||||
|
||||
#~ msgid "start date"
|
||||
#~ msgstr "date de début"
|
||||
|
||||
#~ msgid "end date"
|
||||
#~ msgstr "date de fin"
|
||||
|
||||
#~ msgid "license"
|
||||
#~ msgstr "licence"
|
||||
|
||||
#~ msgid "to"
|
||||
#~ msgstr "au"
|
||||
|
||||
#~ msgid "All pictures"
|
||||
#~ msgstr "Toutes les photos"
|
||||
|
||||
#~ msgid "Download all gallery"
|
||||
#~ msgstr "Télécharger toute la galerie"
|
||||
|
||||
#~ msgid "Drag and drop photos here"
|
||||
#~ msgstr "Glissez et déposez les photos ici"
|
||||
|
||||
#~ msgid "Owner will be"
|
||||
#~ msgstr "Le propriétaire sera"
|
||||
|
|
|
|||
|
|
@ -62,7 +62,6 @@ INSTALLED_APPS = [
|
|||
'allauth.socialaccount',
|
||||
'allauth_note_kfet',
|
||||
'crispy_forms',
|
||||
'photologue_custom',
|
||||
'photologue',
|
||||
'taggit',
|
||||
]
|
||||
|
|
|
|||
|
|
@ -5,7 +5,8 @@ from crispy_forms.layout import Div, Layout, Submit
|
|||
from django import forms
|
||||
from django.utils.text import slugify
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from photologue.models import Gallery, Tag
|
||||
|
||||
from .models import Gallery, Tag
|
||||
|
||||
|
||||
class UploadForm(forms.Form):
|
||||
|
|
@ -11,7 +11,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: Photologue\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-01-30 07:09+0000\n"
|
||||
"POT-Creation-Date: 2022-01-30 09:55+0000\n"
|
||||
"PO-Revision-Date: 2017-12-03 14:47+0000\n"
|
||||
"Last-Translator: Richard Barran <richard@arbee-design.co.uk>\n"
|
||||
"Language-Team: German (http://www.transifex.com/richardbarran/django-"
|
||||
|
|
@ -22,75 +22,79 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: photologue/models.py:86
|
||||
#: photologue/admin.py:30 photologue/models.py:499
|
||||
msgid "owner"
|
||||
msgstr ""
|
||||
|
||||
#: photologue/models.py:84
|
||||
msgid "Very Low"
|
||||
msgstr "Sehr niedrig"
|
||||
|
||||
#: photologue/models.py:87
|
||||
#: photologue/models.py:85
|
||||
msgid "Low"
|
||||
msgstr "Niedrig"
|
||||
|
||||
#: photologue/models.py:88
|
||||
#: photologue/models.py:86
|
||||
msgid "Medium-Low"
|
||||
msgstr "Mittel-niedrig"
|
||||
|
||||
#: photologue/models.py:89
|
||||
#: photologue/models.py:87
|
||||
msgid "Medium"
|
||||
msgstr "Mittel"
|
||||
|
||||
#: photologue/models.py:90
|
||||
#: photologue/models.py:88
|
||||
msgid "Medium-High"
|
||||
msgstr "Mittel-hoch"
|
||||
|
||||
#: photologue/models.py:91
|
||||
#: photologue/models.py:89
|
||||
msgid "High"
|
||||
msgstr "Hoch"
|
||||
|
||||
#: photologue/models.py:92
|
||||
#: photologue/models.py:90
|
||||
msgid "Very High"
|
||||
msgstr "Sehr hoch"
|
||||
|
||||
#: photologue/models.py:97
|
||||
#: photologue/models.py:95
|
||||
msgid "Top"
|
||||
msgstr "Oben"
|
||||
|
||||
#: photologue/models.py:98
|
||||
#: photologue/models.py:96
|
||||
msgid "Right"
|
||||
msgstr "Rechts"
|
||||
|
||||
#: photologue/models.py:99
|
||||
#: photologue/models.py:97
|
||||
msgid "Bottom"
|
||||
msgstr "Unten"
|
||||
|
||||
#: photologue/models.py:100
|
||||
#: photologue/models.py:98
|
||||
msgid "Left"
|
||||
msgstr "Links"
|
||||
|
||||
#: photologue/models.py:101
|
||||
#: photologue/models.py:99
|
||||
msgid "Center (Default)"
|
||||
msgstr "Mitte (Standard)"
|
||||
|
||||
#: photologue/models.py:105
|
||||
#: photologue/models.py:103
|
||||
msgid "Flip left to right"
|
||||
msgstr "Horizontal spiegeln"
|
||||
|
||||
#: photologue/models.py:106
|
||||
#: photologue/models.py:104
|
||||
msgid "Flip top to bottom"
|
||||
msgstr "Vertikal spiegeln"
|
||||
|
||||
#: photologue/models.py:107
|
||||
#: photologue/models.py:105
|
||||
msgid "Rotate 90 degrees counter-clockwise"
|
||||
msgstr "Um 90° nach links drehen"
|
||||
|
||||
#: photologue/models.py:108
|
||||
#: photologue/models.py:106
|
||||
msgid "Rotate 90 degrees clockwise"
|
||||
msgstr "Um 90° nach rechts drehen"
|
||||
|
||||
#: photologue/models.py:109
|
||||
#: photologue/models.py:107
|
||||
msgid "Rotate 180 degrees"
|
||||
msgstr "Um 180° drehen"
|
||||
|
||||
#: photologue/models.py:119
|
||||
#: photologue/models.py:117
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Chain multiple filters using the following pattern \"FILTER_ONE->FILTER_TWO-"
|
||||
|
|
@ -101,106 +105,122 @@ msgstr ""
|
|||
"\". Bildfilter werden nach der Reihe angewendet. Folgende Filter sind "
|
||||
"verfügbar: %s."
|
||||
|
||||
#: photologue/models.py:141
|
||||
#: photologue/models.py:139
|
||||
msgid "date published"
|
||||
msgstr "Veröffentlichungsdatum"
|
||||
|
||||
#: photologue/models.py:143 photologue/models.py:474
|
||||
#: photologue/models.py:141 photologue/models.py:485
|
||||
msgid "title"
|
||||
msgstr "Titel"
|
||||
|
||||
#: photologue/models.py:146
|
||||
#: photologue/models.py:144
|
||||
msgid "title slug"
|
||||
msgstr "Kurztitel"
|
||||
|
||||
#: photologue/models.py:149 photologue/models.py:480
|
||||
#: photologue/models.py:147 photologue/models.py:491 photologue/models.py:697
|
||||
msgid "A \"slug\" is a unique URL-friendly title for an object."
|
||||
msgstr ""
|
||||
"Ein Kurztitel (\"slug\") ist ein eindeutiger, URL-geeigneter Titel für ein "
|
||||
"Objekt."
|
||||
|
||||
#: photologue/models.py:150
|
||||
msgid "start date"
|
||||
msgstr ""
|
||||
|
||||
#: photologue/models.py:155
|
||||
msgid "end date"
|
||||
msgstr ""
|
||||
|
||||
#: photologue/models.py:157
|
||||
msgid "description"
|
||||
msgstr "Beschreibung"
|
||||
|
||||
#: photologue/models.py:152 photologue/models.py:485
|
||||
#: photologue/models.py:162 photologue/models.py:703
|
||||
msgid "tags"
|
||||
msgstr ""
|
||||
|
||||
#: photologue/models.py:165 photologue/models.py:506
|
||||
msgid "is public"
|
||||
msgstr "ist öffentlich"
|
||||
|
||||
#: photologue/models.py:154
|
||||
#: photologue/models.py:167
|
||||
msgid "Public galleries will be displayed in the default views."
|
||||
msgstr "Öffentliche Galerien werden in den Standard-Views angezeigt."
|
||||
|
||||
#: photologue/models.py:158 photologue/models.py:495
|
||||
#: photologue/models.py:171 photologue/models.py:514
|
||||
msgid "photos"
|
||||
msgstr "Fotos"
|
||||
|
||||
#: photologue/models.py:166
|
||||
#: photologue/models.py:177
|
||||
msgid "gallery"
|
||||
msgstr "Galerie"
|
||||
|
||||
#: photologue/models.py:167
|
||||
#: photologue/models.py:178
|
||||
msgid "galleries"
|
||||
msgstr "Galerien"
|
||||
|
||||
#: photologue/models.py:202
|
||||
#: photologue/models.py:213
|
||||
msgid "count"
|
||||
msgstr "Anzahl"
|
||||
|
||||
#: photologue/models.py:210
|
||||
#: photologue/models.py:221
|
||||
msgid "image"
|
||||
msgstr "Bild"
|
||||
|
||||
#: photologue/models.py:213
|
||||
#: photologue/models.py:224
|
||||
msgid "date taken"
|
||||
msgstr "Aufnahmedatum"
|
||||
|
||||
#: photologue/models.py:216
|
||||
#: photologue/models.py:227
|
||||
msgid "Date image was taken; is obtained from the image EXIF data."
|
||||
msgstr ""
|
||||
"Datum, an dem das Foto geschossen wurde; ausgelesen aus den EXIF-Daten."
|
||||
|
||||
#: photologue/models.py:217
|
||||
#: photologue/models.py:228
|
||||
msgid "view count"
|
||||
msgstr "Anzahl an Aufrufen"
|
||||
|
||||
#: photologue/models.py:220
|
||||
#: photologue/models.py:231
|
||||
msgid "crop from"
|
||||
msgstr "Beschneiden von"
|
||||
|
||||
#: photologue/models.py:243
|
||||
#: photologue/models.py:254
|
||||
msgid "An \"admin_thumbnail\" photo size has not been defined."
|
||||
msgstr "Es ist keine Fotogröße \"admin_thumbnail\" definiert."
|
||||
|
||||
#: photologue/models.py:250
|
||||
#: photologue/models.py:261
|
||||
msgid "Thumbnail"
|
||||
msgstr "Vorschaubild"
|
||||
|
||||
#: photologue/models.py:477
|
||||
#: photologue/models.py:488 photologue/models.py:696
|
||||
msgid "slug"
|
||||
msgstr "Kurztitel"
|
||||
|
||||
#: photologue/models.py:481
|
||||
#: photologue/models.py:492
|
||||
msgid "caption"
|
||||
msgstr "Bildunterschrift"
|
||||
|
||||
#: photologue/models.py:483
|
||||
#: photologue/models.py:494
|
||||
msgid "date added"
|
||||
msgstr "Datum des Eintrags"
|
||||
|
||||
#: photologue/models.py:487
|
||||
#: photologue/models.py:504
|
||||
msgid "license"
|
||||
msgstr ""
|
||||
|
||||
#: photologue/models.py:508
|
||||
msgid "Public photographs will be displayed in the default views."
|
||||
msgstr "Öffentliche Fotos werden in den Standard-Views angezeigt."
|
||||
|
||||
#: photologue/models.py:494
|
||||
#: photologue/models.py:513
|
||||
msgid "photo"
|
||||
msgstr "Foto"
|
||||
|
||||
#: photologue/models.py:556
|
||||
#: photologue/models.py:575 photologue/models.py:691
|
||||
msgid "name"
|
||||
msgstr "Name"
|
||||
|
||||
#: photologue/models.py:560
|
||||
#: photologue/models.py:579
|
||||
msgid ""
|
||||
"Photo size name should contain only letters, numbers and underscores. "
|
||||
"Examples: \"thumbnail\", \"display\", \"small\", \"main_page_widget\"."
|
||||
|
|
@ -209,41 +229,41 @@ msgstr ""
|
|||
"enthalten. Beispiele: \"thumbnail\", \"display\", \"small\", "
|
||||
"\"main_page_widget\"."
|
||||
|
||||
#: photologue/models.py:567
|
||||
#: photologue/models.py:586
|
||||
msgid "width"
|
||||
msgstr "Breite"
|
||||
|
||||
#: photologue/models.py:570
|
||||
#: photologue/models.py:589
|
||||
msgid ""
|
||||
"If width is set to \"0\" the image will be scaled to the supplied height."
|
||||
msgstr ""
|
||||
"Wenn die Breite auf \"0\" gesetzt ist, wird das Bild proportional auf die "
|
||||
"angebene Höhe skaliert."
|
||||
|
||||
#: photologue/models.py:571
|
||||
#: photologue/models.py:590
|
||||
msgid "height"
|
||||
msgstr "Höhe"
|
||||
|
||||
#: photologue/models.py:574
|
||||
#: photologue/models.py:593
|
||||
msgid ""
|
||||
"If height is set to \"0\" the image will be scaled to the supplied width"
|
||||
msgstr ""
|
||||
"Wenn die Höhe auf \"0\" gesetzt ist, wird das Bild proportional auf die "
|
||||
"angebene Breite skaliert."
|
||||
|
||||
#: photologue/models.py:575
|
||||
#: photologue/models.py:594
|
||||
msgid "quality"
|
||||
msgstr "Qualität"
|
||||
|
||||
#: photologue/models.py:578
|
||||
#: photologue/models.py:597
|
||||
msgid "JPEG image quality."
|
||||
msgstr "JPEG-Bildqualität"
|
||||
|
||||
#: photologue/models.py:579
|
||||
#: photologue/models.py:598
|
||||
msgid "upscale images?"
|
||||
msgstr "Bilder hochskalieren?"
|
||||
|
||||
#: photologue/models.py:581
|
||||
#: photologue/models.py:600
|
||||
msgid ""
|
||||
"If selected the image will be scaled up if necessary to fit the supplied "
|
||||
"dimensions. Cropped sizes will be upscaled regardless of this setting."
|
||||
|
|
@ -252,32 +272,32 @@ msgstr ""
|
|||
"Beschnittene Größen werden unabhängig von dieser Einstellung bei Bedarf "
|
||||
"hochskaliert."
|
||||
|
||||
#: photologue/models.py:585
|
||||
#: photologue/models.py:604
|
||||
msgid "crop to fit?"
|
||||
msgstr "Zuschneiden?"
|
||||
|
||||
#: photologue/models.py:587
|
||||
#: photologue/models.py:606
|
||||
msgid ""
|
||||
"If selected the image will be scaled and cropped to fit the supplied "
|
||||
"dimensions."
|
||||
msgstr ""
|
||||
"Soll das Bild auf das angegebene Format skaliert und beschnitten werden?"
|
||||
|
||||
#: photologue/models.py:589
|
||||
#: photologue/models.py:608
|
||||
msgid "pre-cache?"
|
||||
msgstr "Vorausspeichern?"
|
||||
|
||||
#: photologue/models.py:591
|
||||
#: photologue/models.py:610
|
||||
msgid "If selected this photo size will be pre-cached as photos are added."
|
||||
msgstr ""
|
||||
"Soll diese Bildgröße im Voraus gespeichert (pre-cached) werden, wenn Fotos "
|
||||
"hinzugefügt werden?"
|
||||
|
||||
#: photologue/models.py:592
|
||||
#: photologue/models.py:611
|
||||
msgid "increment view count?"
|
||||
msgstr "Bildzähler?"
|
||||
|
||||
#: photologue/models.py:594
|
||||
#: photologue/models.py:613
|
||||
msgid ""
|
||||
"If selected the image's \"view_count\" will be incremented when this photo "
|
||||
"size is displayed."
|
||||
|
|
@ -285,32 +305,32 @@ msgstr ""
|
|||
"Soll der Ansichts-Zähler (view-count) hochgezählt werden, wenn ein Foto "
|
||||
"dieser Größe angezeigt wird?"
|
||||
|
||||
#: photologue/models.py:599
|
||||
#: photologue/models.py:618
|
||||
msgid "photo size"
|
||||
msgstr "Foto-Größe"
|
||||
|
||||
#: photologue/models.py:600
|
||||
#: photologue/models.py:619
|
||||
msgid "photo sizes"
|
||||
msgstr "Foto-Größen"
|
||||
|
||||
#: photologue/models.py:617
|
||||
#: photologue/models.py:636
|
||||
msgid "Can only crop photos if both width and height dimensions are set."
|
||||
msgstr ""
|
||||
"Fotos können nur zugeschnitten werden, wenn Breite und Höhe angegeben sind."
|
||||
|
||||
#: photologue_custom/admin.py:43 photologue_custom/models.py:51
|
||||
msgid "owner"
|
||||
#: photologue/models.py:702
|
||||
msgid "tag"
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/forms.py:34
|
||||
#: photologue_custom/forms.py:22
|
||||
msgid "Gallery"
|
||||
msgstr "Galerie"
|
||||
|
||||
#: photologue_custom/forms.py:36
|
||||
#: photologue_custom/forms.py:24
|
||||
msgid "-- Create a new gallery --"
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/forms.py:37
|
||||
#: photologue_custom/forms.py:25
|
||||
msgid ""
|
||||
"Select a gallery to add these images to. Leave this empty to create a new "
|
||||
"gallery from the supplied title."
|
||||
|
|
@ -318,59 +338,43 @@ msgstr ""
|
|||
"Wähle eine Galerie aus, zu der diese Bilder hinzugefügt werden sollen. Lasse "
|
||||
"dieses Feld leer, um eine neue Galerie mit dem angegeben Titel zu erzeugen."
|
||||
|
||||
#: photologue_custom/forms.py:41
|
||||
#, fuzzy
|
||||
#| msgid "View all galleries"
|
||||
#: photologue_custom/forms.py:29
|
||||
msgid "New gallery title"
|
||||
msgstr "Zeige alle Galerien."
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/forms.py:46
|
||||
#: photologue_custom/forms.py:34
|
||||
msgid "New gallery event start date"
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/forms.py:51
|
||||
#: photologue_custom/forms.py:39
|
||||
msgid "New gallery event end date"
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/forms.py:57
|
||||
#, fuzzy
|
||||
#| msgid "gallery"
|
||||
#: photologue_custom/forms.py:45
|
||||
msgid "New gallery tags"
|
||||
msgstr "Galerie"
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/forms.py:59
|
||||
#: photologue_custom/forms.py:47
|
||||
msgid ""
|
||||
"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/forms.py:76
|
||||
#: photologue_custom/forms.py:64
|
||||
#: photologue_custom/templates/photologue/upload.html:6
|
||||
#: photologue_custom/templates/photologue/upload.html:73
|
||||
msgid "Upload"
|
||||
msgstr "Hochladen"
|
||||
|
||||
#: photologue_custom/forms.py:82
|
||||
#: photologue_custom/forms.py:70
|
||||
msgid "A gallery with that title already exists."
|
||||
msgstr "Es existiert bereits eine Gallerie mit diesem Titel."
|
||||
|
||||
#: photologue_custom/forms.py:91
|
||||
#: photologue_custom/forms.py:79
|
||||
msgid "Select an existing gallery, or enter a title for a new gallery."
|
||||
msgstr ""
|
||||
"Wähle eine existierende Galerie aus oder gib einen Titel für eine neue "
|
||||
"Galerie ein."
|
||||
|
||||
#: photologue_custom/models.py:23
|
||||
msgid "start date"
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/models.py:28
|
||||
msgid "end date"
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/models.py:56
|
||||
msgid "license"
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/templates/photologue/gallery_archive.html:7
|
||||
#: photologue_custom/templates/photologue/gallery_archive.html:12
|
||||
msgid "Latest photo galleries"
|
||||
|
|
@ -403,16 +407,12 @@ msgid "to"
|
|||
msgstr ""
|
||||
|
||||
#: photologue_custom/templates/photologue/gallery_detail.html:57
|
||||
#, fuzzy
|
||||
#| msgid "All photos"
|
||||
msgid "All pictures"
|
||||
msgstr "Alle Fotos"
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/templates/photologue/gallery_detail.html:78
|
||||
#, fuzzy
|
||||
#| msgid "View all galleries"
|
||||
msgid "Download all gallery"
|
||||
msgstr "Zeige alle Galerien."
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/templates/photologue/photo_detail.html:13
|
||||
msgid "Published"
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: Photologue\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-01-30 07:09+0000\n"
|
||||
"POT-Creation-Date: 2022-01-30 09:55+0000\n"
|
||||
"PO-Revision-Date: 2017-12-03 14:46+0000\n"
|
||||
"Last-Translator: Richard Barran <richard@arbee-design.co.uk>\n"
|
||||
"Language-Team: Spanish (Spain) (http://www.transifex.com/richardbarran/"
|
||||
|
|
@ -23,75 +23,79 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: photologue/models.py:86
|
||||
#: photologue/admin.py:30 photologue/models.py:499
|
||||
msgid "owner"
|
||||
msgstr ""
|
||||
|
||||
#: photologue/models.py:84
|
||||
msgid "Very Low"
|
||||
msgstr "Muy bajo"
|
||||
|
||||
#: photologue/models.py:87
|
||||
#: photologue/models.py:85
|
||||
msgid "Low"
|
||||
msgstr "Bajo"
|
||||
|
||||
#: photologue/models.py:88
|
||||
#: photologue/models.py:86
|
||||
msgid "Medium-Low"
|
||||
msgstr "Medio-bajo"
|
||||
|
||||
#: photologue/models.py:89
|
||||
#: photologue/models.py:87
|
||||
msgid "Medium"
|
||||
msgstr "Medio"
|
||||
|
||||
#: photologue/models.py:90
|
||||
#: photologue/models.py:88
|
||||
msgid "Medium-High"
|
||||
msgstr "Medio-alto"
|
||||
|
||||
#: photologue/models.py:91
|
||||
#: photologue/models.py:89
|
||||
msgid "High"
|
||||
msgstr "Alto"
|
||||
|
||||
#: photologue/models.py:92
|
||||
#: photologue/models.py:90
|
||||
msgid "Very High"
|
||||
msgstr "Muy alto"
|
||||
|
||||
#: photologue/models.py:97
|
||||
#: photologue/models.py:95
|
||||
msgid "Top"
|
||||
msgstr "Arriba"
|
||||
|
||||
#: photologue/models.py:98
|
||||
#: photologue/models.py:96
|
||||
msgid "Right"
|
||||
msgstr "Derecha"
|
||||
|
||||
#: photologue/models.py:99
|
||||
#: photologue/models.py:97
|
||||
msgid "Bottom"
|
||||
msgstr "Abajo"
|
||||
|
||||
#: photologue/models.py:100
|
||||
#: photologue/models.py:98
|
||||
msgid "Left"
|
||||
msgstr "Izquierda"
|
||||
|
||||
#: photologue/models.py:101
|
||||
#: photologue/models.py:99
|
||||
msgid "Center (Default)"
|
||||
msgstr "Centro (por defecto)"
|
||||
|
||||
#: photologue/models.py:105
|
||||
#: photologue/models.py:103
|
||||
msgid "Flip left to right"
|
||||
msgstr "Voltear de izquerda a derecha"
|
||||
|
||||
#: photologue/models.py:106
|
||||
#: photologue/models.py:104
|
||||
msgid "Flip top to bottom"
|
||||
msgstr "Voltear de arriba a abajo"
|
||||
|
||||
#: photologue/models.py:107
|
||||
#: photologue/models.py:105
|
||||
msgid "Rotate 90 degrees counter-clockwise"
|
||||
msgstr "Rotar 90 grados en sentido horario"
|
||||
|
||||
#: photologue/models.py:108
|
||||
#: photologue/models.py:106
|
||||
msgid "Rotate 90 degrees clockwise"
|
||||
msgstr "Rotar 90 grados en sentido antihorario"
|
||||
|
||||
#: photologue/models.py:109
|
||||
#: photologue/models.py:107
|
||||
msgid "Rotate 180 degrees"
|
||||
msgstr "Rotar 180 grados"
|
||||
|
||||
#: photologue/models.py:119
|
||||
#: photologue/models.py:117
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Chain multiple filters using the following pattern \"FILTER_ONE->FILTER_TWO-"
|
||||
|
|
@ -102,103 +106,119 @@ msgstr ""
|
|||
">FILTRO_DOS->FILTRO_TRES\". Los filtros de imagen se aplicarán en orden. Los "
|
||||
"siguientes filtros están disponibles: %s."
|
||||
|
||||
#: photologue/models.py:141
|
||||
#: photologue/models.py:139
|
||||
msgid "date published"
|
||||
msgstr "fecha de publicación"
|
||||
|
||||
#: photologue/models.py:143 photologue/models.py:474
|
||||
#: photologue/models.py:141 photologue/models.py:485
|
||||
msgid "title"
|
||||
msgstr "título"
|
||||
|
||||
#: photologue/models.py:146
|
||||
#: photologue/models.py:144
|
||||
msgid "title slug"
|
||||
msgstr "título slug"
|
||||
|
||||
#: photologue/models.py:149 photologue/models.py:480
|
||||
#: photologue/models.py:147 photologue/models.py:491 photologue/models.py:697
|
||||
msgid "A \"slug\" is a unique URL-friendly title for an object."
|
||||
msgstr "Un \"slug\" es un único título URL-amigable para un objeto."
|
||||
|
||||
#: photologue/models.py:150
|
||||
msgid "start date"
|
||||
msgstr ""
|
||||
|
||||
#: photologue/models.py:155
|
||||
msgid "end date"
|
||||
msgstr ""
|
||||
|
||||
#: photologue/models.py:157
|
||||
msgid "description"
|
||||
msgstr "descripción"
|
||||
|
||||
#: photologue/models.py:152 photologue/models.py:485
|
||||
#: photologue/models.py:162 photologue/models.py:703
|
||||
msgid "tags"
|
||||
msgstr ""
|
||||
|
||||
#: photologue/models.py:165 photologue/models.py:506
|
||||
msgid "is public"
|
||||
msgstr "es público"
|
||||
|
||||
#: photologue/models.py:154
|
||||
#: photologue/models.py:167
|
||||
msgid "Public galleries will be displayed in the default views."
|
||||
msgstr "Las galerías públicas serán mostradas en las vistas por defecto."
|
||||
|
||||
#: photologue/models.py:158 photologue/models.py:495
|
||||
#: photologue/models.py:171 photologue/models.py:514
|
||||
msgid "photos"
|
||||
msgstr "fotos"
|
||||
|
||||
#: photologue/models.py:166
|
||||
#: photologue/models.py:177
|
||||
msgid "gallery"
|
||||
msgstr "galería"
|
||||
|
||||
#: photologue/models.py:167
|
||||
#: photologue/models.py:178
|
||||
msgid "galleries"
|
||||
msgstr "galerías"
|
||||
|
||||
#: photologue/models.py:202
|
||||
#: photologue/models.py:213
|
||||
msgid "count"
|
||||
msgstr "contar"
|
||||
|
||||
#: photologue/models.py:210
|
||||
#: photologue/models.py:221
|
||||
msgid "image"
|
||||
msgstr "imagen"
|
||||
|
||||
#: photologue/models.py:213
|
||||
#: photologue/models.py:224
|
||||
msgid "date taken"
|
||||
msgstr "fecha en la que se tomó"
|
||||
|
||||
#: photologue/models.py:216
|
||||
#: photologue/models.py:227
|
||||
msgid "Date image was taken; is obtained from the image EXIF data."
|
||||
msgstr "La fecha de la imagen fue obtenida por información EXIF de la imagen."
|
||||
|
||||
#: photologue/models.py:217
|
||||
#: photologue/models.py:228
|
||||
msgid "view count"
|
||||
msgstr "Contador de visitas"
|
||||
|
||||
#: photologue/models.py:220
|
||||
#: photologue/models.py:231
|
||||
msgid "crop from"
|
||||
msgstr "Recortar desde"
|
||||
|
||||
#: photologue/models.py:243
|
||||
#: photologue/models.py:254
|
||||
msgid "An \"admin_thumbnail\" photo size has not been defined."
|
||||
msgstr "El tamaño de foto de \"miniatura de admin\" no ha sido definido."
|
||||
|
||||
#: photologue/models.py:250
|
||||
#: photologue/models.py:261
|
||||
msgid "Thumbnail"
|
||||
msgstr "Miniatura"
|
||||
|
||||
#: photologue/models.py:477
|
||||
#: photologue/models.py:488 photologue/models.py:696
|
||||
msgid "slug"
|
||||
msgstr "slug"
|
||||
|
||||
#: photologue/models.py:481
|
||||
#: photologue/models.py:492
|
||||
msgid "caption"
|
||||
msgstr "pie de foto"
|
||||
|
||||
#: photologue/models.py:483
|
||||
#: photologue/models.py:494
|
||||
msgid "date added"
|
||||
msgstr "fecha añadida"
|
||||
|
||||
#: photologue/models.py:487
|
||||
#: photologue/models.py:504
|
||||
msgid "license"
|
||||
msgstr ""
|
||||
|
||||
#: photologue/models.py:508
|
||||
msgid "Public photographs will be displayed in the default views."
|
||||
msgstr "Las fotos públicas serán mostradas en las vistas por defecto."
|
||||
|
||||
#: photologue/models.py:494
|
||||
#: photologue/models.py:513
|
||||
msgid "photo"
|
||||
msgstr "foto"
|
||||
|
||||
#: photologue/models.py:556
|
||||
#: photologue/models.py:575 photologue/models.py:691
|
||||
msgid "name"
|
||||
msgstr "nombre"
|
||||
|
||||
#: photologue/models.py:560
|
||||
#: photologue/models.py:579
|
||||
msgid ""
|
||||
"Photo size name should contain only letters, numbers and underscores. "
|
||||
"Examples: \"thumbnail\", \"display\", \"small\", \"main_page_widget\"."
|
||||
|
|
@ -206,41 +226,41 @@ msgstr ""
|
|||
"El nombre del tamaño solo puede contener letras, números y subrayados. Por "
|
||||
"ejemplo:\"miniaturas\", \"muestra\", \"muestra_principal\"."
|
||||
|
||||
#: photologue/models.py:567
|
||||
#: photologue/models.py:586
|
||||
msgid "width"
|
||||
msgstr "anchura"
|
||||
|
||||
#: photologue/models.py:570
|
||||
#: photologue/models.py:589
|
||||
msgid ""
|
||||
"If width is set to \"0\" the image will be scaled to the supplied height."
|
||||
msgstr ""
|
||||
"Si la anchura se establece a \"0\" la imagen será escalada hasta la altura "
|
||||
"proporcionada"
|
||||
|
||||
#: photologue/models.py:571
|
||||
#: photologue/models.py:590
|
||||
msgid "height"
|
||||
msgstr "altura"
|
||||
|
||||
#: photologue/models.py:574
|
||||
#: photologue/models.py:593
|
||||
msgid ""
|
||||
"If height is set to \"0\" the image will be scaled to the supplied width"
|
||||
msgstr ""
|
||||
"Si la altura se establece a \"0\" la imagen será escalada hasta la anchura "
|
||||
"proporcionada"
|
||||
|
||||
#: photologue/models.py:575
|
||||
#: photologue/models.py:594
|
||||
msgid "quality"
|
||||
msgstr "calidad"
|
||||
|
||||
#: photologue/models.py:578
|
||||
#: photologue/models.py:597
|
||||
msgid "JPEG image quality."
|
||||
msgstr "Calidad de imagen JPEG."
|
||||
|
||||
#: photologue/models.py:579
|
||||
#: photologue/models.py:598
|
||||
msgid "upscale images?"
|
||||
msgstr "¿Aumentar imágenes?"
|
||||
|
||||
#: photologue/models.py:581
|
||||
#: photologue/models.py:600
|
||||
msgid ""
|
||||
"If selected the image will be scaled up if necessary to fit the supplied "
|
||||
"dimensions. Cropped sizes will be upscaled regardless of this setting."
|
||||
|
|
@ -249,11 +269,11 @@ msgstr ""
|
|||
"las dimensiones proporcionadas. Los tamaños recortados serán aumentados de "
|
||||
"acuerdo a esta opción."
|
||||
|
||||
#: photologue/models.py:585
|
||||
#: photologue/models.py:604
|
||||
msgid "crop to fit?"
|
||||
msgstr "¿Recortar hasta ajustar?"
|
||||
|
||||
#: photologue/models.py:587
|
||||
#: photologue/models.py:606
|
||||
msgid ""
|
||||
"If selected the image will be scaled and cropped to fit the supplied "
|
||||
"dimensions."
|
||||
|
|
@ -261,21 +281,21 @@ msgstr ""
|
|||
"Si se selecciona la imagen será escalada y recortada para ajustarse a las "
|
||||
"dimensiones proporcionadas."
|
||||
|
||||
#: photologue/models.py:589
|
||||
#: photologue/models.py:608
|
||||
msgid "pre-cache?"
|
||||
msgstr "¿pre-cachear?"
|
||||
|
||||
#: photologue/models.py:591
|
||||
#: photologue/models.py:610
|
||||
msgid "If selected this photo size will be pre-cached as photos are added."
|
||||
msgstr ""
|
||||
"Si se selecciona, este tamaño de foto será pre-cacheado cuando se añadan "
|
||||
"nuevas fotos."
|
||||
|
||||
#: photologue/models.py:592
|
||||
#: photologue/models.py:611
|
||||
msgid "increment view count?"
|
||||
msgstr "¿incrementar contador de visualizaciones?"
|
||||
|
||||
#: photologue/models.py:594
|
||||
#: photologue/models.py:613
|
||||
msgid ""
|
||||
"If selected the image's \"view_count\" will be incremented when this photo "
|
||||
"size is displayed."
|
||||
|
|
@ -283,31 +303,31 @@ msgstr ""
|
|||
"Si se selecciona el \"contador de visualizaciones\" se incrementará cuando "
|
||||
"esta foto sea visualizada."
|
||||
|
||||
#: photologue/models.py:599
|
||||
#: photologue/models.py:618
|
||||
msgid "photo size"
|
||||
msgstr "tamaño de foto"
|
||||
|
||||
#: photologue/models.py:600
|
||||
#: photologue/models.py:619
|
||||
msgid "photo sizes"
|
||||
msgstr "tamaños de foto"
|
||||
|
||||
#: photologue/models.py:617
|
||||
#: photologue/models.py:636
|
||||
msgid "Can only crop photos if both width and height dimensions are set."
|
||||
msgstr "Solo puede recortar las fotos si ancho y alto están establecidos."
|
||||
|
||||
#: photologue_custom/admin.py:43 photologue_custom/models.py:51
|
||||
msgid "owner"
|
||||
#: photologue/models.py:702
|
||||
msgid "tag"
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/forms.py:34
|
||||
#: photologue_custom/forms.py:22
|
||||
msgid "Gallery"
|
||||
msgstr "Galería"
|
||||
|
||||
#: photologue_custom/forms.py:36
|
||||
#: photologue_custom/forms.py:24
|
||||
msgid "-- Create a new gallery --"
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/forms.py:37
|
||||
#: photologue_custom/forms.py:25
|
||||
msgid ""
|
||||
"Select a gallery to add these images to. Leave this empty to create a new "
|
||||
"gallery from the supplied title."
|
||||
|
|
@ -315,58 +335,42 @@ msgstr ""
|
|||
"Seleccione una galería para agregarle estas imágenes. Déjelo vacío para "
|
||||
"crear una nueva galería a partir de este título."
|
||||
|
||||
#: photologue_custom/forms.py:41
|
||||
#, fuzzy
|
||||
#| msgid "View all galleries"
|
||||
#: photologue_custom/forms.py:29
|
||||
msgid "New gallery title"
|
||||
msgstr "Ver todas las galerías"
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/forms.py:46
|
||||
#: photologue_custom/forms.py:34
|
||||
msgid "New gallery event start date"
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/forms.py:51
|
||||
#: photologue_custom/forms.py:39
|
||||
msgid "New gallery event end date"
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/forms.py:57
|
||||
#, fuzzy
|
||||
#| msgid "gallery"
|
||||
#: photologue_custom/forms.py:45
|
||||
msgid "New gallery tags"
|
||||
msgstr "galería"
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/forms.py:59
|
||||
#: photologue_custom/forms.py:47
|
||||
msgid ""
|
||||
"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/forms.py:76
|
||||
#: photologue_custom/forms.py:64
|
||||
#: photologue_custom/templates/photologue/upload.html:6
|
||||
#: photologue_custom/templates/photologue/upload.html:73
|
||||
msgid "Upload"
|
||||
msgstr "Subir"
|
||||
|
||||
#: photologue_custom/forms.py:82
|
||||
#: photologue_custom/forms.py:70
|
||||
msgid "A gallery with that title already exists."
|
||||
msgstr "Ya existe una galería con ese título."
|
||||
|
||||
#: photologue_custom/forms.py:91
|
||||
#: photologue_custom/forms.py:79
|
||||
msgid "Select an existing gallery, or enter a title for a new gallery."
|
||||
msgstr ""
|
||||
"Seleccione una galería existente o ingrese un nuevo nombre para la galería."
|
||||
|
||||
#: photologue_custom/models.py:23
|
||||
msgid "start date"
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/models.py:28
|
||||
msgid "end date"
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/models.py:56
|
||||
msgid "license"
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/templates/photologue/gallery_archive.html:7
|
||||
#: photologue_custom/templates/photologue/gallery_archive.html:12
|
||||
msgid "Latest photo galleries"
|
||||
|
|
@ -399,16 +403,12 @@ msgid "to"
|
|||
msgstr ""
|
||||
|
||||
#: photologue_custom/templates/photologue/gallery_detail.html:57
|
||||
#, fuzzy
|
||||
#| msgid "All photos"
|
||||
msgid "All pictures"
|
||||
msgstr "Todas las fotos"
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/templates/photologue/gallery_detail.html:78
|
||||
#, fuzzy
|
||||
#| msgid "View all galleries"
|
||||
msgid "Download all gallery"
|
||||
msgstr "Ver todas las galerías"
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/templates/photologue/photo_detail.html:13
|
||||
msgid "Published"
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: Photologue\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-01-30 07:09+0000\n"
|
||||
"POT-Creation-Date: 2022-01-30 10:06+0000\n"
|
||||
"PO-Revision-Date: 2017-12-03 14:47+0000\n"
|
||||
"Last-Translator: Richard Barran <richard@arbee-design.co.uk>\n"
|
||||
"Language-Team: French (http://www.transifex.com/richardbarran/django-"
|
||||
|
|
@ -21,75 +21,131 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
#: photologue/models.py:86
|
||||
#: photologue/admin.py:30 photologue/models.py:499
|
||||
msgid "owner"
|
||||
msgstr "propriétaire"
|
||||
|
||||
#: photologue/forms.py:23
|
||||
msgid "Gallery"
|
||||
msgstr "Galerie"
|
||||
|
||||
#: photologue/forms.py:25
|
||||
msgid "-- Create a new gallery --"
|
||||
msgstr "-- Créer une nouvelle galerie --"
|
||||
|
||||
#: photologue/forms.py:26
|
||||
msgid ""
|
||||
"Select a gallery to add these images to. Leave this empty to create a new "
|
||||
"gallery from the supplied title."
|
||||
msgstr ""
|
||||
"Sélectionner une galerie à laquelle ajouter ces images. Laisser ce champ "
|
||||
"vide pour créer une nouvelle galerie à partir du titre indiqué."
|
||||
|
||||
#: photologue/forms.py:30
|
||||
msgid "New gallery title"
|
||||
msgstr "Titre de la nouvelle galerie"
|
||||
|
||||
#: photologue/forms.py:35
|
||||
msgid "New gallery event start date"
|
||||
msgstr "Date de début de l'évènement de la nouvelle galerie"
|
||||
|
||||
#: photologue/forms.py:40
|
||||
msgid "New gallery event end date"
|
||||
msgstr "Date de fin de l'évènement de la nouvelle galerie"
|
||||
|
||||
#: photologue/forms.py:46
|
||||
msgid "New gallery tags"
|
||||
msgstr "Balises de la nouvelle galerie"
|
||||
|
||||
#: photologue/forms.py:48
|
||||
msgid ""
|
||||
"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
|
||||
msgstr ""
|
||||
|
||||
#: photologue/forms.py:65 photologue/templates/photologue/upload.html:6
|
||||
#: photologue/templates/photologue/upload.html:73
|
||||
msgid "Upload"
|
||||
msgstr "Télécharger"
|
||||
|
||||
#: photologue/forms.py:71
|
||||
msgid "A gallery with that title already exists."
|
||||
msgstr "Une galerie portant ce nom existe déjà."
|
||||
|
||||
#: photologue/forms.py:80
|
||||
msgid "Select an existing gallery, or enter a title for a new gallery."
|
||||
msgstr ""
|
||||
"Sélectionner une galerie existante ou entrer un titre pour une nouvelle "
|
||||
"galerie."
|
||||
|
||||
#: photologue/models.py:84
|
||||
msgid "Very Low"
|
||||
msgstr "Très Bas"
|
||||
|
||||
#: photologue/models.py:87
|
||||
#: photologue/models.py:85
|
||||
msgid "Low"
|
||||
msgstr "Bas"
|
||||
|
||||
#: photologue/models.py:88
|
||||
#: photologue/models.py:86
|
||||
msgid "Medium-Low"
|
||||
msgstr "Moyen-Bas"
|
||||
|
||||
#: photologue/models.py:89
|
||||
#: photologue/models.py:87
|
||||
msgid "Medium"
|
||||
msgstr "Moyen"
|
||||
|
||||
#: photologue/models.py:90
|
||||
#: photologue/models.py:88
|
||||
msgid "Medium-High"
|
||||
msgstr "Moyen-Haut"
|
||||
|
||||
#: photologue/models.py:91
|
||||
#: photologue/models.py:89
|
||||
msgid "High"
|
||||
msgstr "Haut"
|
||||
|
||||
#: photologue/models.py:92
|
||||
#: photologue/models.py:90
|
||||
msgid "Very High"
|
||||
msgstr "Très Haut"
|
||||
|
||||
#: photologue/models.py:97
|
||||
#: photologue/models.py:95
|
||||
msgid "Top"
|
||||
msgstr "Sommet"
|
||||
|
||||
#: photologue/models.py:98
|
||||
#: photologue/models.py:96
|
||||
msgid "Right"
|
||||
msgstr "Droite"
|
||||
|
||||
#: photologue/models.py:99
|
||||
#: photologue/models.py:97
|
||||
msgid "Bottom"
|
||||
msgstr "Bas"
|
||||
|
||||
#: photologue/models.py:100
|
||||
#: photologue/models.py:98
|
||||
msgid "Left"
|
||||
msgstr "Gauche"
|
||||
|
||||
#: photologue/models.py:101
|
||||
#: photologue/models.py:99
|
||||
msgid "Center (Default)"
|
||||
msgstr "Centré (par défaut)"
|
||||
|
||||
#: photologue/models.py:105
|
||||
#: photologue/models.py:103
|
||||
msgid "Flip left to right"
|
||||
msgstr "Inversion de gauche à droite"
|
||||
|
||||
#: photologue/models.py:106
|
||||
#: photologue/models.py:104
|
||||
msgid "Flip top to bottom"
|
||||
msgstr "Inversion de haut en bas"
|
||||
|
||||
#: photologue/models.py:107
|
||||
#: photologue/models.py:105
|
||||
msgid "Rotate 90 degrees counter-clockwise"
|
||||
msgstr "Rotation de 90 degrés dans le sens anti-horloger"
|
||||
|
||||
#: photologue/models.py:108
|
||||
#: photologue/models.py:106
|
||||
msgid "Rotate 90 degrees clockwise"
|
||||
msgstr "Rotation de 90 degrés dans le sens horloger"
|
||||
|
||||
#: photologue/models.py:109
|
||||
#: photologue/models.py:107
|
||||
msgid "Rotate 180 degrees"
|
||||
msgstr "Rotation de 180 degrés"
|
||||
|
||||
#: photologue/models.py:119
|
||||
#: photologue/models.py:117
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Chain multiple filters using the following pattern \"FILTER_ONE->FILTER_TWO-"
|
||||
|
|
@ -100,107 +156,123 @@ msgstr ""
|
|||
">FILTRE_DEUX->FILTRE_TROIS\". Les filtres d'image seront appliqués dans "
|
||||
"l'ordre. Les filtres suivants sont disponibles: %s."
|
||||
|
||||
#: photologue/models.py:141
|
||||
#: photologue/models.py:139
|
||||
msgid "date published"
|
||||
msgstr "date de publication"
|
||||
|
||||
#: photologue/models.py:143 photologue/models.py:474
|
||||
#: photologue/models.py:141 photologue/models.py:485
|
||||
msgid "title"
|
||||
msgstr "titre"
|
||||
|
||||
#: photologue/models.py:146
|
||||
#: photologue/models.py:144
|
||||
msgid "title slug"
|
||||
msgstr "version abrégée du titre"
|
||||
|
||||
#: photologue/models.py:149 photologue/models.py:480
|
||||
#: photologue/models.py:147 photologue/models.py:491 photologue/models.py:697
|
||||
msgid "A \"slug\" is a unique URL-friendly title for an object."
|
||||
msgstr ""
|
||||
"Un \"slug\" est un titre abrégé et unique, compatible avec les URL, pour un "
|
||||
"objet."
|
||||
|
||||
#: photologue/models.py:150
|
||||
msgid "start date"
|
||||
msgstr "date de début"
|
||||
|
||||
#: photologue/models.py:155
|
||||
msgid "end date"
|
||||
msgstr "date de fin"
|
||||
|
||||
#: photologue/models.py:157
|
||||
msgid "description"
|
||||
msgstr "description"
|
||||
|
||||
#: photologue/models.py:152 photologue/models.py:485
|
||||
#: photologue/models.py:162 photologue/models.py:703
|
||||
msgid "tags"
|
||||
msgstr "balises"
|
||||
|
||||
#: photologue/models.py:165 photologue/models.py:506
|
||||
msgid "is public"
|
||||
msgstr "est public"
|
||||
|
||||
#: photologue/models.py:154
|
||||
#: photologue/models.py:167
|
||||
msgid "Public galleries will be displayed in the default views."
|
||||
msgstr "Les galeries publiques seront affichée dans les vues par défaut."
|
||||
|
||||
#: photologue/models.py:158 photologue/models.py:495
|
||||
#: photologue/models.py:171 photologue/models.py:514
|
||||
msgid "photos"
|
||||
msgstr "photos"
|
||||
|
||||
#: photologue/models.py:166
|
||||
#: photologue/models.py:177
|
||||
msgid "gallery"
|
||||
msgstr "galerie"
|
||||
|
||||
#: photologue/models.py:167
|
||||
#: photologue/models.py:178
|
||||
msgid "galleries"
|
||||
msgstr "galleries"
|
||||
|
||||
#: photologue/models.py:202
|
||||
#: photologue/models.py:213
|
||||
msgid "count"
|
||||
msgstr "nombre"
|
||||
|
||||
#: photologue/models.py:210
|
||||
#: photologue/models.py:221
|
||||
msgid "image"
|
||||
msgstr "image"
|
||||
|
||||
#: photologue/models.py:213
|
||||
#: photologue/models.py:224
|
||||
msgid "date taken"
|
||||
msgstr "date de prise de vue"
|
||||
|
||||
#: photologue/models.py:216
|
||||
#: photologue/models.py:227
|
||||
msgid "Date image was taken; is obtained from the image EXIF data."
|
||||
msgstr ""
|
||||
"La date à laquelle l'image a été prise ; obtenue à partir des données EXIF "
|
||||
"de l'image."
|
||||
|
||||
#: photologue/models.py:217
|
||||
#: photologue/models.py:228
|
||||
msgid "view count"
|
||||
msgstr "nombre"
|
||||
|
||||
#: photologue/models.py:220
|
||||
#: photologue/models.py:231
|
||||
msgid "crop from"
|
||||
msgstr "découper à partir de"
|
||||
|
||||
#: photologue/models.py:243
|
||||
#: photologue/models.py:254
|
||||
msgid "An \"admin_thumbnail\" photo size has not been defined."
|
||||
msgstr "Une taille de photo \"admin_thumbnail\" n'a pas encore été définie."
|
||||
|
||||
#: photologue/models.py:250
|
||||
#: photologue/models.py:261
|
||||
msgid "Thumbnail"
|
||||
msgstr "Miniature"
|
||||
|
||||
#: photologue/models.py:477
|
||||
#: photologue/models.py:488 photologue/models.py:696
|
||||
msgid "slug"
|
||||
msgstr "libellé court"
|
||||
|
||||
#: photologue/models.py:481
|
||||
#: photologue/models.py:492
|
||||
msgid "caption"
|
||||
msgstr "légende"
|
||||
|
||||
#: photologue/models.py:483
|
||||
#: photologue/models.py:494
|
||||
msgid "date added"
|
||||
msgstr "date d'ajout"
|
||||
|
||||
#: photologue/models.py:487
|
||||
#: photologue/models.py:504
|
||||
msgid "license"
|
||||
msgstr "licence"
|
||||
|
||||
#: photologue/models.py:508
|
||||
msgid "Public photographs will be displayed in the default views."
|
||||
msgstr "Les photographies publique seront affichées dans les vues par défaut."
|
||||
|
||||
#: photologue/models.py:494
|
||||
#: photologue/models.py:513
|
||||
msgid "photo"
|
||||
msgstr "photo"
|
||||
|
||||
#: photologue/models.py:556
|
||||
#: photologue/models.py:575 photologue/models.py:691
|
||||
msgid "name"
|
||||
msgstr "nom"
|
||||
|
||||
#: photologue/models.py:560
|
||||
#: photologue/models.py:579
|
||||
msgid ""
|
||||
"Photo size name should contain only letters, numbers and underscores. "
|
||||
"Examples: \"thumbnail\", \"display\", \"small\", \"main_page_widget\"."
|
||||
|
|
@ -209,41 +281,41 @@ msgstr ""
|
|||
"chiffres et des caractères de soulignement. Exemples: \"miniature\", "
|
||||
"\"affichage\", \"petit\", \"widget_page_principale\"."
|
||||
|
||||
#: photologue/models.py:567
|
||||
#: photologue/models.py:586
|
||||
msgid "width"
|
||||
msgstr "largeur"
|
||||
|
||||
#: photologue/models.py:570
|
||||
#: photologue/models.py:589
|
||||
msgid ""
|
||||
"If width is set to \"0\" the image will be scaled to the supplied height."
|
||||
msgstr ""
|
||||
"Si la largeur est réglée à \"0\" l l'image sera redimensionnée par rapport à "
|
||||
"la hauteur fournie."
|
||||
|
||||
#: photologue/models.py:571
|
||||
#: photologue/models.py:590
|
||||
msgid "height"
|
||||
msgstr "hauteur"
|
||||
|
||||
#: photologue/models.py:574
|
||||
#: photologue/models.py:593
|
||||
msgid ""
|
||||
"If height is set to \"0\" the image will be scaled to the supplied width"
|
||||
msgstr ""
|
||||
"Si la hauteur est réglée à \"0\" l l'image sera redimensionnée par rapport à "
|
||||
"la largeur fournie."
|
||||
|
||||
#: photologue/models.py:575
|
||||
#: photologue/models.py:594
|
||||
msgid "quality"
|
||||
msgstr "qualité"
|
||||
|
||||
#: photologue/models.py:578
|
||||
#: photologue/models.py:597
|
||||
msgid "JPEG image quality."
|
||||
msgstr "Qualité JPEG de l'image."
|
||||
|
||||
#: photologue/models.py:579
|
||||
#: photologue/models.py:598
|
||||
msgid "upscale images?"
|
||||
msgstr "agrandir les images ?"
|
||||
|
||||
#: photologue/models.py:581
|
||||
#: photologue/models.py:600
|
||||
msgid ""
|
||||
"If selected the image will be scaled up if necessary to fit the supplied "
|
||||
"dimensions. Cropped sizes will be upscaled regardless of this setting."
|
||||
|
|
@ -252,11 +324,11 @@ msgstr ""
|
|||
"dimensions fournies. Les dimensions ajustées seront agrandies sans prendre "
|
||||
"en compte ce paramètre."
|
||||
|
||||
#: photologue/models.py:585
|
||||
#: photologue/models.py:604
|
||||
msgid "crop to fit?"
|
||||
msgstr "découper pour adapter à la taille ?"
|
||||
|
||||
#: photologue/models.py:587
|
||||
#: photologue/models.py:606
|
||||
msgid ""
|
||||
"If selected the image will be scaled and cropped to fit the supplied "
|
||||
"dimensions."
|
||||
|
|
@ -264,21 +336,21 @@ msgstr ""
|
|||
"Si sélectionné l'image sera redimensionnée et recadrée pour coïncider avec "
|
||||
"les dimensions fournies."
|
||||
|
||||
#: photologue/models.py:589
|
||||
#: photologue/models.py:608
|
||||
msgid "pre-cache?"
|
||||
msgstr "mise en cache ?"
|
||||
|
||||
#: photologue/models.py:591
|
||||
#: photologue/models.py:610
|
||||
msgid "If selected this photo size will be pre-cached as photos are added."
|
||||
msgstr ""
|
||||
"Si sélectionné cette taille de photo sera mise en cache au moment au les "
|
||||
"photos sont ajoutées."
|
||||
|
||||
#: photologue/models.py:592
|
||||
#: photologue/models.py:611
|
||||
msgid "increment view count?"
|
||||
msgstr "incrémenter le nombre d'affichages ?"
|
||||
|
||||
#: photologue/models.py:594
|
||||
#: photologue/models.py:613
|
||||
msgid ""
|
||||
"If selected the image's \"view_count\" will be incremented when this photo "
|
||||
"size is displayed."
|
||||
|
|
@ -286,148 +358,75 @@ msgstr ""
|
|||
"Si sélectionné le \"view_count\" (nombre d'affichage) de l'image sera "
|
||||
"incrémenté quand cette taille de photo sera affichée."
|
||||
|
||||
#: photologue/models.py:599
|
||||
#: photologue/models.py:618
|
||||
msgid "photo size"
|
||||
msgstr "taille de la photo"
|
||||
|
||||
#: photologue/models.py:600
|
||||
#: photologue/models.py:619
|
||||
msgid "photo sizes"
|
||||
msgstr "tailles des photos"
|
||||
|
||||
#: photologue/models.py:617
|
||||
#: photologue/models.py:636
|
||||
msgid "Can only crop photos if both width and height dimensions are set."
|
||||
msgstr ""
|
||||
"La hauteur et la largeur doivent être toutes les deux définies pour "
|
||||
"retailler des photos."
|
||||
|
||||
#: photologue_custom/admin.py:43 photologue_custom/models.py:51
|
||||
msgid "owner"
|
||||
#: photologue/models.py:702
|
||||
msgid "tag"
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/forms.py:34
|
||||
msgid "Gallery"
|
||||
msgstr "Galerie"
|
||||
|
||||
#: photologue_custom/forms.py:36
|
||||
msgid "-- Create a new gallery --"
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/forms.py:37
|
||||
msgid ""
|
||||
"Select a gallery to add these images to. Leave this empty to create a new "
|
||||
"gallery from the supplied title."
|
||||
msgstr ""
|
||||
"Sélectionner une galerie à laquelle ajouter ces images. Laisser ce champ "
|
||||
"vide pour créer une nouvelle galerie à partir du titre indiqué."
|
||||
|
||||
#: photologue_custom/forms.py:41
|
||||
#, fuzzy
|
||||
#| msgid "View all galleries"
|
||||
msgid "New gallery title"
|
||||
msgstr "Afficher toutes les galeries"
|
||||
|
||||
#: photologue_custom/forms.py:46
|
||||
msgid "New gallery event start date"
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/forms.py:51
|
||||
msgid "New gallery event end date"
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/forms.py:57
|
||||
#, fuzzy
|
||||
#| msgid "gallery uploads"
|
||||
msgid "New gallery tags"
|
||||
msgstr "gallery uploads"
|
||||
|
||||
#: photologue_custom/forms.py:59
|
||||
msgid ""
|
||||
"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/forms.py:76
|
||||
#: photologue_custom/templates/photologue/upload.html:6
|
||||
#: photologue_custom/templates/photologue/upload.html:73
|
||||
msgid "Upload"
|
||||
msgstr "Télécharger"
|
||||
|
||||
#: photologue_custom/forms.py:82
|
||||
msgid "A gallery with that title already exists."
|
||||
msgstr "Une galerie portant ce nom existe déjà."
|
||||
|
||||
#: photologue_custom/forms.py:91
|
||||
msgid "Select an existing gallery, or enter a title for a new gallery."
|
||||
msgstr ""
|
||||
"Sélectionner une galerie existante ou entrer un titre pour une nouvelle "
|
||||
"galerie."
|
||||
|
||||
#: photologue_custom/models.py:23
|
||||
msgid "start date"
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/models.py:28
|
||||
msgid "end date"
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/models.py:56
|
||||
msgid "license"
|
||||
msgstr ""
|
||||
|
||||
#: photologue_custom/templates/photologue/gallery_archive.html:7
|
||||
#: photologue_custom/templates/photologue/gallery_archive.html:12
|
||||
#: photologue/templates/photologue/gallery_archive.html:7
|
||||
#: photologue/templates/photologue/gallery_archive.html:12
|
||||
msgid "Latest photo galleries"
|
||||
msgstr "Dernières galeries de photos"
|
||||
|
||||
#: photologue_custom/templates/photologue/gallery_archive.html:18
|
||||
#: photologue/templates/photologue/gallery_archive.html:18
|
||||
msgid "Filter by year"
|
||||
msgstr "Filtrer par année"
|
||||
|
||||
#: photologue_custom/templates/photologue/gallery_archive.html:35
|
||||
#: photologue/templates/photologue/gallery_archive.html:35
|
||||
msgid "No galleries were found"
|
||||
msgstr "Aucune galerie trouvée"
|
||||
|
||||
#: photologue_custom/templates/photologue/gallery_archive_year.html:7
|
||||
#: photologue_custom/templates/photologue/gallery_archive_year.html:12
|
||||
#: photologue/templates/photologue/gallery_archive_year.html:7
|
||||
#: photologue/templates/photologue/gallery_archive_year.html:12
|
||||
#, python-format
|
||||
msgid "Galleries for %(show_year)s"
|
||||
msgstr "Galeries de %(show_year)s"
|
||||
|
||||
#: photologue_custom/templates/photologue/gallery_archive_year.html:17
|
||||
#: photologue/templates/photologue/gallery_archive_year.html:17
|
||||
msgid "View all galleries"
|
||||
msgstr "Afficher toutes les galeries"
|
||||
|
||||
#: photologue_custom/templates/photologue/gallery_archive_year.html:29
|
||||
#: photologue/templates/photologue/gallery_archive_year.html:29
|
||||
msgid "No galleries were found."
|
||||
msgstr "Aucune galerie trouvée."
|
||||
|
||||
#: photologue_custom/templates/photologue/gallery_detail.html:41
|
||||
#: photologue/templates/photologue/gallery_detail.html:41
|
||||
msgid "to"
|
||||
msgstr ""
|
||||
msgstr "au"
|
||||
|
||||
#: photologue_custom/templates/photologue/gallery_detail.html:57
|
||||
#, fuzzy
|
||||
#| msgid "All photos"
|
||||
#: photologue/templates/photologue/gallery_detail.html:57
|
||||
msgid "All pictures"
|
||||
msgstr "Toutes les photos"
|
||||
|
||||
#: photologue_custom/templates/photologue/gallery_detail.html:78
|
||||
#, fuzzy
|
||||
#| msgid "View all galleries"
|
||||
#: photologue/templates/photologue/gallery_detail.html:78
|
||||
msgid "Download all gallery"
|
||||
msgstr "Afficher toutes les galeries"
|
||||
msgstr "Télécharger toute la galerie"
|
||||
|
||||
#: photologue_custom/templates/photologue/photo_detail.html:13
|
||||
#: photologue/templates/photologue/photo_detail.html:13
|
||||
msgid "Published"
|
||||
msgstr "Publiée le"
|
||||
|
||||
#: photologue_custom/templates/photologue/photo_detail.html:25
|
||||
#: photologue/templates/photologue/photo_detail.html:25
|
||||
msgid "This photo is found in the following galleries"
|
||||
msgstr "Cette photo se trouve dans les galeries suivantes"
|
||||
|
||||
#: photologue_custom/templates/photologue/upload.html:78
|
||||
#: photologue/templates/photologue/upload.html:78
|
||||
msgid "Drag and drop photos here"
|
||||
msgstr ""
|
||||
msgstr "Glissez et déposez les photos ici"
|
||||
|
||||
#: photologue_custom/templates/photologue/upload.html:82
|
||||
#: photologue/templates/photologue/upload.html:82
|
||||
msgid "Owner will be"
|
||||
msgstr ""
|
||||
msgstr "Le propriétaire sera"
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
import hashlib
|
||||
|
||||
from django.core.management.base import BaseCommand, CommandError
|
||||
from photologue.models import Gallery
|
||||
|
||||
import hashlib
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = 'List all duplicate for chosen galleries'
|
||||
|
|
@ -1,9 +1,9 @@
|
|||
from pathlib import Path
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
from django.conf import settings
|
||||
from django.core.management.base import BaseCommand
|
||||
from photologue.models import Gallery
|
||||
from django.conf import settings
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
|
|
@ -1,12 +1,12 @@
|
|||
# Generated by Django 3.2.11 on 2022-01-30 08:32
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
import taggit.managers
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.db import migrations, models
|
||||
from django.template.defaultfilters import slugify
|
||||
|
||||
numens = User.objects.get(username="Numens").id
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.1 KiB |
|
|
@ -1,7 +1,8 @@
|
|||
from django.urls import path, re_path
|
||||
from photologue_custom.views import CustomGalleryDetailView, GalleryDownload, GalleryUpload, TagDetail
|
||||
|
||||
from .views import GalleryArchiveIndexView, GalleryYearArchiveView, PhotoDetailView
|
||||
from .views import (CustomGalleryDetailView, GalleryArchiveIndexView,
|
||||
GalleryDownload, GalleryUpload, GalleryYearArchiveView,
|
||||
PhotoDetailView, TagDetail)
|
||||
|
||||
app_name = 'photologue'
|
||||
urlpatterns = [
|
||||
|
|
|
|||
|
|
@ -1,8 +1,26 @@
|
|||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
# Copyright (C) 2021 by BDE ENS Paris-Saclay
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import os
|
||||
import zipfile
|
||||
from io import BytesIO
|
||||
from pathlib import Path
|
||||
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth.mixins import (LoginRequiredMixin,
|
||||
PermissionRequiredMixin)
|
||||
from django.core.mail import mail_managers
|
||||
from django.db import IntegrityError
|
||||
from django.http import HttpResponse
|
||||
from django.urls import reverse_lazy
|
||||
from django.utils.text import slugify
|
||||
from django.views.generic.dates import ArchiveIndexView, YearArchiveView
|
||||
from django.views.generic.detail import DetailView
|
||||
from django.views.generic.edit import FormView
|
||||
from PIL import Image
|
||||
|
||||
from .models import Gallery, Photo
|
||||
from .forms import UploadForm
|
||||
from .models import Gallery, Photo, Tag
|
||||
|
||||
|
||||
class GalleryDateView(LoginRequiredMixin):
|
||||
|
|
@ -22,3 +40,125 @@ class GalleryYearArchiveView(GalleryDateView, YearArchiveView):
|
|||
|
||||
class PhotoDetailView(LoginRequiredMixin, DetailView):
|
||||
queryset = Photo.objects.filter(is_public=True)
|
||||
|
||||
|
||||
class TagDetail(LoginRequiredMixin, DetailView):
|
||||
model = Tag
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
"""
|
||||
Insert the single object into the context dict.
|
||||
"""
|
||||
current_tag = self.get_object().slug
|
||||
context = super().get_context_data(**kwargs)
|
||||
context['galleries'] = Gallery.objects.filter(is_public=True) \
|
||||
.filter(tags__slug=current_tag) \
|
||||
.order_by('-date_start')
|
||||
return context
|
||||
|
||||
|
||||
class CustomGalleryDetailView(LoginRequiredMixin, DetailView):
|
||||
"""
|
||||
Custom gallery detail view to filter on photo owner
|
||||
"""
|
||||
queryset = Gallery.objects.filter(is_public=True)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
|
||||
# Query with owner to reduce database lag
|
||||
context['photos'] = self.object.public().select_related('owner')
|
||||
|
||||
# List owners
|
||||
context['owners'] = []
|
||||
for photo in context['photos']:
|
||||
if photo.owner not in context['owners']:
|
||||
context['owners'].append(photo.owner)
|
||||
|
||||
# Filter on owner
|
||||
if 'owner' in self.kwargs:
|
||||
context['photos'] = context['photos'].filter(owner__id=self.kwargs['owner'])
|
||||
|
||||
return context
|
||||
|
||||
|
||||
class GalleryDownload(LoginRequiredMixin, DetailView):
|
||||
model = Gallery
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
"""
|
||||
Download a zip file of the gallery on GET request.
|
||||
"""
|
||||
# Create zip file with pictures
|
||||
gallery = self.get_object()
|
||||
byte_data = BytesIO()
|
||||
zip_file = zipfile.ZipFile(byte_data, "w")
|
||||
for photo in gallery.public():
|
||||
filename = os.path.basename(os.path.normpath(photo.image.path))
|
||||
zip_file.write(photo.image.path, filename)
|
||||
zip_file.close()
|
||||
|
||||
# Return zip file
|
||||
response = HttpResponse(byte_data.getvalue(), content_type='application/x-zip-compressed')
|
||||
response['Content-Disposition'] = f"attachment; filename={gallery.slug}.zip"
|
||||
return response
|
||||
|
||||
|
||||
class GalleryUpload(PermissionRequiredMixin, FormView):
|
||||
"""
|
||||
Form to upload new photos in a gallery
|
||||
"""
|
||||
form_class = UploadForm
|
||||
template_name = "photologue/upload.html"
|
||||
success_url = reverse_lazy("photologue:pl-gallery-upload")
|
||||
permission_required = 'photologue.add_gallery'
|
||||
|
||||
def form_valid(self, form):
|
||||
# Upload photos
|
||||
# We take files from the request to support multiple upload
|
||||
files = self.request.FILES.getlist('file_field')
|
||||
gallery = form.get_or_create_gallery()
|
||||
gallery_year = Path(str(gallery.date_start.year))
|
||||
gallery_dir = gallery_year / gallery.slug
|
||||
failed_upload = 0
|
||||
for photo_file in files:
|
||||
# Check that we have a valid image
|
||||
try:
|
||||
opened = Image.open(photo_file)
|
||||
opened.verify()
|
||||
except Exception:
|
||||
# Pillow doesn't recognize it as an image, skip it
|
||||
messages.error(self.request, f"{photo_file.name} was not recognized as an image")
|
||||
failed_upload += 1
|
||||
continue
|
||||
|
||||
title = f"{gallery.title} - {photo_file.name}"
|
||||
try:
|
||||
photo = Photo(
|
||||
title=title,
|
||||
slug=slugify(title),
|
||||
owner=self.request.user,
|
||||
)
|
||||
photo_name = str(gallery_dir / photo_file.name)
|
||||
photo.image.save(photo_name, photo_file)
|
||||
photo.save()
|
||||
photo.galleries.set([gallery])
|
||||
except IntegrityError:
|
||||
messages.error(self.request, f"{photo_file.name} was not uploaded. Maybe the photo was already uploaded.")
|
||||
failed_upload += 1
|
||||
|
||||
# Notify user then managers
|
||||
if not failed_upload:
|
||||
messages.success(self.request, "All photos has been successfully uploaded.")
|
||||
else:
|
||||
n_success = len(files) - failed_upload
|
||||
messages.warning(self.request, f"Only {n_success} photos were successfully uploaded !")
|
||||
|
||||
gallery_title = form.cleaned_data['gallery'] or form.cleaned_data.get('new_gallery_title', '')
|
||||
photos = ", ".join(f.name for f in files)
|
||||
mail_managers(
|
||||
subject="New photos upload",
|
||||
message=f"{self.request.user.username} has uploaded in `{gallery_title}`: {photos}",
|
||||
)
|
||||
|
||||
return super().form_valid(form)
|
||||
|
|
|
|||
|
|
@ -1,144 +0,0 @@
|
|||
# Copyright (C) 2021 by BDE ENS Paris-Saclay
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import os
|
||||
import zipfile
|
||||
from io import BytesIO
|
||||
from pathlib import Path
|
||||
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth.mixins import (LoginRequiredMixin,
|
||||
PermissionRequiredMixin)
|
||||
from django.core.mail import mail_managers
|
||||
from django.db import IntegrityError
|
||||
from django.http import HttpResponse
|
||||
from django.urls import reverse_lazy
|
||||
from django.utils.text import slugify
|
||||
from django.views.generic.detail import DetailView
|
||||
from django.views.generic.edit import FormView
|
||||
from photologue.models import Gallery, Photo, Tag
|
||||
from PIL import Image
|
||||
|
||||
from .forms import UploadForm
|
||||
|
||||
|
||||
class TagDetail(LoginRequiredMixin, DetailView):
|
||||
model = Tag
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
"""
|
||||
Insert the single object into the context dict.
|
||||
"""
|
||||
current_tag = self.get_object().slug
|
||||
context = super().get_context_data(**kwargs)
|
||||
context['galleries'] = Gallery.objects.filter(is_public=True) \
|
||||
.filter(tags__slug=current_tag) \
|
||||
.order_by('-date_start')
|
||||
return context
|
||||
|
||||
|
||||
class CustomGalleryDetailView(LoginRequiredMixin, DetailView):
|
||||
"""
|
||||
Custom gallery detail view to filter on photo owner
|
||||
"""
|
||||
queryset = Gallery.objects.filter(is_public=True)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
|
||||
# Query with owner to reduce database lag
|
||||
context['photos'] = self.object.public().select_related('owner')
|
||||
|
||||
# List owners
|
||||
context['owners'] = []
|
||||
for photo in context['photos']:
|
||||
if photo.owner not in context['owners']:
|
||||
context['owners'].append(photo.owner)
|
||||
|
||||
# Filter on owner
|
||||
if 'owner' in self.kwargs:
|
||||
context['photos'] = context['photos'].filter(owner__id=self.kwargs['owner'])
|
||||
|
||||
return context
|
||||
|
||||
|
||||
class GalleryDownload(LoginRequiredMixin, DetailView):
|
||||
model = Gallery
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
"""
|
||||
Download a zip file of the gallery on GET request.
|
||||
"""
|
||||
# Create zip file with pictures
|
||||
gallery = self.get_object()
|
||||
byte_data = BytesIO()
|
||||
zip_file = zipfile.ZipFile(byte_data, "w")
|
||||
for photo in gallery.public():
|
||||
filename = os.path.basename(os.path.normpath(photo.image.path))
|
||||
zip_file.write(photo.image.path, filename)
|
||||
zip_file.close()
|
||||
|
||||
# Return zip file
|
||||
response = HttpResponse(byte_data.getvalue(), content_type='application/x-zip-compressed')
|
||||
response['Content-Disposition'] = f"attachment; filename={gallery.slug}.zip"
|
||||
return response
|
||||
|
||||
|
||||
class GalleryUpload(PermissionRequiredMixin, FormView):
|
||||
"""
|
||||
Form to upload new photos in a gallery
|
||||
"""
|
||||
form_class = UploadForm
|
||||
template_name = "photologue/upload.html"
|
||||
success_url = reverse_lazy("photologue:pl-gallery-upload")
|
||||
permission_required = 'photologue.add_gallery'
|
||||
|
||||
def form_valid(self, form):
|
||||
# Upload photos
|
||||
# We take files from the request to support multiple upload
|
||||
files = self.request.FILES.getlist('file_field')
|
||||
gallery = form.get_or_create_gallery()
|
||||
gallery_year = Path(str(gallery.date_start.year))
|
||||
gallery_dir = gallery_year / gallery.slug
|
||||
failed_upload = 0
|
||||
for photo_file in files:
|
||||
# Check that we have a valid image
|
||||
try:
|
||||
opened = Image.open(photo_file)
|
||||
opened.verify()
|
||||
except Exception:
|
||||
# Pillow doesn't recognize it as an image, skip it
|
||||
messages.error(self.request, f"{photo_file.name} was not recognized as an image")
|
||||
failed_upload += 1
|
||||
continue
|
||||
|
||||
title = f"{gallery.title} - {photo_file.name}"
|
||||
try:
|
||||
photo = Photo(
|
||||
title=title,
|
||||
slug=slugify(title),
|
||||
owner=self.request.user,
|
||||
)
|
||||
photo_name = str(gallery_dir / photo_file.name)
|
||||
photo.image.save(photo_name, photo_file)
|
||||
photo.save()
|
||||
photo.galleries.set([gallery])
|
||||
except IntegrityError:
|
||||
messages.error(self.request, f"{photo_file.name} was not uploaded. Maybe the photo was already uploaded.")
|
||||
failed_upload += 1
|
||||
|
||||
# Notify user then managers
|
||||
if not failed_upload:
|
||||
messages.success(self.request, "All photos has been successfully uploaded.")
|
||||
else:
|
||||
n_success = len(files) - failed_upload
|
||||
messages.warning(self.request, f"Only {n_success} photos were successfully uploaded !")
|
||||
|
||||
gallery_title = form.cleaned_data['gallery'] or form.cleaned_data.get('new_gallery_title', '')
|
||||
photos = ", ".join(f.name for f in files)
|
||||
mail_managers(
|
||||
subject="New photos upload",
|
||||
message=f"{self.request.user.username} has uploaded in `{gallery_title}`: {photos}",
|
||||
)
|
||||
|
||||
return super().form_valid(form)
|
||||
4
tox.ini
4
tox.ini
|
|
@ -12,7 +12,7 @@ deps =
|
|||
-r{toxinidir}/requirements.txt
|
||||
coverage
|
||||
commands =
|
||||
coverage run --omit='photo21/wsgi.py' --source=photo21,photologue,photologue_custom ./manage.py test
|
||||
coverage run --omit='photo21/wsgi.py' --source=photo21,photologue ./manage.py test
|
||||
coverage report -m
|
||||
|
||||
[testenv:linters]
|
||||
|
|
@ -26,7 +26,7 @@ deps =
|
|||
pep8-naming
|
||||
pyflakes
|
||||
commands =
|
||||
flake8 photo21 photologue photologue_custom
|
||||
flake8 photo21 photologue
|
||||
|
||||
[flake8]
|
||||
ignore = W503, I100, I101
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue