From 87cb9de0055f953067f719aeb64f936163cc111f Mon Sep 17 00:00:00 2001 From: lokses Date: Sat, 25 Jul 2026 14:55:48 +0300 Subject: [PATCH] =?UTF-8?q?i18n:=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B2=D0=BE?= =?UTF-8?q?=D0=B4=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8F=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=B4=D0=B0=D1=87=20(tasks/task-detail/task-edit)=20ru/uk/en?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Task.STATUS_CHOICES/PRIORITY_CHOICES переведены на русские msgid (консистентно с ru-базой); миграция choices - task_detail_view: метки ролей через gettext - Шаблоны tasks/task-detail/task-edit размечены {% trans %}; статусы, приоритеты, чек-лист, комментарии, участники, кнопки действий — uk/en Co-Authored-By: Claude Opus 4.8 --- ...5_alter_task_priority_alter_task_status.py | 23 +++ apps/tasks/models.py | 14 +- apps/tasks/views.py | 7 +- locale/en/LC_MESSAGES/django.mo | Bin 6086 -> 8637 bytes locale/en/LC_MESSAGES/django.po | 194 +++++++++++++++--- locale/uk/LC_MESSAGES/django.mo | Bin 7582 -> 10723 bytes locale/uk/LC_MESSAGES/django.po | 194 +++++++++++++++--- templates/pages/task-detail.html | 51 ++--- templates/pages/task-edit.html | 16 +- templates/pages/tasks.html | 46 +++-- 10 files changed, 415 insertions(+), 130 deletions(-) create mode 100644 apps/tasks/migrations/0005_alter_task_priority_alter_task_status.py diff --git a/apps/tasks/migrations/0005_alter_task_priority_alter_task_status.py b/apps/tasks/migrations/0005_alter_task_priority_alter_task_status.py new file mode 100644 index 0000000..357d147 --- /dev/null +++ b/apps/tasks/migrations/0005_alter_task_priority_alter_task_status.py @@ -0,0 +1,23 @@ +# Generated by Django 6.0.3 on 2026-07-25 11:54 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('tasks', '0004_taskchecklistitem'), + ] + + operations = [ + migrations.AlterField( + model_name='task', + name='priority', + field=models.CharField(choices=[('low', 'Низкий'), ('medium', 'Средний'), ('high', 'Высокий')], db_index=True, default='medium', max_length=10, verbose_name='Пріоритет'), + ), + migrations.AlterField( + model_name='task', + name='status', + field=models.CharField(choices=[('pending', 'Ожидает'), ('in_progress', 'В работе'), ('done', 'Выполнено'), ('cancelled', 'Отменено')], db_index=True, default='pending', max_length=20, verbose_name='Статус'), + ), + ] diff --git a/apps/tasks/models.py b/apps/tasks/models.py index 996471b..4546565 100644 --- a/apps/tasks/models.py +++ b/apps/tasks/models.py @@ -21,16 +21,16 @@ class TaskQuerySet(models.QuerySet): class Task(BaseModel): STATUS_CHOICES = [ - ('pending', _('Очікує')), - ('in_progress', _('В роботі')), - ('done', _('Виконано')), - ('cancelled', _('Скасовано')), + ('pending', _('Ожидает')), + ('in_progress', _('В работе')), + ('done', _('Выполнено')), + ('cancelled', _('Отменено')), ] PRIORITY_CHOICES = [ - ('low', _('Низький')), - ('medium', _('Середній')), - ('high', _('Високий')), + ('low', _('Низкий')), + ('medium', _('Средний')), + ('high', _('Высокий')), ] PRIORITY_BADGES = {'low': 'badge-muted', 'medium': 'badge-warning', 'high': 'badge-danger'} diff --git a/apps/tasks/views.py b/apps/tasks/views.py index e4a9c72..0fc5b8a 100644 --- a/apps/tasks/views.py +++ b/apps/tasks/views.py @@ -4,6 +4,7 @@ from django.db.models import Count, Prefetch, Q from django.http import Http404 from django.shortcuts import get_object_or_404, redirect from django.views.decorators.http import require_POST +from django.utils.translation import gettext_lazy as _ from apps.tasks.models import Task, TaskComment from core.models.directories import Directory @@ -207,9 +208,9 @@ def task_detail_view(request, pk): 'can_edit': can_edit_task(request.user, task), 'can_delete': can_delete_task(request.user, task), 'role_groups': [ - ('Відповідальний', list(task.responsible.all())), - ('Співвиконавці', list(task.co_executors.all())), - ('Спостерігачі', list(task.observers.all())), + (_('Ответственный'), list(task.responsible.all())), + (_('Соисполнители'), list(task.co_executors.all())), + (_('Наблюдатели'), list(task.observers.all())), ], } return render_page(request, 'task-detail.html', context) diff --git a/locale/en/LC_MESSAGES/django.mo b/locale/en/LC_MESSAGES/django.mo index dee2c855aabfc7c9ee231e1823c5a718bcabdebc..33d1d3004a472769d73cab1b38a27459dc05bfb1 100644 GIT binary patch literal 8637 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 delta 2443 zcmYk-eN5F=9LMp4g82X!xDXHVbP+5fND~ne!U9ULQV{~tAEyU>_JxOWjhl*z@$B;XXr<8h3`&v7Y!?at3*3hnPP7XNgb zCB{5RI}S524|8w>GDOJiqLRdc9@K^VFbgM91Drt*&SEOgp*s2zb^TqZmy6SB7ohI1 z#$@ck6&S>=_yOv^+vsI{6TM6oI!7f^h!0^EY9_6y1bR@55=3?UI_BXN>i!wjKy#=S zyNycdo;#mTXG**XHBKFR8Q-)~QAUHP4i2IQ{1|KTf@|MHb?9OJHDCeyumU+{+K^Q@ zy{*fINcg@FZ$!FJLj=Ky?tyy6Sues^e9t zMCwuZZ+GW=aXsz*Sb(#riT#Xvgo_g+{l_P={+eM42efoABG;I9)Uz5y&FnDpVwlsY zL_Wo6{1TPuC9IAz=2z7H1x%BDY06PcU4su`BPxMb)FbH#QPIF-$c8j(>&6Mx%-%&N zZ$3mNFpWxJ26f*z$e88|s^cF}iQPo?^E)bmzft`!WchU5gE}5cqoRx-MmDM`Lk(Pm zde#l70fVR;-$D)iHmbw-QP&^G82k)%-3%(Bi|+ho)HvUw?*9e3E@W=G19wmvXJdHX(i;MLBU!tPS=iG^_sE)6r zX7&?mMz>L~&%dYv<7sHcl2PYDruhL;+3-9^+F@)~Nu-`x3Is6_9e`dP?Dx^F3lluE$^ zht;T#noygp1(nzWP9gd@}KY*I?6fVG%s0p2N?X#%Y^c?cCsA&F?jiv-D!!2Gz zrzmjsm$04KLFlolR1j+ky&1*C{Zd0k36&F?&~8FsPM(}uM<{8P@b`ZwmFL4v-U8GN z^c7RlY^w+#v4YSBY9O8=ULdqOexjM^ApT#TrSUlNoIBWvYg~Ob<`8+2`MaYIR>!O) zo+es|#|V{OL@A+v(`CdKLPcM~`(+aqJt{qKl~qJ*xEA^EmrK2tU@L@6s1AyV&PdyI zqrP}5O++D~FQJO|iax8$)u3!6v=3BDhKg4jr86J3N}@9o5sk&iDm zN*kd~^C+QBQ%yWV*rC`GdnR_j9g7>bOFYvj<~>mhuAR3N34OLSani2v7TP`De0$d0 zWlttGoGVNID9SEN*=OfdcG}IUeReL@XOq$z?W<``_Pexcdn`Tw+|~4&C_5aRY+Eu? zY%rtI{*zH@D>GZ{(ahIkwsns7joR_7ayy?@m)YbG1bPSdjGFp^&h9|(nBQz34ERRJ z2fF>c?QnL5{Uf{BuFpAd@8+zwTYSa#kgp`6DbN`Rj+&;xNU%E)9P!(mzFeD}n{TUg ZcO?1yhxQJR`~9OuzQG<};AMZm`44{K^B4dC diff --git a/locale/en/LC_MESSAGES/django.po b/locale/en/LC_MESSAGES/django.po index 40766a5..b673afe 100644 --- a/locale/en/LC_MESSAGES/django.po +++ b/locale/en/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-25 12:03+0300\n" +"POT-Creation-Date: 2026-07-25 14:54+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -323,7 +323,9 @@ msgstr "" msgid "Статус синхронизации Mattermost" msgstr "" -#: apps/employees/models/base.py:142 templates/pages/employee-detail.html:148 +#: apps/employees/models/base.py:142 apps/tasks/models.py:24 +#: templates/pages/employee-detail.html:148 templates/pages/task-detail.html:25 +#: templates/pages/tasks.html:64 templates/pages/tasks.html:116 msgid "Ожидает" msgstr "Pending" @@ -396,8 +398,9 @@ msgstr "" #: apps/employees/models/permissions.py:16 apps/it_manager/admin.py:611 #: core/models/directories.py:28 core/models/directories.py:120 +#: templates/pages/task-detail.html:62 msgid "Описание" -msgstr "" +msgstr "Description" #: apps/employees/models/permissions.py:17 apps/locations/models/base.py:59 msgid "Активна" @@ -515,8 +518,9 @@ msgid "" msgstr "" #: apps/feed/models.py:61 apps/feed/models.py:100 apps/tasks/models.py:126 +#: templates/pages/task-detail.html:200 msgid "Автор" -msgstr "" +msgstr "Author" #: apps/feed/models.py:65 apps/feed/models.py:96 msgid "Пост" @@ -707,9 +711,9 @@ msgstr "" msgid "Заявка" msgstr "" -#: apps/it_manager/admin.py:298 +#: apps/it_manager/admin.py:298 templates/pages/task-detail.html:171 msgid "Участники" -msgstr "" +msgstr "Participants" #: apps/it_manager/admin.py:301 apps/it_manager/admin.py:614 #: apps/it_manager/admin.py:670 @@ -728,9 +732,9 @@ msgstr "" msgid "SLA" msgstr "" -#: apps/it_manager/admin.py:366 +#: apps/it_manager/admin.py:366 templates/pages/task-detail.html:143 msgid "Взять в работу" -msgstr "" +msgstr "Take in progress" #: apps/it_manager/admin.py:375 msgid "Отметить решёнными" @@ -925,9 +929,9 @@ msgstr "" msgid "Заполняется автоматически из полей выше" msgstr "" -#: apps/locations/models/base.py:60 +#: apps/locations/models/base.py:60 templates/pages/task-detail.html:98 msgid "Комментарии" -msgstr "" +msgstr "Comments" #: apps/locations/models/base.py:66 msgid "Локации" @@ -1140,33 +1144,33 @@ msgstr "" msgid "Журнал синхронизации Carbonio" msgstr "" -#: apps/tasks/models.py:24 -msgid "Очікує" -msgstr "" +#: apps/tasks/models.py:25 templates/pages/task-detail.html:21 +#: templates/pages/tasks.html:68 templates/pages/tasks.html:108 +msgid "В работе" +msgstr "In progress" -#: apps/tasks/models.py:25 -msgid "В роботі" -msgstr "" +#: apps/tasks/models.py:26 templates/pages/task-detail.html:19 +#: templates/pages/task-detail.html:209 templates/pages/tasks.html:72 +#: templates/pages/tasks.html:104 +msgid "Выполнено" +msgstr "Done" -#: apps/tasks/models.py:26 apps/tasks/models.py:147 -msgid "Виконано" -msgstr "" - -#: apps/tasks/models.py:27 -msgid "Скасовано" -msgstr "" +#: apps/tasks/models.py:27 templates/pages/task-detail.html:23 +#: templates/pages/tasks.html:112 +msgid "Отменено" +msgstr "Cancelled" #: apps/tasks/models.py:31 -msgid "Низький" -msgstr "" +msgid "Низкий" +msgstr "Low" #: apps/tasks/models.py:32 -msgid "Середній" -msgstr "" +msgid "Средний" +msgstr "Medium" #: apps/tasks/models.py:33 -msgid "Високий" -msgstr "" +msgid "Высокий" +msgstr "High" #: apps/tasks/models.py:38 msgid "Назва" @@ -1224,6 +1228,10 @@ msgstr "" msgid "Пункт" msgstr "" +#: apps/tasks/models.py:147 +msgid "Виконано" +msgstr "" + #: apps/tasks/models.py:151 msgid "Відмітив" msgstr "" @@ -1240,6 +1248,21 @@ msgstr "" msgid "Чек-лист задачі" msgstr "" +#: apps/tasks/views.py:211 templates/pages/task-edit.html:2 +#: templates/pages/tasks.html:35 +msgid "Ответственный" +msgstr "Responsible" + +#: apps/tasks/views.py:212 templates/pages/task-edit.html:2 +#: templates/pages/tasks.html:35 +msgid "Соисполнители" +msgstr "Co-executors" + +#: apps/tasks/views.py:213 templates/pages/task-edit.html:2 +#: templates/pages/tasks.html:35 +msgid "Наблюдатели" +msgstr "Observers" + #: apps/utilities/models.py:22 msgid "Тип лічильника" msgstr "" @@ -1618,7 +1641,7 @@ msgid "Новости" msgstr "News" #: templates/index.html:260 templates/index.html:660 -#: templates/pages/dashboard.html:145 +#: templates/pages/dashboard.html:145 templates/pages/task-detail.html:10 msgid "Задачи" msgstr "Tasks" @@ -1750,7 +1773,7 @@ msgstr "Today" msgid "г." msgstr "y." -#: templates/pages/dashboard.html:10 +#: templates/pages/dashboard.html:10 templates/pages/tasks.html:7 msgid "Мои задачи" msgstr "My tasks" @@ -1822,7 +1845,8 @@ msgstr "Useful links and tools" msgid "Справочник" msgstr "Directory" -#: templates/pages/employee-detail.html:21 +#: templates/pages/employee-detail.html:21 templates/pages/task-detail.html:41 +#: templates/pages/tasks.html:127 msgid "Редактировать" msgstr "Edit" @@ -1900,7 +1924,7 @@ msgstr "Add employee" msgid "сотрудников, из них" msgstr "employees, of them" -#: templates/pages/employees.html:48 +#: templates/pages/employees.html:48 templates/pages/tasks.html:60 msgid "Все" msgstr "All" @@ -1923,3 +1947,107 @@ msgstr "Start date" #: templates/pages/employees.html:157 msgid "Список сотрудников пуст." msgstr "Employee list is empty." + +#: templates/pages/task-detail.html:30 +msgid "срок:" +msgstr "due:" + +#: templates/pages/task-detail.html:30 +msgid "просрочено" +msgstr "overdue" + +#: templates/pages/task-detail.html:46 templates/pages/tasks.html:133 +msgid "Удалить задачу" +msgstr "Delete task" + +#: templates/pages/task-detail.html:48 templates/pages/tasks.html:135 +msgid "Удалить" +msgstr "Delete" + +#: templates/pages/task-detail.html:66 +msgid "Описание не добавлено" +msgstr "No description" + +#: templates/pages/task-detail.html:74 +msgid "Чек-лист" +msgstr "Checklist" + +#: templates/pages/task-detail.html:116 +msgid "Комментариев пока нет" +msgstr "No comments yet" + +#: templates/pages/task-detail.html:125 +msgid "Написать комментарий..." +msgstr "Write a comment..." + +#: templates/pages/task-detail.html:127 +msgid "Отправить" +msgstr "Send" + +#: templates/pages/task-detail.html:138 +msgid "Действия" +msgstr "Actions" + +#: templates/pages/task-detail.html:156 +msgid "Вернуть в работу" +msgstr "Return to progress" + +#: templates/pages/task-detail.html:163 +msgid "Отменить задачу" +msgstr "Cancel task" + +#: templates/pages/task-detail.html:192 +msgid "Не назначено" +msgstr "Not assigned" + +#: templates/pages/task-detail.html:204 +msgid "Создано" +msgstr "Created" + +#: templates/pages/task-edit.html:2 templates/pages/tasks.html:35 +msgid "+ Добавить ответственного" +msgstr "+ Add responsible" + +#: templates/pages/task-edit.html:2 templates/pages/tasks.html:35 +msgid "+ Добавить соисполнителя" +msgstr "+ Add co-executor" + +#: templates/pages/task-edit.html:2 templates/pages/tasks.html:35 +msgid "+ Добавить наблюдателя" +msgstr "+ Add observer" + +#: templates/pages/task-edit.html:15 +msgid "Редактирование задачи" +msgstr "Edit task" + +#: templates/pages/task-edit.html:29 templates/pages/tasks.html:31 +msgid "Название задачи" +msgstr "Task title" + +#: templates/pages/task-edit.html:30 templates/pages/tasks.html:32 +msgid "Описание задачи (необязательно)..." +msgstr "Task description (optional)..." + +#: templates/pages/task-edit.html:46 +msgid "Сохранить изменения" +msgstr "Save changes" + +#: templates/pages/tasks.html:8 +msgid "Задачи, созданные вами или назначенные вам" +msgstr "Tasks created by or assigned to you" + +#: templates/pages/tasks.html:26 +msgid "Новая задача" +msgstr "New task" + +#: templates/pages/tasks.html:49 +msgid "Создать задачу" +msgstr "Create task" + +#: templates/pages/tasks.html:144 +msgid "Задач с таким статусом нет" +msgstr "No tasks with this status" + +#: templates/pages/tasks.html:144 +msgid "Задач пока нет — создайте первую" +msgstr "No tasks yet — create the first" diff --git a/locale/uk/LC_MESSAGES/django.mo b/locale/uk/LC_MESSAGES/django.mo index 4eea938536afde857e3f9b97a31e6bc74f2b0522..ca1a455be624b1f28968e127dfc074b9fe9a9b5b 100644 GIT binary patch literal 10723 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 diff --git a/locale/uk/LC_MESSAGES/django.po b/locale/uk/LC_MESSAGES/django.po index 8381e26..ea1e063 100644 --- a/locale/uk/LC_MESSAGES/django.po +++ b/locale/uk/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-25 12:03+0300\n" +"POT-Creation-Date: 2026-07-25 14:54+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -326,7 +326,9 @@ msgstr "" msgid "Статус синхронизации Mattermost" msgstr "" -#: apps/employees/models/base.py:142 templates/pages/employee-detail.html:148 +#: apps/employees/models/base.py:142 apps/tasks/models.py:24 +#: templates/pages/employee-detail.html:148 templates/pages/task-detail.html:25 +#: templates/pages/tasks.html:64 templates/pages/tasks.html:116 msgid "Ожидает" msgstr "Очікує" @@ -399,8 +401,9 @@ msgstr "" #: apps/employees/models/permissions.py:16 apps/it_manager/admin.py:611 #: core/models/directories.py:28 core/models/directories.py:120 +#: templates/pages/task-detail.html:62 msgid "Описание" -msgstr "" +msgstr "Опис" #: apps/employees/models/permissions.py:17 apps/locations/models/base.py:59 msgid "Активна" @@ -518,8 +521,9 @@ msgid "" msgstr "" #: apps/feed/models.py:61 apps/feed/models.py:100 apps/tasks/models.py:126 +#: templates/pages/task-detail.html:200 msgid "Автор" -msgstr "" +msgstr "Автор" #: apps/feed/models.py:65 apps/feed/models.py:96 msgid "Пост" @@ -710,9 +714,9 @@ msgstr "" msgid "Заявка" msgstr "" -#: apps/it_manager/admin.py:298 +#: apps/it_manager/admin.py:298 templates/pages/task-detail.html:171 msgid "Участники" -msgstr "" +msgstr "Учасники" #: apps/it_manager/admin.py:301 apps/it_manager/admin.py:614 #: apps/it_manager/admin.py:670 @@ -731,9 +735,9 @@ msgstr "" msgid "SLA" msgstr "" -#: apps/it_manager/admin.py:366 +#: apps/it_manager/admin.py:366 templates/pages/task-detail.html:143 msgid "Взять в работу" -msgstr "" +msgstr "Взяти в роботу" #: apps/it_manager/admin.py:375 msgid "Отметить решёнными" @@ -928,9 +932,9 @@ msgstr "" msgid "Заполняется автоматически из полей выше" msgstr "" -#: apps/locations/models/base.py:60 +#: apps/locations/models/base.py:60 templates/pages/task-detail.html:98 msgid "Комментарии" -msgstr "" +msgstr "Коментарі" #: apps/locations/models/base.py:66 msgid "Локации" @@ -1143,33 +1147,33 @@ msgstr "" msgid "Журнал синхронизации Carbonio" msgstr "" -#: apps/tasks/models.py:24 -msgid "Очікує" -msgstr "" +#: apps/tasks/models.py:25 templates/pages/task-detail.html:21 +#: templates/pages/tasks.html:68 templates/pages/tasks.html:108 +msgid "В работе" +msgstr "В роботі" -#: apps/tasks/models.py:25 -msgid "В роботі" -msgstr "" +#: apps/tasks/models.py:26 templates/pages/task-detail.html:19 +#: templates/pages/task-detail.html:209 templates/pages/tasks.html:72 +#: templates/pages/tasks.html:104 +msgid "Выполнено" +msgstr "Виконано" -#: apps/tasks/models.py:26 apps/tasks/models.py:147 -msgid "Виконано" -msgstr "" - -#: apps/tasks/models.py:27 -msgid "Скасовано" -msgstr "" +#: apps/tasks/models.py:27 templates/pages/task-detail.html:23 +#: templates/pages/tasks.html:112 +msgid "Отменено" +msgstr "Скасовано" #: apps/tasks/models.py:31 -msgid "Низький" -msgstr "" +msgid "Низкий" +msgstr "Низький" #: apps/tasks/models.py:32 -msgid "Середній" -msgstr "" +msgid "Средний" +msgstr "Середній" #: apps/tasks/models.py:33 -msgid "Високий" -msgstr "" +msgid "Высокий" +msgstr "Високий" #: apps/tasks/models.py:38 msgid "Назва" @@ -1227,6 +1231,10 @@ msgstr "" msgid "Пункт" msgstr "" +#: apps/tasks/models.py:147 +msgid "Виконано" +msgstr "" + #: apps/tasks/models.py:151 msgid "Відмітив" msgstr "" @@ -1243,6 +1251,21 @@ msgstr "" msgid "Чек-лист задачі" msgstr "" +#: apps/tasks/views.py:211 templates/pages/task-edit.html:2 +#: templates/pages/tasks.html:35 +msgid "Ответственный" +msgstr "Відповідальний" + +#: apps/tasks/views.py:212 templates/pages/task-edit.html:2 +#: templates/pages/tasks.html:35 +msgid "Соисполнители" +msgstr "Співвиконавці" + +#: apps/tasks/views.py:213 templates/pages/task-edit.html:2 +#: templates/pages/tasks.html:35 +msgid "Наблюдатели" +msgstr "Спостерігачі" + #: apps/utilities/models.py:22 msgid "Тип лічильника" msgstr "" @@ -1621,7 +1644,7 @@ msgid "Новости" msgstr "Новини" #: templates/index.html:260 templates/index.html:660 -#: templates/pages/dashboard.html:145 +#: templates/pages/dashboard.html:145 templates/pages/task-detail.html:10 msgid "Задачи" msgstr "Задачі" @@ -1753,7 +1776,7 @@ msgstr "Сьогодні" msgid "г." msgstr "р." -#: templates/pages/dashboard.html:10 +#: templates/pages/dashboard.html:10 templates/pages/tasks.html:7 msgid "Мои задачи" msgstr "Мої задачі" @@ -1825,7 +1848,8 @@ msgstr "Корисні посилання та інструменти" msgid "Справочник" msgstr "Довідник" -#: templates/pages/employee-detail.html:21 +#: templates/pages/employee-detail.html:21 templates/pages/task-detail.html:41 +#: templates/pages/tasks.html:127 msgid "Редактировать" msgstr "Редагувати" @@ -1903,7 +1927,7 @@ msgstr "Додати співробітника" msgid "сотрудников, из них" msgstr "співробітників, з них" -#: templates/pages/employees.html:48 +#: templates/pages/employees.html:48 templates/pages/tasks.html:60 msgid "Все" msgstr "Всі" @@ -1926,3 +1950,107 @@ msgstr "Дата початку" #: templates/pages/employees.html:157 msgid "Список сотрудников пуст." msgstr "Список співробітників порожній." + +#: templates/pages/task-detail.html:30 +msgid "срок:" +msgstr "термін:" + +#: templates/pages/task-detail.html:30 +msgid "просрочено" +msgstr "прострочено" + +#: templates/pages/task-detail.html:46 templates/pages/tasks.html:133 +msgid "Удалить задачу" +msgstr "Видалити задачу" + +#: templates/pages/task-detail.html:48 templates/pages/tasks.html:135 +msgid "Удалить" +msgstr "Видалити" + +#: templates/pages/task-detail.html:66 +msgid "Описание не добавлено" +msgstr "Опис не додано" + +#: templates/pages/task-detail.html:74 +msgid "Чек-лист" +msgstr "Чек-лист" + +#: templates/pages/task-detail.html:116 +msgid "Комментариев пока нет" +msgstr "Коментарів поки немає" + +#: templates/pages/task-detail.html:125 +msgid "Написать комментарий..." +msgstr "Написати коментар..." + +#: templates/pages/task-detail.html:127 +msgid "Отправить" +msgstr "Надіслати" + +#: templates/pages/task-detail.html:138 +msgid "Действия" +msgstr "Дії" + +#: templates/pages/task-detail.html:156 +msgid "Вернуть в работу" +msgstr "Повернути в роботу" + +#: templates/pages/task-detail.html:163 +msgid "Отменить задачу" +msgstr "Скасувати задачу" + +#: templates/pages/task-detail.html:192 +msgid "Не назначено" +msgstr "Не призначено" + +#: templates/pages/task-detail.html:204 +msgid "Создано" +msgstr "Створено" + +#: templates/pages/task-edit.html:2 templates/pages/tasks.html:35 +msgid "+ Добавить ответственного" +msgstr "+ Додати відповідального" + +#: templates/pages/task-edit.html:2 templates/pages/tasks.html:35 +msgid "+ Добавить соисполнителя" +msgstr "+ Додати співвиконавця" + +#: templates/pages/task-edit.html:2 templates/pages/tasks.html:35 +msgid "+ Добавить наблюдателя" +msgstr "+ Додати спостерігача" + +#: templates/pages/task-edit.html:15 +msgid "Редактирование задачи" +msgstr "Редагування задачі" + +#: templates/pages/task-edit.html:29 templates/pages/tasks.html:31 +msgid "Название задачи" +msgstr "Назва задачі" + +#: templates/pages/task-edit.html:30 templates/pages/tasks.html:32 +msgid "Описание задачи (необязательно)..." +msgstr "Опис задачі (необов'язково)..." + +#: templates/pages/task-edit.html:46 +msgid "Сохранить изменения" +msgstr "Зберегти зміни" + +#: templates/pages/tasks.html:8 +msgid "Задачи, созданные вами или назначенные вам" +msgstr "Задачі, створені вами або призначені вам" + +#: templates/pages/tasks.html:26 +msgid "Новая задача" +msgstr "Нова задача" + +#: templates/pages/tasks.html:49 +msgid "Создать задачу" +msgstr "Створити задачу" + +#: templates/pages/tasks.html:144 +msgid "Задач с таким статусом нет" +msgstr "Задач з таким статусом немає" + +#: templates/pages/tasks.html:144 +msgid "Задач пока нет — создайте первую" +msgstr "Задач поки немає — створіть першу" diff --git a/templates/pages/task-detail.html b/templates/pages/task-detail.html index 6cc3138..a2c41d5 100644 --- a/templates/pages/task-detail.html +++ b/templates/pages/task-detail.html @@ -1,4 +1,5 @@ {% load common_tags %} +{% load i18n %} @@ -15,18 +16,18 @@
{% if task.status == 'done' %} - ✓ Виконано + ✓ {% trans "Выполнено" %} {% elif task.status == 'in_progress' %} - В роботі + {% trans "В работе" %} {% elif task.status == 'cancelled' %} - Скасовано + {% trans "Отменено" %} {% else %} - Очікує + {% trans "Ожидает" %} {% endif %} {{ task.get_priority_display }} {% if task.due_date %} - термін: {{ task.due_date|date:"d.m.Y" }}{% if task.is_overdue %} — прострочено{% endif %} + {% trans "срок:" %} {{ task.due_date|date:"d.m.Y" }}{% if task.is_overdue %} — {% trans "просрочено" %}{% endif %} {% endif %}
@@ -37,14 +38,14 @@ - Редагувати + {% trans "Редактировать" %} {% endif %} {% if can_delete %}
+ hx-confirm="{% trans 'Удалить задачу' %} «{{ task.title }}»?" style="margin:0;"> {% csrf_token %} - +
{% endif %}
@@ -58,11 +59,11 @@
-

