From f9a8149ef52186e5bded24fcf70e42e50654b9b3 Mon Sep 17 00:00:00 2001 From: Arthur Hanson Date: Wed, 31 Jul 2024 16:47:18 +0700 Subject: [PATCH] 17036 international messages --- netbox/account/views.py | 8 ++++---- netbox/circuits/views.py | 5 +++-- netbox/core/views.py | 16 ++++++++-------- netbox/dcim/views.py | 12 ++++++------ netbox/netbox/views/generic/bulk_views.py | 12 ++++++------ netbox/netbox/views/generic/feature_views.py | 6 +++--- netbox/virtualization/views.py | 6 +++--- 7 files changed, 33 insertions(+), 32 deletions(-) diff --git a/netbox/account/views.py b/netbox/account/views.py index d39b00d7a..18c2eb412 100644 --- a/netbox/account/views.py +++ b/netbox/account/views.py @@ -109,7 +109,7 @@ class LoginView(View): # Authenticate user auth_login(request, form.get_user()) logger.info(f"User {request.user} successfully authenticated") - messages.success(request, f"Logged in as {request.user}.") + messages.success(request, _("Logged in as {user}.").format(user=request.user)) # Ensure the user has a UserConfig defined. (This should normally be handled by # create_userconfig() on user creation.) @@ -159,7 +159,7 @@ class LogoutView(View): username = request.user auth_logout(request) logger.info(f"User {username} has logged out") - messages.info(request, "You have logged out.") + messages.info(request, _("You have logged out.")) # Delete session key & language cookies (if set) upon logout response = HttpResponseRedirect(resolve_url(settings.LOGOUT_REDIRECT_URL)) @@ -234,7 +234,7 @@ class ChangePasswordView(LoginRequiredMixin, View): def get(self, request): # LDAP users cannot change their password here if getattr(request.user, 'ldap_username', None): - messages.warning(request, "LDAP-authenticated user credentials cannot be changed within NetBox.") + messages.warning(request, _("LDAP-authenticated user credentials cannot be changed within NetBox.")) return redirect('account:profile') form = PasswordChangeForm(user=request.user) @@ -249,7 +249,7 @@ class ChangePasswordView(LoginRequiredMixin, View): if form.is_valid(): form.save() update_session_auth_hash(request, form.user) - messages.success(request, "Your password has been changed successfully.") + messages.success(request, _("Your password has been changed successfully.")) return redirect('account:profile') return render(request, self.template_name, { diff --git a/netbox/circuits/views.py b/netbox/circuits/views.py index b10b83b23..97e15f868 100644 --- a/netbox/circuits/views.py +++ b/netbox/circuits/views.py @@ -1,6 +1,7 @@ from django.contrib import messages from django.db import transaction from django.shortcuts import get_object_or_404, redirect, render +from django.utils.translation import gettext_lazy as _ from dcim.views import PathTraceView from netbox.views import generic @@ -326,7 +327,7 @@ class CircuitSwapTerminations(generic.ObjectEditView): # Circuit must have at least one termination to swap if not circuit.termination_a and not circuit.termination_z: - messages.error(request, "No terminations have been defined for circuit {}.".format(circuit)) + messages.error(request, _("No terminations have been defined for circuit {}.").format(circuit)) return redirect('circuits:circuit', pk=circuit.pk) return render(request, 'circuits/circuit_terminations_swap.html', { @@ -374,7 +375,7 @@ class CircuitSwapTerminations(generic.ObjectEditView): circuit.termination_z = None circuit.save() - messages.success(request, f"Swapped terminations for circuit {circuit}.") + messages.success(request, _("Swapped terminations for circuit {circuit}.").format(circuit=circuit)) return redirect('circuits:circuit', pk=circuit.pk) return render(request, 'circuits/circuit_terminations_swap.html', { diff --git a/netbox/core/views.py b/netbox/core/views.py index 9697a7352..cd0be1b6d 100644 --- a/netbox/core/views.py +++ b/netbox/core/views.py @@ -76,7 +76,7 @@ class DataSourceSyncView(BaseObjectView): datasource = get_object_or_404(self.queryset, pk=pk) job = datasource.enqueue_sync_job(request) - messages.success(request, f"Queued job #{job.pk} to sync {datasource}") + messages.success(request, _("Queued job #{job_id} to sync {datasource}").format(job_id=job.pk, datasource=datasource)) return redirect(datasource.get_absolute_url()) @@ -235,7 +235,7 @@ class ConfigRevisionRestoreView(ContentTypePermissionRequiredMixin, View): candidate_config = get_object_or_404(ConfigRevision, pk=pk) candidate_config.activate() - messages.success(request, f"Restored configuration revision #{pk}") + messages.success(request, _("Restored configuration revision #{pk}").format(pk=pk)) return redirect(candidate_config.get_absolute_url()) @@ -379,9 +379,9 @@ class BackgroundTaskDeleteView(BaseRQView): # Remove job id from queue and delete the actual job queue.connection.lrem(queue.key, 0, job.id) job.delete() - messages.success(request, f'Deleted job {job_id}') + messages.success(request, _('Deleted job {job_id}').format(job_id=job_id)) else: - messages.error(request, f'Error deleting job: {form.errors[0]}') + messages.error(request, _('Error deleting job: {error}').format(error=job.errors[0])) return redirect(reverse('core:background_queue_list')) @@ -400,7 +400,7 @@ class BackgroundTaskRequeueView(BaseRQView): queue = get_queue_by_index(queue_index) requeue_job(job_id, connection=queue.connection, serializer=queue.serializer) - messages.success(request, f'You have successfully requeued: {job_id}') + messages.success(request, _('You have successfully requeued: {job_id}').format(job_id=job_id)) return redirect(reverse('core:background_task', args=[job_id])) @@ -435,7 +435,7 @@ class BackgroundTaskEnqueueView(BaseRQView): registry = ScheduledJobRegistry(queue.name, queue.connection) registry.remove(job) - messages.success(request, f'You have successfully enqueued: {job_id}') + messages.success(request, _('You have successfully enqueued: {job_id}').format(job_id=job_id)) return redirect(reverse('core:background_task', args=[job_id])) @@ -454,9 +454,9 @@ class BackgroundTaskStopView(BaseRQView): stopped, _ = stop_jobs(queue, job_id) if len(stopped) == 1: - messages.success(request, f'You have successfully stopped {job_id}') + messages.success(request, _('You have successfully stopped {job_id}').format(job_id=job_id)) else: - messages.error(request, f'Failed to stop {job_id}') + messages.error(request, _('Failed to stop {job_id}').format(job_id=job_id)) return redirect(reverse('core:background_task', args=[job_id])) diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index b3d8d298e..757ffea82 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -2059,7 +2059,7 @@ class DeviceRenderConfigView(generic.ObjectView): try: rendered_config = config_template.render(context=context_data) except TemplateError as e: - messages.error(request, f"An error occurred while rendering the template: {e}") + messages.error(request, _("An error occurred while rendering the template: {e}").format(e=e)) rendered_config = traceback.format_exc() return { @@ -2823,7 +2823,7 @@ class DeviceBayPopulateView(generic.ObjectEditView): device_bay.snapshot() device_bay.installed_device = form.cleaned_data['installed_device'] device_bay.save() - messages.success(request, "Added {} to {}.".format(device_bay.installed_device, device_bay)) + messages.success(request, _("Added {} to {}.").format(device_bay.installed_device, device_bay)) return_url = self.get_return_url(request) return redirect(return_url) @@ -2858,7 +2858,7 @@ class DeviceBayDepopulateView(generic.ObjectEditView): removed_device = device_bay.installed_device device_bay.installed_device = None device_bay.save() - messages.success(request, f"{removed_device} has been removed from {device_bay}.") + messages.success(request, _("{removed_device} has been removed from {device_bay}.").format(removed_device=removed_device, device_bay=device_bay)) return_url = self.get_return_url(request, device_bay.device) return redirect(return_url) @@ -3426,7 +3426,7 @@ class VirtualChassisAddMemberView(ObjectPermissionRequiredMixin, GetReturnURLMix membership_form.save() messages.success(request, mark_safe( - f'Added member {escape(device)}' + _('Added member {escape(device)}').format(url=device.get_absolute_url()) )) if '_addanother' in request.POST: @@ -3471,7 +3471,7 @@ class VirtualChassisRemoveMemberView(ObjectPermissionRequiredMixin, GetReturnURL # Protect master device from being removed virtual_chassis = VirtualChassis.objects.filter(master=device).first() if virtual_chassis is not None: - messages.error(request, f'Unable to remove master device {device} from the virtual chassis.') + messages.error(request, _('Unable to remove master device {device} from the virtual chassis.').format(device=device)) return redirect(device.get_absolute_url()) if form.is_valid(): @@ -3483,7 +3483,7 @@ class VirtualChassisRemoveMemberView(ObjectPermissionRequiredMixin, GetReturnURL device.vc_priority = None device.save() - msg = 'Removed {} from virtual chassis {}'.format(device, device.virtual_chassis) + msg = _('Removed {} from virtual chassis {}').format(device, device.virtual_chassis) messages.success(request, msg) return redirect(self.get_return_url(request, device)) diff --git a/netbox/netbox/views/generic/bulk_views.py b/netbox/netbox/views/generic/bulk_views.py index 71ce411ba..3d5a66a5f 100644 --- a/netbox/netbox/views/generic/bulk_views.py +++ b/netbox/netbox/views/generic/bulk_views.py @@ -106,7 +106,7 @@ class ObjectListView(BaseMultiObjectView, ActionsMixin, TableMixin): try: return template.render_to_response(self.queryset) except Exception as e: - messages.error(request, f"There was an error rendering the selected export template ({template.name}): {e}") + messages.error(request, _("There was an error rendering the selected export template ({template}): {e}").format(template=template.name, e=e)) # Strip the `export` param and redirect user to the filtered objects list query_params = request.GET.copy() query_params.pop('export') @@ -668,7 +668,7 @@ class BulkEditView(GetReturnURLMixin, BaseMultiObjectView): # Retrieve objects being edited table = self.table(self.queryset.filter(pk__in=pk_list), orderable=False) if not table.rows: - messages.warning(request, "No {} were selected.".format(model._meta.verbose_name_plural)) + messages.warning(request, _("No {} were selected.").format(model._meta.verbose_name_plural)) return redirect(self.get_return_url(request)) return render(request, self.template_name, { @@ -746,7 +746,7 @@ class BulkRenameView(GetReturnURLMixin, BaseMultiObjectView): raise PermissionsViolation model_name = self.queryset.model._meta.verbose_name_plural - messages.success(request, f"Renamed {len(selected_objects)} {model_name}") + messages.success(request, _("Renamed {len} {model_name}").format(len=len(select_objects), model_name=model_name)) return redirect(self.get_return_url(request)) except (AbortRequest, PermissionsViolation) as e: @@ -838,7 +838,7 @@ class BulkDeleteView(GetReturnURLMixin, BaseMultiObjectView): messages.error(request, mark_safe(e.message)) return redirect(self.get_return_url(request)) - msg = f"Deleted {deleted_count} {model._meta.verbose_name_plural}" + msg = _("Deleted {deleted_count} {name}".format(deleted_count=deleted_count, name=model._meta.verbose_name_plural)) logger.info(msg) messages.success(request, msg) return redirect(self.get_return_url(request)) @@ -855,7 +855,7 @@ class BulkDeleteView(GetReturnURLMixin, BaseMultiObjectView): # Retrieve objects being deleted table = self.table(self.queryset.filter(pk__in=pk_list), orderable=False) if not table.rows: - messages.warning(request, "No {} were selected for deletion.".format(model._meta.verbose_name_plural)) + messages.warning(request, _("No {} were selected for deletion.").format(model._meta.verbose_name_plural)) return redirect(self.get_return_url(request)) return render(request, self.template_name, { @@ -900,7 +900,7 @@ class BulkComponentCreateView(GetReturnURLMixin, BaseMultiObjectView): selected_objects = self.parent_model.objects.filter(pk__in=pk_list) if not selected_objects: - messages.warning(request, "No {} were selected.".format(self.parent_model._meta.verbose_name_plural)) + messages.warning(request, _("No {} were selected.").format(self.parent_model._meta.verbose_name_plural)) return redirect(self.get_return_url(request)) table = self.table(selected_objects, orderable=False) diff --git a/netbox/netbox/views/generic/feature_views.py b/netbox/netbox/views/generic/feature_views.py index 95b7b5712..b61b7ad7c 100644 --- a/netbox/netbox/views/generic/feature_views.py +++ b/netbox/netbox/views/generic/feature_views.py @@ -202,11 +202,11 @@ class ObjectSyncDataView(View): obj = get_object_or_404(qs, **kwargs) if not obj.data_file: - messages.error(request, f"Unable to synchronize data: No data file set.") + messages.error(request, _("Unable to synchronize data: No data file set.")) return redirect(obj.get_absolute_url()) obj.sync(save=True) - messages.success(request, f"Synchronized data for {model._meta.verbose_name} {obj}.") + messages.success(request, _("Synchronized data for {name} {obj}.").format(name=model._meta.verbose_name, obj=obj)) return redirect(obj.get_absolute_url()) @@ -229,6 +229,6 @@ class BulkSyncDataView(GetReturnURLMixin, BaseMultiObjectView): obj.sync(save=True) model_name = self.queryset.model._meta.verbose_name_plural - messages.success(request, f"Synced {len(selected_objects)} {model_name}") + messages.success(request, _("Synced {len} {model_name}").format(len=len(selected_objects), model_name=model_name)) return redirect(self.get_return_url(request)) diff --git a/netbox/virtualization/views.py b/netbox/virtualization/views.py index 1030fed04..bfa912f9b 100644 --- a/netbox/virtualization/views.py +++ b/netbox/virtualization/views.py @@ -271,7 +271,7 @@ class ClusterAddDevicesView(generic.ObjectEditView): device.cluster = cluster device.save() - messages.success(request, "Added {} devices to cluster {}".format( + messages.success(request, _("Added {} devices to cluster {}").format( len(device_pks), cluster )) return redirect(cluster.get_absolute_url()) @@ -305,7 +305,7 @@ class ClusterRemoveDevicesView(generic.ObjectEditView): device.cluster = None device.save() - messages.success(request, "Removed {} devices from cluster {}".format( + messages.success(request, _("Removed {} devices from cluster {}").format( len(device_pks), cluster )) return redirect(cluster.get_absolute_url()) @@ -444,7 +444,7 @@ class VirtualMachineRenderConfigView(generic.ObjectView): try: rendered_config = config_template.render(context=context_data) except TemplateError as e: - messages.error(request, f"An error occurred while rendering the template: {e}") + messages.error(request, _("An error occurred while rendering the template: {e}").format(e=e)) rendered_config = traceback.format_exc() return {