From 90d751db26f60eac37d479af2e9e93e24f56a4bd Mon Sep 17 00:00:00 2001 From: Arthur Date: Wed, 26 Jul 2023 11:53:55 +0700 Subject: [PATCH] 13150 internationalize ipam tables --- netbox/extras/tables/tables.py | 167 +++++++++++++++++++++++---------- netbox/ipam/tables/asn.py | 10 +- netbox/ipam/tables/fhrp.py | 17 +++- netbox/ipam/tables/ip.py | 112 ++++++++++++++-------- netbox/ipam/tables/l2vpn.py | 26 +++-- netbox/ipam/tables/services.py | 14 ++- netbox/ipam/tables/vlans.py | 62 ++++++++---- netbox/ipam/tables/vrfs.py | 17 +++- 8 files changed, 301 insertions(+), 124 deletions(-) diff --git a/netbox/extras/tables/tables.py b/netbox/extras/tables/tables.py index e5e722398..b89c62c12 100644 --- a/netbox/extras/tables/tables.py +++ b/netbox/extras/tables/tables.py @@ -2,7 +2,7 @@ import json import django_tables2 as tables from django.conf import settings -from django.utils.translation import gettext as _ +from django.utils.translation import gettext_lazy as _ from extras.models import * from netbox.tables import NetBoxTable, columns @@ -44,8 +44,11 @@ REVISION_BUTTONS = """ class ConfigRevisionTable(NetBoxTable): - is_active = columns.BooleanColumn() + is_active = columns.BooleanColumn( + verbose_name=_('Is active'), + ) actions = columns.ActionsColumn( + verbose_name=_('Actions'), actions=('delete',), extra_buttons=REVISION_BUTTONS ) @@ -60,18 +63,29 @@ class ConfigRevisionTable(NetBoxTable): class CustomFieldTable(NetBoxTable): name = tables.Column( + verbose_name=_('Name'), linkify=True ) - content_types = columns.ContentTypesColumn() - required = columns.BooleanColumn() - ui_visibility = columns.ChoiceFieldColumn(verbose_name="UI visibility") - description = columns.MarkdownColumn() + content_types = columns.ContentTypesColumn( + verbose_name=_('Content types'), + ) + required = columns.BooleanColumn( + verbose_name=_('Required'), + ) + ui_visibility = columns.ChoiceFieldColumn( + verbose_name=_("UI visibility") + ) + description = columns.MarkdownColumn( + verbose_name=_('Description'), + ) choices = columns.ArrayColumn( max_items=10, orderable=False, verbose_name=_('Choices') ) - is_cloneable = columns.BooleanColumn() + is_cloneable = columns.BooleanColumn( + verbose_name=_('Is cloneable'), + ) class Meta(NetBoxTable.Meta): model = CustomField @@ -85,6 +99,7 @@ class CustomFieldTable(NetBoxTable): class CustomFieldChoiceSetTable(NetBoxTable): name = tables.Column( + verbose_name=_('Name'), linkify=True ) choices = columns.ArrayColumn( @@ -99,7 +114,9 @@ class CustomFieldChoiceSetTable(NetBoxTable): orderable=False, verbose_name=_('Count') ) - order_alphabetically = columns.BooleanColumn() + order_alphabetically = columns.BooleanColumn( + verbose_name=_('Order alphabetically'), + ) class Meta(NetBoxTable.Meta): model = CustomFieldChoiceSet @@ -112,11 +129,18 @@ class CustomFieldChoiceSetTable(NetBoxTable): class CustomLinkTable(NetBoxTable): name = tables.Column( + verbose_name=_('Name'), linkify=True ) - content_types = columns.ContentTypesColumn() - enabled = columns.BooleanColumn() - new_window = columns.BooleanColumn() + content_types = columns.ContentTypesColumn( + verbose_name=_('Content types'), + ) + enabled = columns.BooleanColumn( + verbose_name=_('Enabled'), + ) + new_window = columns.BooleanColumn( + verbose_name=_('New window'), + ) class Meta(NetBoxTable.Meta): model = CustomLink @@ -129,19 +153,26 @@ class CustomLinkTable(NetBoxTable): class ExportTemplateTable(NetBoxTable): name = tables.Column( + verbose_name=_('Name'), linkify=True ) - content_types = columns.ContentTypesColumn() - as_attachment = columns.BooleanColumn() + content_types = columns.ContentTypesColumn( + verbose_name=_('Content types'), + ) + as_attachment = columns.BooleanColumn( + verbose_name=_('As attachment'), + ) data_source = tables.Column( + verbose_name=_('Data source'), linkify=True ) data_file = tables.Column( + verbose_name=_('Data file'), linkify=True ) is_synced = columns.BooleanColumn( orderable=False, - verbose_name='Synced' + verbose_name=_('Synced') ) class Meta(NetBoxTable.Meta): @@ -157,18 +188,23 @@ class ExportTemplateTable(NetBoxTable): class ImageAttachmentTable(NetBoxTable): id = tables.Column( + verbose_name=_('ID'), linkify=False ) - content_type = columns.ContentTypeColumn() + content_type = columns.ContentTypeColumn( + verbose_name=_('Content type'), + ) parent = tables.Column( + verbose_name=_('Parent'), linkify=True ) image = tables.TemplateColumn( + verbose_name=_('Image'), template_code=IMAGEATTACHMENT_IMAGE, ) size = tables.Column( orderable=False, - verbose_name='Size (bytes)' + verbose_name=_('Size (bytes)') ) class Meta(NetBoxTable.Meta): @@ -182,11 +218,18 @@ class ImageAttachmentTable(NetBoxTable): class SavedFilterTable(NetBoxTable): name = tables.Column( + verbose_name=_('Name'), linkify=True ) - content_types = columns.ContentTypesColumn() - enabled = columns.BooleanColumn() - shared = columns.BooleanColumn() + content_types = columns.ContentTypesColumn( + verbose_name=_('Content types'), + ) + enabled = columns.BooleanColumn( + verbose_name=_('Enabled'), + ) + shared = columns.BooleanColumn( + verbose_name=_('Shared'), + ) def value_parameters(self, value): return json.dumps(value) @@ -203,11 +246,15 @@ class SavedFilterTable(NetBoxTable): class BookmarkTable(NetBoxTable): - object_type = columns.ContentTypeColumn() + object_type = columns.ContentTypeColumn( + verbose_name=_('Object types'), + ) object = tables.Column( + verbose_name=_('Object'), linkify=True ) actions = columns.ActionsColumn( + verbose_name=_('Actions'), actions=('delete',) ) @@ -219,27 +266,32 @@ class BookmarkTable(NetBoxTable): class WebhookTable(NetBoxTable): name = tables.Column( + verbose_name=_('Name'), linkify=True ) - content_types = columns.ContentTypesColumn() - enabled = columns.BooleanColumn() + content_types = columns.ContentTypesColumn( + verbose_name=_('Content types'), + ) + enabled = columns.BooleanColumn( + verbose_name=_('Enabled'), + ) type_create = columns.BooleanColumn( - verbose_name='Create' + verbose_name=_('Create') ) type_update = columns.BooleanColumn( - verbose_name='Update' + verbose_name=_('Update') ) type_delete = columns.BooleanColumn( - verbose_name='Delete' + verbose_name=_('Delete') ) type_job_start = columns.BooleanColumn( - verbose_name='Job start' + verbose_name=_('Job start') ) type_job_end = columns.BooleanColumn( - verbose_name='Job end' + verbose_name=_('Job end') ) ssl_validation = columns.BooleanColumn( - verbose_name='SSL Validation' + verbose_name=_('SSL Validation') ) class Meta(NetBoxTable.Meta): @@ -257,10 +309,15 @@ class WebhookTable(NetBoxTable): class TagTable(NetBoxTable): name = tables.Column( + verbose_name=_('Name'), linkify=True ) - color = columns.ColorColumn() - object_types = columns.ContentTypesColumn() + color = columns.ColorColumn( + verbose_name=_('Color'), + ) + object_types = columns.ContentTypesColumn( + verbose_name=_('Object types'), + ) class Meta(NetBoxTable.Meta): model = Tag @@ -273,19 +330,20 @@ class TagTable(NetBoxTable): class TaggedItemTable(NetBoxTable): id = tables.Column( - verbose_name='ID', + verbose_name=_('ID'), linkify=lambda record: record.content_object.get_absolute_url(), accessor='content_object__id' ) content_type = columns.ContentTypeColumn( - verbose_name='Type' + verbose_name=_('Type') ) content_object = tables.Column( linkify=True, orderable=False, - verbose_name='Object' + verbose_name=_('Object') ) actions = columns.ActionsColumn( + verbose_name=_('Actions'), actions=() ) @@ -296,20 +354,23 @@ class TaggedItemTable(NetBoxTable): class ConfigContextTable(NetBoxTable): data_source = tables.Column( + verbose_name=_('Data source'), linkify=True ) data_file = tables.Column( + verbose_name=_('Data file'), linkify=True ) name = tables.Column( + verbose_name=_('Name'), linkify=True ) is_active = columns.BooleanColumn( - verbose_name='Active' + verbose_name=_('Active') ) is_synced = columns.BooleanColumn( orderable=False, - verbose_name='Synced' + verbose_name=_('Synced') ) class Meta(NetBoxTable.Meta): @@ -324,17 +385,20 @@ class ConfigContextTable(NetBoxTable): class ConfigTemplateTable(NetBoxTable): name = tables.Column( + verbose_name=_('Name'), linkify=True ) data_source = tables.Column( + verbose_name=_('Data source'), linkify=True ) data_file = tables.Column( + verbose_name=_('Data file'), linkify=True ) is_synced = columns.BooleanColumn( orderable=False, - verbose_name='Synced' + verbose_name=_('Synced') ) tags = columns.TagColumn( url_name='extras:configtemplate_list' @@ -353,33 +417,37 @@ class ConfigTemplateTable(NetBoxTable): class ObjectChangeTable(NetBoxTable): time = tables.DateTimeColumn( + verbose_name=_('Time'), linkify=True, format=settings.SHORT_DATETIME_FORMAT ) user_name = tables.Column( - verbose_name='Username' + verbose_name=_('Username') ) full_name = tables.TemplateColumn( accessor=tables.A('user'), template_code=OBJECTCHANGE_FULL_NAME, - verbose_name='Full Name', + verbose_name=_('Full Name'), orderable=False ) - action = columns.ChoiceFieldColumn() + action = columns.ChoiceFieldColumn( + verbose_name=_('Action'), + ) changed_object_type = columns.ContentTypeColumn( - verbose_name='Type' + verbose_name=_('Type') ) object_repr = tables.TemplateColumn( accessor=tables.A('changed_object'), template_code=OBJECTCHANGE_OBJECT, - verbose_name='Object', + verbose_name=_('Object'), orderable=False ) request_id = tables.TemplateColumn( template_code=OBJECTCHANGE_REQUEST_ID, - verbose_name='Request ID' + verbose_name=_('Request ID') ) actions = columns.ActionsColumn( + verbose_name=_('Actions'), actions=() ) @@ -393,23 +461,28 @@ class ObjectChangeTable(NetBoxTable): class JournalEntryTable(NetBoxTable): created = tables.DateTimeColumn( + verbose_name=_('Created'), linkify=True, format=settings.SHORT_DATETIME_FORMAT ) assigned_object_type = columns.ContentTypeColumn( - verbose_name='Object type' + verbose_name=_('Object type') ) assigned_object = tables.Column( linkify=True, orderable=False, - verbose_name='Object' + verbose_name=_('Object') + ) + kind = columns.ChoiceFieldColumn( + verbose_name=_('Kind'), + ) + comments = columns.MarkdownColumn( + verbose_name=_('Comments'), ) - kind = columns.ChoiceFieldColumn() - comments = columns.MarkdownColumn() comments_short = tables.TemplateColumn( accessor=tables.A('comments'), template_code='{{ value|markdown|truncatewords_html:50 }}', - verbose_name='Comments (Short)' + verbose_name=_('Comments (Short)') ) tags = columns.TagColumn( url_name='extras:journalentry_list' diff --git a/netbox/ipam/tables/asn.py b/netbox/ipam/tables/asn.py index 356f2fc17..6bb15523e 100644 --- a/netbox/ipam/tables/asn.py +++ b/netbox/ipam/tables/asn.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 ipam.models import * from netbox.tables import NetBoxTable, columns @@ -13,9 +13,11 @@ __all__ = ( class ASNRangeTable(TenancyColumnsMixin, NetBoxTable): name = tables.Column( + verbose_name=_('Name'), linkify=True ) rir = tables.Column( + verbose_name=_('RIR'), linkify=True ) tags = columns.TagColumn( @@ -36,9 +38,11 @@ class ASNRangeTable(TenancyColumnsMixin, NetBoxTable): class ASNTable(TenancyColumnsMixin, NetBoxTable): asn = tables.Column( + verbose_name=_('ASN'), linkify=True ) rir = tables.Column( + verbose_name=_('RIR'), linkify=True ) asn_asdot = tables.Column( @@ -60,7 +64,9 @@ class ASNTable(TenancyColumnsMixin, NetBoxTable): linkify_item=True, verbose_name=_('Sites') ) - comments = columns.MarkdownColumn() + comments = columns.MarkdownColumn( + verbose_name=_('Comments'), + ) tags = columns.TagColumn( url_name='ipam:asn_list' ) diff --git a/netbox/ipam/tables/fhrp.py b/netbox/ipam/tables/fhrp.py index 7d7b03bb8..25443a93e 100644 --- a/netbox/ipam/tables/fhrp.py +++ b/netbox/ipam/tables/fhrp.py @@ -1,3 +1,4 @@ +from django.utils.translation import gettext_lazy as _ import django_tables2 as tables from ipam.models import * @@ -18,17 +19,20 @@ IPADDRESSES = """ class FHRPGroupTable(NetBoxTable): group_id = tables.Column( + verbose_name=_('Group ID'), linkify=True ) ip_addresses = tables.TemplateColumn( template_code=IPADDRESSES, orderable=False, - verbose_name='IP Addresses' + verbose_name=_('IP Addresses') ) member_count = tables.Column( - verbose_name='Members' + verbose_name=_('Members') + ) + comments = columns.MarkdownColumn( + verbose_name=_('Comments'), ) - comments = columns.MarkdownColumn() tags = columns.TagColumn( url_name='ipam:fhrpgroup_list' ) @@ -52,16 +56,19 @@ class FHRPGroupAssignmentTable(NetBoxTable): accessor=tables.A('interface__parent_object'), linkify=True, orderable=False, - verbose_name='Parent' + verbose_name=_('Parent') ) interface = tables.Column( linkify=True, - orderable=False + orderable=False, + verbose_name=_('Interface'), ) group = tables.Column( + verbose_name=_('Group'), linkify=True ) actions = columns.ActionsColumn( + verbose_name=_('Actions'), actions=('edit', 'delete') ) diff --git a/netbox/ipam/tables/ip.py b/netbox/ipam/tables/ip.py index aff090f3a..8e477f79b 100644 --- a/netbox/ipam/tables/ip.py +++ b/netbox/ipam/tables/ip.py @@ -1,3 +1,4 @@ +from django.utils.translation import gettext_lazy as _ import django_tables2 as tables from django.utils.safestring import mark_safe from django_tables2.utils import Accessor @@ -17,7 +18,7 @@ __all__ = ( 'RoleTable', ) -AVAILABLE_LABEL = mark_safe('Available') +AVAILABLE_LABEL = mark_safe(_('Available')) AGGREGATE_COPY_BUTTON = """ {% copy_content record.pk prefix="aggregate_" %} @@ -46,7 +47,7 @@ PREFIX_LINK_WITH_DEPTH = """ {% endif %} """ + PREFIX_LINK -IPADDRESS_LINK = """ +IPADDRESS_LINK = _(""" {% if record.pk %} {{ record.address }} {% elif perms.ipam.add_ipaddress %} @@ -54,7 +55,7 @@ IPADDRESS_LINK = """ {% else %} {% if record.0 <= 65536 %}{{ record.0 }}{% else %}Many{% endif %} IP{{ record.0|pluralize }} available {% endif %} -""" +""") IPADDRESS_COPY_BUTTON = """ {% copy_content record.pk prefix="ipaddress_" %} @@ -81,15 +82,16 @@ VRF_LINK = """ class RIRTable(NetBoxTable): name = tables.Column( + verbose_name=_('Name'), linkify=True ) is_private = columns.BooleanColumn( - verbose_name='Private' + verbose_name=_('Private') ) aggregate_count = columns.LinkedCountColumn( viewname='ipam:aggregate_list', url_params={'rir_id': 'pk'}, - verbose_name='Aggregates' + verbose_name=_('Aggregates') ) tags = columns.TagColumn( url_name='ipam:rir_list' @@ -111,7 +113,7 @@ class RIRTable(NetBoxTable): class AggregateTable(TenancyColumnsMixin, NetBoxTable): prefix = tables.Column( linkify=True, - verbose_name='Aggregate', + verbose_name=_('Aggregate'), attrs={ # Allow the aggregate to be copied to the clipboard 'a': {'id': lambda record: f"aggregate_{record.pk}"} @@ -119,20 +121,24 @@ class AggregateTable(TenancyColumnsMixin, NetBoxTable): ) date_added = tables.DateColumn( format="Y-m-d", - verbose_name='Added' + verbose_name=_('Added') ) child_count = tables.Column( - verbose_name='Prefixes' + verbose_name=_('Prefixes') ) utilization = columns.UtilizationColumn( + verbose_name=_('Utilization'), accessor='get_utilization', orderable=False ) - comments = columns.MarkdownColumn() + comments = columns.MarkdownColumn( + verbose_name=_('Comments'), + ) tags = columns.TagColumn( url_name='ipam:aggregate_list' ) actions = columns.ActionsColumn( + verbose_name=_('Actions'), extra_buttons=AGGREGATE_COPY_BUTTON ) @@ -151,22 +157,23 @@ class AggregateTable(TenancyColumnsMixin, NetBoxTable): class RoleTable(NetBoxTable): name = tables.Column( + verbose_name=_('Name'), linkify=True ) prefix_count = columns.LinkedCountColumn( viewname='ipam:prefix_list', url_params={'role_id': 'pk'}, - verbose_name='Prefixes' + verbose_name=_('Prefixes') ) iprange_count = columns.LinkedCountColumn( viewname='ipam:iprange_list', url_params={'role_id': 'pk'}, - verbose_name='IP Ranges' + verbose_name=_('IP Ranges') ) vlan_count = columns.LinkedCountColumn( viewname='ipam:vlan_list', url_params={'role_id': 'pk'}, - verbose_name='VLANs' + verbose_name=_('VLANs') ) tags = columns.TagColumn( url_name='ipam:role_list' @@ -202,6 +209,7 @@ class PrefixUtilizationColumn(columns.UtilizationColumn): class PrefixTable(TenancyColumnsMixin, NetBoxTable): prefix = columns.TemplateColumn( + verbose_name=_('Prefix'), template_code=PREFIX_LINK_WITH_DEPTH, export_raw=True, attrs={'td': {'class': 'text-nowrap'}} @@ -210,11 +218,11 @@ class PrefixTable(TenancyColumnsMixin, NetBoxTable): accessor=Accessor('prefix'), template_code=PREFIX_LINK, export_raw=True, - verbose_name='Prefix (Flat)' + verbose_name=_('Prefix (Flat)') ) depth = tables.Column( accessor=Accessor('_depth'), - verbose_name='Depth' + verbose_name=_('Depth') ) children = columns.LinkedCountColumn( accessor=Accessor('_children'), @@ -223,45 +231,52 @@ class PrefixTable(TenancyColumnsMixin, NetBoxTable): 'vrf_id': 'vrf_id', 'within': 'prefix', }, - verbose_name='Children' + verbose_name=_('Children') ) status = columns.ChoiceFieldColumn( + verbose_name=_('Status'), default=AVAILABLE_LABEL ) vrf = tables.TemplateColumn( template_code=VRF_LINK, - verbose_name='VRF' + verbose_name=_('VRF') ) site = tables.Column( + verbose_name=_('Site'), linkify=True ) vlan_group = tables.Column( accessor='vlan__group', linkify=True, - verbose_name='VLAN Group' + verbose_name=_('VLAN Group') ) vlan = tables.Column( linkify=True, - verbose_name='VLAN' + verbose_name=_('VLAN') ) role = tables.Column( + verbose_name=_('Role'), linkify=True ) is_pool = columns.BooleanColumn( - verbose_name='Pool' + verbose_name=_('Pool') ) mark_utilized = columns.BooleanColumn( - verbose_name='Marked Utilized' + verbose_name=_('Marked Utilized') ) utilization = PrefixUtilizationColumn( + verbose_name=_('Utilization'), accessor='get_utilization', orderable=False ) - comments = columns.MarkdownColumn() + comments = columns.MarkdownColumn( + verbose_name=_('Comments'), + ) tags = columns.TagColumn( url_name='ipam:prefix_list' ) actions = columns.ActionsColumn( + verbose_name=_('Actions'), extra_buttons=PREFIX_COPY_BUTTON ) @@ -285,26 +300,32 @@ class PrefixTable(TenancyColumnsMixin, NetBoxTable): # class IPRangeTable(TenancyColumnsMixin, NetBoxTable): start_address = tables.Column( + verbose_name=_('Start address'), linkify=True ) vrf = tables.TemplateColumn( template_code=VRF_LINK, - verbose_name='VRF' + verbose_name=_('VRF') ) status = columns.ChoiceFieldColumn( + verbose_name=_('Status'), default=AVAILABLE_LABEL ) role = tables.Column( + verbose_name=_('Role'), linkify=True ) mark_utilized = columns.BooleanColumn( - verbose_name='Marked Utilized' + verbose_name=_('Marked Utilized') ) utilization = columns.UtilizationColumn( + verbose_name=_('Utilization'), accessor='utilization', orderable=False ) - comments = columns.MarkdownColumn() + comments = columns.MarkdownColumn( + verbose_name=_('Comments'), + ) tags = columns.TagColumn( url_name='ipam:iprange_list' ) @@ -330,47 +351,53 @@ class IPRangeTable(TenancyColumnsMixin, NetBoxTable): class IPAddressTable(TenancyColumnsMixin, NetBoxTable): address = tables.TemplateColumn( template_code=IPADDRESS_LINK, - verbose_name='IP Address' + verbose_name=_('IP Address') ) vrf = tables.TemplateColumn( template_code=VRF_LINK, - verbose_name='VRF' + verbose_name=_('VRF') ) status = columns.ChoiceFieldColumn( + verbose_name=_('Status'), default=AVAILABLE_LABEL ) - role = columns.ChoiceFieldColumn() + role = columns.ChoiceFieldColumn( + verbose_name=_('Role'), + ) assigned_object = tables.Column( linkify=True, orderable=False, - verbose_name='Interface' + verbose_name=_('Interface') ) assigned_object_parent = tables.Column( accessor='assigned_object__parent_object', linkify=True, orderable=False, - verbose_name='Device/VM' + verbose_name=_('Device/VM') ) nat_inside = tables.Column( linkify=True, orderable=False, - verbose_name='NAT (Inside)' + verbose_name=_('NAT (Inside)') ) nat_outside = tables.ManyToManyColumn( linkify_item=True, orderable=False, - verbose_name='NAT (Outside)' + verbose_name=_('NAT (Outside)') ) assigned = columns.BooleanColumn( accessor='assigned_object_id', linkify=lambda record: record.assigned_object.get_absolute_url(), - verbose_name='Assigned' + verbose_name=_('Assigned') + ) + comments = columns.MarkdownColumn( + verbose_name=_('Comments'), ) - comments = columns.MarkdownColumn() tags = columns.TagColumn( url_name='ipam:ipaddress_list' ) actions = columns.ActionsColumn( + verbose_name=_('Actions'), extra_buttons=IPADDRESS_COPY_BUTTON ) @@ -391,10 +418,13 @@ class IPAddressTable(TenancyColumnsMixin, NetBoxTable): class IPAddressAssignTable(NetBoxTable): address = tables.TemplateColumn( template_code=IPADDRESS_ASSIGN_LINK, - verbose_name='IP Address' + verbose_name=_('IP Address') + ) + status = columns.ChoiceFieldColumn( + verbose_name=_('Status'), ) - status = columns.ChoiceFieldColumn() assigned_object = tables.Column( + verbose_name=_('Assigned object'), orderable=False ) @@ -411,14 +441,18 @@ class AssignedIPAddressesTable(NetBoxTable): """ address = tables.Column( linkify=True, - verbose_name='IP Address' + verbose_name=_('IP Address') ) vrf = tables.TemplateColumn( template_code=VRF_LINK, - verbose_name='VRF' + verbose_name=_('VRF') + ) + status = columns.ChoiceFieldColumn( + verbose_name=_('Status'), + ) + tenant = TenantColumn( + verbose_name=_('Tenant'), ) - status = columns.ChoiceFieldColumn() - tenant = TenantColumn() class Meta(NetBoxTable.Meta): model = IPAddress diff --git a/netbox/ipam/tables/l2vpn.py b/netbox/ipam/tables/l2vpn.py index 4ccd83e47..06c5f1b37 100644 --- a/netbox/ipam/tables/l2vpn.py +++ b/netbox/ipam/tables/l2vpn.py @@ -1,3 +1,4 @@ +from django.utils.translation import gettext_lazy as _ import django_tables2 as tables from ipam.models import L2VPN, L2VPNTermination @@ -17,19 +18,26 @@ L2VPN_TARGETS = """ class L2VPNTable(TenancyColumnsMixin, NetBoxTable): - pk = columns.ToggleColumn() + pk = columns.ToggleColumn( + verbose_name=_('Pk'), + ) name = tables.Column( + verbose_name=_('Name'), linkify=True ) import_targets = columns.TemplateColumn( + verbose_name=_('Import targets'), template_code=L2VPN_TARGETS, orderable=False ) export_targets = columns.TemplateColumn( + verbose_name=_('Export targets'), template_code=L2VPN_TARGETS, orderable=False ) - comments = columns.MarkdownColumn() + comments = columns.MarkdownColumn( + verbose_name=_('Comments'), + ) tags = columns.TagColumn( url_name='ipam:l2vpn_list' ) @@ -44,28 +52,30 @@ class L2VPNTable(TenancyColumnsMixin, NetBoxTable): class L2VPNTerminationTable(NetBoxTable): - pk = columns.ToggleColumn() + pk = columns.ToggleColumn( + verbose_name=_('Pk'), + ) l2vpn = tables.Column( - verbose_name='L2VPN', + verbose_name=_('L2VPN'), linkify=True ) assigned_object_type = columns.ContentTypeColumn( - verbose_name='Object Type' + verbose_name=_('Object Type') ) assigned_object = tables.Column( linkify=True, orderable=False, - verbose_name='Object' + verbose_name=_('Object') ) assigned_object_parent = tables.Column( linkify=True, orderable=False, - verbose_name='Object Parent' + verbose_name=_('Object Parent') ) assigned_object_site = tables.Column( linkify=True, orderable=False, - verbose_name='Object Site' + verbose_name=_('Object Site') ) class Meta(NetBoxTable.Meta): diff --git a/netbox/ipam/tables/services.py b/netbox/ipam/tables/services.py index 826ac98d5..392c3d335 100644 --- a/netbox/ipam/tables/services.py +++ b/netbox/ipam/tables/services.py @@ -1,3 +1,4 @@ +from django.utils.translation import gettext_lazy as _ import django_tables2 as tables from ipam.models import * @@ -11,13 +12,17 @@ __all__ = ( class ServiceTemplateTable(NetBoxTable): name = tables.Column( + verbose_name=_('Name'), linkify=True ) ports = tables.Column( + verbose_name=_('Ports'), accessor=tables.A('port_list'), order_by=tables.A('ports'), ) - comments = columns.MarkdownColumn() + comments = columns.MarkdownColumn( + verbose_name=_('Comments'), + ) tags = columns.TagColumn( url_name='ipam:servicetemplate_list' ) @@ -32,17 +37,22 @@ class ServiceTemplateTable(NetBoxTable): class ServiceTable(NetBoxTable): name = tables.Column( + verbose_name=_('Name'), linkify=True ) parent = tables.Column( + verbose_name=_('Parent'), linkify=True, order_by=('device', 'virtual_machine') ) ports = tables.Column( + verbose_name=_('Ports'), accessor=tables.A('port_list'), order_by=tables.A('ports'), ) - comments = columns.MarkdownColumn() + comments = columns.MarkdownColumn( + verbose_name=_('Comments'), + ) tags = columns.TagColumn( url_name='ipam:service_list' ) diff --git a/netbox/ipam/tables/vlans.py b/netbox/ipam/tables/vlans.py index 5d9828531..a1bf59494 100644 --- a/netbox/ipam/tables/vlans.py +++ b/netbox/ipam/tables/vlans.py @@ -1,5 +1,6 @@ import django_tables2 as tables from django.utils.safestring import mark_safe +from django.utils.translation import gettext_lazy as _ from django_tables2.utils import Accessor from dcim.models import Interface @@ -17,9 +18,9 @@ __all__ = ( 'VLANVirtualMachinesTable', ) -AVAILABLE_LABEL = mark_safe('Available') +AVAILABLE_LABEL = mark_safe(_('Available')) -VLAN_LINK = """ +VLAN_LINK = _(""" {% if record.pk %} {{ record.vid }} {% elif perms.ipam.add_vlan %} @@ -27,7 +28,7 @@ VLAN_LINK = """ {% else %} {{ record.available }} VLAN{{ record.available|pluralize }} available {% endif %} -""" +""") VLAN_PREFIXES = """ {% for prefix in value.all %} @@ -59,25 +60,32 @@ VLAN_MEMBER_TAGGED = """ # class VLANGroupTable(NetBoxTable): - name = tables.Column(linkify=True) - scope_type = columns.ContentTypeColumn() + name = tables.Column( + verbose_name=_('Name'), + linkify=True + ) + scope_type = columns.ContentTypeColumn( + verbose_name=_('Scope type'), + ) scope = tables.Column( + verbose_name=_('Scope'), linkify=True, orderable=False ) vlan_count = columns.LinkedCountColumn( viewname='ipam:vlan_list', url_params={'group_id': 'pk'}, - verbose_name='VLANs' + verbose_name=_('VLANs') ) utilization = columns.UtilizationColumn( orderable=False, - verbose_name='Utilization' + verbose_name=_('Utilization') ) tags = columns.TagColumn( url_name='ipam:vlangroup_list' ) actions = columns.ActionsColumn( + verbose_name=_('Actions'), extra_buttons=VLANGROUP_BUTTONS ) @@ -97,35 +105,42 @@ class VLANGroupTable(NetBoxTable): class VLANTable(TenancyColumnsMixin, NetBoxTable): vid = tables.TemplateColumn( template_code=VLAN_LINK, - verbose_name='VID' + verbose_name=_('VID') ) name = tables.Column( + verbose_name=_('Name'), linkify=True ) site = tables.Column( + verbose_name=_('Site'), linkify=True ) group = tables.Column( + verbose_name=_('Group'), linkify=True ) status = columns.ChoiceFieldColumn( + verbose_name=_('Status'), default=AVAILABLE_LABEL ) role = tables.Column( + verbose_name=_('Role'), linkify=True ) l2vpn = tables.Column( accessor=tables.A('l2vpn_termination__l2vpn'), linkify=True, orderable=False, - verbose_name='L2VPN' + verbose_name=_('L2VPN') ) prefixes = columns.TemplateColumn( template_code=VLAN_PREFIXES, orderable=False, - verbose_name='Prefixes' + verbose_name=_('Prefixes') + ) + comments = columns.MarkdownColumn( + verbose_name=_('Comments'), ) - comments = columns.MarkdownColumn() tags = columns.TagColumn( url_name='ipam:vlan_list' ) @@ -148,9 +163,10 @@ class VLANMembersTable(NetBoxTable): """ name = tables.Column( linkify=True, - verbose_name='Interface' + verbose_name=_('Interface') ) tagged = tables.TemplateColumn( + verbose_name=_('Tagged'), template_code=VLAN_MEMBER_TAGGED, orderable=False ) @@ -158,9 +174,11 @@ class VLANMembersTable(NetBoxTable): class VLANDevicesTable(VLANMembersTable): device = tables.Column( + verbose_name=_('Device'), linkify=True ) actions = columns.ActionsColumn( + verbose_name=_('Actions'), actions=('edit',) ) @@ -172,9 +190,11 @@ class VLANDevicesTable(VLANMembersTable): class VLANVirtualMachinesTable(VLANMembersTable): virtual_machine = tables.Column( + verbose_name=_('Virtual machine'), linkify=True ) actions = columns.ActionsColumn( + verbose_name=_('Actions'), actions=('edit',) ) @@ -190,19 +210,27 @@ class InterfaceVLANTable(NetBoxTable): """ vid = tables.Column( linkify=True, - verbose_name='ID' + verbose_name=_('ID') + ) + tagged = columns.BooleanColumn( + verbose_name=_('Tagged'), ) - tagged = columns.BooleanColumn() site = tables.Column( + verbose_name=_('Site'), linkify=True ) group = tables.Column( accessor=Accessor('group__name'), - verbose_name='Group' + verbose_name=_('Group') + ) + tenant = TenantColumn( + verbose_name=_('Tenant'), + ) + status = columns.ChoiceFieldColumn( + verbose_name=_('Status'), ) - tenant = TenantColumn() - status = columns.ChoiceFieldColumn() role = tables.Column( + verbose_name=_('Role'), linkify=True ) diff --git a/netbox/ipam/tables/vrfs.py b/netbox/ipam/tables/vrfs.py index 12e785636..238baadc0 100644 --- a/netbox/ipam/tables/vrfs.py +++ b/netbox/ipam/tables/vrfs.py @@ -1,3 +1,4 @@ +from django.utils.translation import gettext_lazy as _ import django_tables2 as tables from ipam.models import * @@ -22,23 +23,28 @@ VRF_TARGETS = """ class VRFTable(TenancyColumnsMixin, NetBoxTable): name = tables.Column( + verbose_name=_('Name'), linkify=True ) rd = tables.Column( - verbose_name='RD' + verbose_name=_('RD') ) enforce_unique = columns.BooleanColumn( - verbose_name='Unique' + verbose_name=_('Unique') ) import_targets = columns.TemplateColumn( + verbose_name=_('Import targets'), template_code=VRF_TARGETS, orderable=False ) export_targets = columns.TemplateColumn( + verbose_name=_('Export targets'), template_code=VRF_TARGETS, orderable=False ) - comments = columns.MarkdownColumn() + comments = columns.MarkdownColumn( + verbose_name=_('Comments'), + ) tags = columns.TagColumn( url_name='ipam:vrf_list' ) @@ -58,9 +64,12 @@ class VRFTable(TenancyColumnsMixin, NetBoxTable): class RouteTargetTable(TenancyColumnsMixin, NetBoxTable): name = tables.Column( + verbose_name=_('Name'), linkify=True ) - comments = columns.MarkdownColumn() + comments = columns.MarkdownColumn( + verbose_name=_('Comments'), + ) tags = columns.TagColumn( url_name='ipam:routetarget_list' )