Опис

+

{% trans "Описание" %}

{% if task.description %}
{{ task.description }}
{% else %} -
Опис не додано
+
{% trans "Описание не добавлено" %}
{% endif %}
@@ -70,7 +71,7 @@ {% if checklist %}
-

Чек-лист

+

{% trans "Чек-лист" %}

{{ task.checklist_done }}/{{ task.checklist_total }}
@@ -94,7 +95,7 @@
-

Коментарі

+

{% trans "Комментарии" %}

{{ comments|length }}
@@ -112,7 +113,7 @@
{% empty %} -
Коментарів поки немає
+
{% trans "Комментариев пока нет" %}
{% endfor %} @@ -121,9 +122,9 @@ {% csrf_token %}
{{ request.user|initials }}
- - +
@@ -134,12 +135,12 @@ {% if is_participant and task.status != 'cancelled' %}
-

Дії

+

{% trans "Действия" %}

{% if task.status == 'pending' %}
{% csrf_token %} - +
{% endif %} {% if task.status != 'done' %} @@ -152,14 +153,14 @@
{% csrf_token %} - +
{% endif %} {% if can_edit and task.status != 'done' %}
{% csrf_token %} - +
{% endif %}
@@ -167,7 +168,7 @@
-

Учасники

+

{% trans "Участники" %}

