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'
)