From a4c7fb82948b4ebb84751a398f38c86350409ef5 Mon Sep 17 00:00:00 2001 From: Arthur Date: Tue, 25 Jul 2023 14:56:27 +0700 Subject: [PATCH] 13150 internationalize dcim tables --- netbox/core/tables/data.py | 21 ++- netbox/core/tables/jobs.py | 30 ++++- netbox/dcim/tables/cables.py | 21 +-- netbox/dcim/tables/connections.py | 15 ++- netbox/dcim/tables/devices.py | 194 +++++++++++++++++++++------- netbox/dcim/tables/devicetypes.py | 55 ++++++-- netbox/dcim/tables/modules.py | 23 +++- netbox/dcim/tables/power.py | 28 +++- netbox/dcim/tables/racks.py | 51 ++++++-- netbox/dcim/tables/sites.py | 33 +++-- netbox/dcim/tables/template_code.py | 42 +++--- 11 files changed, 370 insertions(+), 143 deletions(-) diff --git a/netbox/core/tables/data.py b/netbox/core/tables/data.py index 8409e3b82..c34871529 100644 --- a/netbox/core/tables/data.py +++ b/netbox/core/tables/data.py @@ -1,3 +1,4 @@ +from django.utils.translation import gettext_lazy as _ import django_tables2 as tables from core.models import * @@ -11,11 +12,18 @@ __all__ = ( class DataSourceTable(NetBoxTable): name = tables.Column( + verbose_name=_('Name'), linkify=True ) - type = columns.ChoiceFieldColumn() - status = columns.ChoiceFieldColumn() - enabled = columns.BooleanColumn() + type = columns.ChoiceFieldColumn( + verbose_name=_('Type'), + ) + status = columns.ChoiceFieldColumn( + verbose_name=_('Status'), + ) + enabled = columns.BooleanColumn( + verbose_name=_('Enabled'), + ) tags = columns.TagColumn( url_name='core:datasource_list' ) @@ -34,13 +42,18 @@ class DataSourceTable(NetBoxTable): class DataFileTable(NetBoxTable): source = tables.Column( + verbose_name=_('Source'), linkify=True ) path = tables.Column( + verbose_name=_('Path'), linkify=True ) - last_updated = columns.DateTimeColumn() + last_updated = columns.DateTimeColumn( + verbose_name=_('Last updated'), + ) actions = columns.ActionsColumn( + verbose_name=_('Actions'), actions=('delete',) ) diff --git a/netbox/core/tables/jobs.py b/netbox/core/tables/jobs.py index 540d252b2..529b4bbbe 100644 --- a/netbox/core/tables/jobs.py +++ b/netbox/core/tables/jobs.py @@ -1,5 +1,5 @@ import django_tables2 as tables -from django.utils.translation import gettext as _ +from django.utils.translation import gettext_lazy as _ from netbox.tables import NetBoxTable, columns from ..models import Job @@ -7,24 +7,40 @@ from ..models import Job class JobTable(NetBoxTable): id = tables.Column( + verbose_name=_('Id'), linkify=True ) name = tables.Column( + verbose_name=_('Name'), linkify=True ) object_type = columns.ContentTypeColumn( verbose_name=_('Type') ) object = tables.Column( + verbose_name=_('Object'), linkify=True ) - status = columns.ChoiceFieldColumn() - created = columns.DateTimeColumn() - scheduled = columns.DateTimeColumn() - interval = columns.DurationColumn() - started = columns.DateTimeColumn() - completed = columns.DateTimeColumn() + status = columns.ChoiceFieldColumn( + verbose_name=_('Status'), + ) + created = columns.DateTimeColumn( + verbose_name=_('Created'), + ) + scheduled = columns.DateTimeColumn( + verbose_name=_('Scheduled'), + ) + interval = columns.DurationColumn( + verbose_name=_('Interval'), + ) + started = columns.DateTimeColumn( + verbose_name=_('Started'), + ) + completed = columns.DateTimeColumn( + verbose_name=_('Completed'), + ) actions = columns.ActionsColumn( + verbose_name=_('Actions'), actions=('delete',) ) diff --git a/netbox/dcim/tables/cables.py b/netbox/dcim/tables/cables.py index 6e9d49719..0fb2f7d61 100644 --- a/netbox/dcim/tables/cables.py +++ b/netbox/dcim/tables/cables.py @@ -1,3 +1,4 @@ +from django.utils.translation import gettext_lazy as _ import django_tables2 as tables from django_tables2.utils import Accessor from django.utils.safestring import mark_safe @@ -50,60 +51,60 @@ class CableTable(TenancyColumnsMixin, NetBoxTable): a_terminations = CableTerminationsColumn( cable_end='A', orderable=False, - verbose_name='Termination A' + verbose_name=_('Termination A') ) b_terminations = CableTerminationsColumn( cable_end='B', orderable=False, - verbose_name='Termination B' + verbose_name=_('Termination B') ) device_a = CableTerminationsColumn( cable_end='A', attr='_device', orderable=False, - verbose_name='Device A' + verbose_name=_('Device A') ) device_b = CableTerminationsColumn( cable_end='B', attr='_device', orderable=False, - verbose_name='Device B' + verbose_name=_('Device B') ) location_a = CableTerminationsColumn( cable_end='A', attr='_location', orderable=False, - verbose_name='Location A' + verbose_name=_('Location A') ) location_b = CableTerminationsColumn( cable_end='B', attr='_location', orderable=False, - verbose_name='Location B' + verbose_name=_('Location B') ) rack_a = CableTerminationsColumn( cable_end='A', attr='_rack', orderable=False, - verbose_name='Rack A' + verbose_name=_('Rack A') ) rack_b = CableTerminationsColumn( cable_end='B', attr='_rack', orderable=False, - verbose_name='Rack B' + verbose_name=_('Rack B') ) site_a = CableTerminationsColumn( cable_end='A', attr='_site', orderable=False, - verbose_name='Site A' + verbose_name=_('Site A') ) site_b = CableTerminationsColumn( cable_end='B', attr='_site', orderable=False, - verbose_name='Site B' + verbose_name=_('Site B') ) status = columns.ChoiceFieldColumn() length = columns.TemplateColumn( diff --git a/netbox/dcim/tables/connections.py b/netbox/dcim/tables/connections.py index f9f78f3a6..40205a7a0 100644 --- a/netbox/dcim/tables/connections.py +++ b/netbox/dcim/tables/connections.py @@ -1,3 +1,4 @@ +from django.utils.translation import gettext_lazy as _ import django_tables2 as tables from django_tables2.utils import Accessor @@ -18,15 +19,16 @@ __all__ = ( class ConsoleConnectionTable(PathEndpointTable): device = tables.Column( + verbose_name=_('Device'), linkify=True ) name = tables.Column( linkify=True, - verbose_name='Console Port' + verbose_name=_('Console Port') ) reachable = columns.BooleanColumn( accessor=Accessor('_path__is_active'), - verbose_name='Reachable' + verbose_name=_('Reachable') ) class Meta(BaseTable.Meta): @@ -36,15 +38,16 @@ class ConsoleConnectionTable(PathEndpointTable): class PowerConnectionTable(PathEndpointTable): device = tables.Column( + verbose_name=_('Device'), linkify=True ) name = tables.Column( linkify=True, - verbose_name='Power Port' + verbose_name=_('Power Port') ) reachable = columns.BooleanColumn( accessor=Accessor('_path__is_active'), - verbose_name='Reachable' + verbose_name=_('Reachable') ) class Meta(BaseTable.Meta): @@ -54,16 +57,18 @@ class PowerConnectionTable(PathEndpointTable): class InterfaceConnectionTable(PathEndpointTable): device = tables.Column( + verbose_name=_('Device'), accessor=Accessor('device'), linkify=True ) interface = tables.Column( + verbose_name=_('Interface'), accessor=Accessor('name'), linkify=True ) reachable = columns.BooleanColumn( accessor=Accessor('_path__is_active'), - verbose_name='Reachable' + verbose_name=_('Reachable') ) class Meta(BaseTable.Meta): diff --git a/netbox/dcim/tables/devices.py b/netbox/dcim/tables/devices.py index a5862da68..e4202c4f6 100644 --- a/netbox/dcim/tables/devices.py +++ b/netbox/dcim/tables/devices.py @@ -1,3 +1,4 @@ +from django.utils.translation import gettext_lazy as _ import django_tables2 as tables from dcim import models from django_tables2.utils import Accessor @@ -76,17 +77,18 @@ def get_interface_state_attribute(record): class DeviceRoleTable(NetBoxTable): name = tables.Column( + verbose_name=_('Name'), linkify=True ) device_count = columns.LinkedCountColumn( viewname='dcim:device_list', url_params={'role_id': 'pk'}, - verbose_name='Devices' + verbose_name=_('Devices') ) vm_count = columns.LinkedCountColumn( viewname='virtualization:virtualmachine_list', url_params={'role_id': 'pk'}, - verbose_name='VMs' + verbose_name=_('VMs') ) color = columns.ColorColumn() vm_role = columns.BooleanColumn() @@ -112,23 +114,26 @@ class DeviceRoleTable(NetBoxTable): class PlatformTable(NetBoxTable): name = tables.Column( + verbose_name=_('Name'), linkify=True ) manufacturer = tables.Column( + verbose_name=_('Manufacturer'), linkify=True ) config_template = tables.Column( + verbose_name=_('Config template'), linkify=True ) device_count = columns.LinkedCountColumn( viewname='dcim:device_list', url_params={'platform_id': 'pk'}, - verbose_name='Devices' + verbose_name=_('Devices') ) vm_count = columns.LinkedCountColumn( viewname='virtualization:virtualmachine_list', url_params={'platform_id': 'pk'}, - verbose_name='VMs' + verbose_name=_('VMs') ) tags = columns.TagColumn( url_name='dcim:platform_list' @@ -151,78 +156,90 @@ class PlatformTable(NetBoxTable): class DeviceTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable): name = tables.TemplateColumn( + verbose_name=_('Name'), order_by=('_name',), template_code=DEVICE_LINK, linkify=True ) - status = columns.ChoiceFieldColumn() + status = columns.ChoiceFieldColumn( + verbose_name=_('Status'), + ) region = tables.Column( + verbose_name=_('Region'), accessor=Accessor('site__region'), linkify=True ) site_group = tables.Column( accessor=Accessor('site__group'), linkify=True, - verbose_name='Site Group' + verbose_name=_('Site Group') ) site = tables.Column( + verbose_name=_('Site'), linkify=True ) location = tables.Column( + verbose_name=_('Location'), linkify=True ) rack = tables.Column( + verbose_name=_('Rack'), linkify=True ) position = columns.TemplateColumn( + verbose_name=_('Position'), template_code='{{ value|floatformat }}' ) device_role = columns.ColoredLabelColumn( - verbose_name='Role' + verbose_name=_('Role') ) manufacturer = tables.Column( + verbose_name=_('Manufacturer'), accessor=Accessor('device_type__manufacturer'), linkify=True ) device_type = tables.Column( linkify=True, - verbose_name='Type' + verbose_name=_('Type') ) primary_ip = tables.Column( linkify=True, order_by=('primary_ip4', 'primary_ip6'), - verbose_name='IP Address' + verbose_name=_('IP Address') ) primary_ip4 = tables.Column( linkify=True, - verbose_name='IPv4 Address' + verbose_name=_('IPv4 Address') ) primary_ip6 = tables.Column( linkify=True, - verbose_name='IPv6 Address' + verbose_name=_('IPv6 Address') ) cluster = tables.Column( + verbose_name=_('Cluster'), linkify=True ) virtual_chassis = tables.Column( + verbose_name=_('Virtual chassis'), linkify=True ) vc_position = tables.Column( - verbose_name='VC Position' + verbose_name=_('VC Position') ) vc_priority = tables.Column( - verbose_name='VC Priority' + verbose_name=_('VC Priority') ) config_template = tables.Column( + verbose_name=_('Config template'), linkify=True ) parent_device = tables.Column( - verbose_name='Parent Device', + verbose_name=_('Parent Device'), linkify=True, accessor='parent_bay__device' ) device_bay_position = tables.Column( - verbose_name='Position (Device Bay)', + verbose_name=_('Position (Device Bay)'), accessor='parent_bay', linkify=True ) @@ -248,21 +265,26 @@ class DeviceTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable): class DeviceImportTable(TenancyColumnsMixin, NetBoxTable): name = tables.TemplateColumn( + verbose_name=_('Name'), template_code=DEVICE_LINK, linkify=True ) - status = columns.ChoiceFieldColumn() + status = columns.ChoiceFieldColumn( + verbose_name=_('Status'), + ) site = tables.Column( + verbose_name=_('Site'), linkify=True ) rack = tables.Column( + verbose_name=_('Rack'), linkify=True ) device_role = tables.Column( - verbose_name='Role' + verbose_name=_('Role') ) device_type = tables.Column( - verbose_name='Type' + verbose_name=_('Type') ) class Meta(NetBoxTable.Meta): @@ -277,9 +299,11 @@ class DeviceImportTable(TenancyColumnsMixin, NetBoxTable): class DeviceComponentTable(NetBoxTable): device = tables.Column( + verbose_name=_('Device'), linkify=True ) name = tables.Column( + verbose_name=_('Name'), linkify=True, order_by=('_name',) ) @@ -290,6 +314,7 @@ class DeviceComponentTable(NetBoxTable): class ModularDeviceComponentTable(DeviceComponentTable): module_bay = tables.Column( + verbose_name=_('Module bay'), accessor=Accessor('module__module_bay'), linkify={ 'viewname': 'dcim:device_modulebays', @@ -297,39 +322,44 @@ class ModularDeviceComponentTable(DeviceComponentTable): } ) module = tables.Column( + verbose_name=_('Module'), linkify=True ) class CableTerminationTable(NetBoxTable): cable = tables.Column( + verbose_name=_('Cable'), linkify=True ) cable_color = columns.ColorColumn( accessor='cable__color', orderable=False, - verbose_name='Cable Color' + verbose_name=_('Cable Color') ) link_peer = columns.TemplateColumn( accessor='link_peers', template_code=LINKTERMINATION, orderable=False, - verbose_name='Link Peers' + verbose_name=_('Link Peers') + ) + mark_connected = columns.BooleanColumn( + verbose_name=_('Mark connected'), ) - mark_connected = columns.BooleanColumn() class PathEndpointTable(CableTerminationTable): connection = columns.TemplateColumn( accessor='_path__destinations', template_code=LINKTERMINATION, - verbose_name='Connection', + verbose_name=_('Connection'), orderable=False ) class ConsolePortTable(ModularDeviceComponentTable, PathEndpointTable): device = tables.Column( + verbose_name=_('Device'), linkify={ 'viewname': 'dcim:device_consoleports', 'args': [Accessor('device_id')], @@ -350,11 +380,13 @@ class ConsolePortTable(ModularDeviceComponentTable, PathEndpointTable): class DeviceConsolePortTable(ConsolePortTable): name = tables.TemplateColumn( + verbose_name=_('Name'), template_code=' {{ value }}', order_by=Accessor('_name'), attrs={'td': {'class': 'text-nowrap'}} ) actions = columns.ActionsColumn( + verbose_name=_('Actions'), extra_buttons=CONSOLEPORT_BUTTONS ) @@ -372,6 +404,7 @@ class DeviceConsolePortTable(ConsolePortTable): class ConsoleServerPortTable(ModularDeviceComponentTable, PathEndpointTable): device = tables.Column( + verbose_name=_('Device'), linkify={ 'viewname': 'dcim:device_consoleserverports', 'args': [Accessor('device_id')], @@ -392,12 +425,14 @@ class ConsoleServerPortTable(ModularDeviceComponentTable, PathEndpointTable): class DeviceConsoleServerPortTable(ConsoleServerPortTable): name = tables.TemplateColumn( + verbose_name=_('Name'), template_code=' ' '{{ value }}', order_by=Accessor('_name'), attrs={'td': {'class': 'text-nowrap'}} ) actions = columns.ActionsColumn( + verbose_name=_('Actions'), extra_buttons=CONSOLESERVERPORT_BUTTONS ) @@ -415,6 +450,7 @@ class DeviceConsoleServerPortTable(ConsoleServerPortTable): class PowerPortTable(ModularDeviceComponentTable, PathEndpointTable): device = tables.Column( + verbose_name=_('Device'), linkify={ 'viewname': 'dcim:device_powerports', 'args': [Accessor('device_id')], @@ -436,12 +472,14 @@ class PowerPortTable(ModularDeviceComponentTable, PathEndpointTable): class DevicePowerPortTable(PowerPortTable): name = tables.TemplateColumn( + verbose_name=_('Name'), template_code=' ' '{{ value }}', order_by=Accessor('_name'), attrs={'td': {'class': 'text-nowrap'}} ) actions = columns.ActionsColumn( + verbose_name=_('Actions'), extra_buttons=POWERPORT_BUTTONS ) @@ -461,12 +499,14 @@ class DevicePowerPortTable(PowerPortTable): class PowerOutletTable(ModularDeviceComponentTable, PathEndpointTable): device = tables.Column( + verbose_name=_('Device'), linkify={ 'viewname': 'dcim:device_poweroutlets', 'args': [Accessor('device_id')], } ) power_port = tables.Column( + verbose_name=_('Power port'), linkify=True ) tags = columns.TagColumn( @@ -485,11 +525,13 @@ class PowerOutletTable(ModularDeviceComponentTable, PathEndpointTable): class DevicePowerOutletTable(PowerOutletTable): name = tables.TemplateColumn( + verbose_name=_('Name'), template_code=' {{ value }}', order_by=Accessor('_name'), attrs={'td': {'class': 'text-nowrap'}} ) actions = columns.ActionsColumn( + verbose_name=_('Actions'), extra_buttons=POWEROUTLET_BUTTONS ) @@ -508,29 +550,34 @@ class DevicePowerOutletTable(PowerOutletTable): class BaseInterfaceTable(NetBoxTable): - enabled = columns.BooleanColumn() + enabled = columns.BooleanColumn( + verbose_name=_('Enabled'), + ) ip_addresses = tables.TemplateColumn( template_code=INTERFACE_IPADDRESSES, orderable=False, - verbose_name='IP Addresses' + verbose_name=_('IP Addresses') ) fhrp_groups = tables.TemplateColumn( accessor=Accessor('fhrp_group_assignments'), template_code=INTERFACE_FHRPGROUPS, orderable=False, - verbose_name='FHRP Groups' + verbose_name=_('FHRP Groups') ) l2vpn = tables.Column( accessor=tables.A('l2vpn_termination__l2vpn'), linkify=True, orderable=False, - verbose_name='L2VPN' + verbose_name=_('L2VPN') + ) + untagged_vlan = tables.Column( + verbose_name=_('Untagged VLAN'), + linkify=True ) - untagged_vlan = tables.Column(linkify=True) tagged_vlans = columns.TemplateColumn( template_code=INTERFACE_TAGGED_VLANS, orderable=False, - verbose_name='Tagged VLANs' + verbose_name=_('Tagged VLANs') ) def value_ip_addresses(self, value): @@ -539,25 +586,30 @@ class BaseInterfaceTable(NetBoxTable): class InterfaceTable(ModularDeviceComponentTable, BaseInterfaceTable, PathEndpointTable): device = tables.Column( + verbose_name=_('Device'), linkify={ 'viewname': 'dcim:device_interfaces', 'args': [Accessor('device_id')], } ) - mgmt_only = columns.BooleanColumn() + mgmt_only = columns.BooleanColumn( + verbose_name=_('Mgmt only'), + ) wireless_link = tables.Column( + verbose_name=_('Wireless link'), linkify=True ) wireless_lans = columns.TemplateColumn( template_code=INTERFACE_WIRELESS_LANS, orderable=False, - verbose_name='Wireless LANs' + verbose_name=_('Wireless LANs') ) vdcs = columns.ManyToManyColumn( linkify_item=True, - verbose_name='VDCs' + verbose_name=_('VDCs') ) vrf = tables.Column( + verbose_name=_('VRF'), linkify=True ) tags = columns.TagColumn( @@ -578,6 +630,7 @@ class InterfaceTable(ModularDeviceComponentTable, BaseInterfaceTable, PathEndpoi class DeviceInterfaceTable(InterfaceTable): name = tables.TemplateColumn( + verbose_name=_('Name'), template_code=' {{ value }}', @@ -585,16 +638,19 @@ class DeviceInterfaceTable(InterfaceTable): attrs={'td': {'class': 'text-nowrap'}} ) parent = tables.Column( + verbose_name=_('Parent'), linkify=True ) bridge = tables.Column( + verbose_name=_('Bridge'), linkify=True ) lag = tables.Column( linkify=True, - verbose_name='LAG' + verbose_name=_('LAG') ) actions = columns.ActionsColumn( + verbose_name=_('Actions'), extra_buttons=INTERFACE_BUTTONS ) @@ -621,16 +677,20 @@ class DeviceInterfaceTable(InterfaceTable): class FrontPortTable(ModularDeviceComponentTable, CableTerminationTable): device = tables.Column( + verbose_name=_('Device'), linkify={ 'viewname': 'dcim:device_frontports', 'args': [Accessor('device_id')], } ) - color = columns.ColorColumn() + color = columns.ColorColumn( + verbose_name=_('Color'), + ) rear_port_position = tables.Column( - verbose_name='Position' + verbose_name=_('Position') ) rear_port = tables.Column( + verbose_name=_('Rear port'), linkify=True ) tags = columns.TagColumn( @@ -651,12 +711,14 @@ class FrontPortTable(ModularDeviceComponentTable, CableTerminationTable): class DeviceFrontPortTable(FrontPortTable): name = tables.TemplateColumn( + verbose_name=_('Name'), template_code=' ' '{{ value }}', order_by=Accessor('_name'), attrs={'td': {'class': 'text-nowrap'}} ) actions = columns.ActionsColumn( + verbose_name=_('Actions'), extra_buttons=FRONTPORT_BUTTONS ) @@ -676,12 +738,15 @@ class DeviceFrontPortTable(FrontPortTable): class RearPortTable(ModularDeviceComponentTable, CableTerminationTable): device = tables.Column( + verbose_name=_('Device'), linkify={ 'viewname': 'dcim:device_rearports', 'args': [Accessor('device_id')], } ) - color = columns.ColorColumn() + color = columns.ColorColumn( + verbose_name=_('Color'), + ) tags = columns.TagColumn( url_name='dcim:rearport_list' ) @@ -697,12 +762,14 @@ class RearPortTable(ModularDeviceComponentTable, CableTerminationTable): class DeviceRearPortTable(RearPortTable): name = tables.TemplateColumn( + verbose_name=_('Name'), template_code=' ' '{{ value }}', order_by=Accessor('_name'), attrs={'td': {'class': 'text-nowrap'}} ) actions = columns.ActionsColumn( + verbose_name=_('Actions'), extra_buttons=REARPORT_BUTTONS ) @@ -722,6 +789,7 @@ class DeviceRearPortTable(RearPortTable): class DeviceBayTable(DeviceComponentTable): device = tables.Column( + verbose_name=_('Device'), linkify={ 'viewname': 'dcim:device_devicebays', 'args': [Accessor('device_id')], @@ -729,18 +797,20 @@ class DeviceBayTable(DeviceComponentTable): ) device_role = columns.ColoredLabelColumn( accessor=Accessor('installed_device__device_role'), - verbose_name='Role' + verbose_name=_('Role') ) device_type = tables.Column( accessor=Accessor('installed_device__device_type'), linkify=True, - verbose_name='Type' + verbose_name=_('Type') ) status = tables.TemplateColumn( + verbose_name=_('Status'), template_code=DEVICEBAY_STATUS, order_by=Accessor('installed_device__status') ) installed_device = tables.Column( + verbose_name=_('Installed device'), linkify=True ) tags = columns.TagColumn( @@ -759,12 +829,14 @@ class DeviceBayTable(DeviceComponentTable): class DeviceDeviceBayTable(DeviceBayTable): name = tables.TemplateColumn( + verbose_name=_('Name'), template_code=' {{ value }}', order_by=Accessor('_name'), attrs={'td': {'class': 'text-nowrap'}} ) actions = columns.ActionsColumn( + verbose_name=_('Actions'), extra_buttons=DEVICEBAY_BUTTONS ) @@ -778,6 +850,7 @@ class DeviceDeviceBayTable(DeviceBayTable): class ModuleBayTable(DeviceComponentTable): device = tables.Column( + verbose_name=_('Device'), linkify={ 'viewname': 'dcim:device_modulebays', 'args': [Accessor('device_id')], @@ -785,18 +858,21 @@ class ModuleBayTable(DeviceComponentTable): ) installed_module = tables.Column( linkify=True, - verbose_name='Installed module' + verbose_name=_('Installed module') ) module_serial = tables.Column( + verbose_name=_('Module serial'), accessor=tables.A('installed_module__serial') ) module_asset_tag = tables.Column( + verbose_name=_('Module asset tag'), accessor=tables.A('installed_module__asset_tag') ) tags = columns.TagColumn( url_name='dcim:modulebay_list' ) module_status = columns.TemplateColumn( + verbose_name=_('Module status'), template_code=MODULEBAY_STATUS ) @@ -811,6 +887,7 @@ class ModuleBayTable(DeviceComponentTable): class DeviceModuleBayTable(ModuleBayTable): actions = columns.ActionsColumn( + verbose_name=_('Actions'), extra_buttons=MODULEBAY_BUTTONS ) @@ -825,20 +902,27 @@ class DeviceModuleBayTable(ModuleBayTable): class InventoryItemTable(DeviceComponentTable): device = tables.Column( + verbose_name=_('Device'), linkify={ 'viewname': 'dcim:device_inventory', 'args': [Accessor('device_id')], } ) - role = columns.ColoredLabelColumn() + role = columns.ColoredLabelColumn( + verbose_name=_('Role'), + ) manufacturer = tables.Column( + verbose_name=_('Manufacturer'), linkify=True ) component = tables.Column( + verbose_name=_('Component'), orderable=False, linkify=True ) - discovered = columns.BooleanColumn() + discovered = columns.BooleanColumn( + verbose_name=_('Discovered'), + ) tags = columns.TagColumn( url_name='dcim:inventoryitem_list' ) @@ -857,6 +941,7 @@ class InventoryItemTable(DeviceComponentTable): class DeviceInventoryItemTable(InventoryItemTable): name = tables.TemplateColumn( + verbose_name=_('Name'), template_code='' '{{ value }}', order_by=Accessor('_name'), @@ -876,14 +961,17 @@ class DeviceInventoryItemTable(InventoryItemTable): class InventoryItemRoleTable(NetBoxTable): name = tables.Column( + verbose_name=_('Name'), linkify=True ) inventoryitem_count = columns.LinkedCountColumn( viewname='dcim:inventoryitem_list', url_params={'role_id': 'pk'}, - verbose_name='Items' + verbose_name=_('Items') + ) + color = columns.ColorColumn( + verbose_name=_('Color'), ) - color = columns.ColorColumn() tags = columns.TagColumn( url_name='dcim:inventoryitemrole_list' ) @@ -902,17 +990,21 @@ class InventoryItemRoleTable(NetBoxTable): class VirtualChassisTable(NetBoxTable): name = tables.Column( + verbose_name=_('Name'), linkify=True ) master = tables.Column( + verbose_name=_('Master'), linkify=True ) member_count = columns.LinkedCountColumn( viewname='dcim:device_list', url_params={'virtual_chassis_id': 'pk'}, - verbose_name='Members' + verbose_name=_('Members') + ) + comments = columns.MarkdownColumn( + verbose_name=_('Comments'), ) - comments = columns.MarkdownColumn() tags = columns.TagColumn( url_name='dcim:virtualchassis_list' ) @@ -928,31 +1020,35 @@ class VirtualChassisTable(NetBoxTable): class VirtualDeviceContextTable(TenancyColumnsMixin, NetBoxTable): name = tables.Column( + verbose_name=_('Name'), linkify=True ) device = tables.TemplateColumn( + verbose_name=_('Device'), order_by=('_name',), template_code=DEVICE_LINK, linkify=True ) - status = columns.ChoiceFieldColumn() + status = columns.ChoiceFieldColumn( + verbose_name=_('Status'), + ) primary_ip = tables.Column( linkify=True, order_by=('primary_ip4', 'primary_ip6'), - verbose_name='IP Address' + verbose_name=_('IP Address') ) primary_ip4 = tables.Column( linkify=True, - verbose_name='IPv4 Address' + verbose_name=_('IPv4 Address') ) primary_ip6 = tables.Column( linkify=True, - verbose_name='IPv6 Address' + verbose_name=_('IPv6 Address') ) interface_count = columns.LinkedCountColumn( viewname='dcim:interface_list', url_params={'vdc_id': 'pk'}, - verbose_name='Interfaces' + verbose_name=_('Interfaces') ) comments = columns.MarkdownColumn() diff --git a/netbox/dcim/tables/devicetypes.py b/netbox/dcim/tables/devicetypes.py index 0536e8940..f26b21772 100644 --- a/netbox/dcim/tables/devicetypes.py +++ b/netbox/dcim/tables/devicetypes.py @@ -1,3 +1,4 @@ +from django.utils.translation import gettext_lazy as _ import django_tables2 as tables from dcim import models @@ -27,27 +28,28 @@ __all__ = ( class ManufacturerTable(ContactsColumnMixin, NetBoxTable): name = tables.Column( + verbose_name=_('Name'), linkify=True ) devicetype_count = columns.LinkedCountColumn( viewname='dcim:devicetype_list', url_params={'manufacturer_id': 'pk'}, - verbose_name='Device Types' + verbose_name=_('Device Types') ) moduletype_count = columns.LinkedCountColumn( viewname='dcim:moduletype_list', url_params={'manufacturer_id': 'pk'}, - verbose_name='Module Types' + verbose_name=_('Module Types') ) inventoryitem_count = columns.LinkedCountColumn( viewname='dcim:inventoryitem_list', url_params={'manufacturer_id': 'pk'}, - verbose_name='Inventory Items' + verbose_name=_('Inventory Items') ) platform_count = columns.LinkedCountColumn( viewname='dcim:platform_list', url_params={'manufacturer_id': 'pk'}, - verbose_name='Platforms' + verbose_name=_('Platforms') ) tags = columns.TagColumn( url_name='dcim:manufacturer_list' @@ -72,30 +74,36 @@ class ManufacturerTable(ContactsColumnMixin, NetBoxTable): class DeviceTypeTable(NetBoxTable): model = tables.Column( linkify=True, - verbose_name='Device Type' + verbose_name=_('Device Type') ) manufacturer = tables.Column( + verbose_name=_('Manufacturer'), linkify=True ) default_platform = tables.Column( + verbose_name=_('Default platform'), linkify=True ) is_full_depth = columns.BooleanColumn( - verbose_name='Full Depth' + verbose_name=_('Full Depth') ) instance_count = columns.LinkedCountColumn( viewname='dcim:device_list', url_params={'device_type_id': 'pk'}, - verbose_name='Instances' + verbose_name=_('Instances') + ) + comments = columns.MarkdownColumn( + verbose_name=_('Comments'), ) - comments = columns.MarkdownColumn() tags = columns.TagColumn( url_name='dcim:devicetype_list' ) u_height = columns.TemplateColumn( + verbose_name=_('U height'), template_code='{{ value|floatformat }}' ) weight = columns.TemplateColumn( + verbose_name=_('Weight'), template_code=WEIGHT, order_by=('_abs_weight', 'weight_unit') ) @@ -117,7 +125,7 @@ class DeviceTypeTable(NetBoxTable): class ComponentTemplateTable(NetBoxTable): id = tables.Column( - verbose_name='ID' + verbose_name=_('ID') ) name = tables.Column( order_by=('_name',) @@ -129,6 +137,7 @@ class ComponentTemplateTable(NetBoxTable): class ConsolePortTemplateTable(ComponentTemplateTable): actions = columns.ActionsColumn( + verbose_name=_('Actions'), actions=('edit', 'delete'), extra_buttons=MODULAR_COMPONENT_TEMPLATE_BUTTONS ) @@ -141,6 +150,7 @@ class ConsolePortTemplateTable(ComponentTemplateTable): class ConsoleServerPortTemplateTable(ComponentTemplateTable): actions = columns.ActionsColumn( + verbose_name=_('Actions'), actions=('edit', 'delete'), extra_buttons=MODULAR_COMPONENT_TEMPLATE_BUTTONS ) @@ -153,6 +163,7 @@ class ConsoleServerPortTemplateTable(ComponentTemplateTable): class PowerPortTemplateTable(ComponentTemplateTable): actions = columns.ActionsColumn( + verbose_name=_('Actions'), actions=('edit', 'delete'), extra_buttons=MODULAR_COMPONENT_TEMPLATE_BUTTONS ) @@ -165,6 +176,7 @@ class PowerPortTemplateTable(ComponentTemplateTable): class PowerOutletTemplateTable(ComponentTemplateTable): actions = columns.ActionsColumn( + verbose_name=_('Actions'), actions=('edit', 'delete'), extra_buttons=MODULAR_COMPONENT_TEMPLATE_BUTTONS ) @@ -176,11 +188,14 @@ class PowerOutletTemplateTable(ComponentTemplateTable): class InterfaceTemplateTable(ComponentTemplateTable): - enabled = columns.BooleanColumn() + enabled = columns.BooleanColumn( + verbose_name=_('Enabled'), + ) mgmt_only = columns.BooleanColumn( - verbose_name='Management Only' + verbose_name=_('Management Only') ) actions = columns.ActionsColumn( + verbose_name=_('Actions'), actions=('edit', 'delete'), extra_buttons=MODULAR_COMPONENT_TEMPLATE_BUTTONS ) @@ -193,10 +208,13 @@ class InterfaceTemplateTable(ComponentTemplateTable): class FrontPortTemplateTable(ComponentTemplateTable): rear_port_position = tables.Column( - verbose_name='Position' + verbose_name=_('Position') + ) + color = columns.ColorColumn( + verbose_name=_('Color'), ) - color = columns.ColorColumn() actions = columns.ActionsColumn( + verbose_name=_('Actions'), actions=('edit', 'delete'), extra_buttons=MODULAR_COMPONENT_TEMPLATE_BUTTONS ) @@ -208,8 +226,11 @@ class FrontPortTemplateTable(ComponentTemplateTable): class RearPortTemplateTable(ComponentTemplateTable): - color = columns.ColorColumn() + color = columns.ColorColumn( + verbose_name=_('Color'), + ) actions = columns.ActionsColumn( + verbose_name=_('Actions'), actions=('edit', 'delete'), extra_buttons=MODULAR_COMPONENT_TEMPLATE_BUTTONS ) @@ -222,6 +243,7 @@ class RearPortTemplateTable(ComponentTemplateTable): class ModuleBayTemplateTable(ComponentTemplateTable): actions = columns.ActionsColumn( + verbose_name=_('Actions'), actions=('edit', 'delete') ) @@ -233,6 +255,7 @@ class ModuleBayTemplateTable(ComponentTemplateTable): class DeviceBayTemplateTable(ComponentTemplateTable): actions = columns.ActionsColumn( + verbose_name=_('Actions'), actions=('edit', 'delete') ) @@ -244,15 +267,19 @@ class DeviceBayTemplateTable(ComponentTemplateTable): class InventoryItemTemplateTable(ComponentTemplateTable): actions = columns.ActionsColumn( + verbose_name=_('Actions'), actions=('edit', 'delete') ) role = tables.Column( + verbose_name=_('Role'), linkify=True ) manufacturer = tables.Column( + verbose_name=_('Manufacturer'), linkify=True ) component = tables.Column( + verbose_name=_('Component'), orderable=False ) diff --git a/netbox/dcim/tables/modules.py b/netbox/dcim/tables/modules.py index 8e4ca309e..7f5226886 100644 --- a/netbox/dcim/tables/modules.py +++ b/netbox/dcim/tables/modules.py @@ -1,3 +1,4 @@ +from django.utils.translation import gettext_lazy as _ import django_tables2 as tables from dcim.models import Module, ModuleType @@ -13,21 +14,25 @@ __all__ = ( class ModuleTypeTable(NetBoxTable): model = tables.Column( linkify=True, - verbose_name='Module Type' + verbose_name=_('Module Type') ) manufacturer = tables.Column( + verbose_name=_('Manufacturer'), linkify=True ) instance_count = columns.LinkedCountColumn( viewname='dcim:module_list', url_params={'module_type_id': 'pk'}, - verbose_name='Instances' + verbose_name=_('Instances') + ) + comments = columns.MarkdownColumn( + verbose_name=_('Comments'), ) - comments = columns.MarkdownColumn() tags = columns.TagColumn( url_name='dcim:moduletype_list' ) weight = columns.TemplateColumn( + verbose_name=_('Weight'), template_code=WEIGHT, order_by=('_abs_weight', 'weight_unit') ) @@ -44,20 +49,28 @@ class ModuleTypeTable(NetBoxTable): class ModuleTable(NetBoxTable): device = tables.Column( + verbose_name=_('Device'), linkify=True ) module_bay = tables.Column( + verbose_name=_('Module bay'), linkify=True ) manufacturer = tables.Column( + verbose_name=_('Manufacturer'), accessor=tables.A('module_type__manufacturer'), linkify=True ) module_type = tables.Column( + verbose_name=_('Module type'), linkify=True ) - status = columns.ChoiceFieldColumn() - comments = columns.MarkdownColumn() + status = columns.ChoiceFieldColumn( + verbose_name=_('Status'), + ) + comments = columns.MarkdownColumn( + verbose_name=_('Comments'), + ) tags = columns.TagColumn( url_name='dcim:module_list' ) diff --git a/netbox/dcim/tables/power.py b/netbox/dcim/tables/power.py index 272ea2b7d..d8f3be3bb 100644 --- a/netbox/dcim/tables/power.py +++ b/netbox/dcim/tables/power.py @@ -1,3 +1,4 @@ +from django.utils.translation import gettext_lazy as _ import django_tables2 as tables from dcim.models import PowerFeed, PowerPanel from tenancy.tables import ContactsColumnMixin @@ -18,20 +19,25 @@ __all__ = ( class PowerPanelTable(ContactsColumnMixin, NetBoxTable): name = tables.Column( + verbose_name=_('Name'), linkify=True ) site = tables.Column( + verbose_name=_('Site'), linkify=True ) location = tables.Column( + verbose_name=_('Location'), linkify=True ) powerfeed_count = columns.LinkedCountColumn( viewname='dcim:powerfeed_list', url_params={'power_panel_id': 'pk'}, - verbose_name='Feeds' + verbose_name=_('Feeds') + ) + comments = columns.MarkdownColumn( + verbose_name=_('Comments'), ) - comments = columns.MarkdownColumn() tags = columns.TagColumn( url_name='dcim:powerpanel_list' ) @@ -53,23 +59,33 @@ class PowerPanelTable(ContactsColumnMixin, NetBoxTable): # cannot traverse pass-through ports. class PowerFeedTable(CableTerminationTable): name = tables.Column( + verbose_name=_('Name'), linkify=True ) power_panel = tables.Column( + verbose_name=_('Power panel'), linkify=True ) rack = tables.Column( + verbose_name=_('Rack'), linkify=True ) - status = columns.ChoiceFieldColumn() - type = columns.ChoiceFieldColumn() + status = columns.ChoiceFieldColumn( + verbose_name=_('Status'), + ) + type = columns.ChoiceFieldColumn( + verbose_name=_('Type'), + ) max_utilization = tables.TemplateColumn( + verbose_name=_('Max utilization'), template_code="{{ value }}%" ) available_power = tables.Column( - verbose_name='Available power (VA)' + verbose_name=_('Available power (VA)') + ) + comments = columns.MarkdownColumn( + verbose_name=_('Comments'), ) - comments = columns.MarkdownColumn() tags = columns.TagColumn( url_name='dcim:powerfeed_list' ) diff --git a/netbox/dcim/tables/racks.py b/netbox/dcim/tables/racks.py index 657754017..44f4d8101 100644 --- a/netbox/dcim/tables/racks.py +++ b/netbox/dcim/tables/racks.py @@ -1,3 +1,4 @@ +from django.utils.translation import gettext_lazy as _ import django_tables2 as tables from django_tables2.utils import Accessor @@ -18,13 +19,18 @@ __all__ = ( # class RackRoleTable(NetBoxTable): - name = tables.Column(linkify=True) + name = tables.Column( + verbose_name=_('Name'), + linkify=True + ) rack_count = columns.LinkedCountColumn( viewname='dcim:rack_list', url_params={'role_id': 'pk'}, - verbose_name='Racks' + verbose_name=_('Racks') + ) + color = columns.ColorColumn( + verbose_name=_('Color'), ) - color = columns.ColorColumn() tags = columns.TagColumn( url_name='dcim:rackrole_list' ) @@ -44,51 +50,62 @@ class RackRoleTable(NetBoxTable): class RackTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable): name = tables.Column( + verbose_name=_('Name'), order_by=('_name',), linkify=True ) location = tables.Column( + verbose_name=_('Location'), linkify=True ) site = tables.Column( + verbose_name=_('Site'), linkify=True ) - status = columns.ChoiceFieldColumn() - role = columns.ColoredLabelColumn() + status = columns.ChoiceFieldColumn( + verbose_name=_('Status'), + ) + role = columns.ColoredLabelColumn( + verbose_name=_('Role'), + ) u_height = tables.TemplateColumn( template_code="{{ value }}U", - verbose_name='Height' + verbose_name=_('Height') + ) + comments = columns.MarkdownColumn( + verbose_name=_('Comments'), ) - comments = columns.MarkdownColumn() device_count = columns.LinkedCountColumn( viewname='dcim:device_list', url_params={'rack_id': 'pk'}, - verbose_name='Devices' + verbose_name=_('Devices') ) get_utilization = columns.UtilizationColumn( orderable=False, - verbose_name='Space' + verbose_name=_('Space') ) get_power_utilization = columns.UtilizationColumn( orderable=False, - verbose_name='Power' + verbose_name=_('Power') ) tags = columns.TagColumn( url_name='dcim:rack_list' ) outer_width = tables.TemplateColumn( template_code="{{ record.outer_width }} {{ record.outer_unit }}", - verbose_name='Outer Width' + verbose_name=_('Outer Width') ) outer_depth = tables.TemplateColumn( template_code="{{ record.outer_depth }} {{ record.outer_unit }}", - verbose_name='Outer Depth' + verbose_name=_('Outer Depth') ) weight = columns.TemplateColumn( + verbose_name=_('Weight'), template_code=WEIGHT, order_by=('_abs_weight', 'weight_unit') ) max_weight = columns.TemplateColumn( + verbose_name=_('Max weight'), template_code=WEIGHT, order_by=('_abs_max_weight', 'weight_unit') ) @@ -113,25 +130,31 @@ class RackTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable): class RackReservationTable(TenancyColumnsMixin, NetBoxTable): reservation = tables.Column( + verbose_name=_('Reservation'), accessor='pk', linkify=True ) site = tables.Column( + verbose_name=_('Site'), accessor=Accessor('rack__site'), linkify=True ) location = tables.Column( + verbose_name=_('Location'), accessor=Accessor('rack__location'), linkify=True ) rack = tables.Column( + verbose_name=_('Rack'), linkify=True ) unit_list = tables.Column( orderable=False, - verbose_name='Units' + verbose_name=_('Units') + ) + comments = columns.MarkdownColumn( + verbose_name=_('Comments'), ) - comments = columns.MarkdownColumn() tags = columns.TagColumn( url_name='dcim:rackreservation_list' ) diff --git a/netbox/dcim/tables/sites.py b/netbox/dcim/tables/sites.py index a4de18cee..690e472e7 100644 --- a/netbox/dcim/tables/sites.py +++ b/netbox/dcim/tables/sites.py @@ -1,3 +1,4 @@ +from django.utils.translation import gettext_lazy as _ import django_tables2 as tables from dcim.models import Location, Region, Site, SiteGroup from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin @@ -20,12 +21,13 @@ __all__ = ( class RegionTable(ContactsColumnMixin, NetBoxTable): name = columns.MPTTColumn( + verbose_name=_('Name'), linkify=True ) site_count = columns.LinkedCountColumn( viewname='dcim:site_list', url_params={'region_id': 'pk'}, - verbose_name='Sites' + verbose_name=_('Sites') ) tags = columns.TagColumn( url_name='dcim:region_list' @@ -46,12 +48,13 @@ class RegionTable(ContactsColumnMixin, NetBoxTable): class SiteGroupTable(ContactsColumnMixin, NetBoxTable): name = columns.MPTTColumn( + verbose_name=_('Name'), linkify=True ) site_count = columns.LinkedCountColumn( viewname='dcim:site_list', url_params={'group_id': 'pk'}, - verbose_name='Sites' + verbose_name=_('Sites') ) tags = columns.TagColumn( url_name='dcim:sitegroup_list' @@ -72,26 +75,33 @@ class SiteGroupTable(ContactsColumnMixin, NetBoxTable): class SiteTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable): name = tables.Column( + verbose_name=_('Name'), linkify=True ) - status = columns.ChoiceFieldColumn() + status = columns.ChoiceFieldColumn( + verbose_name=_('Status'), + ) region = tables.Column( + verbose_name=_('Region'), linkify=True ) group = tables.Column( + verbose_name=_('Group'), linkify=True ) asns = columns.ManyToManyColumn( linkify_item=True, - verbose_name='ASNs' + verbose_name=_('ASNs') ) asn_count = columns.LinkedCountColumn( accessor=tables.A('asns__count'), viewname='ipam:asn_list', url_params={'site_id': 'pk'}, - verbose_name='ASN Count' + verbose_name=_('ASN Count') + ) + comments = columns.MarkdownColumn( + verbose_name=_('Comments'), ) - comments = columns.MarkdownColumn() tags = columns.TagColumn( url_name='dcim:site_list' ) @@ -112,26 +122,31 @@ class SiteTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable): class LocationTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable): name = columns.MPTTColumn( + verbose_name=_('Name'), linkify=True ) site = tables.Column( + verbose_name=_('Site'), linkify=True ) - status = columns.ChoiceFieldColumn() + status = columns.ChoiceFieldColumn( + verbose_name=_('Status'), + ) rack_count = columns.LinkedCountColumn( viewname='dcim:rack_list', url_params={'location_id': 'pk'}, - verbose_name='Racks' + verbose_name=_('Racks') ) device_count = columns.LinkedCountColumn( viewname='dcim:device_list', url_params={'location_id': 'pk'}, - verbose_name='Devices' + verbose_name=_('Devices') ) tags = columns.TagColumn( url_name='dcim:location_list' ) actions = columns.ActionsColumn( + verbose_name=_('Actions'), extra_buttons=LOCATION_BUTTONS ) diff --git a/netbox/dcim/tables/template_code.py b/netbox/dcim/tables/template_code.py index e0f38afef..131506d7f 100644 --- a/netbox/dcim/tables/template_code.py +++ b/netbox/dcim/tables/template_code.py @@ -1,3 +1,5 @@ +from django.utils.translation import gettext_lazy as _ + LINKTERMINATION = """ {% for termination in value %} {% if termination.parent_object %} @@ -20,11 +22,11 @@ WEIGHT = """ {% if value %}{{ value|floatformat:"-2" }} {{ record.weight_unit }}{% endif %} """ -DEVICE_LINK = """ +DEVICE_LINK = _(""" {{ value|default:'Unnamed device' }} -""" +""") -DEVICEBAY_STATUS = """ +DEVICEBAY_STATUS = _(""" {% if record.installed_device_id %} {{ record.installed_device.get_status_display }} @@ -32,7 +34,7 @@ DEVICEBAY_STATUS = """ {% else %} Vacant {% endif %} -""" +""") INTERFACE_IPADDRESSES = """
@@ -54,7 +56,7 @@ INTERFACE_FHRPGROUPS = """
""" -INTERFACE_TAGGED_VLANS = """ +INTERFACE_TAGGED_VLANS = _(""" {% if record.mode == 'tagged' %} {% for vlan in value.all %} {{ vlan }}
@@ -62,7 +64,7 @@ INTERFACE_TAGGED_VLANS = """ {% elif record.mode == 'tagged-all' %} All {% endif %} -""" +""") INTERFACE_WIRELESS_LANS = """ {% for wlan in value.all %} @@ -106,7 +108,7 @@ MODULAR_COMPONENT_TEMPLATE_BUTTONS = """ # Device component buttons # -CONSOLEPORT_BUTTONS = """ +CONSOLEPORT_BUTTONS = _(""" {% if perms.dcim.add_inventoryitem %} @@ -154,9 +156,9 @@ CONSOLEPORT_BUTTONS = """ {% else %} {% endif %} -""" +""") -CONSOLESERVERPORT_BUTTONS = """ +CONSOLESERVERPORT_BUTTONS = _(""" {% if perms.dcim.add_inventoryitem %} @@ -204,9 +206,9 @@ CONSOLESERVERPORT_BUTTONS = """ {% else %} {% endif %} -""" +""") -POWERPORT_BUTTONS = """ +POWERPORT_BUTTONS = _(""" {% if perms.dcim.add_inventoryitem %} @@ -253,9 +255,9 @@ POWERPORT_BUTTONS = """ {% else %} {% endif %} -""" +""") -POWEROUTLET_BUTTONS = """ +POWEROUTLET_BUTTONS = _(""" {% if perms.dcim.add_inventoryitem %} @@ -298,9 +300,9 @@ POWEROUTLET_BUTTONS = """ {% endif %} {% endif %} -""" +""") -INTERFACE_BUTTONS = """ +INTERFACE_BUTTONS = _(""" {% if perms.dcim.change_interface %}