diff --git a/photo21/locale/de/LC_MESSAGES/django.po b/photo21/locale/de/LC_MESSAGES/django.po index 1cff806..d45572b 100644 --- a/photo21/locale/de/LC_MESSAGES/django.po +++ b/photo21/locale/de/LC_MESSAGES/django.po @@ -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 \n" "Language-Team: LANGUAGE \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 "" diff --git a/photo21/locale/es/LC_MESSAGES/django.po b/photo21/locale/es/LC_MESSAGES/django.po index a9413d9..f05fed8 100644 --- a/photo21/locale/es/LC_MESSAGES/django.po +++ b/photo21/locale/es/LC_MESSAGES/django.po @@ -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 \n" "Language-Team: LANGUAGE \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 "" diff --git a/photo21/locale/fr/LC_MESSAGES/django.po b/photo21/locale/fr/LC_MESSAGES/django.po index ac7970b..7d7d518 100644 --- a/photo21/locale/fr/LC_MESSAGES/django.po +++ b/photo21/locale/fr/LC_MESSAGES/django.po @@ -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 \n" "Language-Team: LANGUAGE \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" diff --git a/photo21/settings.py b/photo21/settings.py index 5c61f42..9b2844b 100644 --- a/photo21/settings.py +++ b/photo21/settings.py @@ -62,7 +62,6 @@ INSTALLED_APPS = [ 'allauth.socialaccount', 'allauth_note_kfet', 'crispy_forms', - 'photologue_custom', 'photologue', 'taggit', ] diff --git a/photologue_custom/forms.py b/photologue/forms.py similarity index 98% rename from photologue_custom/forms.py rename to photologue/forms.py index 96f4498..8ef1f1c 100644 --- a/photologue_custom/forms.py +++ b/photologue/forms.py @@ -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): diff --git a/photologue/locale/de/LC_MESSAGES/django.po b/photologue/locale/de/LC_MESSAGES/django.po index f9a29ed..50c106d 100644 --- a/photologue/locale/de/LC_MESSAGES/django.po +++ b/photologue/locale/de/LC_MESSAGES/django.po @@ -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 \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" diff --git a/photologue/locale/es/LC_MESSAGES/django.po b/photologue/locale/es/LC_MESSAGES/django.po index 8a9ca71..e8f687f 100644 --- a/photologue/locale/es/LC_MESSAGES/django.po +++ b/photologue/locale/es/LC_MESSAGES/django.po @@ -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 \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" diff --git a/photologue/locale/fr/LC_MESSAGES/django.po b/photologue/locale/fr/LC_MESSAGES/django.po index f3b69fc..a996627 100644 --- a/photologue/locale/fr/LC_MESSAGES/django.po +++ b/photologue/locale/fr/LC_MESSAGES/django.po @@ -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 \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" diff --git a/photologue_custom/management/commands/duplicate.py b/photologue/management/commands/duplicate.py similarity index 100% rename from photologue_custom/management/commands/duplicate.py rename to photologue/management/commands/duplicate.py index 97a902a..56ce185 100644 --- a/photologue_custom/management/commands/duplicate.py +++ b/photologue/management/commands/duplicate.py @@ -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' diff --git a/photologue_custom/management/commands/rename_media.py b/photologue/management/commands/rename_media.py similarity index 100% rename from photologue_custom/management/commands/rename_media.py rename to photologue/management/commands/rename_media.py index 461870b..1f8767e 100644 --- a/photologue_custom/management/commands/rename_media.py +++ b/photologue/management/commands/rename_media.py @@ -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): diff --git a/photologue/migrations/0014_merge_related.py b/photologue/migrations/0014_merge_related.py index 2608233..8dfa458 100644 --- a/photologue/migrations/0014_merge_related.py +++ b/photologue/migrations/0014_merge_related.py @@ -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 diff --git a/photologue_custom/static/lightgallery/css/lg-thumbnail.css b/photologue/static/lightgallery/css/lg-thumbnail.css similarity index 100% rename from photologue_custom/static/lightgallery/css/lg-thumbnail.css rename to photologue/static/lightgallery/css/lg-thumbnail.css diff --git a/photologue_custom/static/lightgallery/css/lg-zoom.css b/photologue/static/lightgallery/css/lg-zoom.css similarity index 100% rename from photologue_custom/static/lightgallery/css/lg-zoom.css rename to photologue/static/lightgallery/css/lg-zoom.css diff --git a/photologue_custom/static/lightgallery/css/lightgallery.css b/photologue/static/lightgallery/css/lightgallery.css similarity index 100% rename from photologue_custom/static/lightgallery/css/lightgallery.css rename to photologue/static/lightgallery/css/lightgallery.css diff --git a/photologue_custom/static/lightgallery/fonts/lg.svg b/photologue/static/lightgallery/fonts/lg.svg similarity index 100% rename from photologue_custom/static/lightgallery/fonts/lg.svg rename to photologue/static/lightgallery/fonts/lg.svg diff --git a/photologue_custom/static/lightgallery/fonts/lg.ttf b/photologue/static/lightgallery/fonts/lg.ttf similarity index 100% rename from photologue_custom/static/lightgallery/fonts/lg.ttf rename to photologue/static/lightgallery/fonts/lg.ttf diff --git a/photologue_custom/static/lightgallery/fonts/lg.woff b/photologue/static/lightgallery/fonts/lg.woff similarity index 100% rename from photologue_custom/static/lightgallery/fonts/lg.woff rename to photologue/static/lightgallery/fonts/lg.woff diff --git a/photologue_custom/static/lightgallery/fonts/lg.woff2 b/photologue/static/lightgallery/fonts/lg.woff2 similarity index 100% rename from photologue_custom/static/lightgallery/fonts/lg.woff2 rename to photologue/static/lightgallery/fonts/lg.woff2 diff --git a/photologue_custom/static/lightgallery/images/loading.gif b/photologue/static/lightgallery/images/loading.gif similarity index 100% rename from photologue_custom/static/lightgallery/images/loading.gif rename to photologue/static/lightgallery/images/loading.gif diff --git a/photologue_custom/static/lightgallery/lightgallery.min.js b/photologue/static/lightgallery/lightgallery.min.js similarity index 100% rename from photologue_custom/static/lightgallery/lightgallery.min.js rename to photologue/static/lightgallery/lightgallery.min.js diff --git a/photologue_custom/static/lightgallery/plugins/admin/lg-admin.js b/photologue/static/lightgallery/plugins/admin/lg-admin.js similarity index 100% rename from photologue_custom/static/lightgallery/plugins/admin/lg-admin.js rename to photologue/static/lightgallery/plugins/admin/lg-admin.js diff --git a/photologue_custom/static/lightgallery/plugins/hash/lg-hash.min.js b/photologue/static/lightgallery/plugins/hash/lg-hash.min.js similarity index 100% rename from photologue_custom/static/lightgallery/plugins/hash/lg-hash.min.js rename to photologue/static/lightgallery/plugins/hash/lg-hash.min.js diff --git a/photologue_custom/static/lightgallery/plugins/thumbnail/lg-thumbnail.min.js b/photologue/static/lightgallery/plugins/thumbnail/lg-thumbnail.min.js similarity index 100% rename from photologue_custom/static/lightgallery/plugins/thumbnail/lg-thumbnail.min.js rename to photologue/static/lightgallery/plugins/thumbnail/lg-thumbnail.min.js diff --git a/photologue_custom/static/lightgallery/plugins/zoom/lg-zoom.min.js b/photologue/static/lightgallery/plugins/zoom/lg-zoom.min.js similarity index 100% rename from photologue_custom/static/lightgallery/plugins/zoom/lg-zoom.min.js rename to photologue/static/lightgallery/plugins/zoom/lg-zoom.min.js diff --git a/photologue_custom/templates/admin/photologue/photo/change_list.html b/photologue/templates/admin/photologue/photo/change_list.html similarity index 100% rename from photologue_custom/templates/admin/photologue/photo/change_list.html rename to photologue/templates/admin/photologue/photo/change_list.html diff --git a/photologue_custom/templates/photologue/gallery_archive.html b/photologue/templates/photologue/gallery_archive.html similarity index 100% rename from photologue_custom/templates/photologue/gallery_archive.html rename to photologue/templates/photologue/gallery_archive.html diff --git a/photologue_custom/templates/photologue/gallery_archive_year.html b/photologue/templates/photologue/gallery_archive_year.html similarity index 100% rename from photologue_custom/templates/photologue/gallery_archive_year.html rename to photologue/templates/photologue/gallery_archive_year.html diff --git a/photologue_custom/templates/photologue/gallery_detail.html b/photologue/templates/photologue/gallery_detail.html similarity index 100% rename from photologue_custom/templates/photologue/gallery_detail.html rename to photologue/templates/photologue/gallery_detail.html diff --git a/photologue_custom/templates/photologue/includes/gallery_sample.html b/photologue/templates/photologue/includes/gallery_sample.html similarity index 100% rename from photologue_custom/templates/photologue/includes/gallery_sample.html rename to photologue/templates/photologue/includes/gallery_sample.html diff --git a/photologue_custom/templates/photologue/photo_detail.html b/photologue/templates/photologue/photo_detail.html similarity index 100% rename from photologue_custom/templates/photologue/photo_detail.html rename to photologue/templates/photologue/photo_detail.html diff --git a/photologue_custom/templates/photologue/tag_detail.html b/photologue/templates/photologue/tag_detail.html similarity index 100% rename from photologue_custom/templates/photologue/tag_detail.html rename to photologue/templates/photologue/tag_detail.html diff --git a/photologue_custom/templates/photologue/upload.html b/photologue/templates/photologue/upload.html similarity index 100% rename from photologue_custom/templates/photologue/upload.html rename to photologue/templates/photologue/upload.html diff --git a/photologue/urls.py b/photologue/urls.py index 4772067..e4949f8 100644 --- a/photologue/urls.py +++ b/photologue/urls.py @@ -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 = [ diff --git a/photologue/views.py b/photologue/views.py index 2741b50..77953a8 100644 --- a/photologue/views.py +++ b/photologue/views.py @@ -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) diff --git a/photologue_custom/views.py b/photologue_custom/views.py deleted file mode 100644 index 38ebc7f..0000000 --- a/photologue_custom/views.py +++ /dev/null @@ -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) diff --git a/tox.ini b/tox.ini index f69e975..885d2da 100644 --- a/tox.ini +++ b/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