From e625a5667c490752a99725c27a8ab6cc83bd37af Mon Sep 17 00:00:00 2001 From: Arthur Hanson Date: Tue, 1 Aug 2023 04:31:07 +0700 Subject: [PATCH] Closes #13279: Wrap choice labels with gettext() Co-authored-by: Jeremy Stretch --- netbox/circuits/choices.py | 14 +- netbox/core/choices.py | 14 +- netbox/dcim/choices.py | 240 ++++++++++++++++--------------- netbox/extras/choices.py | 100 ++++++------- netbox/ipam/choices.py | 46 +++--- netbox/tenancy/choices.py | 10 +- netbox/utilities/choices.py | 95 ++++++------ netbox/virtualization/choices.py | 24 ++-- netbox/wireless/choices.py | 14 +- 9 files changed, 286 insertions(+), 271 deletions(-) diff --git a/netbox/circuits/choices.py b/netbox/circuits/choices.py index 518baea9f..5d0065edc 100644 --- a/netbox/circuits/choices.py +++ b/netbox/circuits/choices.py @@ -1,3 +1,5 @@ +from django.utils.translation import gettext_lazy as _ + from utilities.choices import ChoiceSet @@ -16,12 +18,12 @@ class CircuitStatusChoices(ChoiceSet): STATUS_DECOMMISSIONED = 'decommissioned' CHOICES = [ - (STATUS_PLANNED, 'Planned', 'cyan'), - (STATUS_PROVISIONING, 'Provisioning', 'blue'), - (STATUS_ACTIVE, 'Active', 'green'), - (STATUS_OFFLINE, 'Offline', 'red'), - (STATUS_DEPROVISIONING, 'Deprovisioning', 'yellow'), - (STATUS_DECOMMISSIONED, 'Decommissioned', 'gray'), + (STATUS_PLANNED, _('Planned'), 'cyan'), + (STATUS_PROVISIONING, _('Provisioning'), 'blue'), + (STATUS_ACTIVE, _('Active'), 'green'), + (STATUS_OFFLINE, _('Offline'), 'red'), + (STATUS_DEPROVISIONING, _('Deprovisioning'), 'yellow'), + (STATUS_DECOMMISSIONED, _('Decommissioned'), 'gray'), ] diff --git a/netbox/core/choices.py b/netbox/core/choices.py index 8a676a98e..0067dfed8 100644 --- a/netbox/core/choices.py +++ b/netbox/core/choices.py @@ -1,4 +1,4 @@ -from django.utils.translation import gettext as _ +from django.utils.translation import gettext_lazy as _ from utilities.choices import ChoiceSet @@ -63,12 +63,12 @@ class JobStatusChoices(ChoiceSet): STATUS_FAILED = 'failed' CHOICES = ( - (STATUS_PENDING, 'Pending', 'cyan'), - (STATUS_SCHEDULED, 'Scheduled', 'gray'), - (STATUS_RUNNING, 'Running', 'blue'), - (STATUS_COMPLETED, 'Completed', 'green'), - (STATUS_ERRORED, 'Errored', 'red'), - (STATUS_FAILED, 'Failed', 'red'), + (STATUS_PENDING, _('Pending'), 'cyan'), + (STATUS_SCHEDULED, _('Scheduled'), 'gray'), + (STATUS_RUNNING, _('Running'), 'blue'), + (STATUS_COMPLETED, _('Completed'), 'green'), + (STATUS_ERRORED, _('Errored'), 'red'), + (STATUS_FAILED, _('Failed'), 'red'), ) TERMINAL_STATE_CHOICES = ( diff --git a/netbox/dcim/choices.py b/netbox/dcim/choices.py index e850a8c51..30e37e4ce 100644 --- a/netbox/dcim/choices.py +++ b/netbox/dcim/choices.py @@ -1,3 +1,5 @@ +from django.utils.translation import gettext_lazy as _ + from utilities.choices import ChoiceSet @@ -15,11 +17,11 @@ class SiteStatusChoices(ChoiceSet): STATUS_RETIRED = 'retired' CHOICES = [ - (STATUS_PLANNED, 'Planned', 'cyan'), - (STATUS_STAGING, 'Staging', 'blue'), - (STATUS_ACTIVE, 'Active', 'green'), - (STATUS_DECOMMISSIONING, 'Decommissioning', 'yellow'), - (STATUS_RETIRED, 'Retired', 'red'), + (STATUS_PLANNED, _('Planned'), 'cyan'), + (STATUS_STAGING, _('Staging'), 'blue'), + (STATUS_ACTIVE, _('Active'), 'green'), + (STATUS_DECOMMISSIONING, _('Decommissioning'), 'yellow'), + (STATUS_RETIRED, _('Retired'), 'red'), ] @@ -60,13 +62,13 @@ class RackTypeChoices(ChoiceSet): TYPE_WALLCABINET_VERTICAL = 'wall-cabinet-vertical' CHOICES = ( - (TYPE_2POST, '2-post frame'), - (TYPE_4POST, '4-post frame'), - (TYPE_CABINET, '4-post cabinet'), - (TYPE_WALLFRAME, 'Wall-mounted frame'), - (TYPE_WALLFRAME_VERTICAL, 'Wall-mounted frame (vertical)'), - (TYPE_WALLCABINET, 'Wall-mounted cabinet'), - (TYPE_WALLCABINET_VERTICAL, 'Wall-mounted cabinet (vertical)'), + (TYPE_2POST, _('2-post frame')), + (TYPE_4POST, _('4-post frame')), + (TYPE_CABINET, _('4-post cabinet')), + (TYPE_WALLFRAME, _('Wall-mounted frame')), + (TYPE_WALLFRAME_VERTICAL, _('Wall-mounted frame (vertical)')), + (TYPE_WALLCABINET, _('Wall-mounted cabinet')), + (TYPE_WALLCABINET_VERTICAL, _('Wall-mounted cabinet (vertical)')), ) @@ -78,10 +80,10 @@ class RackWidthChoices(ChoiceSet): WIDTH_23IN = 23 CHOICES = ( - (WIDTH_10IN, '10 inches'), - (WIDTH_19IN, '19 inches'), - (WIDTH_21IN, '21 inches'), - (WIDTH_23IN, '23 inches'), + (WIDTH_10IN, _('10 inches')), + (WIDTH_19IN, _('19 inches')), + (WIDTH_21IN, _('21 inches')), + (WIDTH_23IN, _('23 inches')), ) @@ -95,11 +97,11 @@ class RackStatusChoices(ChoiceSet): STATUS_DEPRECATED = 'deprecated' CHOICES = [ - (STATUS_RESERVED, 'Reserved', 'yellow'), - (STATUS_AVAILABLE, 'Available', 'green'), - (STATUS_PLANNED, 'Planned', 'cyan'), - (STATUS_ACTIVE, 'Active', 'blue'), - (STATUS_DEPRECATED, 'Deprecated', 'red'), + (STATUS_RESERVED, _('Reserved'), 'yellow'), + (STATUS_AVAILABLE, _('Available'), 'green'), + (STATUS_PLANNED, _('Planned'), 'cyan'), + (STATUS_ACTIVE, _('Active'), 'blue'), + (STATUS_DEPRECATED, _('Deprecated'), 'red'), ] @@ -109,8 +111,8 @@ class RackDimensionUnitChoices(ChoiceSet): UNIT_INCH = 'in' CHOICES = ( - (UNIT_MILLIMETER, 'Millimeters'), - (UNIT_INCH, 'Inches'), + (UNIT_MILLIMETER, _('Millimeters')), + (UNIT_INCH, _('Inches')), ) @@ -135,8 +137,8 @@ class SubdeviceRoleChoices(ChoiceSet): ROLE_CHILD = 'child' CHOICES = ( - (ROLE_PARENT, 'Parent'), - (ROLE_CHILD, 'Child'), + (ROLE_PARENT, _('Parent')), + (ROLE_CHILD, _('Child')), ) @@ -150,8 +152,8 @@ class DeviceFaceChoices(ChoiceSet): FACE_REAR = 'rear' CHOICES = ( - (FACE_FRONT, 'Front'), - (FACE_REAR, 'Rear'), + (FACE_FRONT, _('Front')), + (FACE_REAR, _('Rear')), ) @@ -167,13 +169,13 @@ class DeviceStatusChoices(ChoiceSet): STATUS_DECOMMISSIONING = 'decommissioning' CHOICES = [ - (STATUS_OFFLINE, 'Offline', 'gray'), - (STATUS_ACTIVE, 'Active', 'green'), - (STATUS_PLANNED, 'Planned', 'cyan'), - (STATUS_STAGED, 'Staged', 'blue'), - (STATUS_FAILED, 'Failed', 'red'), - (STATUS_INVENTORY, 'Inventory', 'purple'), - (STATUS_DECOMMISSIONING, 'Decommissioning', 'yellow'), + (STATUS_OFFLINE, _('Offline'), 'gray'), + (STATUS_ACTIVE, _('Active'), 'green'), + (STATUS_PLANNED, _('Planned'), 'cyan'), + (STATUS_STAGED, _('Staged'), 'blue'), + (STATUS_FAILED, _('Failed'), 'red'), + (STATUS_INVENTORY, _('Inventory'), 'purple'), + (STATUS_DECOMMISSIONING, _('Decommissioning'), 'yellow'), ] @@ -188,13 +190,13 @@ class DeviceAirflowChoices(ChoiceSet): AIRFLOW_MIXED = 'mixed' CHOICES = ( - (AIRFLOW_FRONT_TO_REAR, 'Front to rear'), - (AIRFLOW_REAR_TO_FRONT, 'Rear to front'), - (AIRFLOW_LEFT_TO_RIGHT, 'Left to right'), - (AIRFLOW_RIGHT_TO_LEFT, 'Right to left'), - (AIRFLOW_SIDE_TO_REAR, 'Side to rear'), - (AIRFLOW_PASSIVE, 'Passive'), - (AIRFLOW_MIXED, 'Mixed'), + (AIRFLOW_FRONT_TO_REAR, _('Front to rear')), + (AIRFLOW_REAR_TO_FRONT, _('Rear to front')), + (AIRFLOW_LEFT_TO_RIGHT, _('Left to right')), + (AIRFLOW_RIGHT_TO_LEFT, _('Right to left')), + (AIRFLOW_SIDE_TO_REAR, _('Side to rear')), + (AIRFLOW_PASSIVE, _('Passive')), + (AIRFLOW_MIXED, _('Mixed')), ) @@ -213,12 +215,12 @@ class ModuleStatusChoices(ChoiceSet): STATUS_DECOMMISSIONING = 'decommissioning' CHOICES = [ - (STATUS_OFFLINE, 'Offline', 'gray'), - (STATUS_ACTIVE, 'Active', 'green'), - (STATUS_PLANNED, 'Planned', 'cyan'), - (STATUS_STAGED, 'Staged', 'blue'), - (STATUS_FAILED, 'Failed', 'red'), - (STATUS_DECOMMISSIONING, 'Decommissioning', 'yellow'), + (STATUS_OFFLINE, _('Offline'), 'gray'), + (STATUS_ACTIVE, _('Active'), 'green'), + (STATUS_PLANNED, _('Planned'), 'cyan'), + (STATUS_STAGED, _('Staged'), 'blue'), + (STATUS_FAILED, _('Failed'), 'red'), + (STATUS_DECOMMISSIONING, _('Decommissioning'), 'yellow'), ] @@ -438,7 +440,7 @@ class PowerPortTypeChoices(ChoiceSet): (TYPE_NBR_14136_10A, '2P+T 10A (NBR 14136)'), (TYPE_NBR_14136_20A, '2P+T 20A (NBR 14136)'), )), - ('NEMA (Non-locking)', ( + (_('NEMA (Non-locking)'), ( (TYPE_NEMA_115P, 'NEMA 1-15P'), (TYPE_NEMA_515P, 'NEMA 5-15P'), (TYPE_NEMA_520P, 'NEMA 5-20P'), @@ -460,7 +462,7 @@ class PowerPortTypeChoices(ChoiceSet): (TYPE_NEMA_1550P, 'NEMA 15-50P'), (TYPE_NEMA_1560P, 'NEMA 15-60P'), )), - ('NEMA (Locking)', ( + (_('NEMA (Locking)'), ( (TYPE_NEMA_L115P, 'NEMA L1-15P'), (TYPE_NEMA_L515P, 'NEMA L5-15P'), (TYPE_NEMA_L520P, 'NEMA L5-20P'), @@ -483,7 +485,7 @@ class PowerPortTypeChoices(ChoiceSet): (TYPE_NEMA_L2130P, 'NEMA L21-30P'), (TYPE_NEMA_L2230P, 'NEMA L22-30P'), )), - ('California Style', ( + (_('California Style'), ( (TYPE_CS6361C, 'CS6361C'), (TYPE_CS6365C, 'CS6365C'), (TYPE_CS8165C, 'CS8165C'), @@ -491,7 +493,7 @@ class PowerPortTypeChoices(ChoiceSet): (TYPE_CS8365C, 'CS8365C'), (TYPE_CS8465C, 'CS8465C'), )), - ('International/ITA', ( + (_('International/ITA'), ( (TYPE_ITA_C, 'ITA Type C (CEE 7/16)'), (TYPE_ITA_E, 'ITA Type E (CEE 7/6)'), (TYPE_ITA_F, 'ITA Type F (CEE 7/4)'), @@ -521,7 +523,7 @@ class PowerPortTypeChoices(ChoiceSet): ('DC', ( (TYPE_DC, 'DC Terminal'), )), - ('Proprietary', ( + (_('Proprietary'), ( (TYPE_SAF_D_GRID, 'Saf-D-Grid'), (TYPE_NEUTRIK_POWERCON_20A, 'Neutrik powerCON (20A)'), (TYPE_NEUTRIK_POWERCON_32A, 'Neutrik powerCON (32A)'), @@ -529,7 +531,7 @@ class PowerPortTypeChoices(ChoiceSet): (TYPE_NEUTRIK_POWERCON_TRUE1_TOP, 'Neutrik powerCON TRUE1 TOP'), (TYPE_UBIQUITI_SMARTPOWER, 'Ubiquiti SmartPower'), )), - ('Other', ( + (_('Other'), ( (TYPE_HARDWIRED, 'Hardwired'), (TYPE_OTHER, 'Other'), )), @@ -675,7 +677,7 @@ class PowerOutletTypeChoices(ChoiceSet): (TYPE_NBR_14136_10A, '2P+T 10A (NBR 14136)'), (TYPE_NBR_14136_20A, '2P+T 20A (NBR 14136)'), )), - ('NEMA (Non-locking)', ( + (_('NEMA (Non-locking)'), ( (TYPE_NEMA_115R, 'NEMA 1-15R'), (TYPE_NEMA_515R, 'NEMA 5-15R'), (TYPE_NEMA_520R, 'NEMA 5-20R'), @@ -697,7 +699,7 @@ class PowerOutletTypeChoices(ChoiceSet): (TYPE_NEMA_1550R, 'NEMA 15-50R'), (TYPE_NEMA_1560R, 'NEMA 15-60R'), )), - ('NEMA (Locking)', ( + (_('NEMA (Locking)'), ( (TYPE_NEMA_L115R, 'NEMA L1-15R'), (TYPE_NEMA_L515R, 'NEMA L5-15R'), (TYPE_NEMA_L520R, 'NEMA L5-20R'), @@ -720,7 +722,7 @@ class PowerOutletTypeChoices(ChoiceSet): (TYPE_NEMA_L2130R, 'NEMA L21-30R'), (TYPE_NEMA_L2230R, 'NEMA L22-30R'), )), - ('California Style', ( + (_('California Style'), ( (TYPE_CS6360C, 'CS6360C'), (TYPE_CS6364C, 'CS6364C'), (TYPE_CS8164C, 'CS8164C'), @@ -728,7 +730,7 @@ class PowerOutletTypeChoices(ChoiceSet): (TYPE_CS8364C, 'CS8364C'), (TYPE_CS8464C, 'CS8464C'), )), - ('ITA/International', ( + (_('ITA/International'), ( (TYPE_ITA_E, 'ITA Type E (CEE 7/5)'), (TYPE_ITA_F, 'ITA Type F (CEE 7/3)'), (TYPE_ITA_G, 'ITA Type G (BS 1363)'), @@ -750,7 +752,7 @@ class PowerOutletTypeChoices(ChoiceSet): ('DC', ( (TYPE_DC, 'DC Terminal'), )), - ('Proprietary', ( + (_('Proprietary'), ( (TYPE_HDOT_CX, 'HDOT Cx'), (TYPE_SAF_D_GRID, 'Saf-D-Grid'), (TYPE_NEUTRIK_POWERCON_20A, 'Neutrik powerCON (20A)'), @@ -759,7 +761,7 @@ class PowerOutletTypeChoices(ChoiceSet): (TYPE_NEUTRIK_POWERCON_TRUE1_TOP, 'Neutrik powerCON TRUE1 TOP'), (TYPE_UBIQUITI_SMARTPOWER, 'Ubiquiti SmartPower'), )), - ('Other', ( + (_('Other'), ( (TYPE_HARDWIRED, 'Hardwired'), (TYPE_OTHER, 'Other'), )), @@ -789,9 +791,9 @@ class InterfaceKindChoices(ChoiceSet): KIND_WIRELESS = 'wireless' CHOICES = ( - (KIND_PHYSICAL, 'Physical'), - (KIND_VIRTUAL, 'Virtual'), - (KIND_WIRELESS, 'Wireless'), + (KIND_PHYSICAL, _('Physical')), + (KIND_VIRTUAL, _('Virtual')), + (KIND_WIRELESS, _('Wireless')), ) @@ -939,15 +941,15 @@ class InterfaceTypeChoices(ChoiceSet): CHOICES = ( ( - 'Virtual interfaces', + _('Virtual interfaces'), ( - (TYPE_VIRTUAL, 'Virtual'), - (TYPE_BRIDGE, 'Bridge'), - (TYPE_LAG, 'Link Aggregation Group (LAG)'), + (TYPE_VIRTUAL, _('Virtual')), + (TYPE_BRIDGE, _('Bridge')), + (TYPE_LAG, _('Link Aggregation Group (LAG)')), ), ), ( - 'Ethernet (fixed)', + _('Ethernet (fixed)'), ( (TYPE_100ME_FX, '100BASE-FX (10/100ME FIBER)'), (TYPE_100ME_LFX, '100BASE-LFX (10/100ME FIBER)'), @@ -961,7 +963,7 @@ class InterfaceTypeChoices(ChoiceSet): ) ), ( - 'Ethernet (modular)', + _('Ethernet (modular)'), ( (TYPE_1GE_GBIC, 'GBIC (1GE)'), (TYPE_1GE_SFP, 'SFP (1GE)'), @@ -994,7 +996,7 @@ class InterfaceTypeChoices(ChoiceSet): ) ), ( - 'Ethernet (backplane)', + _('Ethernet (backplane)'), ( (TYPE_1GE_KX, '1000BASE-KX (1GE)'), (TYPE_10GE_KR, '10GBASE-KR (10GE)'), @@ -1008,7 +1010,7 @@ class InterfaceTypeChoices(ChoiceSet): ) ), ( - 'Wireless', + _('Wireless'), ( (TYPE_80211A, 'IEEE 802.11a'), (TYPE_80211G, 'IEEE 802.11b/g'), @@ -1022,7 +1024,7 @@ class InterfaceTypeChoices(ChoiceSet): ) ), ( - 'Cellular', + _('Cellular'), ( (TYPE_GSM, 'GSM'), (TYPE_CDMA, 'CDMA'), @@ -1069,7 +1071,7 @@ class InterfaceTypeChoices(ChoiceSet): ) ), ( - 'Serial', + _('Serial'), ( (TYPE_T1, 'T1 (1.544 Mbps)'), (TYPE_E1, 'E1 (2.048 Mbps)'), @@ -1084,7 +1086,7 @@ class InterfaceTypeChoices(ChoiceSet): ) ), ( - 'Coaxial', + _('Coaxial'), ( (TYPE_DOCSIS, 'DOCSIS'), ) @@ -1101,7 +1103,7 @@ class InterfaceTypeChoices(ChoiceSet): ) ), ( - 'Stacking', + _('Stacking'), ( (TYPE_STACKWISE, 'Cisco StackWise'), (TYPE_STACKWISE_PLUS, 'Cisco StackWise Plus'), @@ -1120,9 +1122,9 @@ class InterfaceTypeChoices(ChoiceSet): ) ), ( - 'Other', + _('Other'), ( - (TYPE_OTHER, 'Other'), + (TYPE_OTHER, _('Other')), ) ), ) @@ -1149,9 +1151,9 @@ class InterfaceDuplexChoices(ChoiceSet): DUPLEX_AUTO = 'auto' CHOICES = ( - (DUPLEX_HALF, 'Half'), - (DUPLEX_FULL, 'Full'), - (DUPLEX_AUTO, 'Auto'), + (DUPLEX_HALF, _('Half')), + (DUPLEX_FULL, _('Full')), + (DUPLEX_AUTO, _('Auto')), ) @@ -1162,9 +1164,9 @@ class InterfaceModeChoices(ChoiceSet): MODE_TAGGED_ALL = 'tagged-all' CHOICES = ( - (MODE_ACCESS, 'Access'), - (MODE_TAGGED, 'Tagged'), - (MODE_TAGGED_ALL, 'Tagged (All)'), + (MODE_ACCESS, _('Access')), + (MODE_TAGGED, _('Tagged')), + (MODE_TAGGED_ALL, _('Tagged (All)')), ) @@ -1193,7 +1195,7 @@ class InterfacePoETypeChoices(ChoiceSet): CHOICES = ( ( - 'IEEE Standard', + _('IEEE Standard'), ( (TYPE_1_8023AF, '802.3af (Type 1)'), (TYPE_2_8023AT, '802.3at (Type 2)'), @@ -1202,12 +1204,12 @@ class InterfacePoETypeChoices(ChoiceSet): ) ), ( - 'Passive', + _('Passive'), ( - (PASSIVE_24V_2PAIR, 'Passive 24V (2-pair)'), - (PASSIVE_24V_4PAIR, 'Passive 24V (4-pair)'), - (PASSIVE_48V_2PAIR, 'Passive 48V (2-pair)'), - (PASSIVE_48V_4PAIR, 'Passive 48V (4-pair)'), + (PASSIVE_24V_2PAIR, _('Passive 24V (2-pair)')), + (PASSIVE_24V_4PAIR, _('Passive 24V (4-pair)')), + (PASSIVE_48V_2PAIR, _('Passive 48V (2-pair)')), + (PASSIVE_48V_4PAIR, _('Passive 48V (4-pair)')), ) ), ) @@ -1269,7 +1271,7 @@ class PortTypeChoices(ChoiceSet): CHOICES = ( ( - 'Copper', + _('Copper'), ( (TYPE_8P8C, '8P8C'), (TYPE_8P6C, '8P6C'), @@ -1292,7 +1294,7 @@ class PortTypeChoices(ChoiceSet): ), ), ( - 'Fiber Optic', + _('Fiber Optic'), ( (TYPE_FC, 'FC'), (TYPE_LC, 'LC'), @@ -1325,9 +1327,9 @@ class PortTypeChoices(ChoiceSet): ), ), ( - 'Other', + _('Other'), ( - (TYPE_OTHER, 'Other'), + (TYPE_OTHER, _('Other')), ) ) ) @@ -1365,7 +1367,7 @@ class CableTypeChoices(ChoiceSet): CHOICES = ( ( - 'Copper', ( + _('Copper'), ( (TYPE_CAT3, 'CAT3'), (TYPE_CAT5, 'CAT5'), (TYPE_CAT5E, 'CAT5e'), @@ -1381,7 +1383,7 @@ class CableTypeChoices(ChoiceSet): ), ), ( - 'Fiber', ( + _('Fiber'), ( (TYPE_MMF, 'Multimode Fiber'), (TYPE_MMF_OM1, 'Multimode Fiber (OM1)'), (TYPE_MMF_OM2, 'Multimode Fiber (OM2)'), @@ -1394,7 +1396,7 @@ class CableTypeChoices(ChoiceSet): (TYPE_AOC, 'Active Optical Cabling (AOC)'), ), ), - (TYPE_POWER, 'Power'), + (TYPE_POWER, _('Power')), ) @@ -1405,9 +1407,9 @@ class LinkStatusChoices(ChoiceSet): STATUS_DECOMMISSIONING = 'decommissioning' CHOICES = ( - (STATUS_CONNECTED, 'Connected', 'green'), - (STATUS_PLANNED, 'Planned', 'blue'), - (STATUS_DECOMMISSIONING, 'Decommissioning', 'yellow'), + (STATUS_CONNECTED, _('Connected'), 'green'), + (STATUS_PLANNED, _('Planned'), 'blue'), + (STATUS_DECOMMISSIONING, _('Decommissioning'), 'yellow'), ) @@ -1424,12 +1426,12 @@ class CableLengthUnitChoices(ChoiceSet): UNIT_INCH = 'in' CHOICES = ( - (UNIT_KILOMETER, 'Kilometers'), - (UNIT_METER, 'Meters'), - (UNIT_CENTIMETER, 'Centimeters'), - (UNIT_MILE, 'Miles'), - (UNIT_FOOT, 'Feet'), - (UNIT_INCH, 'Inches'), + (UNIT_KILOMETER, _('Kilometers')), + (UNIT_METER, _('Meters')), + (UNIT_CENTIMETER, _('Centimeters')), + (UNIT_MILE, _('Miles')), + (UNIT_FOOT, _('Feet')), + (UNIT_INCH, _('Inches')), ) @@ -1444,10 +1446,10 @@ class WeightUnitChoices(ChoiceSet): UNIT_OUNCE = 'oz' CHOICES = ( - (UNIT_KILOGRAM, 'Kilograms'), - (UNIT_GRAM, 'Grams'), - (UNIT_POUND, 'Pounds'), - (UNIT_OUNCE, 'Ounces'), + (UNIT_KILOGRAM, _('Kilograms')), + (UNIT_GRAM, _('Grams')), + (UNIT_POUND, _('Pounds')), + (UNIT_OUNCE, _('Ounces')), ) @@ -1480,10 +1482,10 @@ class PowerFeedStatusChoices(ChoiceSet): STATUS_FAILED = 'failed' CHOICES = [ - (STATUS_OFFLINE, 'Offline', 'gray'), - (STATUS_ACTIVE, 'Active', 'green'), - (STATUS_PLANNED, 'Planned', 'blue'), - (STATUS_FAILED, 'Failed', 'red'), + (STATUS_OFFLINE, _('Offline'), 'gray'), + (STATUS_ACTIVE, _('Active'), 'green'), + (STATUS_PLANNED, _('Planned'), 'blue'), + (STATUS_FAILED, _('Failed'), 'red'), ] @@ -1493,8 +1495,8 @@ class PowerFeedTypeChoices(ChoiceSet): TYPE_REDUNDANT = 'redundant' CHOICES = ( - (TYPE_PRIMARY, 'Primary', 'green'), - (TYPE_REDUNDANT, 'Redundant', 'cyan'), + (TYPE_PRIMARY, _('Primary'), 'green'), + (TYPE_REDUNDANT, _('Redundant'), 'cyan'), ) @@ -1515,8 +1517,8 @@ class PowerFeedPhaseChoices(ChoiceSet): PHASE_3PHASE = 'three-phase' CHOICES = ( - (PHASE_SINGLE, 'Single phase'), - (PHASE_3PHASE, 'Three-phase'), + (PHASE_SINGLE, _('Single phase')), + (PHASE_3PHASE, _('Three-phase')), ) @@ -1531,7 +1533,7 @@ class VirtualDeviceContextStatusChoices(ChoiceSet): STATUS_OFFLINE = 'offline' CHOICES = [ - (STATUS_ACTIVE, 'Active', 'green'), - (STATUS_PLANNED, 'Planned', 'cyan'), - (STATUS_OFFLINE, 'Offline', 'red'), + (STATUS_ACTIVE, _('Active'), 'green'), + (STATUS_PLANNED, _('Planned'), 'cyan'), + (STATUS_OFFLINE, _('Offline'), 'red'), ] diff --git a/netbox/extras/choices.py b/netbox/extras/choices.py index 2b444bbdf..1061bf871 100644 --- a/netbox/extras/choices.py +++ b/netbox/extras/choices.py @@ -1,3 +1,5 @@ +from django.utils.translation import gettext_lazy as _ + from utilities.choices import ButtonColorChoices, ChoiceSet @@ -22,19 +24,19 @@ class CustomFieldTypeChoices(ChoiceSet): TYPE_MULTIOBJECT = 'multiobject' CHOICES = ( - (TYPE_TEXT, 'Text'), - (TYPE_LONGTEXT, 'Text (long)'), - (TYPE_INTEGER, 'Integer'), - (TYPE_DECIMAL, 'Decimal'), - (TYPE_BOOLEAN, 'Boolean (true/false)'), - (TYPE_DATE, 'Date'), - (TYPE_DATETIME, 'Date & time'), - (TYPE_URL, 'URL'), - (TYPE_JSON, 'JSON'), - (TYPE_SELECT, 'Selection'), - (TYPE_MULTISELECT, 'Multiple selection'), - (TYPE_OBJECT, 'Object'), - (TYPE_MULTIOBJECT, 'Multiple objects'), + (TYPE_TEXT, _('Text')), + (TYPE_LONGTEXT, _('Text (long)')), + (TYPE_INTEGER, _('Integer')), + (TYPE_DECIMAL, _('Decimal')), + (TYPE_BOOLEAN, _('Boolean (true/false)')), + (TYPE_DATE, _('Date')), + (TYPE_DATETIME, _('Date & time')), + (TYPE_URL, _('URL')), + (TYPE_JSON, _('JSON')), + (TYPE_SELECT, _('Selection')), + (TYPE_MULTISELECT, _('Multiple selection')), + (TYPE_OBJECT, _('Object')), + (TYPE_MULTIOBJECT, _('Multiple objects')), ) @@ -45,9 +47,9 @@ class CustomFieldFilterLogicChoices(ChoiceSet): FILTER_EXACT = 'exact' CHOICES = ( - (FILTER_DISABLED, 'Disabled'), - (FILTER_LOOSE, 'Loose'), - (FILTER_EXACT, 'Exact'), + (FILTER_DISABLED, _('Disabled')), + (FILTER_LOOSE, _('Loose')), + (FILTER_EXACT, _('Exact')), ) @@ -59,10 +61,10 @@ class CustomFieldVisibilityChoices(ChoiceSet): VISIBILITY_HIDDEN_IFUNSET = 'hidden-ifunset' CHOICES = ( - (VISIBILITY_READ_WRITE, 'Read/Write'), - (VISIBILITY_READ_ONLY, 'Read-only'), - (VISIBILITY_HIDDEN, 'Hidden'), - (VISIBILITY_HIDDEN_IFUNSET, 'Hidden (if unset)'), + (VISIBILITY_READ_WRITE, _('Read/write')), + (VISIBILITY_READ_ONLY, _('Read-only')), + (VISIBILITY_HIDDEN, _('Hidden')), + (VISIBILITY_HIDDEN_IFUNSET, _('Hidden (if unset)')), ) @@ -89,7 +91,7 @@ class CustomLinkButtonClassChoices(ButtonColorChoices): CHOICES = ( *ButtonColorChoices.CHOICES, - (LINK, 'Link'), + (LINK, _('Link')), ) @@ -103,8 +105,8 @@ class BookmarkOrderingChoices(ChoiceSet): ORDERING_OLDEST = 'created' CHOICES = ( - (ORDERING_NEWEST, 'Newest'), - (ORDERING_OLDEST, 'Oldest'), + (ORDERING_NEWEST, _('Newest')), + (ORDERING_OLDEST, _('Oldest')), ) # @@ -119,9 +121,9 @@ class ObjectChangeActionChoices(ChoiceSet): ACTION_DELETE = 'delete' CHOICES = ( - (ACTION_CREATE, 'Created', 'green'), - (ACTION_UPDATE, 'Updated', 'blue'), - (ACTION_DELETE, 'Deleted', 'red'), + (ACTION_CREATE, _('Created'), 'green'), + (ACTION_UPDATE, _('Updated'), 'blue'), + (ACTION_DELETE, _('Deleted'), 'red'), ) @@ -138,10 +140,10 @@ class JournalEntryKindChoices(ChoiceSet): KIND_DANGER = 'danger' CHOICES = [ - (KIND_INFO, 'Info', 'cyan'), - (KIND_SUCCESS, 'Success', 'green'), - (KIND_WARNING, 'Warning', 'yellow'), - (KIND_DANGER, 'Danger', 'red'), + (KIND_INFO, _('Info'), 'cyan'), + (KIND_SUCCESS, _('Success'), 'green'), + (KIND_WARNING, _('Warning'), 'yellow'), + (KIND_DANGER, _('Danger'), 'red'), ] @@ -158,22 +160,22 @@ class LogLevelChoices(ChoiceSet): LOG_FAILURE = 'failure' CHOICES = ( - (LOG_DEFAULT, 'Default', 'gray'), - (LOG_SUCCESS, 'Success', 'green'), - (LOG_INFO, 'Info', 'cyan'), - (LOG_WARNING, 'Warning', 'yellow'), - (LOG_FAILURE, 'Failure', 'red'), + (LOG_DEFAULT, _('Default'), 'gray'), + (LOG_SUCCESS, _('Success'), 'green'), + (LOG_INFO, _('Info'), 'cyan'), + (LOG_WARNING, _('Warning'), 'yellow'), + (LOG_FAILURE, _('Failure'), 'red'), ) class DurationChoices(ChoiceSet): CHOICES = ( - (60, 'Hourly'), - (720, '12 hours'), - (1440, 'Daily'), - (10080, 'Weekly'), - (43200, '30 days'), + (60, _('Hourly')), + (720, _('12 hours')), + (1440, _('Daily')), + (10080, _('Weekly')), + (43200, _('30 days')), ) @@ -191,12 +193,12 @@ class JobResultStatusChoices(ChoiceSet): STATUS_FAILED = 'failed' CHOICES = ( - (STATUS_PENDING, 'Pending', 'cyan'), - (STATUS_SCHEDULED, 'Scheduled', 'gray'), - (STATUS_RUNNING, 'Running', 'blue'), - (STATUS_COMPLETED, 'Completed', 'green'), - (STATUS_ERRORED, 'Errored', 'red'), - (STATUS_FAILED, 'Failed', 'red'), + (STATUS_PENDING, _('Pending'), 'cyan'), + (STATUS_SCHEDULED, _('Scheduled'), 'gray'), + (STATUS_RUNNING, _('Running'), 'blue'), + (STATUS_COMPLETED, _('Completed'), 'green'), + (STATUS_ERRORED, _('Errored'), 'red'), + (STATUS_FAILED, _('Failed'), 'red'), ) TERMINAL_STATE_CHOICES = ( @@ -238,7 +240,7 @@ class ChangeActionChoices(ChoiceSet): ACTION_DELETE = 'delete' CHOICES = ( - (ACTION_CREATE, 'Create', 'green'), - (ACTION_UPDATE, 'Update', 'blue'), - (ACTION_DELETE, 'Delete', 'red'), + (ACTION_CREATE, _('Create'), 'green'), + (ACTION_UPDATE, _('Update'), 'blue'), + (ACTION_DELETE, _('Delete'), 'red'), ) diff --git a/netbox/ipam/choices.py b/netbox/ipam/choices.py index 298baa643..436cbd040 100644 --- a/netbox/ipam/choices.py +++ b/netbox/ipam/choices.py @@ -1,3 +1,5 @@ +from django.utils.translation import gettext_lazy as _ + from utilities.choices import ChoiceSet @@ -25,10 +27,10 @@ class PrefixStatusChoices(ChoiceSet): STATUS_DEPRECATED = 'deprecated' CHOICES = [ - (STATUS_CONTAINER, 'Container', 'gray'), - (STATUS_ACTIVE, 'Active', 'blue'), - (STATUS_RESERVED, 'Reserved', 'cyan'), - (STATUS_DEPRECATED, 'Deprecated', 'red'), + (STATUS_CONTAINER, _('Container'), 'gray'), + (STATUS_ACTIVE, _('Active'), 'blue'), + (STATUS_RESERVED, _('Reserved'), 'cyan'), + (STATUS_DEPRECATED, _('Deprecated'), 'red'), ] @@ -44,9 +46,9 @@ class IPRangeStatusChoices(ChoiceSet): STATUS_DEPRECATED = 'deprecated' CHOICES = [ - (STATUS_ACTIVE, 'Active', 'blue'), - (STATUS_RESERVED, 'Reserved', 'cyan'), - (STATUS_DEPRECATED, 'Deprecated', 'red'), + (STATUS_ACTIVE, _('Active'), 'blue'), + (STATUS_RESERVED, _('Reserved'), 'cyan'), + (STATUS_DEPRECATED, _('Deprecated'), 'red'), ] @@ -64,11 +66,11 @@ class IPAddressStatusChoices(ChoiceSet): STATUS_SLAAC = 'slaac' CHOICES = [ - (STATUS_ACTIVE, 'Active', 'blue'), - (STATUS_RESERVED, 'Reserved', 'cyan'), - (STATUS_DEPRECATED, 'Deprecated', 'red'), - (STATUS_DHCP, 'DHCP', 'green'), - (STATUS_SLAAC, 'SLAAC', 'purple'), + (STATUS_ACTIVE, _('Active'), 'blue'), + (STATUS_RESERVED, _('Reserved'), 'cyan'), + (STATUS_DEPRECATED, _('Deprecated'), 'red'), + (STATUS_DHCP, _('DHCP'), 'green'), + (STATUS_SLAAC, _('SLAAC'), 'purple'), ] @@ -84,9 +86,9 @@ class IPAddressRoleChoices(ChoiceSet): ROLE_CARP = 'carp' CHOICES = ( - (ROLE_LOOPBACK, 'Loopback', 'gray'), - (ROLE_SECONDARY, 'Secondary', 'blue'), - (ROLE_ANYCAST, 'Anycast', 'yellow'), + (ROLE_LOOPBACK, _('Loopback'), 'gray'), + (ROLE_SECONDARY, _('Secondary'), 'blue'), + (ROLE_ANYCAST, _('Anycast'), 'yellow'), (ROLE_VIP, 'VIP', 'purple'), (ROLE_VRRP, 'VRRP', 'green'), (ROLE_HSRP, 'HSRP', 'green'), @@ -110,15 +112,15 @@ class FHRPGroupProtocolChoices(ChoiceSet): PROTOCOL_OTHER = 'other' CHOICES = ( - ('Standard', ( + (_('Standard'), ( (PROTOCOL_VRRP2, 'VRRPv2'), (PROTOCOL_VRRP3, 'VRRPv3'), (PROTOCOL_CARP, 'CARP'), )), - ('CheckPoint', ( + (_('CheckPoint'), ( (PROTOCOL_CLUSTERXL, 'ClusterXL'), )), - ('Cisco', ( + (_('Cisco'), ( (PROTOCOL_HSRP, 'HSRP'), (PROTOCOL_GLBP, 'GLBP'), )), @@ -132,7 +134,7 @@ class FHRPGroupAuthTypeChoices(ChoiceSet): AUTHENTICATION_MD5 = 'md5' CHOICES = ( - (AUTHENTICATION_PLAINTEXT, 'Plaintext'), + (AUTHENTICATION_PLAINTEXT, _('Plaintext')), (AUTHENTICATION_MD5, 'MD5'), ) @@ -149,9 +151,9 @@ class VLANStatusChoices(ChoiceSet): STATUS_DEPRECATED = 'deprecated' CHOICES = [ - (STATUS_ACTIVE, 'Active', 'blue'), - (STATUS_RESERVED, 'Reserved', 'cyan'), - (STATUS_DEPRECATED, 'Deprecated', 'red'), + (STATUS_ACTIVE, _('Active'), 'blue'), + (STATUS_RESERVED, _('Reserved'), 'cyan'), + (STATUS_DEPRECATED, _('Deprecated'), 'red'), ] diff --git a/netbox/tenancy/choices.py b/netbox/tenancy/choices.py index b59d2050d..177a6f2b5 100644 --- a/netbox/tenancy/choices.py +++ b/netbox/tenancy/choices.py @@ -1,3 +1,5 @@ +from django.utils.translation import gettext_lazy as _ + from utilities.choices import ChoiceSet @@ -12,8 +14,8 @@ class ContactPriorityChoices(ChoiceSet): PRIORITY_INACTIVE = 'inactive' CHOICES = ( - (PRIORITY_PRIMARY, 'Primary'), - (PRIORITY_SECONDARY, 'Secondary'), - (PRIORITY_TERTIARY, 'Tertiary'), - (PRIORITY_INACTIVE, 'Inactive'), + (PRIORITY_PRIMARY, _('Primary')), + (PRIORITY_SECONDARY, _('Secondary')), + (PRIORITY_TERTIARY, _('Tertiary')), + (PRIORITY_INACTIVE, _('Inactive')), ) diff --git a/netbox/utilities/choices.py b/netbox/utilities/choices.py index 5ad05b989..b6f97e309 100644 --- a/netbox/utilities/choices.py +++ b/netbox/utilities/choices.py @@ -1,4 +1,5 @@ from django.conf import settings +from django.utils.translation import gettext_lazy as _ class ChoiceSetMeta(type): @@ -9,7 +10,9 @@ class ChoiceSetMeta(type): # Extend static choices with any configured choices if key := attrs.get('key'): - assert type(attrs['CHOICES']) is list, f"{name} has a key defined but CHOICES is not a list" + assert type(attrs['CHOICES']) is list, _( + "{name} has a key defined but CHOICES is not a list" + ).format(name=name) app = attrs['__module__'].split('.', 1)[0] replace_key = f'{app}.{key}' extend_key = f'{replace_key}+' if replace_key else None @@ -127,33 +130,33 @@ class ColorChoices(ChoiceSet): COLOR_WHITE = 'ffffff' CHOICES = ( - (COLOR_DARK_RED, 'Dark Red'), - (COLOR_RED, 'Red'), - (COLOR_PINK, 'Pink'), - (COLOR_ROSE, 'Rose'), - (COLOR_FUCHSIA, 'Fuchsia'), - (COLOR_PURPLE, 'Purple'), - (COLOR_DARK_PURPLE, 'Dark Purple'), - (COLOR_INDIGO, 'Indigo'), - (COLOR_BLUE, 'Blue'), - (COLOR_LIGHT_BLUE, 'Light Blue'), - (COLOR_CYAN, 'Cyan'), - (COLOR_TEAL, 'Teal'), - (COLOR_AQUA, 'Aqua'), - (COLOR_DARK_GREEN, 'Dark Green'), - (COLOR_GREEN, 'Green'), - (COLOR_LIGHT_GREEN, 'Light Green'), - (COLOR_LIME, 'Lime'), - (COLOR_YELLOW, 'Yellow'), - (COLOR_AMBER, 'Amber'), - (COLOR_ORANGE, 'Orange'), - (COLOR_DARK_ORANGE, 'Dark Orange'), - (COLOR_BROWN, 'Brown'), - (COLOR_LIGHT_GREY, 'Light Grey'), - (COLOR_GREY, 'Grey'), - (COLOR_DARK_GREY, 'Dark Grey'), - (COLOR_BLACK, 'Black'), - (COLOR_WHITE, 'White'), + (COLOR_DARK_RED, _('Dark Red')), + (COLOR_RED, _('Red')), + (COLOR_PINK, _('Pink')), + (COLOR_ROSE, _('Rose')), + (COLOR_FUCHSIA, _('Fuchsia')), + (COLOR_PURPLE, _('Purple')), + (COLOR_DARK_PURPLE, _('Dark Purple')), + (COLOR_INDIGO, _('Indigo')), + (COLOR_BLUE, _('Blue')), + (COLOR_LIGHT_BLUE, _('Light Blue')), + (COLOR_CYAN, _('Cyan')), + (COLOR_TEAL, _('Teal')), + (COLOR_AQUA, _('Aqua')), + (COLOR_DARK_GREEN, _('Dark Green')), + (COLOR_GREEN, _('Green')), + (COLOR_LIGHT_GREEN, _('Light Green')), + (COLOR_LIME, _('Lime')), + (COLOR_YELLOW, _('Yellow')), + (COLOR_AMBER, _('Amber')), + (COLOR_ORANGE, _('Orange')), + (COLOR_DARK_ORANGE, _('Dark Orange')), + (COLOR_BROWN, _('Brown')), + (COLOR_LIGHT_GREY, _('Light Grey')), + (COLOR_GREY, _('Grey')), + (COLOR_DARK_GREY, _('Dark Grey')), + (COLOR_BLACK, _('Black')), + (COLOR_WHITE, _('White')), ) @@ -182,20 +185,20 @@ class ButtonColorChoices(ChoiceSet): WHITE = 'white' CHOICES = ( - (DEFAULT, 'Default'), - (BLUE, 'Blue'), - (INDIGO, 'Indigo'), - (PURPLE, 'Purple'), - (PINK, 'Pink'), - (RED, 'Red'), - (ORANGE, 'Orange'), - (YELLOW, 'Yellow'), - (GREEN, 'Green'), - (TEAL, 'Teal'), - (CYAN, 'Cyan'), - (GRAY, 'Gray'), - (BLACK, 'Black'), - (WHITE, 'White'), + (DEFAULT, _('Default')), + (BLUE, _('Blue')), + (INDIGO, _('Indigo')), + (PURPLE, _('Purple')), + (PINK, _('Pink')), + (RED, _('Red')), + (ORANGE, _('Orange')), + (YELLOW, _('Yellow')), + (GREEN, _('Green')), + (TEAL, _('Teal')), + (CYAN, _('Cyan')), + (GRAY, _('Gray')), + (BLACK, _('Black')), + (WHITE, _('White')), ) @@ -209,9 +212,9 @@ class ImportMethodChoices(ChoiceSet): DATA_FILE = 'datafile' CHOICES = [ - (DIRECT, 'Direct'), - (UPLOAD, 'Upload'), - (DATA_FILE, 'Data file'), + (DIRECT, _('Direct')), + (UPLOAD, _('Upload')), + (DATA_FILE, _('Data file')), ] @@ -222,7 +225,7 @@ class ImportFormatChoices(ChoiceSet): YAML = 'yaml' CHOICES = [ - (AUTO, 'Auto-detect'), + (AUTO, _('Auto-detect')), (CSV, 'CSV'), (JSON, 'JSON'), (YAML, 'YAML'), diff --git a/netbox/virtualization/choices.py b/netbox/virtualization/choices.py index 2cf6357e1..f8ec42171 100644 --- a/netbox/virtualization/choices.py +++ b/netbox/virtualization/choices.py @@ -1,3 +1,5 @@ +from django.utils.translation import gettext_lazy as _ + from utilities.choices import ChoiceSet @@ -15,11 +17,11 @@ class ClusterStatusChoices(ChoiceSet): STATUS_OFFLINE = 'offline' CHOICES = [ - (STATUS_PLANNED, 'Planned', 'cyan'), - (STATUS_STAGING, 'Staging', 'blue'), - (STATUS_ACTIVE, 'Active', 'green'), - (STATUS_DECOMMISSIONING, 'Decommissioning', 'yellow'), - (STATUS_OFFLINE, 'Offline', 'red'), + (STATUS_PLANNED, _('Planned'), 'cyan'), + (STATUS_STAGING, _('Staging'), 'blue'), + (STATUS_ACTIVE, _('Active'), 'green'), + (STATUS_DECOMMISSIONING, _('Decommissioning'), 'yellow'), + (STATUS_OFFLINE, _('Offline'), 'red'), ] @@ -38,10 +40,10 @@ class VirtualMachineStatusChoices(ChoiceSet): STATUS_DECOMMISSIONING = 'decommissioning' CHOICES = [ - (STATUS_OFFLINE, 'Offline', 'gray'), - (STATUS_ACTIVE, 'Active', 'green'), - (STATUS_PLANNED, 'Planned', 'cyan'), - (STATUS_STAGED, 'Staged', 'blue'), - (STATUS_FAILED, 'Failed', 'red'), - (STATUS_DECOMMISSIONING, 'Decommissioning', 'yellow'), + (STATUS_OFFLINE, _('Offline'), 'gray'), + (STATUS_ACTIVE, _('Active'), 'green'), + (STATUS_PLANNED, _('Planned'), 'cyan'), + (STATUS_STAGED, _('Staged'), 'blue'), + (STATUS_FAILED, _('Failed'), 'red'), + (STATUS_DECOMMISSIONING, _('Decommissioning'), 'yellow'), ] diff --git a/netbox/wireless/choices.py b/netbox/wireless/choices.py index c060a72c7..710cd3a8d 100644 --- a/netbox/wireless/choices.py +++ b/netbox/wireless/choices.py @@ -1,4 +1,4 @@ -from django.utils.translation import gettext as _ +from django.utils.translation import gettext_lazy as _ from utilities.choices import ChoiceSet @@ -8,8 +8,8 @@ class WirelessRoleChoices(ChoiceSet): ROLE_STATION = 'station' CHOICES = ( - (ROLE_AP, 'Access point'), - (ROLE_STATION, 'Station'), + (ROLE_AP, _('Access point')), + (ROLE_STATION, _('Station')), ) @@ -464,10 +464,10 @@ class WirelessAuthTypeChoices(ChoiceSet): TYPE_WPA_ENTERPRISE = 'wpa-enterprise' CHOICES = ( - (TYPE_OPEN, 'Open'), + (TYPE_OPEN, _('Open')), (TYPE_WEP, 'WEP'), - (TYPE_WPA_PERSONAL, 'WPA Personal (PSK)'), - (TYPE_WPA_ENTERPRISE, 'WPA Enterprise'), + (TYPE_WPA_PERSONAL, _('WPA Personal (PSK)')), + (TYPE_WPA_ENTERPRISE, _('WPA Enterprise')), ) @@ -477,7 +477,7 @@ class WirelessAuthCipherChoices(ChoiceSet): CIPHER_AES = 'aes' CHOICES = ( - (CIPHER_AUTO, 'Auto'), + (CIPHER_AUTO, _('Auto')), (CIPHER_TKIP, 'TKIP'), (CIPHER_AES, 'AES'), )