{% for role_label, role_people in role_groups %} {% if role_people %} @@ -188,7 +189,7 @@ {% endif %} {% endfor %} {% if not task.responsible.all and not task.co_executors.all and not task.observers.all %} -
Не призначено
+
{% trans "Не назначено" %}
{% endif %}
@@ -196,16 +197,16 @@
-
Автор
+
{% trans "Автор" %}
{{ task.creator.get_full_name|default:"—" }}
-
Створено
+
{% trans "Создано" %}
{{ task.created_at|date:"d.m.Y H:i" }}
{% if task.completed_at %}
-
Виконано
+
{% trans "Выполнено" %}
{{ task.completed_at|date:"d.m.Y H:i" }}
{% endif %} diff --git a/templates/pages/task-edit.html b/templates/pages/task-edit.html index 9be1936..5644fa7 100644 --- a/templates/pages/task-edit.html +++ b/templates/pages/task-edit.html @@ -1,3 +1,5 @@ +{% load i18n %} +{% trans 'Ответственный' as l_resp %}{% trans '+ Добавить ответственного' as p_resp %}{% trans 'Соисполнители' as l_co %}{% trans '+ Добавить соисполнителя' as p_co %}{% trans 'Наблюдатели' as l_obs %}{% trans '+ Добавить наблюдателя' as p_obs %}
@@ -10,7 +12,7 @@
-

