Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • AlekSIS/official/AlekSIS-App-Resint
  • sunweaver/AlekSIS-App-Resint
2 results
Show changes
Showing
with 1136 additions and 375 deletions
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-07 11:59+0100\n"
"POT-Creation-Date: 2022-01-12 16:31+0100\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"
......@@ -26,135 +26,129 @@ msgstr ""
msgid "Documents"
msgstr ""
#: aleksis/apps/resint/menus.py:46
#: aleksis/apps/resint/menus.py:49
msgid "Manage posters"
msgstr ""
#: aleksis/apps/resint/menus.py:57 aleksis/apps/resint/models.py:42
#: aleksis/apps/resint/menus.py:60 aleksis/apps/resint/models.py:45
#: aleksis/apps/resint/templates/resint/group/list.html:4
#: aleksis/apps/resint/templates/resint/group/list.html:14
msgid "Poster groups"
msgstr ""
#: aleksis/apps/resint/menus.py:68 aleksis/apps/resint/models.py:219
#: aleksis/apps/resint/menus.py:71 aleksis/apps/resint/models.py:237
#: aleksis/apps/resint/templates/resint/live_document/list.html:8
#: aleksis/apps/resint/templates/resint/live_document/list.html:9
msgid "Live documents"
msgstr ""
#: aleksis/apps/resint/models.py:22
#: aleksis/apps/resint/models.py:25
msgid "Slug used in URL name"
msgstr ""
#: aleksis/apps/resint/models.py:23
#: aleksis/apps/resint/models.py:26
msgid "If you use 'example', the filename will be 'example.pdf'."
msgstr ""
#: aleksis/apps/resint/models.py:25 aleksis/apps/resint/models.py:158
#: aleksis/apps/resint/models.py:28 aleksis/apps/resint/models.py:163
#: aleksis/apps/resint/templates/resint/group/list.html:19
msgid "Name"
msgstr ""
#: aleksis/apps/resint/models.py:27
#: aleksis/apps/resint/models.py:30
msgid "Publishing weekday"
msgstr ""
#: aleksis/apps/resint/models.py:29
#: aleksis/apps/resint/models.py:32
#: aleksis/apps/resint/templates/resint/group/list.html:22
msgid "Publishing time"
msgstr ""
#: aleksis/apps/resint/models.py:32
#: aleksis/apps/resint/models.py:35
msgid "Default PDF"
msgstr ""
#: aleksis/apps/resint/models.py:33
#: aleksis/apps/resint/models.py:36
msgid "This PDF file will be shown if there is no current PDF."
msgstr ""
#: aleksis/apps/resint/models.py:37
#: aleksis/apps/resint/models.py:40
msgid "Show in menu"
msgstr ""
#: aleksis/apps/resint/models.py:38
#: aleksis/apps/resint/models.py:41
msgid "Show for not logged-in users"
msgstr ""
#: aleksis/apps/resint/models.py:41 aleksis/apps/resint/models.py:107
#: aleksis/apps/resint/models.py:44 aleksis/apps/resint/models.py:110
msgid "Poster group"
msgstr ""
#: aleksis/apps/resint/models.py:48
#: aleksis/apps/resint/models.py:51
msgid "Can view all posters of this group"
msgstr ""
#: aleksis/apps/resint/models.py:49
#: aleksis/apps/resint/models.py:52
msgid "Can upload new posters to this group"
msgstr ""
#: aleksis/apps/resint/models.py:50
#: aleksis/apps/resint/models.py:53
msgid "Can change all posters of this group"
msgstr ""
#: aleksis/apps/resint/models.py:51
#: aleksis/apps/resint/models.py:54
msgid "Can delete all posters of this group"
msgstr ""
#: aleksis/apps/resint/models.py:110
#: aleksis/apps/resint/models.py:113
msgid "Calendar week"
msgstr ""
#: aleksis/apps/resint/models.py:115
#: aleksis/apps/resint/models.py:118
msgid "Year"
msgstr ""
#: aleksis/apps/resint/models.py:118
#: aleksis/apps/resint/models.py:121
msgid "PDF"
msgstr ""
#: aleksis/apps/resint/models.py:128
#: aleksis/apps/resint/models.py:131
msgid "Poster"
msgstr ""
#: aleksis/apps/resint/models.py:129
#: aleksis/apps/resint/models.py:132
#: aleksis/apps/resint/templates/resint/poster/list.html:5
#: aleksis/apps/resint/templates/resint/poster/list.html:8
msgid "Posters"
msgstr ""
#: aleksis/apps/resint/models.py:155
#: aleksis/apps/resint/models.py:160
msgid "Slug"
msgstr ""
#: aleksis/apps/resint/models.py:156
#: aleksis/apps/resint/models.py:161
msgid "This will be used for the name of the current PDF file."
msgstr ""
#: aleksis/apps/resint/models.py:164
#: aleksis/apps/resint/models.py:168
msgid "Current file"
msgstr ""
#: aleksis/apps/resint/models.py:168
#: aleksis/apps/resint/models.py:172
msgid "Was the last update triggered manually?"
msgstr ""
#: aleksis/apps/resint/models.py:218
#: aleksis/apps/resint/models.py:236
msgid "Live document"
msgstr ""
#: aleksis/apps/resint/tables.py:20
#: aleksis/apps/resint/tables.py:20 aleksis/apps/resint/tables.py:22
#: aleksis/apps/resint/templates/resint/group/list.html:49
#: aleksis/apps/resint/templates/resint/poster/list.html:81
msgid "Edit"
msgstr ""
#: aleksis/apps/resint/tables.py:22 aleksis/apps/resint/tables.py:29
#: aleksis/apps/resint/templates/resint/group/list.html:24
#: aleksis/apps/resint/templates/resint/poster/list.html:65
msgid "Actions"
msgstr ""
#: aleksis/apps/resint/tables.py:27
#: aleksis/apps/resint/tables.py:27 aleksis/apps/resint/tables.py:29
#: aleksis/apps/resint/templates/resint/group/list.html:58
#: aleksis/apps/resint/templates/resint/poster/list.html:87
msgid "Delete"
......@@ -186,6 +180,11 @@ msgstr ""
msgid "Default PDF file"
msgstr ""
#: aleksis/apps/resint/templates/resint/group/list.html:24
#: aleksis/apps/resint/templates/resint/poster/list.html:65
msgid "Actions"
msgstr ""
#: aleksis/apps/resint/templates/resint/group/list.html:40
msgid "Open"
msgstr ""
......@@ -206,15 +205,19 @@ msgstr ""
msgid "Edit %(document)s"
msgstr ""
#: aleksis/apps/resint/templates/resint/live_document/list.html:14
#: aleksis/apps/resint/templates/resint/live_document/list.html:15
msgid "Create live document"
msgstr ""
#: aleksis/apps/resint/templates/resint/live_document/list.html:22
#: aleksis/apps/resint/templates/resint/live_document/list.html:23
#, python-format
msgid "Create %(name)s"
msgstr ""
#: aleksis/apps/resint/templates/resint/live_document/list.html:31
msgid "There is no app installed which registers any live document types."
msgstr ""
#: aleksis/apps/resint/templates/resint/poster/edit.html:5
#: aleksis/apps/resint/templates/resint/poster/edit.html:8
msgid "Edit poster"
......
......@@ -7,17 +7,16 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-07 11:59+0100\n"
"PO-Revision-Date: 2021-11-07 11:17+0000\n"
"POT-Creation-Date: 2022-01-12 16:31+0100\n"
"PO-Revision-Date: 2024-08-19 20:28+0000\n"
"Last-Translator: Jonathan Weth <teckids@jonathanweth.de>\n"
"Language-Team: German <https://translate.edugit.org/projects/aleksis/"
"aleksis-app-resint/de/>\n"
"Language-Team: German <https://translate.edugit.org/projects/aleksis/aleksis-app-resint/de/>\n"
"Language: de_DE\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.8\n"
"X-Generator: Weblate 5.0.2\n"
#: aleksis/apps/resint/apps.py:27
msgid "Access PDF file for live document"
......@@ -27,135 +26,129 @@ msgstr "PDF-Datei für Live-Dokument abrufen"
msgid "Documents"
msgstr "Dokumente"
#: aleksis/apps/resint/menus.py:46
#: aleksis/apps/resint/menus.py:49
msgid "Manage posters"
msgstr "Dokumente verwalten"
#: aleksis/apps/resint/menus.py:57 aleksis/apps/resint/models.py:42
#: aleksis/apps/resint/menus.py:60 aleksis/apps/resint/models.py:45
#: aleksis/apps/resint/templates/resint/group/list.html:4
#: aleksis/apps/resint/templates/resint/group/list.html:14
msgid "Poster groups"
msgstr "Dokumentengruppen"
#: aleksis/apps/resint/menus.py:68 aleksis/apps/resint/models.py:219
#: aleksis/apps/resint/menus.py:71 aleksis/apps/resint/models.py:237
#: aleksis/apps/resint/templates/resint/live_document/list.html:8
#: aleksis/apps/resint/templates/resint/live_document/list.html:9
msgid "Live documents"
msgstr "Live-Dokumente"
#: aleksis/apps/resint/models.py:22
#: aleksis/apps/resint/models.py:25
msgid "Slug used in URL name"
msgstr "Slug für den URL-Namen"
#: aleksis/apps/resint/models.py:23
#: aleksis/apps/resint/models.py:26
msgid "If you use 'example', the filename will be 'example.pdf'."
msgstr "Wenn Sie 'beispiel' nutzen, wird der Dateiname 'beispiel.pdf' sein."
#: aleksis/apps/resint/models.py:25 aleksis/apps/resint/models.py:158
#: aleksis/apps/resint/models.py:28 aleksis/apps/resint/models.py:163
#: aleksis/apps/resint/templates/resint/group/list.html:19
msgid "Name"
msgstr "Name"
#: aleksis/apps/resint/models.py:27
#: aleksis/apps/resint/models.py:30
msgid "Publishing weekday"
msgstr "Wochentag der Veröffentlichung"
#: aleksis/apps/resint/models.py:29
#: aleksis/apps/resint/models.py:32
#: aleksis/apps/resint/templates/resint/group/list.html:22
msgid "Publishing time"
msgstr "Zeitpunkt der Veröffentlichung"
#: aleksis/apps/resint/models.py:32
#: aleksis/apps/resint/models.py:35
msgid "Default PDF"
msgstr "Standard-PDF"
#: aleksis/apps/resint/models.py:33
#: aleksis/apps/resint/models.py:36
msgid "This PDF file will be shown if there is no current PDF."
msgstr "Diese PDF-Datei wird angezeigt, wenn es kein aktuelles PDF gibt."
#: aleksis/apps/resint/models.py:37
#: aleksis/apps/resint/models.py:40
msgid "Show in menu"
msgstr "Im Menü anzeigen"
#: aleksis/apps/resint/models.py:38
#: aleksis/apps/resint/models.py:41
msgid "Show for not logged-in users"
msgstr "Für nicht angemeldete Nutzer anzeigen"
#: aleksis/apps/resint/models.py:41 aleksis/apps/resint/models.py:107
#: aleksis/apps/resint/models.py:44 aleksis/apps/resint/models.py:110
msgid "Poster group"
msgstr "Dokumentengruppe"
#: aleksis/apps/resint/models.py:48
#: aleksis/apps/resint/models.py:51
msgid "Can view all posters of this group"
msgstr "Kann alle Dokumente dieser Gruppe sehen"
#: aleksis/apps/resint/models.py:49
#: aleksis/apps/resint/models.py:52
msgid "Can upload new posters to this group"
msgstr "Kann neue Dokumente zu dieser Gruppe hochladen"
#: aleksis/apps/resint/models.py:50
#: aleksis/apps/resint/models.py:53
msgid "Can change all posters of this group"
msgstr "Kann alle Dokumente dieser Gruppe verändern"
#: aleksis/apps/resint/models.py:51
#: aleksis/apps/resint/models.py:54
msgid "Can delete all posters of this group"
msgstr "Kann alle Dokumente dieser Gruppe löschen"
#: aleksis/apps/resint/models.py:110
#: aleksis/apps/resint/models.py:113
msgid "Calendar week"
msgstr "Kalenderwoche"
#: aleksis/apps/resint/models.py:115
#: aleksis/apps/resint/models.py:118
msgid "Year"
msgstr "Jahr"
#: aleksis/apps/resint/models.py:118
#: aleksis/apps/resint/models.py:121
msgid "PDF"
msgstr "PDF"
#: aleksis/apps/resint/models.py:128
#: aleksis/apps/resint/models.py:131
msgid "Poster"
msgstr "Dokument"
#: aleksis/apps/resint/models.py:129
#: aleksis/apps/resint/models.py:132
#: aleksis/apps/resint/templates/resint/poster/list.html:5
#: aleksis/apps/resint/templates/resint/poster/list.html:8
msgid "Posters"
msgstr "Dokumente"
#: aleksis/apps/resint/models.py:155
#: aleksis/apps/resint/models.py:160
msgid "Slug"
msgstr "Slug"
#: aleksis/apps/resint/models.py:156
#: aleksis/apps/resint/models.py:161
msgid "This will be used for the name of the current PDF file."
msgstr "Dies wird für den Namen der aktuellen PDF-Datei benutzt werden."
#: aleksis/apps/resint/models.py:164
#: aleksis/apps/resint/models.py:168
msgid "Current file"
msgstr "Aktuelle Datei"
#: aleksis/apps/resint/models.py:168
#: aleksis/apps/resint/models.py:172
msgid "Was the last update triggered manually?"
msgstr "Wurde die letzte Aktualisierung manuell ausgelöst?"
#: aleksis/apps/resint/models.py:218
#: aleksis/apps/resint/models.py:236
msgid "Live document"
msgstr "Live-Dokument"
#: aleksis/apps/resint/tables.py:20
#: aleksis/apps/resint/tables.py:20 aleksis/apps/resint/tables.py:22
#: aleksis/apps/resint/templates/resint/group/list.html:49
#: aleksis/apps/resint/templates/resint/poster/list.html:81
msgid "Edit"
msgstr "Bearbeiten"
#: aleksis/apps/resint/tables.py:22 aleksis/apps/resint/tables.py:29
#: aleksis/apps/resint/templates/resint/group/list.html:24
#: aleksis/apps/resint/templates/resint/poster/list.html:65
msgid "Actions"
msgstr "Aktionen"
#: aleksis/apps/resint/tables.py:27
#: aleksis/apps/resint/tables.py:27 aleksis/apps/resint/tables.py:29
#: aleksis/apps/resint/templates/resint/group/list.html:58
#: aleksis/apps/resint/templates/resint/poster/list.html:87
msgid "Delete"
......@@ -187,6 +180,11 @@ msgstr "Tag der Veröffentlichung"
msgid "Default PDF file"
msgstr "Standard-PDF-Datei"
#: aleksis/apps/resint/templates/resint/group/list.html:24
#: aleksis/apps/resint/templates/resint/poster/list.html:65
msgid "Actions"
msgstr "Aktionen"
#: aleksis/apps/resint/templates/resint/group/list.html:40
msgid "Open"
msgstr "Öffnen"
......@@ -207,15 +205,20 @@ msgstr "%(document)s erstellen"
msgid "Edit %(document)s"
msgstr "%(document)s bearbeiten"
#: aleksis/apps/resint/templates/resint/live_document/list.html:14
#: aleksis/apps/resint/templates/resint/live_document/list.html:15
msgid "Create live document"
msgstr "Live-Dokument erstellen"
#: aleksis/apps/resint/templates/resint/live_document/list.html:22
#: aleksis/apps/resint/templates/resint/live_document/list.html:23
#, python-format
msgid "Create %(name)s"
msgstr "%(name)s erstellen"
#: aleksis/apps/resint/templates/resint/live_document/list.html:31
msgid "There is no app installed which registers any live document types."
msgstr ""
"Es ist keine App installiert, die irgendeinen Live-Dokument-Typ registriert."
#: aleksis/apps/resint/templates/resint/poster/edit.html:5
#: aleksis/apps/resint/templates/resint/poster/edit.html:8
msgid "Edit poster"
......
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-07 11:59+0100\n"
"POT-Creation-Date: 2022-01-12 16:31+0100\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"
......@@ -26,135 +26,129 @@ msgstr ""
msgid "Documents"
msgstr ""
#: aleksis/apps/resint/menus.py:46
#: aleksis/apps/resint/menus.py:49
msgid "Manage posters"
msgstr ""
#: aleksis/apps/resint/menus.py:57 aleksis/apps/resint/models.py:42
#: aleksis/apps/resint/menus.py:60 aleksis/apps/resint/models.py:45
#: aleksis/apps/resint/templates/resint/group/list.html:4
#: aleksis/apps/resint/templates/resint/group/list.html:14
msgid "Poster groups"
msgstr ""
#: aleksis/apps/resint/menus.py:68 aleksis/apps/resint/models.py:219
#: aleksis/apps/resint/menus.py:71 aleksis/apps/resint/models.py:237
#: aleksis/apps/resint/templates/resint/live_document/list.html:8
#: aleksis/apps/resint/templates/resint/live_document/list.html:9
msgid "Live documents"
msgstr ""
#: aleksis/apps/resint/models.py:22
#: aleksis/apps/resint/models.py:25
msgid "Slug used in URL name"
msgstr ""
#: aleksis/apps/resint/models.py:23
#: aleksis/apps/resint/models.py:26
msgid "If you use 'example', the filename will be 'example.pdf'."
msgstr ""
#: aleksis/apps/resint/models.py:25 aleksis/apps/resint/models.py:158
#: aleksis/apps/resint/models.py:28 aleksis/apps/resint/models.py:163
#: aleksis/apps/resint/templates/resint/group/list.html:19
msgid "Name"
msgstr ""
#: aleksis/apps/resint/models.py:27
#: aleksis/apps/resint/models.py:30
msgid "Publishing weekday"
msgstr ""
#: aleksis/apps/resint/models.py:29
#: aleksis/apps/resint/models.py:32
#: aleksis/apps/resint/templates/resint/group/list.html:22
msgid "Publishing time"
msgstr ""
#: aleksis/apps/resint/models.py:32
#: aleksis/apps/resint/models.py:35
msgid "Default PDF"
msgstr ""
#: aleksis/apps/resint/models.py:33
#: aleksis/apps/resint/models.py:36
msgid "This PDF file will be shown if there is no current PDF."
msgstr ""
#: aleksis/apps/resint/models.py:37
#: aleksis/apps/resint/models.py:40
msgid "Show in menu"
msgstr ""
#: aleksis/apps/resint/models.py:38
#: aleksis/apps/resint/models.py:41
msgid "Show for not logged-in users"
msgstr ""
#: aleksis/apps/resint/models.py:41 aleksis/apps/resint/models.py:107
#: aleksis/apps/resint/models.py:44 aleksis/apps/resint/models.py:110
msgid "Poster group"
msgstr ""
#: aleksis/apps/resint/models.py:48
#: aleksis/apps/resint/models.py:51
msgid "Can view all posters of this group"
msgstr ""
#: aleksis/apps/resint/models.py:49
#: aleksis/apps/resint/models.py:52
msgid "Can upload new posters to this group"
msgstr ""
#: aleksis/apps/resint/models.py:50
#: aleksis/apps/resint/models.py:53
msgid "Can change all posters of this group"
msgstr ""
#: aleksis/apps/resint/models.py:51
#: aleksis/apps/resint/models.py:54
msgid "Can delete all posters of this group"
msgstr ""
#: aleksis/apps/resint/models.py:110
#: aleksis/apps/resint/models.py:113
msgid "Calendar week"
msgstr ""
#: aleksis/apps/resint/models.py:115
#: aleksis/apps/resint/models.py:118
msgid "Year"
msgstr ""
#: aleksis/apps/resint/models.py:118
#: aleksis/apps/resint/models.py:121
msgid "PDF"
msgstr ""
#: aleksis/apps/resint/models.py:128
#: aleksis/apps/resint/models.py:131
msgid "Poster"
msgstr ""
#: aleksis/apps/resint/models.py:129
#: aleksis/apps/resint/models.py:132
#: aleksis/apps/resint/templates/resint/poster/list.html:5
#: aleksis/apps/resint/templates/resint/poster/list.html:8
msgid "Posters"
msgstr ""
#: aleksis/apps/resint/models.py:155
#: aleksis/apps/resint/models.py:160
msgid "Slug"
msgstr ""
#: aleksis/apps/resint/models.py:156
#: aleksis/apps/resint/models.py:161
msgid "This will be used for the name of the current PDF file."
msgstr ""
#: aleksis/apps/resint/models.py:164
#: aleksis/apps/resint/models.py:168
msgid "Current file"
msgstr ""
#: aleksis/apps/resint/models.py:168
#: aleksis/apps/resint/models.py:172
msgid "Was the last update triggered manually?"
msgstr ""
#: aleksis/apps/resint/models.py:218
#: aleksis/apps/resint/models.py:236
msgid "Live document"
msgstr ""
#: aleksis/apps/resint/tables.py:20
#: aleksis/apps/resint/tables.py:20 aleksis/apps/resint/tables.py:22
#: aleksis/apps/resint/templates/resint/group/list.html:49
#: aleksis/apps/resint/templates/resint/poster/list.html:81
msgid "Edit"
msgstr ""
#: aleksis/apps/resint/tables.py:22 aleksis/apps/resint/tables.py:29
#: aleksis/apps/resint/templates/resint/group/list.html:24
#: aleksis/apps/resint/templates/resint/poster/list.html:65
msgid "Actions"
msgstr ""
#: aleksis/apps/resint/tables.py:27
#: aleksis/apps/resint/tables.py:27 aleksis/apps/resint/tables.py:29
#: aleksis/apps/resint/templates/resint/group/list.html:58
#: aleksis/apps/resint/templates/resint/poster/list.html:87
msgid "Delete"
......@@ -186,6 +180,11 @@ msgstr ""
msgid "Default PDF file"
msgstr ""
#: aleksis/apps/resint/templates/resint/group/list.html:24
#: aleksis/apps/resint/templates/resint/poster/list.html:65
msgid "Actions"
msgstr ""
#: aleksis/apps/resint/templates/resint/group/list.html:40
msgid "Open"
msgstr ""
......@@ -206,15 +205,19 @@ msgstr ""
msgid "Edit %(document)s"
msgstr ""
#: aleksis/apps/resint/templates/resint/live_document/list.html:14
#: aleksis/apps/resint/templates/resint/live_document/list.html:15
msgid "Create live document"
msgstr ""
#: aleksis/apps/resint/templates/resint/live_document/list.html:22
#: aleksis/apps/resint/templates/resint/live_document/list.html:23
#, python-format
msgid "Create %(name)s"
msgstr ""
#: aleksis/apps/resint/templates/resint/live_document/list.html:31
msgid "There is no app installed which registers any live document types."
msgstr ""
#: aleksis/apps/resint/templates/resint/poster/edit.html:5
#: aleksis/apps/resint/templates/resint/poster/edit.html:8
msgid "Edit poster"
......
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-07 11:59+0100\n"
"POT-Creation-Date: 2022-01-12 16:31+0100\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"
......@@ -25,135 +25,129 @@ msgstr ""
msgid "Documents"
msgstr ""
#: aleksis/apps/resint/menus.py:46
#: aleksis/apps/resint/menus.py:49
msgid "Manage posters"
msgstr ""
#: aleksis/apps/resint/menus.py:57 aleksis/apps/resint/models.py:42
#: aleksis/apps/resint/menus.py:60 aleksis/apps/resint/models.py:45
#: aleksis/apps/resint/templates/resint/group/list.html:4
#: aleksis/apps/resint/templates/resint/group/list.html:14
msgid "Poster groups"
msgstr ""
#: aleksis/apps/resint/menus.py:68 aleksis/apps/resint/models.py:219
#: aleksis/apps/resint/menus.py:71 aleksis/apps/resint/models.py:237
#: aleksis/apps/resint/templates/resint/live_document/list.html:8
#: aleksis/apps/resint/templates/resint/live_document/list.html:9
msgid "Live documents"
msgstr ""
#: aleksis/apps/resint/models.py:22
#: aleksis/apps/resint/models.py:25
msgid "Slug used in URL name"
msgstr ""
#: aleksis/apps/resint/models.py:23
#: aleksis/apps/resint/models.py:26
msgid "If you use 'example', the filename will be 'example.pdf'."
msgstr ""
#: aleksis/apps/resint/models.py:25 aleksis/apps/resint/models.py:158
#: aleksis/apps/resint/models.py:28 aleksis/apps/resint/models.py:163
#: aleksis/apps/resint/templates/resint/group/list.html:19
msgid "Name"
msgstr ""
#: aleksis/apps/resint/models.py:27
#: aleksis/apps/resint/models.py:30
msgid "Publishing weekday"
msgstr ""
#: aleksis/apps/resint/models.py:29
#: aleksis/apps/resint/models.py:32
#: aleksis/apps/resint/templates/resint/group/list.html:22
msgid "Publishing time"
msgstr ""
#: aleksis/apps/resint/models.py:32
#: aleksis/apps/resint/models.py:35
msgid "Default PDF"
msgstr ""
#: aleksis/apps/resint/models.py:33
#: aleksis/apps/resint/models.py:36
msgid "This PDF file will be shown if there is no current PDF."
msgstr ""
#: aleksis/apps/resint/models.py:37
#: aleksis/apps/resint/models.py:40
msgid "Show in menu"
msgstr ""
#: aleksis/apps/resint/models.py:38
#: aleksis/apps/resint/models.py:41
msgid "Show for not logged-in users"
msgstr ""
#: aleksis/apps/resint/models.py:41 aleksis/apps/resint/models.py:107
#: aleksis/apps/resint/models.py:44 aleksis/apps/resint/models.py:110
msgid "Poster group"
msgstr ""
#: aleksis/apps/resint/models.py:48
#: aleksis/apps/resint/models.py:51
msgid "Can view all posters of this group"
msgstr ""
#: aleksis/apps/resint/models.py:49
#: aleksis/apps/resint/models.py:52
msgid "Can upload new posters to this group"
msgstr ""
#: aleksis/apps/resint/models.py:50
#: aleksis/apps/resint/models.py:53
msgid "Can change all posters of this group"
msgstr ""
#: aleksis/apps/resint/models.py:51
#: aleksis/apps/resint/models.py:54
msgid "Can delete all posters of this group"
msgstr ""
#: aleksis/apps/resint/models.py:110
#: aleksis/apps/resint/models.py:113
msgid "Calendar week"
msgstr ""
#: aleksis/apps/resint/models.py:115
#: aleksis/apps/resint/models.py:118
msgid "Year"
msgstr ""
#: aleksis/apps/resint/models.py:118
#: aleksis/apps/resint/models.py:121
msgid "PDF"
msgstr ""
#: aleksis/apps/resint/models.py:128
#: aleksis/apps/resint/models.py:131
msgid "Poster"
msgstr ""
#: aleksis/apps/resint/models.py:129
#: aleksis/apps/resint/models.py:132
#: aleksis/apps/resint/templates/resint/poster/list.html:5
#: aleksis/apps/resint/templates/resint/poster/list.html:8
msgid "Posters"
msgstr ""
#: aleksis/apps/resint/models.py:155
#: aleksis/apps/resint/models.py:160
msgid "Slug"
msgstr ""
#: aleksis/apps/resint/models.py:156
#: aleksis/apps/resint/models.py:161
msgid "This will be used for the name of the current PDF file."
msgstr ""
#: aleksis/apps/resint/models.py:164
#: aleksis/apps/resint/models.py:168
msgid "Current file"
msgstr ""
#: aleksis/apps/resint/models.py:168
#: aleksis/apps/resint/models.py:172
msgid "Was the last update triggered manually?"
msgstr ""
#: aleksis/apps/resint/models.py:218
#: aleksis/apps/resint/models.py:236
msgid "Live document"
msgstr ""
#: aleksis/apps/resint/tables.py:20
#: aleksis/apps/resint/tables.py:20 aleksis/apps/resint/tables.py:22
#: aleksis/apps/resint/templates/resint/group/list.html:49
#: aleksis/apps/resint/templates/resint/poster/list.html:81
msgid "Edit"
msgstr ""
#: aleksis/apps/resint/tables.py:22 aleksis/apps/resint/tables.py:29
#: aleksis/apps/resint/templates/resint/group/list.html:24
#: aleksis/apps/resint/templates/resint/poster/list.html:65
msgid "Actions"
msgstr ""
#: aleksis/apps/resint/tables.py:27
#: aleksis/apps/resint/tables.py:27 aleksis/apps/resint/tables.py:29
#: aleksis/apps/resint/templates/resint/group/list.html:58
#: aleksis/apps/resint/templates/resint/poster/list.html:87
msgid "Delete"
......@@ -185,6 +179,11 @@ msgstr ""
msgid "Default PDF file"
msgstr ""
#: aleksis/apps/resint/templates/resint/group/list.html:24
#: aleksis/apps/resint/templates/resint/poster/list.html:65
msgid "Actions"
msgstr ""
#: aleksis/apps/resint/templates/resint/group/list.html:40
msgid "Open"
msgstr ""
......@@ -205,15 +204,19 @@ msgstr ""
msgid "Edit %(document)s"
msgstr ""
#: aleksis/apps/resint/templates/resint/live_document/list.html:14
#: aleksis/apps/resint/templates/resint/live_document/list.html:15
msgid "Create live document"
msgstr ""
#: aleksis/apps/resint/templates/resint/live_document/list.html:22
#: aleksis/apps/resint/templates/resint/live_document/list.html:23
#, python-format
msgid "Create %(name)s"
msgstr ""
#: aleksis/apps/resint/templates/resint/live_document/list.html:31
msgid "There is no app installed which registers any live document types."
msgstr ""
#: aleksis/apps/resint/templates/resint/poster/edit.html:5
#: aleksis/apps/resint/templates/resint/poster/edit.html:8
msgid "Edit poster"
......
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-07 11:59+0100\n"
"POT-Creation-Date: 2022-01-12 16:31+0100\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"
......@@ -25,135 +25,129 @@ msgstr ""
msgid "Documents"
msgstr ""
#: aleksis/apps/resint/menus.py:46
#: aleksis/apps/resint/menus.py:49
msgid "Manage posters"
msgstr ""
#: aleksis/apps/resint/menus.py:57 aleksis/apps/resint/models.py:42
#: aleksis/apps/resint/menus.py:60 aleksis/apps/resint/models.py:45
#: aleksis/apps/resint/templates/resint/group/list.html:4
#: aleksis/apps/resint/templates/resint/group/list.html:14
msgid "Poster groups"
msgstr ""
#: aleksis/apps/resint/menus.py:68 aleksis/apps/resint/models.py:219
#: aleksis/apps/resint/menus.py:71 aleksis/apps/resint/models.py:237
#: aleksis/apps/resint/templates/resint/live_document/list.html:8
#: aleksis/apps/resint/templates/resint/live_document/list.html:9
msgid "Live documents"
msgstr ""
#: aleksis/apps/resint/models.py:22
#: aleksis/apps/resint/models.py:25
msgid "Slug used in URL name"
msgstr ""
#: aleksis/apps/resint/models.py:23
#: aleksis/apps/resint/models.py:26
msgid "If you use 'example', the filename will be 'example.pdf'."
msgstr ""
#: aleksis/apps/resint/models.py:25 aleksis/apps/resint/models.py:158
#: aleksis/apps/resint/models.py:28 aleksis/apps/resint/models.py:163
#: aleksis/apps/resint/templates/resint/group/list.html:19
msgid "Name"
msgstr ""
#: aleksis/apps/resint/models.py:27
#: aleksis/apps/resint/models.py:30
msgid "Publishing weekday"
msgstr ""
#: aleksis/apps/resint/models.py:29
#: aleksis/apps/resint/models.py:32
#: aleksis/apps/resint/templates/resint/group/list.html:22
msgid "Publishing time"
msgstr ""
#: aleksis/apps/resint/models.py:32
#: aleksis/apps/resint/models.py:35
msgid "Default PDF"
msgstr ""
#: aleksis/apps/resint/models.py:33
#: aleksis/apps/resint/models.py:36
msgid "This PDF file will be shown if there is no current PDF."
msgstr ""
#: aleksis/apps/resint/models.py:37
#: aleksis/apps/resint/models.py:40
msgid "Show in menu"
msgstr ""
#: aleksis/apps/resint/models.py:38
#: aleksis/apps/resint/models.py:41
msgid "Show for not logged-in users"
msgstr ""
#: aleksis/apps/resint/models.py:41 aleksis/apps/resint/models.py:107
#: aleksis/apps/resint/models.py:44 aleksis/apps/resint/models.py:110
msgid "Poster group"
msgstr ""
#: aleksis/apps/resint/models.py:48
#: aleksis/apps/resint/models.py:51
msgid "Can view all posters of this group"
msgstr ""
#: aleksis/apps/resint/models.py:49
#: aleksis/apps/resint/models.py:52
msgid "Can upload new posters to this group"
msgstr ""
#: aleksis/apps/resint/models.py:50
#: aleksis/apps/resint/models.py:53
msgid "Can change all posters of this group"
msgstr ""
#: aleksis/apps/resint/models.py:51
#: aleksis/apps/resint/models.py:54
msgid "Can delete all posters of this group"
msgstr ""
#: aleksis/apps/resint/models.py:110
#: aleksis/apps/resint/models.py:113
msgid "Calendar week"
msgstr ""
#: aleksis/apps/resint/models.py:115
#: aleksis/apps/resint/models.py:118
msgid "Year"
msgstr ""
#: aleksis/apps/resint/models.py:118
#: aleksis/apps/resint/models.py:121
msgid "PDF"
msgstr ""
#: aleksis/apps/resint/models.py:128
#: aleksis/apps/resint/models.py:131
msgid "Poster"
msgstr ""
#: aleksis/apps/resint/models.py:129
#: aleksis/apps/resint/models.py:132
#: aleksis/apps/resint/templates/resint/poster/list.html:5
#: aleksis/apps/resint/templates/resint/poster/list.html:8
msgid "Posters"
msgstr ""
#: aleksis/apps/resint/models.py:155
#: aleksis/apps/resint/models.py:160
msgid "Slug"
msgstr ""
#: aleksis/apps/resint/models.py:156
#: aleksis/apps/resint/models.py:161
msgid "This will be used for the name of the current PDF file."
msgstr ""
#: aleksis/apps/resint/models.py:164
#: aleksis/apps/resint/models.py:168
msgid "Current file"
msgstr ""
#: aleksis/apps/resint/models.py:168
#: aleksis/apps/resint/models.py:172
msgid "Was the last update triggered manually?"
msgstr ""
#: aleksis/apps/resint/models.py:218
#: aleksis/apps/resint/models.py:236
msgid "Live document"
msgstr ""
#: aleksis/apps/resint/tables.py:20
#: aleksis/apps/resint/tables.py:20 aleksis/apps/resint/tables.py:22
#: aleksis/apps/resint/templates/resint/group/list.html:49
#: aleksis/apps/resint/templates/resint/poster/list.html:81
msgid "Edit"
msgstr ""
#: aleksis/apps/resint/tables.py:22 aleksis/apps/resint/tables.py:29
#: aleksis/apps/resint/templates/resint/group/list.html:24
#: aleksis/apps/resint/templates/resint/poster/list.html:65
msgid "Actions"
msgstr ""
#: aleksis/apps/resint/tables.py:27
#: aleksis/apps/resint/tables.py:27 aleksis/apps/resint/tables.py:29
#: aleksis/apps/resint/templates/resint/group/list.html:58
#: aleksis/apps/resint/templates/resint/poster/list.html:87
msgid "Delete"
......@@ -185,6 +179,11 @@ msgstr ""
msgid "Default PDF file"
msgstr ""
#: aleksis/apps/resint/templates/resint/group/list.html:24
#: aleksis/apps/resint/templates/resint/poster/list.html:65
msgid "Actions"
msgstr ""
#: aleksis/apps/resint/templates/resint/group/list.html:40
msgid "Open"
msgstr ""
......@@ -205,15 +204,19 @@ msgstr ""
msgid "Edit %(document)s"
msgstr ""
#: aleksis/apps/resint/templates/resint/live_document/list.html:14
#: aleksis/apps/resint/templates/resint/live_document/list.html:15
msgid "Create live document"
msgstr ""
#: aleksis/apps/resint/templates/resint/live_document/list.html:22
#: aleksis/apps/resint/templates/resint/live_document/list.html:23
#, python-format
msgid "Create %(name)s"
msgstr ""
#: aleksis/apps/resint/templates/resint/live_document/list.html:31
msgid "There is no app installed which registers any live document types."
msgstr ""
#: aleksis/apps/resint/templates/resint/poster/edit.html:5
#: aleksis/apps/resint/templates/resint/poster/edit.html:8
msgid "Edit poster"
......
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-23 12:52+0000\n"
"PO-Revision-Date: 2023-05-26 04:38+0000\n"
"Last-Translator: Serhii Horichenko <m@sgg.im>\n"
"Language-Team: Russian <https://translate.edugit.org/projects/aleksis/aleksis-app-resint/ru/>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
"X-Generator: Weblate 4.12.1\n"
#: aleksis/apps/resint/apps.py:27
msgid "Access PDF file for live document"
msgstr "Доступ PDF файла для онлайн-документа"
#: aleksis/apps/resint/menus.py:37
msgid "Documents"
msgstr "Документы"
#: aleksis/apps/resint/menus.py:49
msgid "Manage posters"
msgstr "Управление документами"
#: aleksis/apps/resint/menus.py:60 aleksis/apps/resint/models.py:45
#: aleksis/apps/resint/templates/resint/group/list.html:4
#: aleksis/apps/resint/templates/resint/group/list.html:14
msgid "Poster groups"
msgstr "Группы документов"
#: aleksis/apps/resint/menus.py:71 aleksis/apps/resint/models.py:237
#: aleksis/apps/resint/templates/resint/live_document/list.html:8
#: aleksis/apps/resint/templates/resint/live_document/list.html:9
msgid "Live documents"
msgstr "Онлайн-документы"
#: aleksis/apps/resint/models.py:25
msgid "Slug used in URL name"
msgstr "Хвост (slug) в URL-адресе"
#: aleksis/apps/resint/models.py:26
msgid "If you use 'example', the filename will be 'example.pdf'."
msgstr "При использовании 'пример' имя файла будет 'пример.pdf'."
#: aleksis/apps/resint/models.py:28 aleksis/apps/resint/models.py:163
#: aleksis/apps/resint/templates/resint/group/list.html:19
msgid "Name"
msgstr "Полное имя"
#: aleksis/apps/resint/models.py:30
msgid "Publishing weekday"
msgstr "День недели публикации"
#: aleksis/apps/resint/models.py:32
#: aleksis/apps/resint/templates/resint/group/list.html:22
msgid "Publishing time"
msgstr "Время публикации"
#: aleksis/apps/resint/models.py:35
msgid "Default PDF"
msgstr "Типовой PDF"
#: aleksis/apps/resint/models.py:36
msgid "This PDF file will be shown if there is no current PDF."
msgstr "Этот файл PDF будет отображаться, если нет актуального PDF."
#: aleksis/apps/resint/models.py:40
msgid "Show in menu"
msgstr "Показать в меню"
#: aleksis/apps/resint/models.py:41
msgid "Show for not logged-in users"
msgstr "Отображать для анонимных пользователей"
#: aleksis/apps/resint/models.py:44 aleksis/apps/resint/models.py:110
msgid "Poster group"
msgstr "Группа документов"
#: aleksis/apps/resint/models.py:51
msgid "Can view all posters of this group"
msgstr "Может просматривать все документы этой группы"
#: aleksis/apps/resint/models.py:52
msgid "Can upload new posters to this group"
msgstr "Может загружать новые документы в эту группу"
#: aleksis/apps/resint/models.py:53
msgid "Can change all posters of this group"
msgstr "Может редактировать все документы этой группы"
#: aleksis/apps/resint/models.py:54
msgid "Can delete all posters of this group"
msgstr "Может удалять все документы этой группы"
#: aleksis/apps/resint/models.py:113
msgid "Calendar week"
msgstr "Календарная неделя"
#: aleksis/apps/resint/models.py:118
msgid "Year"
msgstr "Год"
#: aleksis/apps/resint/models.py:121
msgid "PDF"
msgstr "PDF"
#: aleksis/apps/resint/models.py:131
msgid "Poster"
msgstr "Документ"
#: aleksis/apps/resint/models.py:132
#: aleksis/apps/resint/templates/resint/poster/list.html:5
#: aleksis/apps/resint/templates/resint/poster/list.html:8
msgid "Posters"
msgstr "Документы"
#: aleksis/apps/resint/models.py:160
msgid "Slug"
msgstr "Хвост в ссылке (slug)"
#: aleksis/apps/resint/models.py:161
msgid "This will be used for the name of the current PDF file."
msgstr "Это будет использовано для названия текущего файла PDF."
#: aleksis/apps/resint/models.py:168
msgid "Current file"
msgstr "Текущий файл"
#: aleksis/apps/resint/models.py:172
msgid "Was the last update triggered manually?"
msgstr "Последнее обновление запущено вручную?"
#: aleksis/apps/resint/models.py:236
msgid "Live document"
msgstr "Онлайн-документ"
#: aleksis/apps/resint/tables.py:20 aleksis/apps/resint/tables.py:22
#: aleksis/apps/resint/templates/resint/group/list.html:49
#: aleksis/apps/resint/templates/resint/poster/list.html:81
msgid "Edit"
msgstr "Редактировать"
#: aleksis/apps/resint/tables.py:27 aleksis/apps/resint/tables.py:29
#: aleksis/apps/resint/templates/resint/group/list.html:58
#: aleksis/apps/resint/templates/resint/poster/list.html:87
msgid "Delete"
msgstr "Удалить"
#: aleksis/apps/resint/templates/resint/group/create.html:5
#: aleksis/apps/resint/templates/resint/group/create.html:8
msgid "Create poster group"
msgstr "Создать группу документов"
#: aleksis/apps/resint/templates/resint/group/edit.html:5
#: aleksis/apps/resint/templates/resint/group/edit.html:8
msgid "Edit poster group"
msgstr "Редактировать группу документов"
#: aleksis/apps/resint/templates/resint/group/list.html:10
msgid "Create new poster group"
msgstr "Создать новую группу документов"
#: aleksis/apps/resint/templates/resint/group/list.html:20
msgid "Filename"
msgstr "Название файла"
#: aleksis/apps/resint/templates/resint/group/list.html:21
msgid "Publishing day"
msgstr "День публикации"
#: aleksis/apps/resint/templates/resint/group/list.html:23
msgid "Default PDF file"
msgstr "Типовой файл PDF"
#: aleksis/apps/resint/templates/resint/group/list.html:24
#: aleksis/apps/resint/templates/resint/poster/list.html:65
msgid "Actions"
msgstr "Действия"
#: aleksis/apps/resint/templates/resint/group/list.html:40
msgid "Open"
msgstr "Открыть"
#: aleksis/apps/resint/templates/resint/group/list.html:65
msgid "There are no poster groups available."
msgstr "Нет доступных групп документов."
#: aleksis/apps/resint/templates/resint/live_document/create.html:8
#: aleksis/apps/resint/templates/resint/live_document/create.html:12
#, python-format
msgid "Create %(document)s"
msgstr "Создать %(document)s"
#: aleksis/apps/resint/templates/resint/live_document/edit.html:8
#: aleksis/apps/resint/templates/resint/live_document/edit.html:12
#, python-format
msgid "Edit %(document)s"
msgstr "Редактировать %(document)s"
#: aleksis/apps/resint/templates/resint/live_document/list.html:15
msgid "Create live document"
msgstr "Создать онлайн-документ"
#: aleksis/apps/resint/templates/resint/live_document/list.html:23
#, python-format
msgid "Create %(name)s"
msgstr "Создать %(name)s"
#: aleksis/apps/resint/templates/resint/live_document/list.html:31
msgid "There is no app installed which registers any live document types."
msgstr ""
"Приложения для регистрации каких-либо типов онлайн-документов не установлены."
#: aleksis/apps/resint/templates/resint/poster/edit.html:5
#: aleksis/apps/resint/templates/resint/poster/edit.html:8
msgid "Edit poster"
msgstr "Редактировать документ"
#: aleksis/apps/resint/templates/resint/poster/list.html:23
#, python-format
msgid ""
"\n"
" Week %(week)s/%(year)s\n"
" "
msgstr ""
"\n"
" Неделя %(week)s/%(year)s\n"
" "
#: aleksis/apps/resint/templates/resint/poster/list.html:35
msgid "There is no poster for this week."
msgstr "На этой неделе документов нет."
#: aleksis/apps/resint/templates/resint/poster/list.html:42
msgid "Show current PDF"
msgstr "Показать текущий PDF"
#: aleksis/apps/resint/templates/resint/poster/list.html:54
msgid "Upload new poster"
msgstr "Загрузить новый документ"
#: aleksis/apps/resint/templates/resint/poster/list.html:58
msgid "All uploaded posters"
msgstr "Все загруженные документы"
#: aleksis/apps/resint/templates/resint/poster/list.html:62
msgid "Group"
msgstr "Группа"
#: aleksis/apps/resint/templates/resint/poster/list.html:63
msgid "Week"
msgstr "Неделя"
#: aleksis/apps/resint/templates/resint/poster/list.html:64
msgid "Valid from ... to"
msgstr "Действует с ... по"
#: aleksis/apps/resint/templates/resint/poster/list.html:75
msgid "Show"
msgstr "Показать"
#: aleksis/apps/resint/templates/resint/poster/upload.html:5
#: aleksis/apps/resint/templates/resint/poster/upload.html:8
#: aleksis/apps/resint/templates/resint/poster/upload.html:16
msgid "Upload poster"
msgstr "Загрузить документ"
#: aleksis/apps/resint/views.py:50 aleksis/apps/resint/views.py:61
msgid "The poster group has been saved."
msgstr "Группа документов сохранена."
#: aleksis/apps/resint/views.py:71
msgid "The poster group has been deleted."
msgstr "Группа документов удалена."
#: aleksis/apps/resint/views.py:114
msgid "The poster has been uploaded."
msgstr "Документ загружен."
#: aleksis/apps/resint/views.py:125
msgid "The poster has been changed."
msgstr "Документ изменён."
#: aleksis/apps/resint/views.py:135
msgid "The poster has been deleted."
msgstr "Документ удалён."
#: aleksis/apps/resint/views.py:197
msgid "The live document has been created."
msgstr "Онлайн-документ создан."
#: aleksis/apps/resint/views.py:212
msgid "The live document has been saved."
msgstr "Онлайн-документ сохранён."
#: aleksis/apps/resint/views.py:223
msgid "The live document has been deleted."
msgstr "Онлайн-документ удалён."
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-07 11:59+0100\n"
"POT-Creation-Date: 2022-01-12 16:31+0100\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"
......@@ -25,135 +25,129 @@ msgstr ""
msgid "Documents"
msgstr ""
#: aleksis/apps/resint/menus.py:46
#: aleksis/apps/resint/menus.py:49
msgid "Manage posters"
msgstr ""
#: aleksis/apps/resint/menus.py:57 aleksis/apps/resint/models.py:42
#: aleksis/apps/resint/menus.py:60 aleksis/apps/resint/models.py:45
#: aleksis/apps/resint/templates/resint/group/list.html:4
#: aleksis/apps/resint/templates/resint/group/list.html:14
msgid "Poster groups"
msgstr ""
#: aleksis/apps/resint/menus.py:68 aleksis/apps/resint/models.py:219
#: aleksis/apps/resint/menus.py:71 aleksis/apps/resint/models.py:237
#: aleksis/apps/resint/templates/resint/live_document/list.html:8
#: aleksis/apps/resint/templates/resint/live_document/list.html:9
msgid "Live documents"
msgstr ""
#: aleksis/apps/resint/models.py:22
#: aleksis/apps/resint/models.py:25
msgid "Slug used in URL name"
msgstr ""
#: aleksis/apps/resint/models.py:23
#: aleksis/apps/resint/models.py:26
msgid "If you use 'example', the filename will be 'example.pdf'."
msgstr ""
#: aleksis/apps/resint/models.py:25 aleksis/apps/resint/models.py:158
#: aleksis/apps/resint/models.py:28 aleksis/apps/resint/models.py:163
#: aleksis/apps/resint/templates/resint/group/list.html:19
msgid "Name"
msgstr ""
#: aleksis/apps/resint/models.py:27
#: aleksis/apps/resint/models.py:30
msgid "Publishing weekday"
msgstr ""
#: aleksis/apps/resint/models.py:29
#: aleksis/apps/resint/models.py:32
#: aleksis/apps/resint/templates/resint/group/list.html:22
msgid "Publishing time"
msgstr ""
#: aleksis/apps/resint/models.py:32
#: aleksis/apps/resint/models.py:35
msgid "Default PDF"
msgstr ""
#: aleksis/apps/resint/models.py:33
#: aleksis/apps/resint/models.py:36
msgid "This PDF file will be shown if there is no current PDF."
msgstr ""
#: aleksis/apps/resint/models.py:37
#: aleksis/apps/resint/models.py:40
msgid "Show in menu"
msgstr ""
#: aleksis/apps/resint/models.py:38
#: aleksis/apps/resint/models.py:41
msgid "Show for not logged-in users"
msgstr ""
#: aleksis/apps/resint/models.py:41 aleksis/apps/resint/models.py:107
#: aleksis/apps/resint/models.py:44 aleksis/apps/resint/models.py:110
msgid "Poster group"
msgstr ""
#: aleksis/apps/resint/models.py:48
#: aleksis/apps/resint/models.py:51
msgid "Can view all posters of this group"
msgstr ""
#: aleksis/apps/resint/models.py:49
#: aleksis/apps/resint/models.py:52
msgid "Can upload new posters to this group"
msgstr ""
#: aleksis/apps/resint/models.py:50
#: aleksis/apps/resint/models.py:53
msgid "Can change all posters of this group"
msgstr ""
#: aleksis/apps/resint/models.py:51
#: aleksis/apps/resint/models.py:54
msgid "Can delete all posters of this group"
msgstr ""
#: aleksis/apps/resint/models.py:110
#: aleksis/apps/resint/models.py:113
msgid "Calendar week"
msgstr ""
#: aleksis/apps/resint/models.py:115
#: aleksis/apps/resint/models.py:118
msgid "Year"
msgstr ""
#: aleksis/apps/resint/models.py:118
#: aleksis/apps/resint/models.py:121
msgid "PDF"
msgstr ""
#: aleksis/apps/resint/models.py:128
#: aleksis/apps/resint/models.py:131
msgid "Poster"
msgstr ""
#: aleksis/apps/resint/models.py:129
#: aleksis/apps/resint/models.py:132
#: aleksis/apps/resint/templates/resint/poster/list.html:5
#: aleksis/apps/resint/templates/resint/poster/list.html:8
msgid "Posters"
msgstr ""
#: aleksis/apps/resint/models.py:155
#: aleksis/apps/resint/models.py:160
msgid "Slug"
msgstr ""
#: aleksis/apps/resint/models.py:156
#: aleksis/apps/resint/models.py:161
msgid "This will be used for the name of the current PDF file."
msgstr ""
#: aleksis/apps/resint/models.py:164
#: aleksis/apps/resint/models.py:168
msgid "Current file"
msgstr ""
#: aleksis/apps/resint/models.py:168
#: aleksis/apps/resint/models.py:172
msgid "Was the last update triggered manually?"
msgstr ""
#: aleksis/apps/resint/models.py:218
#: aleksis/apps/resint/models.py:236
msgid "Live document"
msgstr ""
#: aleksis/apps/resint/tables.py:20
#: aleksis/apps/resint/tables.py:20 aleksis/apps/resint/tables.py:22
#: aleksis/apps/resint/templates/resint/group/list.html:49
#: aleksis/apps/resint/templates/resint/poster/list.html:81
msgid "Edit"
msgstr ""
#: aleksis/apps/resint/tables.py:22 aleksis/apps/resint/tables.py:29
#: aleksis/apps/resint/templates/resint/group/list.html:24
#: aleksis/apps/resint/templates/resint/poster/list.html:65
msgid "Actions"
msgstr ""
#: aleksis/apps/resint/tables.py:27
#: aleksis/apps/resint/tables.py:27 aleksis/apps/resint/tables.py:29
#: aleksis/apps/resint/templates/resint/group/list.html:58
#: aleksis/apps/resint/templates/resint/poster/list.html:87
msgid "Delete"
......@@ -185,6 +179,11 @@ msgstr ""
msgid "Default PDF file"
msgstr ""
#: aleksis/apps/resint/templates/resint/group/list.html:24
#: aleksis/apps/resint/templates/resint/poster/list.html:65
msgid "Actions"
msgstr ""
#: aleksis/apps/resint/templates/resint/group/list.html:40
msgid "Open"
msgstr ""
......@@ -205,15 +204,19 @@ msgstr ""
msgid "Edit %(document)s"
msgstr ""
#: aleksis/apps/resint/templates/resint/live_document/list.html:14
#: aleksis/apps/resint/templates/resint/live_document/list.html:15
msgid "Create live document"
msgstr ""
#: aleksis/apps/resint/templates/resint/live_document/list.html:22
#: aleksis/apps/resint/templates/resint/live_document/list.html:23
#, python-format
msgid "Create %(name)s"
msgstr ""
#: aleksis/apps/resint/templates/resint/live_document/list.html:31
msgid "There is no app installed which registers any live document types."
msgstr ""
#: aleksis/apps/resint/templates/resint/poster/edit.html:5
#: aleksis/apps/resint/templates/resint/poster/edit.html:8
msgid "Edit poster"
......
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-23 12:52+0000\n"
"PO-Revision-Date: 2024-08-28 20:01+0000\n"
"Last-Translator: Serhii Horichenko <m@sgg.im>\n"
"Language-Team: Ukrainian <https://translate.edugit.org/projects/aleksis/aleksis-app-resint/uk/>\n"
"Language: uk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n"
"X-Generator: Weblate 5.0.2\n"
#: aleksis/apps/resint/apps.py:27
msgid "Access PDF file for live document"
msgstr "Доступ PDF файлу для онлайн-документа"
#: aleksis/apps/resint/menus.py:37
msgid "Documents"
msgstr "Документи"
#: aleksis/apps/resint/menus.py:49
msgid "Manage posters"
msgstr "Керування документами"
#: aleksis/apps/resint/menus.py:60 aleksis/apps/resint/models.py:45
#: aleksis/apps/resint/templates/resint/group/list.html:4
#: aleksis/apps/resint/templates/resint/group/list.html:14
msgid "Poster groups"
msgstr "Групи документів"
#: aleksis/apps/resint/menus.py:71 aleksis/apps/resint/models.py:237
#: aleksis/apps/resint/templates/resint/live_document/list.html:8
#: aleksis/apps/resint/templates/resint/live_document/list.html:9
msgid "Live documents"
msgstr "Онлайн-документи"
#: aleksis/apps/resint/models.py:25
msgid "Slug used in URL name"
msgstr "Закінчення (slug) в URL-адресі"
#: aleksis/apps/resint/models.py:26
msgid "If you use 'example', the filename will be 'example.pdf'."
msgstr "При використанні 'приклад' ім'я файлу буде 'приклад.pdf'."
#: aleksis/apps/resint/models.py:28 aleksis/apps/resint/models.py:163
#: aleksis/apps/resint/templates/resint/group/list.html:19
msgid "Name"
msgstr "Повне ім'я"
#: aleksis/apps/resint/models.py:30
msgid "Publishing weekday"
msgstr "День тижня публікації"
#: aleksis/apps/resint/models.py:32
#: aleksis/apps/resint/templates/resint/group/list.html:22
msgid "Publishing time"
msgstr "Час публікації"
#: aleksis/apps/resint/models.py:35
msgid "Default PDF"
msgstr "Типовий PDF"
#: aleksis/apps/resint/models.py:36
msgid "This PDF file will be shown if there is no current PDF."
msgstr "Цей файл PDF буде відображатися, якщо немає актуального PDF."
#: aleksis/apps/resint/models.py:40
msgid "Show in menu"
msgstr "Показати в меню"
#: aleksis/apps/resint/models.py:41
msgid "Show for not logged-in users"
msgstr "Відображати для користувачів, які не увійши"
#: aleksis/apps/resint/models.py:44 aleksis/apps/resint/models.py:110
msgid "Poster group"
msgstr "Група документів"
#: aleksis/apps/resint/models.py:51
msgid "Can view all posters of this group"
msgstr "Може бачити усі документи цієї групи"
#: aleksis/apps/resint/models.py:52
msgid "Can upload new posters to this group"
msgstr "Може завантажувати нові документи до цієї групи"
#: aleksis/apps/resint/models.py:53
msgid "Can change all posters of this group"
msgstr "Може змінювати усі документи цієї групи"
#: aleksis/apps/resint/models.py:54
msgid "Can delete all posters of this group"
msgstr "Може видаляти усі документи цієї групи"
#: aleksis/apps/resint/models.py:113
msgid "Calendar week"
msgstr "Календарний тиждень"
#: aleksis/apps/resint/models.py:118
msgid "Year"
msgstr "Рік"
#: aleksis/apps/resint/models.py:121
msgid "PDF"
msgstr "PDF"
#: aleksis/apps/resint/models.py:131
msgid "Poster"
msgstr "Документ"
#: aleksis/apps/resint/models.py:132
#: aleksis/apps/resint/templates/resint/poster/list.html:5
#: aleksis/apps/resint/templates/resint/poster/list.html:8
msgid "Posters"
msgstr "Документи"
#: aleksis/apps/resint/models.py:160
msgid "Slug"
msgstr "Мітка"
#: aleksis/apps/resint/models.py:161
msgid "This will be used for the name of the current PDF file."
msgstr "Це буде використовуватися для назви поточного PDF-файлу."
#: aleksis/apps/resint/models.py:168
msgid "Current file"
msgstr "Поточний файл"
#: aleksis/apps/resint/models.py:172
msgid "Was the last update triggered manually?"
msgstr "Останнє оновлення було запущене вручну?"
#: aleksis/apps/resint/models.py:236
msgid "Live document"
msgstr "Онлайн-документ"
#: aleksis/apps/resint/tables.py:20 aleksis/apps/resint/tables.py:22
#: aleksis/apps/resint/templates/resint/group/list.html:49
#: aleksis/apps/resint/templates/resint/poster/list.html:81
msgid "Edit"
msgstr "Редагувати"
#: aleksis/apps/resint/tables.py:27 aleksis/apps/resint/tables.py:29
#: aleksis/apps/resint/templates/resint/group/list.html:58
#: aleksis/apps/resint/templates/resint/poster/list.html:87
msgid "Delete"
msgstr "Видалити"
#: aleksis/apps/resint/templates/resint/group/create.html:5
#: aleksis/apps/resint/templates/resint/group/create.html:8
msgid "Create poster group"
msgstr "Створити групу документів"
#: aleksis/apps/resint/templates/resint/group/edit.html:5
#: aleksis/apps/resint/templates/resint/group/edit.html:8
msgid "Edit poster group"
msgstr "Редагувати групу документів"
#: aleksis/apps/resint/templates/resint/group/list.html:10
msgid "Create new poster group"
msgstr "Створити нову групу документів"
#: aleksis/apps/resint/templates/resint/group/list.html:20
msgid "Filename"
msgstr "Назва файлу"
#: aleksis/apps/resint/templates/resint/group/list.html:21
msgid "Publishing day"
msgstr "День публікації"
#: aleksis/apps/resint/templates/resint/group/list.html:23
msgid "Default PDF file"
msgstr "Типовий файл PDF"
#: aleksis/apps/resint/templates/resint/group/list.html:24
#: aleksis/apps/resint/templates/resint/poster/list.html:65
msgid "Actions"
msgstr "Дії"
#: aleksis/apps/resint/templates/resint/group/list.html:40
msgid "Open"
msgstr "Відкрити"
#: aleksis/apps/resint/templates/resint/group/list.html:65
msgid "There are no poster groups available."
msgstr "Немає доступних груп документів."
#: aleksis/apps/resint/templates/resint/live_document/create.html:8
#: aleksis/apps/resint/templates/resint/live_document/create.html:12
#, python-format
msgid "Create %(document)s"
msgstr "Створити %(document)s"
#: aleksis/apps/resint/templates/resint/live_document/edit.html:8
#: aleksis/apps/resint/templates/resint/live_document/edit.html:12
#, python-format
msgid "Edit %(document)s"
msgstr "Редагувати %(document)s"
#: aleksis/apps/resint/templates/resint/live_document/list.html:15
msgid "Create live document"
msgstr "Створити онлайн-документ"
#: aleksis/apps/resint/templates/resint/live_document/list.html:23
#, python-format
msgid "Create %(name)s"
msgstr "Створити %(name)s"
#: aleksis/apps/resint/templates/resint/live_document/list.html:31
msgid "There is no app installed which registers any live document types."
msgstr ""
"Не встановлена програма для реєстрації бодай якогось типу онлайн документів."
#: aleksis/apps/resint/templates/resint/poster/edit.html:5
#: aleksis/apps/resint/templates/resint/poster/edit.html:8
msgid "Edit poster"
msgstr "Редагувати документ"
#: aleksis/apps/resint/templates/resint/poster/list.html:23
#, python-format
msgid ""
"\n"
" Week %(week)s/%(year)s\n"
" "
msgstr ""
"\n"
" Тиждень %(week)s/%(year)s\n"
" "
#: aleksis/apps/resint/templates/resint/poster/list.html:35
msgid "There is no poster for this week."
msgstr "На цьому тижні документів немає."
#: aleksis/apps/resint/templates/resint/poster/list.html:42
msgid "Show current PDF"
msgstr "Показати поточний PDF"
#: aleksis/apps/resint/templates/resint/poster/list.html:54
msgid "Upload new poster"
msgstr "Завантажити новий документ"
#: aleksis/apps/resint/templates/resint/poster/list.html:58
msgid "All uploaded posters"
msgstr "Усі завантажені документи"
#: aleksis/apps/resint/templates/resint/poster/list.html:62
msgid "Group"
msgstr "Група"
#: aleksis/apps/resint/templates/resint/poster/list.html:63
msgid "Week"
msgstr "Тиждень"
#: aleksis/apps/resint/templates/resint/poster/list.html:64
msgid "Valid from ... to"
msgstr "Дійсний з ... по"
#: aleksis/apps/resint/templates/resint/poster/list.html:75
msgid "Show"
msgstr "Показати"
#: aleksis/apps/resint/templates/resint/poster/upload.html:5
#: aleksis/apps/resint/templates/resint/poster/upload.html:8
#: aleksis/apps/resint/templates/resint/poster/upload.html:16
msgid "Upload poster"
msgstr "Завантажити документ"
#: aleksis/apps/resint/views.py:50 aleksis/apps/resint/views.py:61
msgid "The poster group has been saved."
msgstr "Група документів збережена."
#: aleksis/apps/resint/views.py:71
msgid "The poster group has been deleted."
msgstr "Група документів видалена."
#: aleksis/apps/resint/views.py:114
msgid "The poster has been uploaded."
msgstr "Документ завантажений."
#: aleksis/apps/resint/views.py:125
msgid "The poster has been changed."
msgstr "Документ змінений."
#: aleksis/apps/resint/views.py:135
msgid "The poster has been deleted."
msgstr "Документ видалений."
#: aleksis/apps/resint/views.py:197
msgid "The live document has been created."
msgstr "Онлайн-документ створений."
#: aleksis/apps/resint/views.py:212
msgid "The live document has been saved."
msgstr "Онлайн-документ збережений."
#: aleksis/apps/resint/views.py:223
msgid "The live document has been deleted."
msgstr "Онлайн-документ видалений."
from typing import Any, Dict, List
from django.apps import apps
from django.urls import reverse
from django.utils.functional import lazy
from django.utils.translation import ugettext_lazy as _
def _get_menu_entries() -> List[Dict[str, Any]]:
"""Build menu entries for all poster groups.
This will include only poster groups where ``show_in_menu`` is enabled.
"""
PosterGroup = apps.get_model("resint", "PosterGroup")
return [
{
"name": group.name,
"url": reverse("poster_show_current", args=[group.slug]),
"icon": "picture_as_pdf",
"validators": [
(
"aleksis.apps.resint.rules.permission_validator",
"resint.view_poster_pdf_menu",
group,
),
],
"new_tab": True,
}
for group in PosterGroup.objects.all()
]
get_menu_entries_lazy = lazy(_get_menu_entries, list)
MENUS = {
"NAV_MENU_CORE": [
{
"name": _("Documents"),
"url": "#",
"icon": "open_in_browser",
"root": True,
"validators": [
(
"aleksis.core.util.predicates.permission_validator",
"resint.view_poster_menu",
),
],
"submenu": [
{
"name": _("Manage posters"),
"url": "poster_index",
"icon": "file_upload",
"validators": [
(
"aleksis.core.util.predicates.permission_validator",
"resint.view_posters_rule",
),
],
},
{
"name": _("Poster groups"),
"url": "poster_group_list",
"icon": "topic",
"validators": [
(
"aleksis.core.util.predicates.permission_validator",
"resint.view_postergroups_rule",
),
],
},
{
"name": _("Live documents"),
"url": "live_documents",
"icon": "update",
"validators": [
(
"aleksis.core.util.predicates.permission_validator",
"resint.view_livedocuments_rule",
),
],
},
],
}
]
+ get_menu_entries_lazy(),
}
......@@ -2,7 +2,6 @@
import aleksis.apps.resint.models
import calendarweek.calendarweek
import django.contrib.sites.managers
import django.core.validators
from django.db import migrations, models
import django.db.models.deletion
......@@ -13,7 +12,6 @@ class Migration(migrations.Migration):
initial = True
dependencies = [
('sites', '0002_alter_domain_unique'),
]
operations = [
......@@ -29,14 +27,12 @@ class Migration(migrations.Migration):
('default_pdf', models.FileField(help_text='This PDF file will be shown if there is no current PDF.', upload_to='default_posters/', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['pdf'])], verbose_name='Default PDF')),
('show_in_menu', models.BooleanField(default=True, verbose_name='Show in menu')),
('public', models.BooleanField(default=False, verbose_name='Show for not logged-in users')),
('site', models.ForeignKey(default=1, editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.site')),
],
options={
'verbose_name': 'Poster group',
'verbose_name_plural': 'Poster groups',
},
managers=[
('objects', django.contrib.sites.managers.CurrentSiteManager()),
],
),
migrations.CreateModel(
......@@ -48,26 +44,24 @@ class Migration(migrations.Migration):
('year', models.PositiveSmallIntegerField(default=aleksis.apps.resint.models._get_current_year, verbose_name='Year')),
('pdf', models.FileField(upload_to='posters/', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['pdf'])], verbose_name='PDF')),
('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='posters', to='resint.postergroup', verbose_name='Poster group')),
('site', models.ForeignKey(default=1, editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.site')),
],
options={
'verbose_name': 'Poster',
'verbose_name_plural': 'Posters',
},
managers=[
('objects', django.contrib.sites.managers.CurrentSiteManager()),
],
),
migrations.AddConstraint(
model_name='postergroup',
constraint=models.UniqueConstraint(fields=('site_id', 'name'), name='unique_site_name'),
constraint=models.UniqueConstraint(fields=('name',), name='unique_site_name'),
),
migrations.AddConstraint(
model_name='postergroup',
constraint=models.UniqueConstraint(fields=('site_id', 'slug'), name='unique_site_slug'),
constraint=models.UniqueConstraint(fields=('slug',), name='unique_site_slug'),
),
migrations.AddConstraint(
model_name='poster',
constraint=models.UniqueConstraint(fields=('site_id', 'week', 'year'), name='unique_site_week_year'),
constraint=models.UniqueConstraint(fields=('week', 'year'), name='unique_site_week_year'),
),
]
......@@ -16,6 +16,6 @@ class Migration(migrations.Migration):
),
migrations.AddConstraint(
model_name='poster',
constraint=models.UniqueConstraint(fields=('site_id', 'week', 'year', 'group'), name='unique_site_week_year'),
constraint=models.UniqueConstraint(fields=('week', 'year', 'group'), name='unique_site_week_year'),
),
]
......@@ -8,7 +8,6 @@ import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('sites', '0002_alter_domain_unique'),
('contenttypes', '0002_remove_content_type_name'),
('resint', '0005_fix_permissions'),
]
......@@ -24,14 +23,13 @@ class Migration(migrations.Migration):
('current_file', models.FileField(blank=True, editable=False, null=True, upload_to='live_documents/', verbose_name='Current file')),
('last_update_triggered_manually', models.BooleanField(default=False, editable=False, verbose_name='Was the last update triggered manually?')),
('polymorphic_ctype', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='polymorphic_resint.livedocument_set+', to='contenttypes.contenttype')),
('site', models.ForeignKey(default=1, editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.site')),
],
options={
'verbose_name': 'Live document',
'verbose_name_plural': 'Live documents',
},
managers=[
('objects', aleksis.core.managers.PolymorphicCurrentSiteManager()),
('objects', aleksis.core.managers.PolymorphicBaseManager()),
],
),
]
# Generated by Django 3.2.18 on 2023-05-17 20:57
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('resint', '0007_current_file_not_null'),
]
operations = [
migrations.AddField(
model_name='livedocument',
name='public',
field=models.BooleanField(default=False, verbose_name='Show for not logged-in users'),
),
]
# Generated by Django 4.1.9 on 2023-07-03 20:16
import aleksis.core.managers
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
("contenttypes", "0002_remove_content_type_name"),
("resint", "0008_public_live_documents"),
]
operations = [
migrations.AlterModelManagers(
name="poster",
managers=[
("objects", aleksis.core.managers.AlekSISBaseManager()),
],
),
migrations.AlterModelManagers(
name="postergroup",
managers=[
("objects", aleksis.core.managers.AlekSISBaseManager()),
],
),
migrations.AddField(
model_name="livedocument",
name="managed_by_app_label",
field=models.CharField(
blank=True,
editable=False,
max_length=255,
verbose_name="App label of app responsible for managing this instance",
),
),
migrations.AddField(
model_name="poster",
name="managed_by_app_label",
field=models.CharField(
blank=True,
editable=False,
max_length=255,
verbose_name="App label of app responsible for managing this instance",
),
),
migrations.AddField(
model_name="postergroup",
name="managed_by_app_label",
field=models.CharField(
blank=True,
editable=False,
max_length=255,
verbose_name="App label of app responsible for managing this instance",
),
),
migrations.AlterField(
model_name="livedocument",
name="polymorphic_ctype",
field=models.ForeignKey(
editable=False,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="polymorphic_%(app_label)s.%(class)s_set+",
to="contenttypes.contenttype",
),
),
]
# Generated by Django 4.2.9 on 2024-01-03 13:48
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('resint', '0009_managed_by_app_label'),
]
operations = [
migrations.AlterModelManagers(
name='livedocument',
managers=[
],
),
migrations.AlterModelManagers(
name='poster',
managers=[
],
),
migrations.AlterModelManagers(
name='postergroup',
managers=[
],
),
migrations.RemoveConstraint(
model_name='poster',
name='unique_site_week_year',
),
migrations.RemoveConstraint(
model_name='postergroup',
name='unique_site_name',
),
migrations.RemoveConstraint(
model_name='postergroup',
name='unique_site_slug',
),
] + [
migrations.RunSQL(
f"ALTER TABLE resint_{model_name} drop column if exists site_id;"
) for model_name in
[
"postergroup",
"poster",
"livedocument",
]
] + [
migrations.AlterField(
model_name='postergroup',
name='name',
field=models.CharField(max_length=255, unique=True, verbose_name='Name'),
),
migrations.AlterField(
model_name='postergroup',
name='publishing_day',
field=models.PositiveSmallIntegerField(choices=[(0, 'Monday'), (1, 'Tuesday'), (2, 'Wednesday'), (3, 'Thursday'), (4, 'Friday'), (5, 'Saturday'), (6, 'Sunday')], verbose_name='Publishing weekday'),
),
migrations.AlterField(
model_name='postergroup',
name='slug',
field=models.SlugField(help_text="If you use 'example', the filename will be 'example.pdf'.", unique=True, verbose_name='Slug used in URL name'),
),
migrations.AddConstraint(
model_name='poster',
constraint=models.UniqueConstraint(fields=('week', 'year', 'group'), name='unique_week_year_group'),
),
]
from datetime import datetime
from typing import Optional
from typing import Any, Optional
from django.core.files import File
from django.core.validators import FileExtensionValidator, MaxValueValidator, MinValueValidator
from django.db import models
from django.urls import reverse
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
import reversion
from calendarweek import CalendarWeek
from calendarweek.django import i18n_day_name_choices_lazy
from celery.result import allow_join_result
from celery.states import SUCCESS
from reversion.models import Revision, Version
from aleksis.core.mixins import ExtensibleModel, ExtensiblePolymorphicModel
from aleksis.core.models import DynamicRoute
from aleksis.core.util.pdf import generate_pdf_from_template
class PosterGroupDynamicRoute(DynamicRoute):
@classmethod
def get_dynamic_routes(cls):
poster_groups = PosterGroup.objects.all()
dynamic_routes = []
for poster_group in poster_groups:
dynamic_routes.append(cls.get_route_data(poster_group))
return dynamic_routes
@classmethod
def get_route_data(cls, instance):
dynamic_route = {}
dynamic_route["parent_route_name"] = ""
dynamic_route["route_path"] = reverse("poster_show_current", args=[instance.slug])
dynamic_route["route_name"] = f"resint.posterGroup.{instance.slug}"
dynamic_route["display_account_menu"] = False
dynamic_route["display_sidenav_menu"] = instance.show_in_menu
dynamic_route["menu_new_tab"] = True
dynamic_route["menu_title"] = instance.name
dynamic_route["menu_icon"] = "mdi-file-pdf-box"
dynamic_route["route_permission"] = "" if instance.public else "resint.view_poster_pdf_menu"
return dynamic_route
class PosterGroup(ExtensibleModel):
......@@ -21,8 +59,9 @@ class PosterGroup(ExtensibleModel):
slug = models.SlugField(
verbose_name=_("Slug used in URL name"),
help_text=_("If you use 'example', the filename will be 'example.pdf'."),
unique=True,
)
name = models.CharField(max_length=255, verbose_name=_("Name"))
name = models.CharField(max_length=255, verbose_name=_("Name"), unique=True)
publishing_day = models.PositiveSmallIntegerField(
verbose_name=_("Publishing weekday"), choices=i18n_day_name_choices_lazy()
)
......@@ -40,10 +79,6 @@ class PosterGroup(ExtensibleModel):
class Meta:
verbose_name = _("Poster group")
verbose_name_plural = _("Poster groups")
constraints = [
models.UniqueConstraint(fields=["site_id", "name"], name="unique_site_name"),
models.UniqueConstraint(fields=["site_id", "slug"], name="unique_site_slug"),
]
permissions = [
("view_poster_of_group", _("Can view all posters of this group")),
("upload_poster_to_group", _("Can upload new posters to this group")),
......@@ -121,9 +156,7 @@ class Poster(ExtensibleModel):
class Meta:
constraints = [
models.UniqueConstraint(
fields=["site_id", "week", "year", "group"], name="unique_site_week_year"
)
models.UniqueConstraint(fields=["week", "year", "group"], name="unique_week_year_group")
]
verbose_name = _("Poster")
verbose_name_plural = _("Posters")
......@@ -151,11 +184,14 @@ class LiveDocument(ExtensiblePolymorphicModel):
SCOPE_PREFIX = "live_document_pdf"
template = None
slug = models.SlugField(
verbose_name=_("Slug"),
help_text=_("This will be used for the name of the current PDF file."),
)
name = models.CharField(max_length=255, verbose_name=_("Name"))
public = models.BooleanField(default=False, verbose_name=_("Show for not logged-in users"))
current_file = models.FileField(
upload_to="live_documents/",
......@@ -167,6 +203,17 @@ class LiveDocument(ExtensiblePolymorphicModel):
default=False, verbose_name=_("Was the last update triggered manually?"), editable=False
)
class Meta:
verbose_name = _("Live document")
verbose_name_plural = _("Live documents")
def __str__(self) -> str:
return self.name
def save(self, *args, **kwargs):
with reversion.create_revision():
super().save(*args, **kwargs)
@property
def last_version(self) -> Optional[Revision]:
"""Get django-reversion version of last file update."""
......@@ -199,20 +246,23 @@ class LiveDocument(ExtensiblePolymorphicModel):
"""Return OAuth2 scope name to access PDF file via API."""
return f"{self.SCOPE_PREFIX}_{self.slug}"
def save(self, *args, **kwargs):
with reversion.create_revision():
super().save(*args, **kwargs)
def get_context_data(self) -> dict[str, Any]:
"""Get context to pass to the PDF template."""
return {}
def update(self, triggered_manually: bool = True):
"""Update the file with a new version.
Has to be implemented by subclasses.
"""
raise NotImplementedError("Subclasses of LiveDocument must implement update()")
def __str__(self) -> str:
return self.name
class Meta:
verbose_name = _("Live document")
verbose_name_plural = _("Live documents")
if not self.template:
raise NotImplementedError("Subclasses of LiveDocument must implement update()")
file_object, result = generate_pdf_from_template(self.template, self.get_context_data())
with allow_join_result():
result.wait()
file_object.refresh_from_db()
if result.status == SUCCESS and file_object.file:
self.last_update_triggered_manually = triggered_manually
self.current_file.save(self.filename, file_object.file.file)
self.save()
......@@ -3,7 +3,7 @@ from django.http import HttpRequest
from rules import add_perm, predicate
from aleksis.apps.resint.models import Poster, PosterGroup
from aleksis.apps.resint.models import LiveDocument, Poster, PosterGroup
from aleksis.core.util.predicates import (
check_object_permission,
has_any_object,
......@@ -31,7 +31,7 @@ def permission_validator(request: HttpRequest, perm: str, obj) -> bool:
@predicate
def is_public_poster_group(user: User, obj: PosterGroup):
def is_public(user: User, obj: [LiveDocument, PosterGroup]):
return obj.public
......@@ -96,14 +96,16 @@ delete_poster_predicate = view_posters_predicate & (
add_perm("resint.delete_poster_rule", delete_poster_predicate)
# View poster PDF file
view_poster_pdf_predicate = is_public_poster_group | (
view_poster_pdf_predicate = is_public | (
has_person
& (has_global_perm("resint.view_postergroup") | has_global_perm("resint.view_poster"))
)
add_perm("resint.view_poster_pdf", view_poster_pdf_predicate)
# View menu entry for single posters
view_poster_pdf_menu_predicate = show_poster_group_in_menu & view_poster_pdf_predicate
# View poster PDF file in menu
view_poster_pdf_menu_predicate = has_person & (
has_global_perm("resint.view_postergroup") | has_global_perm("resint.view_poster")
)
add_perm("resint.view_poster_pdf_menu", view_poster_pdf_menu_predicate)
# Show the poster manage menu
......@@ -116,8 +118,9 @@ view_live_documents_predicate = has_person & has_global_perm("resint.view_livedo
add_perm("resint.view_livedocuments_rule", view_live_documents_predicate)
# View live document
view_live_document_predicate = has_person & (
has_global_perm("resint.view_livedocument") | has_object_perm("resint.view_livedocument")
view_live_document_predicate = is_public | (
has_person
& (has_global_perm("resint.view_livedocument") | has_object_perm("resint.view_livedocument"))
)
add_perm("resint.view_livedocument_rule", view_live_document_predicate)
......@@ -138,3 +141,10 @@ delete_live_document_predicate = view_live_documents_predicate & has_global_perm
"resint.delete_livedocument"
)
add_perm("resint.delete_livedocument_rule", delete_live_document_predicate)
# View menu
view_menu_predicate = (
view_posters_predicate | view_poster_groups_predicate | view_live_documents_predicate
)
add_perm("resint.view_menu_rule", view_menu_predicate)
......@@ -19,14 +19,14 @@ class LiveDocumentTable(Table):
args=[A("id")],
text=_("Edit"),
attrs={"a": {"class": "btn-flat waves-effect waves-orange orange-text"}},
verbose_name=_("Actions"),
verbose_name=_("Edit"),
)
delete = LinkColumn(
"delete_live_document",
args=[A("id")],
text=_("Delete"),
attrs={"a": {"class": "btn-flat waves-effect waves-red red-text"}},
verbose_name=_("Actions"),
verbose_name=_("Delete"),
)
def render_document_name(self, value, record):
......
......@@ -9,21 +9,28 @@
{% block page_title %}{% blocktrans %}Live documents{% endblocktrans %}{% endblock %}
{% block content %}
<a class="btn green waves-effect waves-light dropdown-trigger" href="#" data-target="widget-dropdown">
<i class="material-icons left">add</i>
{% trans "Create live document" %}
</a>
{% if document_types %}
<a class="btn green waves-effect waves-light dropdown-trigger" href="#" data-target="widget-dropdown">
<i class="material-icons left">add</i>
{% trans "Create live document" %}
</a>
<ul id="widget-dropdown" class="dropdown-content">
{% for ct, model in widget_types %}
<li>
<a href="{% url 'create_live_document' ct.app_label ct.model %}">
{% verbose_name_object model as widget_name %}
{% blocktrans with name=widget_name %}Create {{ name }}{% endblocktrans %}
</a>
</li>
{% endfor %}
</ul>
<ul id="widget-dropdown" class="dropdown-content">
{% for ct, model in document_types %}
<li>
<a href="{% url 'create_live_document' ct.app_label ct.model %}">
{% verbose_name_object model as document_name %}
{% blocktrans with name=document_name %}Create {{ name }}{% endblocktrans %}
</a>
</li>
{% endfor %}
</ul>
{% else %}
<figure class="alert primary">
<i class="material-icons left">info</i>
{% trans "There is no app installed which registers any live document types." %}
</figure>
{% endif %}
{% render_table table %}
{% endblock %}
......@@ -23,7 +23,6 @@ urlpatterns = [
path("upload/", PosterUploadView.as_view(), name="poster_upload"),
path("<int:pk>/edit/", PosterEditView.as_view(), name="poster_edit"),
path("<int:pk>/delete/", PosterDeleteView.as_view(), name="poster_delete"),
path("<str:slug>.pdf", PosterCurrentView.as_view(), name="poster_show_current"),
path("groups/", PosterGroupListView.as_view(), name="poster_group_list"),
path("groups/create/", PosterGroupCreateView.as_view(), name="create_poster_group"),
path("groups/<int:pk>/edit/", PosterGroupEditView.as_view(), name="edit_poster_group"),
......@@ -44,6 +43,10 @@ urlpatterns = [
LiveDocumentDeleteView.as_view(),
name="delete_live_document",
),
]
api_urlpatterns = [
path("<str:slug>.pdf", PosterCurrentView.as_view(), name="poster_show_current"),
path(
"live_documents/<str:slug>.pdf",
LiveDocumentShowView.as_view(),
......