From 7688fac1e9078be155b4c9bdad147429713194e8 Mon Sep 17 00:00:00 2001 From: Olga Akukin <106934645+olyapka84@users.noreply.github.com> Date: Fri, 31 Oct 2025 20:01:53 +0100 Subject: [PATCH] Translate Russian text to English --- task_manager/labels/forms.py | 2 +- ...el_slug_alter_label_created_at_and_more.py | 4 +-- task_manager/labels/views.py | 11 +++--- task_manager/statuses/forms.py | 2 +- task_manager/statuses/tests.py | 26 +++++++------- task_manager/statuses/views.py | 8 ++--- task_manager/tasks/filters.py | 8 ++--- task_manager/tasks/forms.py | 10 +++--- task_manager/tasks/tests.py | 36 +++++++++---------- task_manager/tasks/views.py | 8 ++--- task_manager/templates/base.html | 20 +++++------ task_manager/templates/index.html | 6 ++-- .../templates/labels/confirm_delete.html | 8 ++--- task_manager/templates/labels/form.html | 10 +++--- task_manager/templates/labels/index.html | 14 ++++---- .../templates/statuses/confirm_delete.html | 8 ++--- task_manager/templates/statuses/form.html | 8 ++--- task_manager/templates/statuses/index.html | 14 ++++---- .../templates/tasks/confirm_delete.html | 8 ++--- task_manager/templates/tasks/detail.html | 16 ++++----- task_manager/templates/tasks/form.html | 18 +++++----- task_manager/templates/tasks/index.html | 30 ++++++++-------- .../templates/users/confirm_delete.html | 10 +++--- task_manager/templates/users/create.html | 16 ++++----- task_manager/templates/users/index.html | 18 +++++----- task_manager/templates/users/login.html | 14 ++++---- task_manager/templates/users/update.html | 8 ++--- task_manager/users/forms.py | 24 ++++++------- task_manager/users/tests.py | 8 ++--- task_manager/users/views.py | 35 +++++++++--------- task_manager/views.py | 2 +- 31 files changed, 204 insertions(+), 206 deletions(-) diff --git a/task_manager/labels/forms.py b/task_manager/labels/forms.py index 67737e4..d9ebf62 100644 --- a/task_manager/labels/forms.py +++ b/task_manager/labels/forms.py @@ -10,5 +10,5 @@ class Meta: "name": forms.TextInput(attrs={"class": "form-control"}), } labels = { - "name": "Имя", + "name": "Name", } diff --git a/task_manager/labels/migrations/0002_remove_label_slug_alter_label_created_at_and_more.py b/task_manager/labels/migrations/0002_remove_label_slug_alter_label_created_at_and_more.py index c14afbe..bc07105 100644 --- a/task_manager/labels/migrations/0002_remove_label_slug_alter_label_created_at_and_more.py +++ b/task_manager/labels/migrations/0002_remove_label_slug_alter_label_created_at_and_more.py @@ -17,11 +17,11 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='label', name='created_at', - field=models.DateTimeField(auto_now_add=True, verbose_name='Дата создания'), + field=models.DateTimeField(auto_now_add=True, verbose_name='Created at'), ), migrations.AlterField( model_name='label', name='name', - field=models.CharField(max_length=100, unique=True, verbose_name='Имя'), + field=models.CharField(max_length=100, unique=True, verbose_name='Name'), ), ] diff --git a/task_manager/labels/views.py b/task_manager/labels/views.py index f31f98c..23fe1d9 100644 --- a/task_manager/labels/views.py +++ b/task_manager/labels/views.py @@ -23,7 +23,7 @@ class LabelCreateView(LoginRequiredMixin, CreateView): login_url = "login" def form_valid(self, form): - messages.success(self.request, "Метка успешно создана") + messages.success(self.request, "Label created successfully") return super().form_valid(form) @@ -35,7 +35,7 @@ class LabelUpdateView(LoginRequiredMixin, UpdateView): login_url = "login" def form_valid(self, form): - messages.success(self.request, "Метка успешно изменена") + messages.success(self.request, "Label updated successfully") return super().form_valid(form) @@ -48,11 +48,10 @@ class LabelDeleteView(LoginRequiredMixin, DeleteView): def post(self, request, *args, **kwargs): label = self.get_object() if label.labeled_tasks.exists(): - messages.error(request, - "Невозможно удалить метку, " - "потому что она используется") + messages.error(request, + "Cannot delete label because it is in use") return redirect("labels:index") response = super().post(request, *args, **kwargs) - messages.success(request, "Метка успешно удалена") + messages.success(request, "Label deleted successfully") return response diff --git a/task_manager/statuses/forms.py b/task_manager/statuses/forms.py index 9850bcb..f8feb54 100644 --- a/task_manager/statuses/forms.py +++ b/task_manager/statuses/forms.py @@ -6,7 +6,7 @@ class StatusForm(forms.ModelForm): class Meta: model = Status fields = ["name"] - labels = {"name": "Имя"} + labels = {"name": "Name"} widgets = { "name": forms.TextInput(attrs={"class": "form-control"}), } diff --git a/task_manager/statuses/tests.py b/task_manager/statuses/tests.py index 248d4b8..6c5b908 100644 --- a/task_manager/statuses/tests.py +++ b/task_manager/statuses/tests.py @@ -35,36 +35,36 @@ def test_login_required(client): @pytest.mark.django_db def test_list(auth_client): - Status.objects.create(name="новый") - Status.objects.create(name="в работе") + Status.objects.create(name="new") + Status.objects.create(name="in progress") resp = auth_client.get(reverse("statuses:index")) assert resp.status_code == 200 html = resp.content.decode() - assert "новый" in html - assert "в работе" in html + assert "new" in html + assert "in progress" in html @pytest.mark.django_db def test_create(auth_client): resp = auth_client.post(reverse("statuses:create"), - data={"name": "на тестировании"}) + data={"name": "testing"}) assert resp.status_code in (302, 301) - assert Status.objects.filter(name="на тестировании").exists() + assert Status.objects.filter(name="testing").exists() @pytest.mark.django_db def test_update(auth_client): - st = Status.objects.create(name="черновик") + st = Status.objects.create(name="draft") resp = auth_client.post(reverse("statuses:update", args=[st.pk]), - data={"name": "завершён"}) + data={"name": "done"}) assert resp.status_code in (302, 301) st.refresh_from_db() - assert st.name == "завершён" + assert st.name == "done" @pytest.mark.django_db def test_delete(auth_client): - st = Status.objects.create(name="временный") + st = Status.objects.create(name="temporary") get_resp = auth_client.get(reverse("statuses:delete", args=[st.pk])) assert get_resp.status_code == 200 post_resp = auth_client.post(reverse("statuses:delete", args=[st.pk])) @@ -76,10 +76,10 @@ def test_delete(auth_client): def test_cannot_delete_status_in_use(django_user_model): user = (django_user_model.objects. create_user(username="alice", password="p123")) - status = Status.objects.create(name="новый") + status = Status.objects.create(name="new") Task.objects.create( - name="Тестовая задача", - description="Проверка связи", + name="Test task", + description="Connection check", status=status, author=user, ) diff --git a/task_manager/statuses/views.py b/task_manager/statuses/views.py index 6fa8c04..86d805f 100644 --- a/task_manager/statuses/views.py +++ b/task_manager/statuses/views.py @@ -23,7 +23,7 @@ class StatusCreateView(LoginRequiredMixin, CreateView): login_url = "login" def form_valid(self, form): - messages.success(self.request, "Статус успешно создан") + messages.success(self.request, "Status created successfully") return super().form_valid(form) @@ -35,7 +35,7 @@ class StatusUpdateView(LoginRequiredMixin, UpdateView): login_url = "login" def form_valid(self, form): - messages.success(self.request, "Статус успешно изменен") + messages.success(self.request, "Status updated successfully") return super().form_valid(form) @@ -50,9 +50,9 @@ def post(self, request, *args, **kwargs): if status.tasks.exists(): messages.error( request, - "Невозможно удалить статус, потому что он используется", + "Cannot delete status because it is in use", ) return redirect("statuses:index") response = super().post(request, *args, **kwargs) - messages.success(request, "Статус успешно удален") + messages.success(request, "Status deleted successfully") return response diff --git a/task_manager/tasks/filters.py b/task_manager/tasks/filters.py index cc095b0..cead85f 100644 --- a/task_manager/tasks/filters.py +++ b/task_manager/tasks/filters.py @@ -14,23 +14,23 @@ class TaskFilter(df.FilterSet): status = df.ModelChoiceFilter( queryset=Status.objects.all().order_by("id"), - label="Статус", + label="Status", widget=forms.Select(attrs={"class": "form-select"}), ) executor = df.ModelChoiceFilter( queryset=User.objects.all().order_by("id"), - label="Исполнитель", + label="Executor", widget=forms.Select(attrs={"class": "form-select"}), ) label = df.ModelChoiceFilter( field_name="labels", queryset=Label.objects.all().order_by("id"), - label="Метка", + label="Label", widget=forms.Select(attrs={"class": "form-select"}), ) self_tasks = df.BooleanFilter( method="filter_self_tasks", - label="Только свои задачи", + label="Only my tasks", widget=forms.CheckboxInput(attrs={"class": "form-check-input"}), ) diff --git a/task_manager/tasks/forms.py b/task_manager/tasks/forms.py index 520b3a3..0203c87 100644 --- a/task_manager/tasks/forms.py +++ b/task_manager/tasks/forms.py @@ -22,11 +22,11 @@ class Meta: "size": 5}), } labels = { - "name": "Имя", - "description": "Описание", - "status": "Статус", - "executor": "Исполнитель", - "labels": "Метки", + "name": "Name", + "description": "Description", + "status": "Status", + "executor": "Executor", + "labels": "Labels", } def __init__(self, *args, **kwargs): diff --git a/task_manager/tasks/tests.py b/task_manager/tasks/tests.py index 04b7828..a3a4db1 100644 --- a/task_manager/tasks/tests.py +++ b/task_manager/tasks/tests.py @@ -27,7 +27,7 @@ def auth_client(users): @pytest.fixture def status_new(db): - return Status.objects.create(name="новый") + return Status.objects.create(name="new") def test_login_required(client): @@ -36,58 +36,58 @@ def test_login_required(client): def test_list(auth_client, users, status_new): - Task.objects.create(name="Тестовая задача", description="Описание", + Task.objects.create(name="Test task", description="Description", status=status_new, author=users["u1"]) - Task.objects.create(name="Вторая", description="Ещё одна", + Task.objects.create(name="Second", description="Another one", status=status_new, author=users["u1"]) r = auth_client.get(reverse("tasks:index")) assert r.status_code == 200 html = r.content.decode() - assert "Тестовая задача" in html - assert "Вторая" in html + assert "Test task" in html + assert "Second" in html def test_create(auth_client, users, status_new): resp = auth_client.post(reverse("tasks:create"), data={ - "name": "Новая задача", - "description": "Что-то сделать", + "name": "New task", + "description": "Do something", "status": status_new.pk, "executor": users["u2"].pk, }) assert resp.status_code in (302, 301) - assert Task.objects.filter(name="Новая задача", + assert Task.objects.filter(name="New task", status=status_new, author=users["u1"]).exists() def test_update(auth_client, users, status_new): - t = Task.objects.create(name="Черновик", description="Описание", + t = Task.objects.create(name="Draft", description="Description", status=status_new, author=users["u1"]) resp = auth_client.post(reverse("tasks:update", args=[t.pk]), data={ - "name": "Изменено", - "description": "Новое описание", + "name": "Updated", + "description": "New description", "status": status_new.pk, "executor": users["u2"].pk, }) assert resp.status_code in (302, 301) t.refresh_from_db() - assert t.name == "Изменено" - assert t.description == "Новое описание" + assert t.name == "Updated" + assert t.description == "New description" assert t.executor == users["u2"] def test_view(auth_client, users, status_new): - t = Task.objects.create(name="Посмотреть", description="Детали", + t = Task.objects.create(name="View", description="Details", status=status_new, author=users["u1"]) r = auth_client.get(reverse("tasks:detail", args=[t.pk])) assert r.status_code == 200 html = r.content.decode() - assert "Посмотреть" in html - assert "Детали" in html + assert "View" in html + assert "Details" in html def test_delete(auth_client, users, status_new): - t = Task.objects.create(name="Удалить", description="Ненужная", + t = Task.objects.create(name="Delete", description="Unneeded", status=status_new, author=users["u1"]) r_get = auth_client.get(reverse("tasks:delete", args=[t.pk])) assert r_get.status_code == 200 @@ -98,7 +98,7 @@ def test_delete(auth_client, users, status_new): def test_only_author_can_delete(auth_client, users, status_new): t = Task.objects.create( - name="Чужая задача", description="...", + name="Someone else's task", description="...", status=status_new, author=users["u2"] ) r = auth_client.post(reverse("tasks:delete", args=[t.pk])) diff --git a/task_manager/tasks/views.py b/task_manager/tasks/views.py index b9ec7d5..0e291ed 100644 --- a/task_manager/tasks/views.py +++ b/task_manager/tasks/views.py @@ -42,7 +42,7 @@ class TaskCreateView(LoginRequiredMixin, CreateView): def form_valid(self, form): form.instance.author = self.request.user - messages.success(self.request, "Задача успешно создана") + messages.success(self.request, "Task created successfully") return super().form_valid(form) @@ -54,7 +54,7 @@ class TaskUpdateView(LoginRequiredMixin, UpdateView): login_url = "login" def form_valid(self, form): - messages.success(self.request, "Задача успешно изменена") + messages.success(self.request, "Task updated successfully") return super().form_valid(form) @@ -69,10 +69,10 @@ def test_func(self): def handle_no_permission(self): if self.request.user.is_authenticated: - messages.error(self.request, "Задачу может удалить только ее автор") + messages.error(self.request, "Only the author can delete the task") return redirect("tasks:index") return super().handle_no_permission() def post(self, request, *args, **kwargs): - messages.success(self.request, "Задача успешно удалена") + messages.success(self.request, "Task deleted successfully") return super().post(request, *args, **kwargs) diff --git a/task_manager/templates/base.html b/task_manager/templates/base.html index d06b8d1..2a9324d 100644 --- a/task_manager/templates/base.html +++ b/task_manager/templates/base.html @@ -1,18 +1,18 @@ {% load django_bootstrap5 %} - +
-