Редагування задачі

+

{% trans "Редактирование задачи" %}

{{ department_tree|json_script:"department-tree-data" }} @@ -24,14 +26,14 @@
{% csrf_token %} - -
- {% include 'partials/people-picker-field.html' with label='Відповідальний' field_name='responsible' options=employee_options selected_ids=responsible_ids placeholder='+ Додати відповідального' %} - {% include 'partials/people-picker-field.html' with label='Співвиконавці' field_name='co_executors' options=employee_options selected_ids=co_executor_ids placeholder='+ Додати співвиконавця' %} - {% include 'partials/people-picker-field.html' with label='Спостерігачі' field_name='observers' options=employee_options selected_ids=observer_ids placeholder='+ Додати спостерігача' %} + {% include 'partials/people-picker-field.html' with label=l_resp field_name='responsible' options=employee_options selected_ids=responsible_ids placeholder=p_resp %} + {% include 'partials/people-picker-field.html' with label=l_co field_name='co_executors' options=employee_options selected_ids=co_executor_ids placeholder=p_co %} + {% include 'partials/people-picker-field.html' with label=l_obs field_name='observers' options=employee_options selected_ids=observer_ids placeholder=p_obs %}
@@ -41,7 +43,7 @@ {% endfor %} - +
diff --git a/templates/pages/tasks.html b/templates/pages/tasks.html index f892919..f22b741 100644 --- a/templates/pages/tasks.html +++ b/templates/pages/tasks.html @@ -1,10 +1,11 @@ +{% load i18n %}
-

Мої задачі

-

Задачі, створені вами або призначені вам

+

{% trans "Мои задачи" %}

+

{% trans "Задачи, созданные вами или назначенные вам" %}

@@ -22,19 +23,20 @@ - Нова задача + {% trans "Новая задача" %}
{% csrf_token %} - - -
- {% include 'partials/people-picker-field.html' with label='Відповідальний' field_name='responsible' options=employee_options selected_ids=preselect_responsible_ids placeholder='+ Додати відповідального' %} - {% include 'partials/people-picker-field.html' with label='Співвиконавці' field_name='co_executors' options=employee_options selected_ids=empty_ids placeholder='+ Додати співвиконавця' %} - {% include 'partials/people-picker-field.html' with label='Спостерігачі' field_name='observers' options=employee_options selected_ids=empty_ids placeholder='+ Додати спостерігача' %} + {% trans 'Ответственный' as l_resp %}{% trans '+ Добавить ответственного' as p_resp %}{% trans 'Соисполнители' as l_co %}{% trans '+ Добавить соисполнителя' as p_co %}{% trans 'Наблюдатели' as l_obs %}{% trans '+ Добавить наблюдателя' as p_obs %} +
+ {% include 'partials/people-picker-field.html' with label=l_resp field_name='responsible' options=employee_options selected_ids=preselect_responsible_ids placeholder=p_resp %} + {% include 'partials/people-picker-field.html' with label=l_co field_name='co_executors' options=employee_options selected_ids=empty_ids placeholder=p_co %} + {% include 'partials/people-picker-field.html' with label=l_obs field_name='observers' options=employee_options selected_ids=empty_ids placeholder=p_obs %}
@@ -44,7 +46,7 @@ {% endfor %} - +
@@ -55,19 +57,19 @@ {% with base="display:inline-flex; align-items:center; gap:0.375rem; padding:0.375rem 0.75rem; border-radius:calc(var(--radius) - 2px); font-size:0.8125rem; font-weight:500; text-decoration:none; cursor:pointer;" %} - Всі {{ counts.all }} + {% trans "Все" %} {{ counts.all }} - Очікує {{ counts.pending }} + {% trans "Ожидает" %} {{ counts.pending }} - В роботі {{ counts.in_progress }} + {% trans "В работе" %} {{ counts.in_progress }} - Виконано {{ counts.done }} + {% trans "Выполнено" %} {{ counts.done }} {% endwith %}
@@ -99,19 +101,19 @@
{% if task.status == 'done' %} - Виконано + {% trans "Выполнено" %} {% elif task.status == 'in_progress' %} - В роботі + {% trans "В работе" %} {% elif task.status == 'cancelled' %} - Скасовано + {% trans "Отменено" %} {% else %} - Очікує + {% trans "Ожидает" %} {% endif %} {% if task.due_date %} @@ -122,15 +124,15 @@ {{ task.get_priority_display }} {% if task.can_edit %} + class="btn btn-ghost btn-icon" title="{% trans 'Редактировать' %}" style="padding:0.25rem; color:var(--color-muted-foreground); margin-left:auto; cursor:pointer;"> {% endif %} {% if task.can_delete %}
+ hx-confirm="{% trans 'Удалить задачу' %} «{{ task.title }}»?" style="margin:0; display:flex;"> {% csrf_token %} -
@@ -139,7 +141,7 @@
{% empty %}
- {% if active_status %}Задач з таким статусом немає{% else %}Задач поки немає — створіть першу{% endif %} + {% if active_status %}{% trans "Задач с таким статусом нет" %}{% else %}{% trans "Задач пока нет — создайте первую" %}{% endif %}
{% endfor %}