From 20acf8779e715e7a9e31df2e543fad7093c6612b Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Wed, 22 May 2024 14:57:39 -0400 Subject: [PATCH 01/38] PRVB --- docs/release-notes/version-4.0.md | 4 ++++ netbox/netbox/settings.py | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/release-notes/version-4.0.md b/docs/release-notes/version-4.0.md index c644f7cc4..14fdbd1d0 100644 --- a/docs/release-notes/version-4.0.md +++ b/docs/release-notes/version-4.0.md @@ -1,5 +1,9 @@ # NetBox v4.0 +## v4.0.4 (FUTURE) + +--- + ## v4.0.3 (2024-05-22) ### Enhancements diff --git a/netbox/netbox/settings.py b/netbox/netbox/settings.py index 88057bb05..b764fd930 100644 --- a/netbox/netbox/settings.py +++ b/netbox/netbox/settings.py @@ -25,7 +25,7 @@ from utilities.string import trailing_slash # Environment setup # -VERSION = '4.0.3' +VERSION = '4.0.4-dev' HOSTNAME = platform.node() # Set the base directory two levels up BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) From 8fbdc1288ebec456cc0684a942da102538528c6b Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Wed, 22 May 2024 15:39:24 -0400 Subject: [PATCH 02/38] Update exempt issue labels for stale action --- .github/workflows/close-stale-issues.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/close-stale-issues.yml b/.github/workflows/close-stale-issues.yml index 1ac1ea687..b02ffdacd 100644 --- a/.github/workflows/close-stale-issues.yml +++ b/.github/workflows/close-stale-issues.yml @@ -29,7 +29,7 @@ jobs: necessary. days-before-issue-stale: 90 days-before-issue-close: 30 - exempt-issue-labels: 'status: accepted,status: blocked,status: needs milestone' + exempt-issue-labels: 'status: accepted,status: backlog,status: blocked' stale-issue-label: 'pending closure' stale-issue-message: > This issue has been automatically marked as stale because it has not had From 83cf93f681d8c9ec9ea53a75f5219b59388b4b93 Mon Sep 17 00:00:00 2001 From: Julio-Oliveira-Encora Date: Tue, 28 May 2024 09:45:06 -0300 Subject: [PATCH 03/38] Added 1000-Base-TX to the choices.py --- netbox/dcim/choices.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/netbox/dcim/choices.py b/netbox/dcim/choices.py index e8a7194fc..fe8d8a158 100644 --- a/netbox/dcim/choices.py +++ b/netbox/dcim/choices.py @@ -828,6 +828,7 @@ class InterfaceTypeChoices(ChoiceSet): TYPE_100ME_FIXED = '100base-tx' TYPE_100ME_T1 = '100base-t1' TYPE_1GE_FIXED = '1000base-t' + TYPE_1GE_TX_FIXED = '1000base-tx' TYPE_1GE_GBIC = '1000base-x-gbic' TYPE_1GE_SFP = '1000base-x-sfp' TYPE_2GE_FIXED = '2.5gbase-t' @@ -987,6 +988,7 @@ class InterfaceTypeChoices(ChoiceSet): (TYPE_100ME_FIXED, '100BASE-TX (10/100ME)'), (TYPE_100ME_T1, '100BASE-T1 (10/100ME Single Pair)'), (TYPE_1GE_FIXED, '1000BASE-T (1GE)'), + (TYPE_1GE_TX_FIXED, '1000BASE-TX (1GE)'), (TYPE_2GE_FIXED, '2.5GBASE-T (2.5GE)'), (TYPE_5GE_FIXED, '5GBASE-T (5GE)'), (TYPE_10GE_FIXED, '10GBASE-T (10GE)'), From a94cdba6112caa085468437c66c99b6e2478d685 Mon Sep 17 00:00:00 2001 From: Arthur Date: Fri, 24 May 2024 08:05:32 -0700 Subject: [PATCH 04/38] 16286 fix provider account search --- netbox/circuits/search.py | 1 + 1 file changed, 1 insertion(+) diff --git a/netbox/circuits/search.py b/netbox/circuits/search.py index c22b400eb..f3fa359ba 100644 --- a/netbox/circuits/search.py +++ b/netbox/circuits/search.py @@ -48,6 +48,7 @@ class ProviderIndex(SearchIndex): display_attrs = ('description',) +@register_search class ProviderAccountIndex(SearchIndex): model = models.ProviderAccount fields = ( From b24ec91440adb99bdd2907e781881ce07c46dd4c Mon Sep 17 00:00:00 2001 From: Arthur Date: Fri, 24 May 2024 08:01:22 -0700 Subject: [PATCH 05/38] 16284 fix plugin forms doc --- docs/plugins/development/forms.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/plugins/development/forms.md b/docs/plugins/development/forms.md index 332544df7..209506172 100644 --- a/docs/plugins/development/forms.md +++ b/docs/plugins/development/forms.md @@ -89,13 +89,13 @@ This form facilitates editing multiple objects in bulk. Unlike a model form, thi from django import forms from django.utils.translation import gettext_lazy as _ from dcim.models import Site -from netbox.forms import NetBoxModelImportForm +from netbox.forms import NetBoxModelBulkEditForm from utilities.forms import CommentField, DynamicModelChoiceField from utilities.forms.rendering import FieldSet from .models import MyModel, MyModelStatusChoices -class MyModelEditForm(NetBoxModelImportForm): +class MyModelBulkEditForm(NetBoxModelBulkEditForm): name = forms.CharField( required=False ) From 4de712b0fc26b3fe186627671e32814e93a43d1b Mon Sep 17 00:00:00 2001 From: Arthur Date: Tue, 21 May 2024 14:05:56 -0700 Subject: [PATCH 06/38] 14810 add contacts to service --- netbox/ipam/models/services.py | 3 ++- netbox/ipam/views.py | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/netbox/ipam/models/services.py b/netbox/ipam/models/services.py index 37b559801..71f34c66c 100644 --- a/netbox/ipam/models/services.py +++ b/netbox/ipam/models/services.py @@ -8,6 +8,7 @@ from django.utils.translation import gettext_lazy as _ from ipam.choices import * from ipam.constants import * from netbox.models import PrimaryModel +from netbox.models.features import ContactsMixin from utilities.data import array_to_string __all__ = ( @@ -62,7 +63,7 @@ class ServiceTemplate(ServiceBase, PrimaryModel): return reverse('ipam:servicetemplate', args=[self.pk]) -class Service(ServiceBase, PrimaryModel): +class Service(ContactsMixin, ServiceBase, PrimaryModel): """ A Service represents a layer-four service (e.g. HTTP or SSH) running on a Device or VirtualMachine. A Service may optionally be tied to one or more specific IPAddresses belonging to its parent. diff --git a/netbox/ipam/views.py b/netbox/ipam/views.py index cab9058d8..f94c3c6d7 100644 --- a/netbox/ipam/views.py +++ b/netbox/ipam/views.py @@ -1280,3 +1280,8 @@ class ServiceBulkDeleteView(generic.BulkDeleteView): queryset = Service.objects.prefetch_related('device', 'virtual_machine') filterset = filtersets.ServiceFilterSet table = tables.ServiceTable + + +@register_model_view(Service, 'contacts') +class ServiceContactsView(ObjectContactsView): + queryset = Service.objects.all() From 46fa04b87e35ff84d822886b47ce7c0f61bfcee9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markku=20Leini=C3=B6?= Date: Tue, 28 May 2024 18:32:48 +0300 Subject: [PATCH 07/38] Closes #16297: Add uwsgi.ini in .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index ac5f420b4..88faab27c 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,7 @@ local_settings.py !upgrade.sh fabfile.py gunicorn.py +uwsgi.ini netbox.log netbox.pid .DS_Store From 0572a9c8e6a99fe23ad1605c099a0f9c0c0eeebe Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Wed, 29 May 2024 09:14:02 -0400 Subject: [PATCH 08/38] Update translations workflow documentation --- docs/development/release-checklist.md | 10 +----- docs/development/translations.md | 31 +++++++++++++++--- docs/media/development/transifex_download.png | Bin 55556 -> 0 bytes .../development/transifex_pull_request.png | Bin 0 -> 110799 bytes docs/media/development/transifex_sync.png | Bin 0 -> 43392 bytes 5 files changed, 27 insertions(+), 14 deletions(-) delete mode 100644 docs/media/development/transifex_download.png create mode 100644 docs/media/development/transifex_pull_request.png create mode 100644 docs/media/development/transifex_sync.png diff --git a/docs/development/release-checklist.md b/docs/development/release-checklist.md index 875b2b869..4f6e2f25f 100644 --- a/docs/development/release-checklist.md +++ b/docs/development/release-checklist.md @@ -86,15 +86,7 @@ This will automatically update the schema file at `contrib/generated_schema.json ### Update & Compile Translations -Log into [Transifex](https://app.transifex.com/netbox-community/netbox/dashboard/) to download the updated string maps. Download the resource (portable object, or `.po`) file for each language and save them to `netbox/translations/$lang/LC_MESSAGES/django.po`, overwriting the current files. (Be sure to click the **Download for use** link.) - -![Transifex download](../media/development/transifex_download.png) - -Once the resource files for all languages have been updated, compile the machine object (`.mo`) files using the `compilemessages` management command: - -```nohighlight -./manage.py compilemessages -``` +Updated language translations should be pulled from [Transifex](https://app.transifex.com/netbox-community/netbox/dashboard/) and re-compiled for each new release. Follow the documented process for [updating translated strings](./translations.md#updating-translated-strings) to do this. ### Update Version and Changelog diff --git a/docs/development/translations.md b/docs/development/translations.md index e40f996c5..b23e89d71 100644 --- a/docs/development/translations.md +++ b/docs/development/translations.md @@ -6,17 +6,38 @@ All language translations in NetBox are generated from the source file found at Reviewers log into Transifex and navigate to their designated language(s) to translate strings. The initial translation for most strings will be machine-generated via the AWS Translate service. Human reviewers are responsible for reviewing these translations and making corrections where necessary. -Immediately prior to each NetBox release, the translation maps for all completed languages will be downloaded from Transifex, compiled, and checked into the NetBox code base by a maintainer. - ## Updating Translation Sources -To update the English `.po` file from which all translations are derived, use the `makemessages` management command: +To update the English `.po` file from which all translations are derived, use the `makemessages` management command (ignoring the `project-static/` directory): ```nohighlight -./manage.py makemessages -l en +./manage.py makemessages -l en -i "project-static/*" ``` -Then, commit the change and push to the `develop` branch on GitHub. After some time, any new strings will appear for translation on Transifex automatically. +Then, commit the change and push to the `develop` branch on GitHub. Any new strings will appear for translation on Transifex automatically. + +## Updating Translated Strings + +Typically, translated strings need to be updated only as part of the NetBox [release process](./release-checklist.md). + +To update translated strings, start by initiating a sync from Transifex. From the Transifex dashboard, navigate to Settings > Integrations > GitHub > Manage, and click the **Manual Sync** button at top right. + +![Transifex manual sync](../media/development/transifex_sync.png) + +Enter a threshold percentage of 1 (to ensure all translations are captured) and select the `develop` branch, then click **Sync**. This will initiate a pull request to GitHub to update any newly modified translation (`.po`) files. + +!!! tip + The new PR should appear within a few minutes. If it does not, check that there are in fact new translations to be added. + +![Transifex pull request](../media/development/transifex_pull_request.png) + +Once the PR has been merged, the updated strings need to be compiled into new `.mo` files so they can be used by the application. Update the `develop` branch locally to pull in the changes from the Transifex PR, then run Django's [`compilemessages`](https://docs.djangoproject.com/en/stable/ref/django-admin/#django-admin-compilemessages) management command: + +```nohighlight +./manage.py compilemessages +``` + +Once any new `.mo` files have been generated, they need to be committed and pushed back up to GitHub. (Again, this is typically done as part of publishing a new NetBox release.) ## Proposing New Languages diff --git a/docs/media/development/transifex_download.png b/docs/media/development/transifex_download.png deleted file mode 100644 index 99429ce1101e0baf9668c7ba12809f74b46e5e38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55556 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 diff --git a/docs/media/development/transifex_pull_request.png b/docs/media/development/transifex_pull_request.png new file mode 100644 index 0000000000000000000000000000000000000000..e3ae769917a11c6808461ba93b8f51bc5cab9625 GIT binary patch literal 110799 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%0ALk0Oc_9eQ`L(2J~S-toZrHfLn4;xz5 z&_=I@sw#+DgIb9umYBBY;d?U76C4_Vs{7?Wk6Q!8l*uU+aW8nuwU)C8wT4(9_$%q)z1(C6o-e@K&87h=B1xdxKO9Jd4*Mfzb7<35S6*4VqRMClDX(_69Z8}zap zB0_EhNXH*Maop5fMxRI4XT|&ze0GhVw(!%w2cjaWxBZ1|_IGc#i;xYbl`76oM_;{y zXp`k4$LY|7vZV5OM)RxL@Yk{(XeAy=#p=U**=O=wtF%n^U$K=8MW=;RIyw~< zTVBKzrOY)RBU_-3Zq)9>tY9sK(Ec_{`M{TPxUQ2C3JE$|AJP)S>*Dk*K~Ia=)Nb&I z^00HUlwoEH`-aC| zyS18^QN#936~n4hC5823Ws#}B3sZRXDCg;dDFlvWAC6Wr@B|zpj}2=r=Et99e0Qva zG-l@7?5e_`zBDtQ|39M0r9>t1WKe8*+WU6lubi?tjvHRmY8gJs$Z51V^fy+jOi4d1 z##1;ZS%lPWM8>lTcWk;`fnf*5{@F8giUFaHSBYNkrzz|S6@>^nH928}f)CsV7auyT zVC>p4_&?o2^?Val8Pg%<2RhF$EDhQ|o_|+?OArgvQonTmsJ#-|3?$9^Zxae-nAZJ1 zOsf?C!8f|vZswtyL4ZtPRv0zs)pn0<9vHlariiVLbyFGZ1+xIb@_!0H_h0SLZ&P3W zQtc9!T5)KhDzlj1AY3gH%Pj-qk^MV0yJs2mYgLZBRMphKF`?*@tp}eew5582U2zoQ zXR^GhK8O%gpayu0h#>Br4yAEMAg+J*)@=UNicuf8-yjwgl=Q36p&&e-PeVxqD45GP zDh<4hLa)r_%^gKJSxg?c<=!Ru=aayMR-}i1xYc6c%u^?=%v!-jcCN@)ce+#Dw3Av2 z>9YLkM9ns$$W6JX!ALhT&N7^0_rgKK{dyuf3?+M5C z!LOXpw9V%!FvdZ_X1`=;QI5H+E+nhW`<1RC)itK7XhL}*D6r9F?Fq73Z1Y`nog}1q z-GF@;`G=XqK5Um|xfAJ6T((cVv2=p;zM5r<+>%tIe?VldIWZ=xiB$GNP;JXhzJ0|} zh8q(p6RUj|pK~LFN;zXQHGj373_0*A5~%q13lPqgeU7YiQRP|3shC{KtgrCEu1y?VCnoHYxJ1vtO5=hj%=p zc2ok5Bf8hjf_TD>3$+`*OUCgPO2#$+5f0xm#FJ4Dg~zMetqP@A?ln0?ASl$%sz1%nh>~Ts9)PO%G*EeMjO@%f+Rrj=OkHvmf+nt zvn&*M6u`_d8A%Z+MO3b8y9$t&Ph!?1k{mtg>3;Z$*6=nK&ETL}fijrLWa_)PDpO(sq_6oR8itJ35uD*nobiR5nD2aB2puP9sUdsuFTgz1_ z#nK{pGj@+YWVO-YSIb4b3Y=GOvTga{U6|J&8`-4>G*S}=)55%V@(}@9jWS{XjdW$K z%_-$M-14nG2iE3ylWgP>{-}W!w7ZSrN7Ft>08 zF^`uJum~YGd6k!@m&otN(OCI!XTkg|t)hqmo&Bjd$eI9`9S$C#1TJ^hR=;ftnTO~g zlkfY=c+;KpNg_70iaeW{&%j>w8N-nw4x`supY>;-S&~z5uXHHx)}+CCH`)5ZA(JnYGvXB? ztBmPL8Wsstdds9{t@RuesFY%XOy}ThegUI_GrV{XX-xM*9fG>JpyJkV8@OdX0=arF zc`@bWzDorV zsNC0&djwr$sD}z!bPW!z#$B5L>c1XOb$9Kw@Rk-Ro+#@h*B1&N5wKb358WJ*ueNv{ zUvHZ1UJ$~@RMc!b0M6HV#c}$^>5fWqA0QO17v>2<{)}Yi>!hp3@U_vrKu57X_@7f0 zh(#Q3{L^BXp)*ghC`B$vK@voP2oMFLK(lzj`n8mA#?^0QKbuPzdiMfVl;2)%o1Z3n zlwRkU0Wy-b6<~ZYQ-NOzu(uYXy%;$j5|<-cy=*<|(@m z{sO~q&*MqGJuGJPe(t-pSsWE}vuS%4m-+rFx)Gnd#*8Y!D#}0QjuVM$ z7z!a+MVY54?&G^u=RT-~SB>CN#FAv>#bnce zw#g{tpY#7>0qP?!n9+#+;BtANdR&cy>>&72EJZ%smpI#0E3%a1xjAJm(km|mUhU%< z$R2ys_SaXPsY>6C?ak2Mw5vJZiL>bAes}%vqHcE_nY;#%CjXQO23+1K_ji?p|9ofpJ%vgBZInQYn8cL^6U2Cvj^`M-gWO|y;L znh&uH4r~!uSvOmO=ZLX>-mpIiE@qZxPRIq#;O-tRxq9mV=M~*Q?&~8G8co-TWn4J6O;U>@84cj@@(%R4QC8M^$mZQeu& z#ei)iG-?tQ4Ku4_=GH%o*Vb1*8zoQ$PU>Kf8AsYJ1cLi!L84(ms>4N`PCaXIyEWH) zea*8ga^l#-%vSdA*Mf()ntn+FgZZU??G5^^b! zHUFlnzBh}_@QAU`y8rK&jwD?Vczo~%bI@q_T!tClL^*<~0nj&$iaq89$_egt zrwK|$BJS6hi@whf2uQh*bH-8hY~zJRLk34|2)q}j(iOVtIM*{T>>yE=D&D%gXUL1h z55fS_L3)3C;h>q+&w z>Zq%~3%OGlaI;P5kz0&^aVm&<(p}zmJvHqQNTfjx*?cxGDaigVwVWsA4{N`F4riu#G7PMY7Ph~w7-JWbI{$V-8_iGa<@Fi|$`^pRG9Z7%jeFRe| zr5XvF>*HTs;FN6G00RC{2ESx7gU(ZvoLph|?alg~dx7Mik$4(KGROT6@d%TytxAKc zHcqQHs?V*04D?WMCXm)B;8A_3fr2N(@r+|@qNpmP9s`(j#`lzSp;vrT+PjF`;{w!^j^TLxV6jOQNR=BEZr7G0#?+r} zoNfn*D*>-y_lp_p+C$w1d7D;nG!LQqAgb7={P;x0V2$+yr#I@Twnj zf6yg~C{aZdvg^M%#kM_-sQe=0#?o{Lv_BXC9i6Qvi`P{b9Bs&cQz;~FW_eECX@z6= zuTK>Hme3Y?^;ITm;Es1gFlA6KgF}2{=s{>8kq+;h38f4a8UbbMub!#u2mWo(y+an$ z0W6`v%Ra9_b$ACR+dX0sU~L9Kg$k1TloB8{@%TP8M-o1^c17SS2#kBK_=1Mr<9m0R za3~#h41covg89S;52sy*I=e-jyC#)|UoXTMwx&GyRZbNUF)3oH*-Su1AkCaGkK3K# zPvAUlfS+(zTe_v*YTqZ@3G1rn@i|1ulSIps^H)2^tUc~%Qib9VXx_D~WGLje! zUHff|>U;C)YFbppdK)eV`&52Wug{DTM9`*TW)Hp^&r+wr#l;;$2JPk_$5ZWAX0OE> zgtT97)<4Yv5}EZRJTA9zj=bIAmnrw=nm)fGdN1N~IL&~^Zj5mCwvB71x{apo;Ue97 zp+Y{M!hOhVgOTYJhlZ@>#{w8M5q{bSM=nae_FPjUwPy7(mI#QO;_{2qk4?!XT5ZC$ zb_?imK2k(79!&EDg^Icf1kB;{?`;rW%S0n%mw#cpz!f`QgCN_Rb-+a{%i|JM_sB{0geKar1CaOQU%BX5`M0SFa4Y z4i+EPsN_2R&uiKJ^se>Bqph)!2xyjq~mmSuy}ScuO}J}VGwD!?2E{tY1`PA^W{rM zt8fQc`MsWC-vh|!(UHF7Y+I?DHTwdE^NDfei*5Z*!%^*fwMJ$h>bdBJ*xkBA$N@Fx zK-V8)=v%zi!F^9OS%m$7DZKo_Tt|n4GzoV8I3ZIGY3k8JUmB%4q88eD-0Y+T=%MuR zU+E#v(IVF$o=KmHity&j`z9EnYiCKml%olV#xt?vh>H9k&MJIcI=3%vK>b1PiU)f+W)JV);2@ohuO9MEl$+rEah0KOdAjDeZ&eQ z6Y^_%N@v|7%K4^N+|VPgMWR>+fLgH3^!z;Ocs)>j?tE|`FyT}1wR!4GWruI*t$)Jtx&}(mwk`w?-Lcm z-s~6*p!UYF1_nJ)2!7SCB8Y2s;Vy88kE*vGYb*_k#8Ew-(*qzugAM^+R}ZxX%PD2_ zR-`=tep8^wt+Iv6Y4}F>UkQOgcvDVrm^R2Jl72}O{R!Dy9+aR>a1WG1P zn%?rZ2MLK+1Pq9izu!wy{{VGw@~FTyw>~C;Qd`iJKt;e$AK4dzkrCwrLG@jRLRRzi ze(2#fdL_8B(|<~|Evcr^U$T6Nz#WO%Qu9BTWP@pPc|IHz+73J3XCO+UkfqIL+d*-y zgsa>7JD4yMj{%22fivQV-EFM~HvX5x4^J2g!-TqdKeOYX{(}n-^c$HC2KFZ+j{)X07iyw^EqL!5GS<<2g{? z_Q>>HxuTtD<-We$;40haBrflATuVE|G`soQZ8qvPy&B}u=lPJ~p9s3EjqksLLIb1Z zk~u8C-JcAWw@C*NOq%@iYgMY(hk2Si1l*u{l}0!=mLptPZY4P_w*A|{Y$L!! z-j>xwuXl;kxLMV|*S3B&!%KHFF4N&wS+IC=dUALVUsbk>1+#L};B;&}mA*|G=d*CK z+O{5+Xm2t$hqvCGLkIJ?lc?|{>`BE>zRgjndBR)S9 zvx$;o<9;~9w699^s}Z_>EOBe8GAtjA>C&;UmRwiClG=v$j-5Snreh9aBY}LlGmzv` zn#u3V?{d){2L_?#aB1|y+VXF>WLA2jsE4&$8F&AbaqvhtcT;Yp1IY?D(z+``dfny} z#E<6;1{hFkh0J(E%EA6#;t`J1MXwhT{RB~ZXjQ}hD{Ql`TyIgFSH&x}K2tJLM-oz& zPkc8ZGJG&YHfasVDsj>8xay1%#8(6rvblPtM^wqwr+}p{6JTN$Mg8o>LU%{^Ag};x ziIOavZz42VEZc|4fsx{V9^;=x0*m!Q)~{^W_=n}X3`~0X;X;d5ysY{{*isiIpC5oM zanT=4zirW9CX1pi$BFg(>R6X`6VN-^f22>&l>W|+*3;EC>1>Bm*u7BHOd2S`oB@C) zi7IJ0lu=ioO2^GW!LqrL@(ttY`V+Da;HKkVp6ekm1>zDEt1aP;Q&h?pDaG^plBNo} zMq@K6|J06fbL%=N*J~09b~jyZcvbY2x^@Dn%}YG8!%w2`cWPb{A?Fv zS2qB5C{+D^KCO~10a>0kq)Zr!EMSNW<9F=yRRO4BiHdrvWqDp`TpM;m#|saIPV>BW z&KB9srq294_!fcqA*H}#jdz0az}3-bF90&cuQ`_WqXwyQ(D-CxyQlW53TjY8(7N{# z3}%bR3!GsM#c`Ir8FgB#nhT284xW9j%c&25q z>%-?PiBso(rMr5oaCxP&zz7`=9aPGDNDSv8N?4dA@?bsZjL&%P1HCZ$*f-a>$xarb z=AjR-En+;FAi>HHh(^*{C&IcjP|ugjh$fybGhPBA&qX)t7gvn*sab8 zm;H0yNv`^+xIJE`MDuWM<9{-YcMj7%E=OJxXG7XM@2?opBb<))Y!=}Tzrv0Hi@-Gk}1l_DGqT?fwhFCF@V~j72>W+XM!IoCVBpKA zu2p`%g?u;=thZaRV=#QndjUbW*JxA@6Izx4Ts0Ph+2>9MbU$2Qq~<9uSQe1kU+T`> ztZvBMb`!Q!%k> zq?Tx*p-WgNp&mLXDbsRxh_saEoFmtwf*JUS2kzrSfIy$xTP@Nq3ZRgS?^1q|&gFPx zTs;hP53gHcqN-8e_JW^7jOafx|KEMBezWh4@{ymqH{>2F_iz$*8(%rd+#U`=Xm$Sl z7+3DoL@D{$Y9wOun<5HJO53ME!&L9amxjJ;E9D#-Szl5Z@YD z<#Ez4G-Jqr`wXwCZBi;rVS_m~X{Rrh)ut*nB3N9z@*ye}WG|E2o0C^4i!j222bB3D&QKvVDi>=r&a z+(_&h5~614Pgjqrt!|w^uJWX{$VpL8tUdpU-RzU5Fip@OBjOv5^DTD|ru}AUmP;qp8>zfrtj|}e zCMnRVNyPjf)-yb8Fj}X{B>liUxb){31CWtsRU`!V>PVqV{=+S~E>6w1&*ybpYKD-dlD>a%t`*#ocOp=20(+-Gq3K6=d%j3~JF3o2~zPTR;=p5HD| z%e^UfocJ@WNbzJ~=~WU(mM8HFMG3cyE}9LG%Ogm^-d!`#<*4b6cDpKv^?e0Ww@H17 z_Ss$4Kee@27^Hq$tyI@)WS|o1LUCad5lLwho|=hNtQ2KfYB{o9Ks&*L;@3Uo@EbL@ zL8Vk&WWXfJo*CaaPoEF7<^d#bjFp%0q^>CpIZKq_IwOO7>#V zy)}hXx+qmc*({oQRWB5mXuBY-j&oGkijUS|kdgzVngR9B^K$-&!#mKnnIbyfd6g@#_*AJ4G=n7JUkb zUs`{O4I$pQck@PUy$tHiBWZtq0ZVSo2|fjLgpyyH1sV}`>qUiGv1NzO@xK;cBm8VQ z-AMoB!$4s(KGdT+A^PW_1-1pbwQD^%0++JwKv5%45o_8vtjhXYCiTlZW`-5El7DuR zoc7dsONq%~B2o&?&)=H0A}XuGwzF#n>ef=Z#JSh5nSJ`%yhtKy7>xc5!4)M^)>HM% zoz=f8h_Py)k4A}E&~T5N98jM|)t{NDHQT&f>_`y>TZ-G^Cc2q#4ei=MAE!TlBZuVg z!>L@mfGof$N;@waZP>OA9Aqh^8uQX*dppa8lr^CDIpW3F2Yo*KbLzV8IPV+gAlYe{ zy?tFA(jxFGf|2J$p(x{&bz9}Utz!Cbqhz(*HugqaD1*zjxN&;!$9dZ$(dwG(T4zgWg%_DL6u-S&LJOJ`s;#8 zV)ehi8ZqUaS@L>WgEMIv4vAE#Hy(>4e&*N{fu+Pi|CZxiD|m(NeUw|e&Ho%-neD@r zPbfKxME7So<*J}|PQLP>h>#0Wb=y61AnEyg!nTqDsUB5O)5ub;d+fR_H2=2civPWK zMD_!4sI=AnE>G7wlEFhh4S(I(`b}L?SO=j&WcqEqxN@a#OhEd83<#$$Nvt701M*AM;`a)e~^kh^OS9~1cU*y|w**w-* z66`Tk@zgA&fZY6?2~hHfSs9-#=eFum#)7?SADW?Zg4JM+d()R5V`hjNI{zFVZChqq zKOx6uX(`8a5gwKKa*~;}#%{5!^yG%XZeU#eF_`Ffr}G!s{2j4=5lariInV%%TM88!FUZdiwK2`{Kici>eAB{rGZQfvJ;0Kv`?q6Q#XKJ~?z`p73JAIp|77d@ zFZ5gfoq4Y>kIX;Bvnys%^e$*QnqVp;#7oE0{EuD?qu(C?y>3Kv2;Td9Q!t~6uGywP zYBJ~gJ{1lNkQ$)?+mX8YnK1LccSu-Tg-9z&SH!L%E++Z1&_20jw2UuGdE@0FKRJ_V zHN8~FhE4VT*=zl3YxGZsTy#a3M$M(?bCx36t7*UB$xc##9Lv5`-z$Q!jl`PCEn`t(fc<`WMQ5(SL3ez23#i{&kZU zxZnBiRGy*Ps4Qa zMY&yfB`90VCUoSyzI`;hzDtn;W#DYJmv&dP7eS8fH zwAR44xS#UBfIUypG1rLuF!vljUkiFUS7tU@$GG~vHE zQ<&v3&ah=V5X<@j8(%=uobf`}km$i_ieaM_8#;E4f?zcFPm*7TbS+`{yuYbV9n#ND z(!3-hUHgp`+?n&k+1ccUK@$AMVKT1c20Ix#7BWS9e*$mav8E=TUfhqD&Ia*D(PU#2 zgMDJ2qF9e4I4w=B>f8&@Os@J^sVHh3x{;{v|L>eFCif}w7`7h;{uX&xf z4c_S&dfwT)S6di4E*<34{+3nm`uM*8WbO2O$d2ZW;c<(BB@KGoOHn0}miz_DxFBpF zT%}tgb1Ht>AyQj@h`INhwE8<)u5ZA7l0u9RM z-@@CHmc=vMgGnlFO2~nn*$=Y-; z1%2qf!E(e@T-^HRZ;m@|+_;!14SXd}Na>y>Lu14r zO-3uQ5@ak-sIXCYcQ__XTj#Dz_tv2rN6OmjEsF?Hlh8@Ug^{mif!115@8tW z^}x%wj4S=E2CH1d$F84jLAi6Rb4GAcptXW&Q1_AZPd_v*>0_&Y#(9a#fnpPEn+TCoUn~75}Y>8^JA{fphMSxn*$` zResHNt*9-b!hF)2gYn5Iat;vC#`Dznp5@oCMLZ$C68#8jdo2ju_`zeJk)dO_JnxO< zn2P5dsOhFX)&jHu zzY*NWEAV;+ii@0|5sHY4nHp0DPg*yoAMHecM(&pyQoF z^KFQ!jmCV3+!OM@@4E--g{Ow`C4IUtWNro(-1i$Pn4Cv8>G-(oG8tkbPZewRaxATM zL(;km63@10bgEOP680KS`cJx%*C>b6q5{}$PPfNoxQlDGXU0eH_a)Wl);A?%&{xw} z{zXCbv}pqX)RF5GT&GPCYYt!=&?}$j?Z-8pXd-N2Rsf5!a7t-Ry5#s@1& zfex^HFK18%Gw9QKeGO&+PMPQTFS_z(O}$S}iol&~SP}a(suv}<0}T}}@0}qVny=Tp zf8WZ(l|Y3Y#gWt#B#f9=$V(l(6_Tf?ML}x1TWZ*w%uAmrJq@?`dA|E7m19Ube7zJ! z(8APk`a1rSIuen46Wxrb*1ImRSpy)oC8xfa|LRbOjJ3ez>RRd zIyl03sBbx*OxyvF)3jN;(Mw~hM17^C-N&Uy$H(X54QnIMzW^Ykvxx4`)me6!j#QI9RB|he1^?5s#@Nxa0^uU z#^lSUilBmdKj2mAp?dpHdvSp#`FOoSpkFNd-CV=z=CCW6!cnS~>Ba$DQ3xQ%765!^ z;KY9??m92_=t?!;p`BdENczNwH9B0)UoH+N(W|W&QD?`hS+$YLrN2vtJ6=scJp2z_ z&U!8zGzDiWYzwX#7;JhkTmP78H(Cdu9nR59WhNBLLW!f_##tm#Tgsf+JKP+$nRHAm zF1tTo&r4>2RkR`9oo-0~+v+_R*%mu6Fll8B;G64aa-Xw>J}z$pTW+9DK>?b7m{cdg z@h}ej9SFE~bk0>K`NavE^2v9>;nF+GMaGW{gd5c_qteop@7iDgsFqm|H>g4cIK!mW z>dii&#(&oGo?JmNQ$=?qTg}61|819#%}gU0-@DCCXYy2kg>N{&M#f#c@BbZ%^4|I8 zM?U1TK9Na7WVX&*i^%t`?R2xl@U+8nG?uc;{&!vCTyM@S%3GsfEo#IwO^#M6H-UO& zFi%-dD)ufT8m4d+&2fx}cr<}|%9mEs=SF(G5JC+=3h_*t@1;UsZ9h+g(%T8U0~M_` zNB)8CYJDd4{{ziX7=uM#?m8>!vi}MY3_gW_m#;`$f@nXHfHJO5nYRI|neXy%^~oS} z+m3L{$2IBKYL1&juM$%k^6TJM0KYk%&3oroNt!FmGZ}bP^v9bF7I;k3`FE|8=-2~L zrg}I1f>)&hgwHw$>ABAtuwoPuMGub@$;MivvRjTSWx{Gz{{JWxX)zY|Z z$apyUxgudl0=^g1`y4uZQGb{R=m0KwG{JPnbOyaDmS1M*fi-%bIs-|xjLw#S*j{cm zi7pOyNq?l&%lf;~V7LvVlU%P|=@dsXR$`My>C@~Mf=89oI%})*nFR_&?;)(iaGN@O z-RlP}w`(^wyNyL{+L0W}Uf)7Vm%1*lFriq~a&bk!&C)JQ^!=gEl=tC74@XAV*VC*T zbsh~E!L3MLlwEUxst&KAuhHz(;IzL08PAs|l+s?gs{_`k@I~+ES7VAd+o^A0uo);_V9mu27$wR3ofO-hC*o%bOj0V0d zx+j1F1(TU<`rBOfG+w*bp%hL@7u&fvTMN%$qHr#>QbtT@TuP=w6wv{Mh4_?8j0?odnM@^mAwxwPdh+UK&O(S>Ss=$f`d+RpT#ZL_#w*R+d zDgZF#>t$!PPZ6r7$JRX?N!T^*7%72OpvAOY@@9B=6lWH5USn3)o^72U7n1_cDPopZ z8xqBSV|Muam0Q*BFtt5Zv=szk=4*np|A7Qlaqb2-ygLEhWxA!|Yh#mchayeOj?>4; z0#8dC1o_XB9;tWmRQU`eIm_fDn-2uSqvc01sro$LqcvVN$gXsS8FiUl>@iz*E!b7L zcfNOi!)MwGe&r_k%(FO^rYArp|4k3T7?n9INt&;mJkes{3S38Rg(ZGtp1*BA>Nv%> z#CJd_cE$j8bJ$YcKXZyPEBKicuv(TN-s%*- zq>lM|djN>Z9KNRpZo9yCHh-U&&;;nwwTHm0;-RbhpDiVCvT@ksCD*RDs>>0udF9Jy zagY2kdIDm&?>M!yC(|ivvl+`W`+k?4;bp+VS_n%h90*S;UN7;vl(tdZj6O_@6~Yes zwE(adEv&f4a~Fgm!oRujA(AML62jk%d|z)P;7OO0dOZ!P%lJJ8nI(xsh&xYb>mEsF z9?$FI`P|uxbc(-jYrQc#3_v{XGYA|Ohy{MR(nR~v9MP9jQw$m%I%=^4*J#m*V3~5l zAPA+5Y37FKC*8uc^;VZe>^%dP*nZ`(_Nk0>zpLE(*;0!SE1kKy%X?jp?{ZD^GmFP7PigXuZ@wcor*gFS#=^xant zfgW)<4iom8A}NmDd?RCn)B4+PX#FdzIYl*qNRg$%&7~EoCRi}2ygHb$AnrT#&0s+k z#-H$H6uOi6I{!0QGi;^XI4MLWk15h2K>N&{gi|iG} z=wq7=K9#uoeb&@j?#x#@-oi|acWSyL86T)PWvOR~eBYoP{VDJqw{O>&xgV61j^mDQ z)@3O=`<|w`(p9^t>)SMrDCp~%{LMTD%co*LG{_=PtG#&;DbkkFzLHbLi~mM?W=lj^I(YtS&^~)1pH^Qp?5q zJcl0)%?XtKhBp8-h2RXgTFdZt#zh18yVn6ar65R6ok2vql84YUX5jlL*+lNRW~Jf~ z4@sGU!Rr(0yQ|0G;vAn0nDgIb*){hnLtXj6A0wVYqlzR(smfZsNVT9URkqfAUKK#x z$N)ZoYcU;kW4s#ds~NPKe^LYXEE#XQtGac3zVuK&M~Tg&Sak^m%2XTE8QM&)or!$EyM(5g~~WNE`4Ycm#%zP5-afUIs%Cx+wQHXPRPWur zdUf~eUe9{g%C|upFCVgb*!1Zr;8-{9l891uAc4*4_>)~7^b96+aEtTxBamUIQTW7u zXMRWf?4)2=ixbwT8PD+n4jGk_DXTvLv}k_i5_?D9M2;iUX@FHe9e7n7IhzRJOJwc6 zxBO){mgI4@qlq4Srs0}ZQUbk-Jv&K&xT0VUq69vCna7_iFXG-`rQN=DQx^p$yc*L! z=ef=yO_E)H?(V{ce8vR=U8k94PW|uRe2f13C1$|LHR=)sOR2{YbF42z6 z!k0)wPdR1qlmb}5M(_8=N*zD-J-eeTZd0DxuL?}QRJjNj)$^|LYy#DfsXThAUAc{9 zvNC=FJ;0%kiBqBV(7ZZ~*g|5=R($Yqj>2UwvF_{k*#Ejh?LIbVy_DF^r+ywKdZgGmiy^JR}hwl_&0fDc2;ASfAGfu2X3G?*El-WM?P>KuV zyiO`Qsc9Am2vMw+KZ}7oRemar4$szEdWwW1V4|WBbBV@t9w3ezr?6c8;@FwC4fbbM zt#`x26EgZTgFuqm*vY?n?Y;Duwo-`>RiqfYcX`)QUfXJ{0t_T9Hl=|YK;9AT{cJBK z3Yz8~V`)V1k`oe~v`?-E`5q_bjL$As1R6}UhN=HJy073oUC}Y;3Y?MLn^ckF_e)BG zVGR9{BkYf1E_Z(_`dlBTeG2LFgkQ17Zl0U;#8MU|QB1>4sug=}nD+cq_pXuv@HSq) z*4cQ%P?+hmYWGOJhQ~Q3e^O0qWltfgtGbW*=4VNb8gOWvo*pS)Pp}FFkvN(_{jT0p z-KNe^#iURw08}FaMlH>dG)kv(SYmn zKB>myr_L60-B2w;xa^Wxmko*gq}3B|0h&J$uI*YH&nJ2Y-kd}qBMZ2Fxz`W~f7tN= z@5e?Q%&`ujQ8fgkj-2+bbPm@VS0BFx+j34O3Ho4DRQ;#!Y!tBDVe6;ulhL5*K0VJXD@~# z@gPDIUcB+-ef`!|MKOf6vDT3F#x}389+{DWi@`bs!7|@-KS`${CeFK#|DL5k1YuIM91QrB)B z#%sgS0Z@gK0CFUU+IjawhX)f`>~R@Ir7hur102r7wSWhULkE^uL z^+_mH#5!!Szmfnwd3tKL^}shQHMWAV7GaD)I?m}lB*5>of_xr@YmQ$({X1*#XqRGp z*utm!`S}eH-Tk@m;yr%6f=q=~SmYm^%FOJA@Z9lWLsMMULN-BZOh9CJVnSSSSMWjX z>cS0|a{FBh_HK9P;DHtwEalC~y-kxVKVFQPMvt+^Y&3=B59+}+^@fj(<^`T2du^8% z?WGuvSAAhv?*O~r9Ku<*Xz3j3ic|b>Oz9pjYgAG#8mp8|#Y9#Mft*f5#GbEWrqTe+ zaKt(F;-c7r*jiHEZk2xZ=L)xhi0+y54Z}Y2w%Pa}wOIj@jNPpMumuEpFu9R)arpOT z)T3UXp{O)2AgZ-BoQesf?6*r3YMgqImf!tNzIKR$iQlWtc7W%l3T-AtUc`(CCsH!% z4St@xhLfm;hd6q>XQQ3c55asM3q&N7X|hUfU;usaUodOEr<$W9Hq3y z@2;btS~gmHafIvsr7AhAm9Zi9C7d^TulwVE>{p!QB)4U>(evIu*a##Sk>u7_FIlo~ z${_uI9ID)PNddUTkD}99pjM#I9Qq}CHbc46qQoi+xBcHHo}!7z z#KBA-n?GEwp(M)hO~DP61SKBGymb>w;e)0V>=Xl2dYChdJ}92LrcCr`0{5PAfm?%h zeihT;sMSNhP!Z9qcM(7_58v2?pdI28s{aWX7lUJ!7x5@XnoQZ-|vXHRNo7Aih6rnmtR5}dc!l_%&OXK7-%sPD^@ ztpLxDB$ymD$WOG$u3s^&9_$Zd#(YL}&v#uuz4+PrC+2mET`nUK52MCxI&L?yVHtUH zcKj5^R@xLu&E$J?!F@KOXXP;q?>2YbO6G^l#(wuUbJbzyG?5y)b$O6^a9E4mSg%cJ z1t;0j`KW?9Emlb^=NMJr7v<8^1Bc-&nK-Veur3o=babMWS$lEs%`vt(@~nOn#dr?8&ekbV1!@Se?m2U~l0S!>IN@ClB9eI#l$_#Wf_7egQt z&6?Riegeh)XXl5?G|uggVY$zD-SU1&Jxrq|aF{EjXj{|LI4dGiD>3g{Tw=(_zBnSl ztX_s+rU)iK%f5RuK*FGGiAhiyjWwlAW6giQvMX*NJ;Q3B6ESo*U73;A;ZiL6);@#4|wZ7-sEHS zz)6?=ccpV*ASc(FJu=$?s-8yS+5o|zoZ1SwzzIsaikT_3U)sHXH@-2*CSA2lo<1Zq z9l)|2D}X*-IMJY`xW-AuW%LQO9UusBMdC zrOW(X3?At_!<3dA#Nnj&i6oMS!#=}!9jWW$jRFyUA!_Q#58CI&eGUfPq)f~^4dns1 zS19Ll$MY*v1Z!58=`l{=YVNRVbky*nvQV|@dLQ|e(S|^cPg|$q)QSFIy8K_^xR(p_ z@BjcML~p&pSoEP}`SwL?H&C0PUHkq~SE~Xgz^`MF2#T(e!PQYHPI>2cRe)kC?+-uf z@14w};+jMK%Ri&&>Xv|dW{Ce_HpM&bc%9^MqHRW4Hyf-eDCHC| zbAIQ@-kQ>w@_@g2E~M4B(s$_OpL#yh;(ggJk?UaG?K#6W3^~g5b34 zO9>{k0t1wP+ZB2t4zqLj7${V_nF%rJN&P{?cFWl~-vzx6V6+`C3HputU=oMfsb<(3 z0w&;hIb>_#F2OrR|uh6wZKtZE4mB;*>S5dZA zDF0}zj{4<<79y*D#@!lHIbi2}^In9JkT)Q*H0I+0@Ln0{_R?Qo9PQAewB4QbWv%<0 z#1G|#6jG=WXXj1cB!*Uy6zFj8`|@S`0~wDwKHpS)b^29n2oszu^Y#NRL9D^-StbfW z8=d`!XZkO=Up2F$Pe>!5AGKX^Rpzgq?cjBn7eLU{M z(5yO)Ak8FlLtv%r39LyeSY*!WBiNq-Y^wUetGo~oxgU#LPHYkD5+vp+OX_!Rtcw!5 z@#6bPdp~`@SWQYilM5zj(b1KRB(}sP%qDe*YbNZUGy}Zq6a*!?(!tShjH9ED&wEMv zk7+)4Tyifw-Y7>Cnvi5}Ku}7VbPdC^_-TM+S`o0QojWe2aQUL8xR6)QN>Em? zo5~JyOZM7l&BaoO>%;ML4E6WNT``R!7w)lJzPd5b{aM5&HA;L8W9TaT4<}tOB4=lk zbq30gKD;pO;%lDbT>hFJi+Q^Ymo$u2dQij}hSxa-S(vB_G~otLnT@qWcYo!Ffb;^5 zK(<`gB~tnGY+UejFWUL4CFp2e49}8E3%*0j5fR-vcK*DvjOGV0RDX)}gq?KPt_8YtW|$8)81e8HJh$Q86S zOpEaf&!r&UNx?yJC$w?pE<+Tjf;4NRl}A;=_ZoJaH;Pg*GU4lVl(viWCLQyR6)XTm zYj1_H9XK-q=GYN)l57)x=O2zcV>D0ug(3oH0df~QNg?V>UGfIBI9nb@o{*~a!-Yyw zNpzjaq52N_Jnsc0EECJl?Y*XZfm6gEHsV5#zKs-@ESK90Q{px}j5f025uByN`uU?cbJQ2MH!_Qso};8;Lu(j(g5GG( z4N&4yz0?^YL5CakIb(j>eAHYi4tzj~7*6La^A-F+S=)=)CT&%)v>1MWUuy}2zxkKv zmMu6`_K{?jwJqpaB#^2|d5ETi2ATOO*uVK|`RXAa;6C)dlyx#o)NcCp%uVz^umI1$ z=f^u3S}gAmE9{03SRR~43~=53Y=Mquc~D%}{-*=<{IM>8k<#zYA6kMH>1#J21X>8; zhYb$_`MQ+P2*UN_giWOVUv!qYk8>S3aU#exfTOz4j?zouDL{P?f#^kb)5!7v5T-0b z`^0$y1JKF1RRj9Mv*-K26ZZd1Fd2gn&dfDqh3bC@jQ3#Tg#)-Tz?6EX<6El-x!$Vl zTO~;UQ-uC%oFTv_(=GwyLha48C^V}s;WN?*c-BrLB8&fvt+V%fQxJG2?f=zB8^eYU z_P=5I6XFd-dH>fHC{B8Xq)F6~UGEgA*o`U@Qn$VVbk^UlWmnjJGYStT?Mv|O!dJZj zpf!KHNYjDVbs-Mj?YTVTYo=nRdEzbj_p6OUPl{m75j2{=gkr=M`j65UK!`fux-I;d zF0E6Ce=qj*{g@xdr5Zyp`5bt)h{-=+os;yeCtvLM|9>qYs{cJ9>$%ywZymNdJZ#E0 z*q_zTKVG%YH(Y%$BKMi+!Q@x40=6-Jl%NFZ)xHR<#cwy>|LhMtfYQKPd^8{4ga29A ztRs3n?spv^uAB*rGLji_tw)6wPgcT6K&2<6$yL=#C|2vXtJYU18tQ+(5EPMYv==St08p`Qd{^;J8_nuZ(Rtbbv7!6a7QP@W5aqYVXQ-c?RbyyZ=3~UM`JVBKG|x75(HJ z{jfOpzKB!t0_4q6-wXl9rANE&`v#}5oKuU^Z+_n-L-$k9aH+g^6XZ_U%Cp=7;*5VA z>ail*e~n|ol-cKRz{#Y9T-nrzCkl(~2J=R|MVSL{u?O+dj12@Gx~t}YP{@!9Oj%D` z38XG8S(02k%AY!_JQ}(&$UpzbL&Y%x8PYOo<0SL+ohF12I+?!+sr^ViD0#6by#jM1 zN(AqDulN*G-sjL>UeRl)srrZ{t697#>&60qzDsC^wz*;XC=HYD2PD$c{6`l_laeD$ zk4c^bE}%f*fkf`7M@aaGpWk;GtigL3xid?BlTF)DZy!3{u}3%a~7;KyJA2iD+~@ zj*8BIU*S1!4g%rwFy2Qa3r!9iyTYd*daDV~{x-D&Gc7t9>^{%p9|86$-ZQ2)kK}q4 z%4Ug>RiHy?1)DK1-5#5;@%hb%VntrSAqG?mCJKqdVbB9>-`^+MaM=*UcEB~O6)XV` zu1S5JtWVW*1OSizT?OhvPdd9bo(uo9{cSG~>{-P(3LH*g4G_3_bYyz`<;bK6vs0IEmyZoC+KufE`>xxEq67q@?Rs|8A6 z$wuB^=(*28^uCUZ|9c(8u>t;>koALS=dH#XG2|U5lsp#eKUOFT!okcfW|zhV3Kz#- za>Np=M+>&eOJaw z`(l@yOh>fiB0saxwq`m*MgP98iNIjI`!j}}G{HH1fxXmn2_l#@a_C>PASjpXMQu?b zl}=&g??#%%Y4<0IJR_ypReI0gRYDi*owaNhnupn$C{_>jGyc(`&z}?+6^{Q|K+^^a z_9s(jFr?aCS$bcCXY91iz@6oUxj|>ZMm!HA?=2r1(eJT)yw0o!=n`p^uw*e^~1J_%KDe4nh~s?2aaqjd>kr`q6Id zP`knR(Qm%hQQc;tmEvTzd+gyeD7CpSKRICH--iY8Juu^0kMXqT%R70XHlDKS0qzgI zC=Kps(f7r7v`6!IQy(ydZ3x4#_-iR;UhBqDDhxR?bRi`z{lnI=i~3iieE6Sf?+L1j z|5M|9{#rGFO?>>ypvgZfagFpeGz9hkzbW*8#PHi0i&`Ri&~^|=(=_Od-f+zrg!{*Q z7%O6gUJt0qz1=<<^u{a6ZXtSg{KeF0TULVH&Un9J7-k?6d7IonJCQZ0{eqxw{k$RK z)M_(w#e))Xj)8HRbmJ|jY^9TE#)JNcLf?IVGt$LVK>!maa1TPu)MEE=KL>ijYW;0} z1qRCekBKr?#EHi4c3zo}>V$GE0Mk4K~o zB^edBEl_~`x-?V<&r0H+cP{0FOb(-T(`HKY#Fs2 zxr4BubP3O`F2loq+3$zi{ud91CE~Zfn7d0y(iK)kM$!lS%C|w)OhSUi0P)y=_DZNZ zER%Kv)0FLeLR#Hn|L~ma{pksiV23#jvp0DiL=tZV!n`vkAW4)2BsKjLLdKL#d@Z{x zKg(FLkvSjbt1DqB5a!IE`THUIo*a# zRE#7+>Od_*1=+fdH;E%Qy4~H#R0Vp4ipkk(UkxIkKJ!-^0WpLQ!dIL>KHmBI-H7z$ z|9KrBp8-Pby^DE1ft56B##|%={3kuXZxbX@p#1;_PBaq(xE)or1(nBgDZhU4=f& zNqgf8ub)eZV7R3t+`FG$8tw>LTR>ISRbc=8l?CDbD*~sRTZ(SBbsySrwBo=S`POzM z-pnxZz5A#LTEPMwpQC1&9hE%iS3SW?HBx8EyE&pO>J@fJGRT_Th--UZ(IhXp$)bLt znQPUCsXUaA4KL5RZA8pYFF9XO^l8AdTNXIIg*fAn1#*9INVP+LoFot4|3-ux#;7B*7~nzr!WwQY;(o)JOaeK^(9_g*5<+sAqd zvF77>U0s`KrtNWnj=b3mTgYPZhtf|s-^H>BVHgh=@y2R%^1Ef+IjO9hl{1};SjItL z_O_a%^5Ue`dXaa=TDoWo zMzam6$$5BSy&Jtve6re%UUL0DrEeviWbW9Cw1pRZ5xjDl!7rW6#CYpsd*sAjJo!5^ zi_1pBEX9lcxeHNb_0tEWm4H%yWHy#pTe^f@We zneSo2qRYz_?EQ(1DkaL((XzL)@4Ik+AI&a?R2R){862$WvNWCGDrC@b2q1?rXNg?? zN=3mdWxWt{qJLx^SZDOZni?T3f|YbA7~cG#Yh@GzK6RAT8wJ-#7QR|{XjF9N67aaE zY)x%J_g$Avb*{RVPVFp6nR%2V-GqK#-5l2HkLRcP$Wao(VQ#d*gyVElNm%#H zbQB)sm-FGPO71De-Xb6|{kiCc?S+e<{j$H!yKo5k-SJD)COy}=a2T}1_c8?Ue#dhDxHs#YZ}7y`jlzRf#Lb4E7Jn6A9GG3 zSgkE|^JEgo59*F=92%Van7l6S&&;Mk4(>wRm>y165kskLq$9%h0u)(tU?z3UDxf2e4_Dz!3ZOd&E}prtY2`On~5Li2?Z?49rFkE5e_ ztL7#aj`p(a`w==~5(irrBe)hbnMqe7O)W}Z_aVeP3^$9}WR_US1;&utD+=<$qic?z z_i(W(gmKPwOC)m7`1YJ<8W+PPX2JP!A|H}{(deTsW7UG&bc0+)PAd6T1!D=HweOjdXuMIS4g z-GO}>!LOodbse9v*SMcqO)-8W2!tbq%_qK9B6RLq6VRM2kwP1AV@BvYJ} zA2LY3oIAQJck00xmp0;ZKV3Kb*mgm4B6~A@-z)V%p0A)OaC!H<$uGyU3L$BWBV(6k5%b*u}n`TpjOy#D6z8{MdfL zH?bm|iNh9_3AAlWC6K48e8cI$YjaxHpFt0=FmO}$=>9@;J)MNh68)w!y!gm2b!`b@ z(@!cI^ouEq>>yoCZ9Pt>{pIP)VdnGmopDgs1w=BmlwGnC8@E9&p0CF3s&aKFCuqoP z<=Th0I%}c9XLJ6gTm~!dC^VhVeV3tZz{^(odqK1KtCYc;5-s8L{d-|C4Raz-FQ&yV zu1#0ZvzbO*b?8Qtu5Z^SBma+@2i<`H71I&K;F;sIP3vizX$h*yLA5f@QQE$dF}G5k zIwkTPt@Q>}saAo8A0_%3(xWBLEin;bm)-dZH`NdnA}a;#vnwFxx`RKJ8xD;aeUIb4 zW(m7uNUajEfIq^(6jF62zYU7{5F90_{RvWrN%744o!RD!Q+NzL2G*!%mE86j3w%{x|8mLNbxOsWaPpT;=pPm5({PJ<+s~ zGd#ygs)$mqeC$QWTRtK88jML;8_7|U;FUtIstRFRbZeaR-sXa}SPFTZ>d$jTcTBLe zRLPXX^D2ff{n67DswcPEfc&uIV-TO*P7f&>@+CIrZ92gU#XwFKnj69^`b z=!h!G`F!`){Y6zlgoUYb6x+&PD#G^I3WSq+Lf#uLQaq%V5e3g>A_3eOuEB8N zdL;OX7b#hmW3BOqL+sW`(q=Q<>gUX$^q2vkzsh=FKrDerDU zVk1hMkC+mzFLBj%-s=Rc)Xb8MrYrrK0nTGwJbg2>6gTVO6<_j@L1u?%!FwRSTd2_{ z>rYcg7Nt`BqZUg~x5g_m-8R%WK7{Dog zFN8ZvNy%zlL0N?)LH$Dv=SE0WpieQ?kNoA?T1K6YW2kJ*r|hpPEo?HceQ^i^#Uaxu zcg<29nhgA8=G)}D2sjOq%t8qtt}h74bzw7%qVs#iZ7pF1nXIFFO1jcqTbJYzEOrYiTRaNgdr=B^ z*U4U=3ltr%Yz+vi;MYkbe48%(!;oxXSWMiM^0%g1Eu!tVX?Drgb|jX>X8Pr*-BmIrYZamSGgs zofM}x@~}E8WE{E|JUmCSQG3~+pL;Vz;E)I&KN&Y&mQG;Qe#M;ZwHPb1ck|`N7uoNA zZ>9@n^C&~kn%ujtl)j4SoPoPJb-ML#zSV5zCwKPs_51RWq(wB-d=q4H&|EnP&pA)V zJsH5>bYk^ozEXRcCk??A_G;spbpNtGUeqT>KnD}v?)%KIi>7-eMKFHhK+@xZ1tzmn zjiTH6s%3;b|U^K1mzAuW!5i#gY> zmCy!HB0^)5Q3o&A@-nPSQIf(|_9FsO4X*fe)%S~qD7%xf&Z%f>Wj8a&!IC7uA_W#p zaD@{ua!S~9@TWYe9eB%KImr8+51M=EiOG_Yk{+H3Yu1gq3*4m59Aj%Tx`RHf;m4t# zO&Jfr`8jDj`)a^li#tltc?2U=hKY!5ec2Ipznr<1E#kCpFp;yg;W}UHQv{e^2Gagh zoH#S*26x6WhG+g?<$=-U|bnO+-xAU}!^&)mMo=*5tT{WZL&jJNSjy*(HGATt@z2$UnlSi_(HCZ|%(H3{Ap0)B<&6S88q2Len-8)RdyLvIj z!hWi|NHn2y2Ud%j(iTQsyCpv{6EZ~yclp+Ok1GfNwb>B!Vxpav4EJgB#g*y99 z3Z*=y(!xWC_$IiQGl??!g;X^6R^iDND^{Vt*{7_V1>y!Ljx6`);`O+`bhO6M8q9|R zx%9K75eOUejDvpLXQ9EbusoAqkdq*e{@SXtu-_f82ng@**CP*`x;_sh1x@y66)x}T zZc#XX+fLL>jo7I(ptZp9#8u5_9L8v1AcKrbE;);2o{vHGT%p5Y(zw}IL4&IgTg54@ z{x;f@L5NZNak90Jn~UjqQl?>4cdMU`M}G%U^QF>>!6~s1vnpu7i6+T>q0*3MCTj6| zRCvSttOXvKn@y9ipD{NNpKS8kGqhWf_`45{mi^mdU+Lbx;S0|F2wr#CI`X8L5*2u4 zQ)-Y%9Etmd`bJ1?66zC^XLa%*A0j+qr1ZTD&#Hv$$-bjcsvYWU^tj-=f0#`}6f=DN zW$DXUe+p~MiAep=IPM43Y;ZM5C!fYRyz-$xIGbeosvYSomjM=ev$Fq&N2d+ALn`r9 z-zwgro*65@XL=*0W#g5Aa$(mCGEozHtcvS6Ste59ooOsxhrJN?h+KDwc5)8i;r81)*qA2-z-l)d^ivr_Wz|ZON~wMi z95mAex!n#_rRq3f5~fl(G^n?J36t0AXls%Fh}Tffos|BV+pEaACYEcJ>Ns`#m&(rQ zdiCcAJ=Z06Qi~P2b+xq3N*T>YgR5#(YM$1jVxhzB;%qCBsp z%IVorRnf#kYZ(ry^*D!Vld49&vqE3&lo{snspcI={o_VNWq=ceFR2O&nj&0`M3ohC zrEl=k>ff!J3D^4&wKxXXjcovZQS>TzzQ(@gV*$yeP|EEA7yz7EOfstn3Lh^(FSG?U zk6d;*Nk5NAQO52C13{yelY&ajv`h|ALV29l>JeVe@oKoM8r}%=4=yjEpYt@4gD`~o z$#!Jo3+z#@)jics^W$W3F>;5Zl%POPb>*P`{^W}*z_bDRtT2zwvI-m=i5mA!GYuDC zV6FtYE}twjb&`8Q*jvzCP)mbfz$@g8_YW&Ga<#+`BDgK`MBXyz^;{n^qLYi4ziW3Y z5hC-%1{qwufSPjfLj+>OD^!+TLq&kyR|I(cCuY@qlrw@Z%1Y=<;jqPH=C;maOo&4; z_#>`Z7=3XU+W?zLo`(`6m%~i)qumFF$6&H|k+)vtN~%I{qWh^@WKz2k^(3?j{ZGoD zQ>852!yB%CeNGM2ZISc1H{Ms&Z|rrFeQ)(6QFH%@e26lEn#xr|(o z%bOT~V0VCiYd&|FAx}<~7v+tD4IC5239_G@2QlFlYtBh)a9Ak(gg>a5cM8l@F zu8Cj=u!^h_m0Dg^NtRdE$z8;_4d%!pTcK7MvdMgc?O3rRf7oszyZixU(40*wgL1Du;Qvz^7W5V?^J z|4l65E_LRiH#PHOddgWfokt1B^P^FPM0!Hcr6%vdhYn+>U*suen6f&^Dg~$mjbUTb z_yKr7O^3M^z-3L+rwsXo*!Bx|sL?|WMsEl7l!Q-+tmz^R7WIIsanvth`$s{(`G~7< zZl2PVwHOuV$JY7c0=@TghFXUM?O)z|$wTua`jv#tun$+VDTRkht;TrxKx_Vd$Nlyn z+*kpjV$-@k(F7&W!jMfeqdtk24Z?uznNgU0ung$=Lu`uHqtcRTzqgRZ4EkeB^Tb1*=l} zlic*4A4+uwlL9Xr#)3%Y$Rzw#b)w%Gms!{Pl$FjgPf|GM^=i>+>^$$;b$vYeH~F~w zCd~2Rb(z}>kj5+7Xa?wpHC?*6vSbmL@owbiIKdmvtd7MCKJsL>Y$h9K!+)voxROLF z(i!Vjcz3GO`SX^hHx4^yLT5sNv>1k}Wqaf2{8$Q8nH$Ei3S??Dqno0{D?`zc&{@MYo%MY;Bsi1vrbi`Ew6E95oNe38REu!lbRXja&Vjxl2++Y2VxL!(?fu9% zq!n(>{@`|Cx?YyV8b1BlS5fbD_bS}f_f=Q%1zxC8I&b?XV8V#*7pr7k2{1PKU4Pt57G&~`e;!R@hi`p$9 zR?f<6K^MefO&9R4ZT9u1daS?~6%~_@T@|z6#(|tyHbf+)SvQpkNR_R;0^P>8T&MwB zn_VJx7gqK8$fe-?I^3|q1|=;rWwO?h28VXzU)=*t)WfX=1in*V$(UU zZE94EVLNoBLChJkC6@or5yBOO+j>{R6>Q5Bc!)LGCF{T>_@?GH4mQ{DNo!15oNVwK z=)LmYEk1~z=IT^+PmXE;i)K`O&X=ZuAt_?cTKT$L_HtE@Nm&&$-Cr5V=aY!}9$)Y+ zB_GK64pvQ$Y9tc#`&{|V2Za2Pt@aKPmFG3OG11hO1BPw_xg$9C9y=0RoSHINZ>Tns zrPRX6D?}iwEt89G5BA%k40*Vp2kI!DheC|>Nt1%2Em)z(q9^(<)i5>U`j1|!%f7Ny zjmWQ~cV{DTnNQ~UR8nBW`0FuREX7@_HLA6Ci_W35Dk-&n{gHV!A+7FA@oPMgWE+zLVzC?Y#;-GpU`*

{3Cg$ucmPE5$yl+yP~|{F7Oqe5TkI-4&j@}LnINijV|Sf#Y@gXHiJiO-v{py`lZE1iDslm_Oo$z>Q=E`#4OS#Cu- zW9;?@Zkboo>ScZBxArm%M+pw^pdMLRDfm9pAflyxguKIJX}&dHj&3kBiuSvZ%y>_5 zd|M>W14{d5Hplo~z+uC21G62%`-P?Ujm1r#j=eoaPAw4LEm%uvZz$W2{7wgY2UUOw zoG1LGKE*FU^eBnO4oOszm@?R4>vXo9Vl$3a?>@#+yE)(IC4>fpujip#4&`ll^P63+{&d7V(?XQ<{GTPQwrFIbH;oU}hK`Noe*wV<+{=^+wIBLeYx7}3qkAcpnE zEY(hS{9G>cmSTTSsM^mG;vmAy{S5C(kfik5E<|@$*hF3PE_)TG;Z4k5pQRffhQsdK zPEMCn97Z}F<$3BA`^W56Tv&+*D#sj$R2s6WFNFPTE$cBi{*am-_rA15d!$frNx2^k zDS<{YUD8*Q>DhOG`kse-&f~uEX``QD__T?g4C0TM z+9n9z+JXknNWXW4=ysKohRw&i&_~H}rj$FEt>Se{kOw+ECSc+g$AFu}vMCV16y0@d z*XP0rKK~=pJ^UqBHS3=<#{Bi2(xBXlclCV;Q5(u@0e{0`&VQ*!H8EbIZmY!hVE=W;%KlsVk)hL-FQ*|tnQ;NQkz&~jV zIP<$eM0fE=;2xVgxn?@B(=W?c9o!=v7K3dMlw_A%O$_^xU2+)G7?3-itNDPoKycJF zP325FCxosF<*hI0W1IgDdD$XzoO)QhErd#CyH(gQhYh@WFRyrQRFh^i-km*mrQO^s z&@4)?|8=qNjD`$vkUP=XWQU$ZG(O$oeeHUDFLoYyAXkzH$aw2iu3KEm|K4J>*=m;?Rw_}lM>N_a^z%op7%CE@yDiL<` z(Kvy|@IZ}ocTw+S8vYK|hUPoob)|-~6Li)d9hW|u`ded->5o#UvI5C#KP9I6XHX9!HiQCX)g)Gv=-J?#D-DOXeA-N|MrsjfT{p z8XmUn?HGG84~fy(Oa={YyIo0pnlm2ow@@U_OQy`7$%~LX{1iu553FFF6bH?pt}ciO z>-a`dF9*M}4CgO;CM)9Vnej&J#ejzAx!nS$5f?afOBccWZ~Uh4&N=qAZu83|*$G*` z3qUlGV*le_`rTh;E1IX&daLirjmT8sOLqIp_|K~p8$q!o{#E&iUMcWTuT;lR&LaI3 zAG6d8Tf`8_HGfcMTs}k9MEK*~>62bCn{D|jZRQ3d*Y!ch_C`;AY=HxR6?qdQD434E z_^zHxg;mZt#E7)UH%znyRg4)re7WFW3%7FGWBXmV!CPG9+CRr?%OFZpw^=(*OK|r}6dHd{&0n zaAED$8OEvCBC|R3-R;Ly&yIsahId>lIRGn0%h{X8w0q`vsGHDwry zsPKrYb1xo0=9JXRk@r!uSzS_rPIXDfiCz4@rILaYhEnbvZlaKJaVt&7r=wu)sEdhU z%{?4xpV1CVvYJXjzl9RsPkoa0SY%gPRJ<3@QWzr{0qw07FcM_-*_#id|!1_L0ZlEJy zUZTAvppi?c54dE_Gbdn0M+L&ZB)oYndCTxopHzlKDz^m#(CcjdLQd;1SU1jhYI{eX zd67R>PP&x|Ka#Co5cG9_^++X9B8*=pTAbrC8OH(D8R4)OlGy4|kfahbMC%izrw?=y zX!tHE&@kU34Ere?6K?TLq8(-=XnITh`{7+ObwA2fkm2D?L|d-VyguMC^&=chd!Z%# za#S)yYOv&|id@FB8*w;QpL0eSVd&J|!lE1dcP{4v<7h851g2qswnDId3j6T$21P6v z_RndYXN^ri%$Ue-yqOxE$ud(#Ib;gP^fr-6lOfq^9x{JV&(QkdzE<%z=?h3&;(MWEp<~ z0d^bIAefPsIJ&vP?j83jwiQQi-Y;Y%EAmWo74w1ZD2W1GB0PbM4Px;CKkcb7QrS{c z%Ge*H4SO1c=w zqf}Rw7I?ZgGan`+RlG0K^=+Gq43xprhkWdl@2Y`aGT3vig)(Wl-1-CFVOc({7@1;7 z#HBU}i2C8{?|&7e$jQq`PhV_6*?EV;@-{emBM#GC7jB1k_NGdRcCw3QePJa-f?Qi| zwMvP`Jqo5#^@)-vcgK>*>RleeDNHWwv~SNLUhR@9LS@f+GGqK_BYS>+mkROc3B?ql zTw5OqZV5N9Rc$ewopL$H62#z?-__}&U`(gr`k_5c6gY=8LsITjViOY&4}X~9mSuj= zSS`i|N$z!3F>HE=Jc*PyR*EbymVcq?f5#x9Ug%*}w z;W)p%<1)2W@UrjPDb#FF7RhwS)%M1~MI z=*cEq71sZ-2nVM2oG2)corYuiSLvMLkEt$b^V`TI+6}g5*qy9Q!32q0 zJCjOBn~3=`h{CO9oQL@Zw=&rXPEKuE)>C-jXuO*BV+p0uSqd^n9-~s7{x|}OMOLU) zqlk8wdrj9WiF=!+?rEK7dff*FOB5JO_;_bfx_NnoM9w%t(}l(Ufj*}CL$_$o?S~^D z>t_jB*lb|q$(zN)0VHIU(w1K_xZ-uYWJuZLZYT;CF8-Q-JEOMZhgBT)-8b-|G}9|M z(=D*xxvZ%b62UOV2qV>ksyZUr7o>SeWuW~8k#<`THw$of3|06(%k1dB7&dSLd}oTO z@NoI@=EHKvsk%m3YZ4qN{Gh&#(D9sDu&day5Ya93N#$i;GNel&bKygx2{!@}*9@pH z!_F4E30;GU5jp7~5O>rxPp0T0(C1@Bsb0nWOqcYvpVk>3x`|9cTF0(4Q!7bOu(Mc> zt>Vtt@Rz>n&Sd$rD!2QilV%^*25P>X^CaQ*o;M?_9rEBm?g)jFYC;XIjA9Juai4!B zllH^kuKo2|gqF(nAK~tP>LTZFKkhp8-C_dzRLIOXj$bSnn8>M`L_FJ$8hids;ywu$OK%IvC^FT z-;0aqoP8SW$Fb)sEyqecN9YR~nB$6vhz+8@Vnw?LDo5Ft`%slYncr__ZZVL8;K@DM zAJYC>JPpQM5AWh-IwTU|QI~_z2G_H)redu4M-WrrY~Cp_Kw_-j4m3Hqh~4m`-^qs0 zez!kaK8{3wC+yrzSkm=d_J|(#@N@0~3oec^E&vpF@{S%ezNvWBO16>)+_ z!d_CP1t~YHu2xwz$E7MIP5Mj@LoP}zbvSWiA5Ss=p;PQ=jY)0i>qu*;?>j2!N15l0 zJ*l;Q>E_8o;X2Rjtr7E>*1fGYmWV%SBdSXBIWWoU>Z&+nual8V-{v5gl!cW7966B_ z5<%n;#2W_)B)l3@lctvLv!pDr*S4XvE%R>4j>X##qYZIoei4(9D?;Z#Pfs;>%{^~X zAe}maR6u`R)xdShMu(%G(1BAtr% z){n+F*13$>mg#wUc;vG)`62hX83G#Pl8ROp$mt1f3}xmZq@L~RqR|pa-7u;+|gC>c@3rHMNnChI-O?FO z(PKjddD^E;EAb)a`^ejjvcZ?l;Q@y+6%>}wKdQc(Go$}8kKHFlZCTtFOfbeq7WAO$ zQ9~s_<}v-MVL9`7<<(mzA-&11(s#_tzkuuX_AsVh+*}w*VYFsOZ7k`_`u%?7;hjp3 zIijj#%2HUW8s{(i!UTVh5-#=*X3CA+P(e0`LCZ<-cVw(I#j`R($n}uJsGo#VPpi`L z_1ZBFzy4?WJ#6h;_N9DsgM2d3JnMdD_wtDj*b;d{f-v#Rr7&ZGOgB?6iR6 zX@k2TOO1k!n>$~r1WH5pD8)&-!oEweZ7*Vr7%mvrU$_01;zy)|!;EwS#2mq3_+q-F zCpIOs0bk3f$IuvYJ2sqaellJx2fP6h*#G1LP}UjMvr>`Q`#h@%<(EqJ({-t`r~Ljd zF}!qvFuDucvPfPoVW+>x@QtVkhvyqfni8?72Y~yZr^1sPQ`LnIgHqxu?$8Q+dCdF= zTSnbNtSgVTpsW43t10ok zB#)@l;n_H_J#tl(=x?>(pdEC`cWwXBCBknNs9QD2IP+1Lm{BoA<#``k<9*tB&UsKU zm0E78$$#_;mte=RC8qO4dKJ$ucJq4#IbK+<)M)W59KPAvGwD(6;YB4p>62nt8Oxu? ztKva5uS#XBI3bMf+BmsBXQM9Gk`fe(#i7YER3ABi8PsL#TGEX-r7MaBO=ebpbqJm(0|b7xt%3HIF7sMB%e(VUnb)onkT3Iu zVbN7nT)5UIB~u}0v4!K4J;*lp$J0?F;@J#uoE9m%=6iw$=7AyDd$e@Q+oZ4JZ{{qGY4PjJYK33rWuBQ)}G5N^5|)9)}%EmmdwEJKzNPgvff{b!p(e1x*^`XtNy>&8>;i*yA5a)8bYwE9~ zu-lUcEZ(Zicg}}1pC^O|5+=gQw~T6er~BUXj`gh%jt|q)TvoH6xfe{iIc+eQ)nA-v zY-L_k+ngZX*lL#y9NTV~K(x87;{Bb;`bFYi@}}E$anADP=9;?p8M>lny=8^|Puf+_ z1!dp^^7c#kM_+gp^^&^#yg=QDd4H$iE}VQhK);4+M=|wbBc64W90qf}WC(d~!DpNf z-GqGatObd6LGqmr5ZX;$Y*IWHbYf0XD--{u232{F_+d?P^6}Dal&iw)@V@gh@6Kp- zTFTfHIsW_664X2wYTCuF1^BeKAFR{_cX(|~;!S&WO&+ITbQVo{w0_6>twKis+Td2r#RaVXGntfYU(Jh{H*JY)YwJX*6)uNW|r0*ZPVEqDD zZwiFN(iw}dR(n9d|gdeGkM4CFRF zS?CtXh);ZbLoTz?-Ni+ZkF4fpVHkB2nR04&7m)?^VRLk_T=gScKT2HkIX_$y5ygm` zA{}Xm?L>~(uJ_z6n2Ru3Fc(SpU$`xJw!`b<2{ogN75EmynDwe>tcQ9<&I3x9w6_D3 zOHT7XTf3r3s7k*_zJk#t=xM3z?P1$0azo>&vx%%L0}|?XnKV1R?x$|)slZMTX6sQ1(=q&JsN zCxg1Pwa@e*-u$K>Pj9q2b>MKBg_^!uS)cjkbIxBmMYeV0)rB?zSTbcZv2-hp4mym% zS@#6p!<<3af`=!LJ*i1%pB+TaZaerf_7;N>!nufmMi>GfmyhaqUTdJ9TbqeokLWOF z!+D;$!{R{}afoCfxN(MWcGrmamQI%er$R}cK;)%5zp0%c{pI@w&J5?vvxIBcZw`?+ z{E|DWzpB~cziJb6xvlLn!m>vAM*9-a!Rgm3_fwT1UfiCK2#4E~|~P?!=0c zJHjt^XKeZ`QcHi8mp7u`o7GQVrVP$ZpG|XhpQV1Q#rK)R8~MgJmce0TvcZ3`+*#+k zrt0jKQNNG1x=5%wE*ja3kWn1gGCH2>p}C`7RM@?>w5zz;;vrUsFOD)5w$>lgbNz)g zk!2B{PH= zLy64+B)@UgoEV~}q}{l`t1t7N2kqY@JeKlHdyn2hV{xyaCYzo2$OeB1EHq1JOWtLAVr*;r+M zi6mWl5bFcdYcD=1Q6@17@W;+Lh;qp*MS&`r=<_|ThkabL`(3~%8&0k^$79jY)Jwn> z;yS-M3DUvF(P4sSEECh8vVZW{tvr>}9Ysoso_BFyohx0%#a}?KJ)HG4X8wbDvnaKV zn%gwYNqk=^gZvQt`g%0CEGXe!-LJU{psGs>dYL59aN8ijT-H&IkJ*`d35H?ES@~i1 zms>jUQtBT`1<1(1fc^;BATS?j3AG`+oBA>I`)qp95VwvfkFA*^_nJcq0jFZ*P3fx7 zr3JDRCYcq1uDNsTk)^OFsqMAHhtag69%SpP7Z`ReZcB})O?_g!g?Z#i(yiDEKb-N! zvwIxfF1jg_zjk%U+sw8%EqX*7PGS@%ku}P2L$$yMy5}47WX_+Gw+}(bXAw_6IxVFfL z3ia$bkEQu`(16(KbnE?ys=Rt$7p{;DpYmb%L!aJ&nK3a_&pFacP@TKrT&EB z?jGR)3eCy8{B>(=x(KWLp|_NyN!fOt7`#VIb(z_*!@?B>1SS zK5*=t$1tB31W(=Lr4KzkNds`f!WvWF)fa(SsQ6>-lJo8Q5$$iVcoyK{+b-UWhCEcV zy)3NlQN0zs$9xnfdE?q`PDDwwlvHw3ZgJ)-FQX6cEw~ie6^yCPxOp$?c$TYIE9vi_+*L&tX5Y@KnkCeHu0j zs{oi)?|}ErL4ebb+zBMh{=nN+n!0fhhN(AEq~C>Loz%}Xk_KIQs`LX|MYp?0C#oG* zE-YuICT@|T<}TDogA%9D;4}k;-_q=U?Cdp&z221KylqpT`KyYIENGv+05MSX-dwHK z(a|ca1SLjR|4zkcN{?cb&Ap*$4r|^ox>ZY*h2cr*GU`>;7Zm><47HzGG@_N*Ia3j- zx4!6eWw%vSvD02O?z@}j6~<^6@HpdqGHuXgcsD5EsLUbl*l~MHWqXD=sE;guIs-J6 z>EvdwHn4jo)tE`5oKw|!E$`KH_^QSl?51a+1IKNRc66UX#yCCCIsd8@O50K~0oUS6 z9>nXGlDE7&()YSdy7p>3S-yd zL3t2GWf6FgYyD-##KreWoRAi%p|Yf>p`e7T(UXwvaeU^ql(S>bS6WE*U`{MWl@feO z5wlS%>O$3ZOhw7r=gXz1+muAuIAN^U#d7jtZ;WuIrGIi1cF!_o^&l1v%EMS7c8WJ@ zMVfqBlO?2e`0eJe!P~fBx#9jGXI-FDfm&j#xs#edA~}#T$W7fhw@x@F3bSQHKHa7@e+H% zprj5*j>7eLiVKUui|&~M4c5KfeJbm^zS@ke1+%IK>DGPFkZR735PsF3ujOAS8i(!F=o?oT}DpYx?#c`Wi9wd^l5eFgtytlWfM2)dj z2ERWi4Z`_$sXe&6z4GGups%a!jLYUbE*4n%S2r?bhR>Ms4QH={w^)cOj9pz8oEwwk z1JktSycH<|ZL~RUzDWwY@dtNskuk(wKaVM)!O236Rza_x8$qPlFjH7>!U!gr>T5&y z8?%*ko;%v&YeVi?XVw8PPChl-Wyn!|@Z6@E0s97*N1X#6BcwHwZfBvmczbpl+1>f+ zHfa#1>q0uyGUN^3brI`_e%N-;Ku5y3Ya2KSfyHJ_X-kS-52i^~7&Sx{#-1F8@Z+;R zwqB}g4w;+tupDgc_g#wFA%52uK#~t#1l{;3kd%8~%-%XLkx)ZHkYqs}?n}*MKc6fHe+r=PV8Pbia zlZfKhUgz}{CgyI1+gnQ;ng&ZEUkA$kkM_U z% zmSLars#5sV@a!&cR`+R{#?vi3+PSM-^S^dFQv{bvbTVaLO^m9qQs)lL@IHzUHvCQ*uBylQz4nJh_gVR+`=eE44A zV-eaXFwX`OtakgV#t_FU-jP!BvZvRbN@F&#&3^m|cSoi=E>M zZ(%9J2`uukdiIcE45A&HK3t-0U!vLNs^x4E7Y+{TKNQ72%+#xh0Af>Rpywh5VL_hX z#@K?SPO@CC?%H~imNTGGTlnDKCUDK&+Q}axVbyQ81o=;30mvKaUEk(I@)-b@;(kvx zUa`>QpitV!{P~uR8_yhi>{I(HkD&_myyH6gOgnNp4$JwrK!JE$uX3?^w~APtkx6Y$ zwVn(Ot&Kgl1U>B*6LVY`FXy)KRL{=&GvjNn)!5sSZ6bccA6SRKl8j4y;Zv%tp_vn} zH@l6AQ#HvL{;#0%Xbzzm{QZZ@9sZ>8GE<2z#XLyY#ZkeCO0H$7@lZI=SjEMoJR9@h zt)G6UO(-)DIpBuxQ!Zz)1)box1U*`ZE@eBFmjn-O7No*4;EpvrJc{QzP2k4WiXPU(;HVwhNbA1D7=_=N8m^q9yAL!Kco zWrC!u{2$aYF^Q>25kM=CuD(LjIF}$|6{ehcYAi1)KSbJzr{gs3Lm|Y5PxHDG9J{tH zQF?$f_7(%iDRGKLuMk$9?~`?7*Hr4nA2KS|l|BSsHl$@_X9A>#arJI%x6P!11oBI0 zwDsU<^262?j>9`o&>HwNNsMBNm;bsdaOjKPZ8obbAKYH(Wr_i`x55szlW}@|9>X(| zz|`q>*(31ytExKjtL^UtyJwl~H%~djAFyjBC}t=+s^CEx_YhI)(V{T8eH*29P;LS| zB*gp)DGR(@6m*-HMO2h$swwrzYl5E9A^sUr28BsqnwSQ%R=1nW9$^C%4s{yqweDthk-07Ok3nI{~v_ zI&IaHCdU{`4XYeyIh}*1$5nfF^2?LEZKOYa`=_)or0F}+G$OL))6vKnX8CgX5Ui`X zx)-b@2}#I{pi`m;@cbOQnfu^`(+$I-!lWV@=UMYvhSeQNSc!z&jBtzbbL}3FP-*}D z!Xl5K_QAbD6K57Cmr9M%=eCcy%5g(>DmraB9d2~v0XJ6=<>@N72j~%dn$4J4IO@W6 z)xq-`)&?%JInf$4QRJte@ur7K>{>)L23w#t@&X=KYALi<*&+E)vN2GhX`YebT7w|# zZ?}k-+ik7j5j~G}SCaS`OcMY>>o0LW?e|j+pgGIm%307wlsnjfjOg+8E2M7{qYLUjK>HSKvvMYua$d*w_*_2 zxkLbb;P{VGy6S$}`D(r#MQV^qOLzb*}aZ7QD&5KP|5Xz71k!QA$xVNVZVn01h2=C zm(hEm{ZYVNWQ1070wJs|pTtn)JxkJ7r2!FQr4-w;f%$~6J@|Q_0isW{B}UI77XTfm zWSMn;|A7^n-KEt?8DA0Sj@C7r+-qngn=vrc+yx(CZCP_@yaOm%e*q~vSOBYk0`MBH z0s;D5DT`kyJK$d(!nCQ+9MXCwpAqVtH?O{5ktW)8qy%Q5Pz{TaYri>LPsJH?v6KnQ z*7V&}CF&u&#v9q_QFr&n@J`LjIhay+;lmd>1mVw1D2Z5EKS4iBkX5nSDCJYIi2C}M z)0LlzxG@PQs>ihkYJ$c_qr8{@vokLy<$=#k)(pn~uC5C!k`~Zue(|LX=VD`^vD1DD(qFf%AjD5iIOB z#aT$h`^w7!UF8W2fX?7~(e<~wMH0-|U|lz)Mhx!Op9qaaw&BzCkm)*BL< zdM}1N^z|Dpf6GD|WE56s<+IIvw~F1y0cJ8A>q)78cqOSQitrRwUKg zpTDs3E27fy=Y@DJ`&f>tZ1mJcLV6_H@{s-`Ds zr06kz5FW0+anE6A&NF<>1EIMV6%!86xAdc`=Z0#K*JsGKXm3CWP3)`Sql{&9P7H1X z6x--eK=~%?W?68#e&V$|or219I3=cq={|G2u_C1cn+%EEIVz>P9)T9sz>S>Pbt*4~ zoVW$=ahyfPwi6t%QC%@XUoX$S&PZ*q)JIDNkp#(OSIEjGy?su*3x)9I1$WId4k7T2 zy&W)CFjD5o-)o&;)O#jyy*tWoptNCbl8b(Xpc$)8t(ljp@-2ZjE04CyQmfgN)M z$=P8hqCdYf0z|DY-US$LDp_=Vviq8FqtH`&`Lu$C$U)58|6^0M*IrV8p-D6ABi__C{r?C zQbJ_(3i!NIS_1bC?LK!my}SLPQrW+gD`?nr-Rl)^B!{Q>+{LeTIi5?8Vnaq*WfyTx zh$p1sh9S~fyUK0%+S$>#rQu2CS}Z9bu}hrTKPBRy-??380GhQ=$bbKPAYk;q>j~<_ret1#BHG3Du?LYMY9gT#SZDd}1&L>?YMEG5zjgZ%xr?>+ape{9 z0|T$aIMk^hCvmFFskWQ%a3iJ%B}Uo}!zxyXPu!s1As7lNY#CNX<-7|GBt=c!sUBd} zVibd}z08jeRi0k8YCMV3X@qzYn3cSyHZR#_FFKZH_B~?elMqOef9g~-a zU;89M9Fs7NXVbIcjvk`^^2=K=TX{C5In~f2zpk@{Mk8aX*kj7o9;yqs_NQS5hUN_F z2WAfPK+$4(RiFn18#em=&r@)@%4hPjC8h_t&?)LxXwJF%o76zqq?=Jt1w65s^a1vM z2KC&QTgSI=GaeO&Umo9-MJ*^NEPr*^Ea&Bfd&s5?Z>-GU2`s>&AT>tPeM}n8eWc3o zi-AEY<(I9_BRgO-Si+JEH7NB`dU9Py{Xt(e8fJ#m-%#sdrnskToTd0rmaS-&qpLVq zaMb{qqYYB(F3uNe|6`jf409^Bg%3aJi`J>5Jk(hJThJ+FIIt+ktO^7S6-LpP>Qbl+r??HHD^~Uimoor>CjHHG1HS7w z?TK;bg{}97mkS8PZ`Tt15HXBUOo5rk(>-V0C0#rCXk^u^kq=|lpRJ5TJ^W^M+~$P= zSF{3Z@tcqbtg>zlGp3-j?5$d|TCI_cmhG@;{H{8O^sVRGg?UQFb4T}}QHQxD;}}XA zRl4vHaqe!1gazcDcLQ1noLfa~wG07RkP|lo;rsSv3M}8Mw!UYM+A%0xG^x3|ugAPD z4XpQT_+vm82V!?&e*ZNmX|K7jj3 zp^o|TZ7ZFf!E7%M7P=V{R8_O%M#@PElmU@&ZpAqT#QX#+yH; z^orGUfETFnEi&-n{&o#8LRp%tXXzw`+TTY4vh`QM7ut9hndxe82UN?ypuxhH?opaP z{r@%Gk;9R5M9i&qxAdl6Oy_R+KuHs3Q;+`jk=ju#UVM=Wh0nY5%^I{TdOh?)cD{yN z1K=iu0N&93E3ar)2*_Crof@0uYS!))JUkb$R`OIk;8;JbJ|{zoyi4%=7WE(Wb>v~5 zpU|&K#3c0<9icY<$VAT*Mmh#W&Dx+ zyBUfCFewoCL1}2ZaX?0}X)+0sF4;p?{fU?sK?cZ7=q}j(YXTsKGrTPG&8Wk^-STNW z-H@2z8;|;IzqdjsChbrW$mHphBpV%MaxrDiq1SHWb&QPyHbvkF_$+AF?r<|!lo#5C zen-dV&(vdNOXXglaI-d%-=0)m%&L-V|cwgndGz`OEyN2(b;v*ppW-KaQH*#BUL+6KhF{v f`Q{u??`oM_Py!y`7Uw?z{9L(ctXK5c_51$^gMK{! literal 0 HcmV?d00001 From 7fb6bab9a53475f96c8ee984c913d67ca25c2e43 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Tue, 28 May 2024 14:09:41 -0400 Subject: [PATCH 09/38] Closes #16290: Capture entire object in changelog data --- .../extras/api/serializers_/change_logging.py | 10 +++ netbox/extras/models/change_logging.py | 72 +++++++++++++++++- netbox/extras/tests/test_changelog.py | 28 +++++++ netbox/extras/views.py | 6 +- netbox/project-static/dist/netbox.css | Bin 551636 -> 551631 bytes .../project-static/styles/custom/_code.scss | 4 +- netbox/templates/extras/objectchange.html | 4 +- netbox/utilities/serialization.py | 13 +--- 8 files changed, 119 insertions(+), 18 deletions(-) diff --git a/netbox/extras/api/serializers_/change_logging.py b/netbox/extras/api/serializers_/change_logging.py index 32585637c..46fb901ff 100644 --- a/netbox/extras/api/serializers_/change_logging.py +++ b/netbox/extras/api/serializers_/change_logging.py @@ -30,6 +30,16 @@ class ObjectChangeSerializer(BaseModelSerializer): changed_object = serializers.SerializerMethodField( read_only=True ) + prechange_data = serializers.JSONField( + source='prechange_data_clean', + read_only=True, + allow_null=True + ) + postchange_data = serializers.JSONField( + source='postchange_data_clean', + read_only=True, + allow_null=True + ) class Meta: model = ObjectChange diff --git a/netbox/extras/models/change_logging.py b/netbox/extras/models/change_logging.py index ebcebc09a..8451a0d15 100644 --- a/netbox/extras/models/change_logging.py +++ b/netbox/extras/models/change_logging.py @@ -1,12 +1,17 @@ +from functools import cached_property + from django.conf import settings from django.contrib.contenttypes.fields import GenericForeignKey from django.core.exceptions import ValidationError from django.db import models from django.urls import reverse from django.utils.translation import gettext_lazy as _ +from mptt.models import MPTTModel from core.models import ObjectType from extras.choices import * +from netbox.models.features import ChangeLoggingMixin +from utilities.data import shallow_compare_dict from ..querysets import ObjectChangeQuerySet __all__ = ( @@ -136,6 +141,71 @@ class ObjectChange(models.Model): def get_action_color(self): return ObjectChangeActionChoices.colors.get(self.action) - @property + @cached_property def has_changes(self): return self.prechange_data != self.postchange_data + + @cached_property + def diff_exclude_fields(self): + """ + Return a set of attributes which should be ignored when calculating a diff + between the pre- and post-change data. (For instance, it would not make + sense to compare the "last updated" times as these are expected to differ.) + """ + model = self.changed_object_type.model_class() + attrs = set() + + # Exclude auto-populated change tracking fields + if issubclass(model, ChangeLoggingMixin): + attrs.update({'created', 'last_updated'}) + + # Exclude MPTT-internal fields + if issubclass(model, MPTTModel): + attrs.update({'level', 'lft', 'rght', 'tree_id'}) + + return attrs + + def get_clean_data(self, prefix): + """ + Return only the pre-/post-change attributes which are relevant for calculating a diff. + """ + ret = {} + change_data = getattr(self, f'{prefix}_data') or {} + for k, v in change_data.items(): + if k not in self.diff_exclude_fields and not k.startswith('_'): + ret[k] = v + return ret + + @cached_property + def prechange_data_clean(self): + return self.get_clean_data('prechange') + + @cached_property + def postchange_data_clean(self): + return self.get_clean_data('postchange') + + def diff(self): + """ + Return a dictionary of pre- and post-change values for attributes which have changed. + """ + prechange_data = self.prechange_data_clean + postchange_data = self.postchange_data_clean + + # Determine which attributes have changed + if self.action == ObjectChangeActionChoices.ACTION_CREATE: + changed_attrs = sorted(postchange_data.keys()) + elif self.action == ObjectChangeActionChoices.ACTION_DELETE: + changed_attrs = sorted(prechange_data.keys()) + else: + # TODO: Support deep (recursive) comparison + changed_data = shallow_compare_dict(prechange_data, postchange_data) + changed_attrs = sorted(changed_data.keys()) + + return { + 'pre': { + k: prechange_data.get(k) for k in changed_attrs + }, + 'post': { + k: postchange_data.get(k) for k in changed_attrs + }, + } diff --git a/netbox/extras/tests/test_changelog.py b/netbox/extras/tests/test_changelog.py index d9d6f1f45..aac526e0f 100644 --- a/netbox/extras/tests/test_changelog.py +++ b/netbox/extras/tests/test_changelog.py @@ -75,6 +75,10 @@ class ChangeLogViewTest(ModelViewTestCase): self.assertEqual(oc.postchange_data['custom_fields']['cf2'], form_data['cf_cf2']) self.assertEqual(oc.postchange_data['tags'], ['Tag 1', 'Tag 2']) + # Check that private attributes were included in raw data but not display data + self.assertIn('_name', oc.postchange_data) + self.assertNotIn('_name', oc.postchange_data_clean) + def test_update_object(self): site = Site(name='Site 1', slug='site-1') site.save() @@ -112,6 +116,12 @@ class ChangeLogViewTest(ModelViewTestCase): self.assertEqual(oc.postchange_data['custom_fields']['cf2'], form_data['cf_cf2']) self.assertEqual(oc.postchange_data['tags'], ['Tag 3']) + # Check that private attributes were included in raw data but not display data + self.assertIn('_name', oc.prechange_data) + self.assertNotIn('_name', oc.prechange_data_clean) + self.assertIn('_name', oc.postchange_data) + self.assertNotIn('_name', oc.postchange_data_clean) + def test_delete_object(self): site = Site( name='Site 1', @@ -142,6 +152,10 @@ class ChangeLogViewTest(ModelViewTestCase): self.assertEqual(oc.prechange_data['tags'], ['Tag 1', 'Tag 2']) self.assertEqual(oc.postchange_data, None) + # Check that private attributes were included in raw data but not display data + self.assertIn('_name', oc.prechange_data) + self.assertNotIn('_name', oc.prechange_data_clean) + def test_bulk_update_objects(self): sites = ( Site(name='Site 1', slug='site-1', status=SiteStatusChoices.STATUS_ACTIVE), @@ -338,6 +352,10 @@ class ChangeLogAPITest(APITestCase): self.assertEqual(oc.postchange_data['custom_fields'], data['custom_fields']) self.assertEqual(oc.postchange_data['tags'], ['Tag 1', 'Tag 2']) + # Check that private attributes were included in raw data but not display data + self.assertIn('_name', oc.postchange_data) + self.assertNotIn('_name', oc.postchange_data_clean) + def test_update_object(self): site = Site(name='Site 1', slug='site-1') site.save() @@ -370,6 +388,12 @@ class ChangeLogAPITest(APITestCase): self.assertEqual(oc.postchange_data['custom_fields'], data['custom_fields']) self.assertEqual(oc.postchange_data['tags'], ['Tag 3']) + # Check that private attributes were included in raw data but not display data + self.assertIn('_name', oc.prechange_data) + self.assertNotIn('_name', oc.prechange_data_clean) + self.assertIn('_name', oc.postchange_data) + self.assertNotIn('_name', oc.postchange_data_clean) + def test_delete_object(self): site = Site( name='Site 1', @@ -398,6 +422,10 @@ class ChangeLogAPITest(APITestCase): self.assertEqual(oc.prechange_data['tags'], ['Tag 1', 'Tag 2']) self.assertEqual(oc.postchange_data, None) + # Check that private attributes were included in raw data but not display data + self.assertIn('_name', oc.prechange_data) + self.assertNotIn('_name', oc.prechange_data_clean) + def test_bulk_create_objects(self): data = ( { diff --git a/netbox/extras/views.py b/netbox/extras/views.py index 3a82539fb..82f519c00 100644 --- a/netbox/extras/views.py +++ b/netbox/extras/views.py @@ -723,15 +723,15 @@ class ObjectChangeView(generic.ObjectView): if not instance.prechange_data and instance.action in ['update', 'delete'] and prev_change: non_atomic_change = True - prechange_data = prev_change.postchange_data + prechange_data = prev_change.postchange_data_clean else: non_atomic_change = False - prechange_data = instance.prechange_data + prechange_data = instance.prechange_data_clean if prechange_data and instance.postchange_data: diff_added = shallow_compare_dict( prechange_data or dict(), - instance.postchange_data or dict(), + instance.postchange_data_clean or dict(), exclude=['last_updated'], ) diff_removed = { diff --git a/netbox/project-static/dist/netbox.css b/netbox/project-static/dist/netbox.css index a1179a319c22f53f751e9e2ecc1ed918e85e8585..082a5b64d2374a533a0cd977972c5efb72012a24 100644 GIT binary patch delta 55 zcmca|Rq^~)#fBEf7N!>F7M2#)7Pc1lEgT9d;z{{MDXB%eMTseyrNveT)&+?vDVcfc L+ig-fX0QPOLP!(K delta 45 zcmX?qRq@JI#fBEf7N!>F7M2#)7Pc1lEgT9d(-ZyKC8ilOvQ2MH;Sk;Km%`D=1^|9m B4$lAp diff --git a/netbox/project-static/styles/custom/_code.scss b/netbox/project-static/styles/custom/_code.scss index 4b068b94d..1be563b21 100644 --- a/netbox/project-static/styles/custom/_code.scss +++ b/netbox/project-static/styles/custom/_code.scss @@ -1,7 +1,7 @@ // Serialized data from change records pre.change-data { - padding-right: 0; - padding-left: 0; + border-radius: 0; + padding: 0; // Display each line individually for highlighting > span { diff --git a/netbox/templates/extras/objectchange.html b/netbox/templates/extras/objectchange.html index 0aee6185b..368a71821 100644 --- a/netbox/templates/extras/objectchange.html +++ b/netbox/templates/extras/objectchange.html @@ -112,7 +112,7 @@ {% if object.prechange_data %} {% spaceless %}

-                  {% for k, v in object.prechange_data.items %}
+                  {% for k, v in object.prechange_data_clean.items %}
                     {{ k }}: {{ v|json }}
                   {% endfor %}
                 
@@ -132,7 +132,7 @@ {% if object.postchange_data %} {% spaceless %}
-                      {% for k, v in object.postchange_data.items %}
+                      {% for k, v in object.postchange_data_clean.items %}
                         {{ k }}: {{ v|json }}
                       {% endfor %}
                     
diff --git a/netbox/utilities/serialization.py b/netbox/utilities/serialization.py index f7a2002d1..af1169e97 100644 --- a/netbox/utilities/serialization.py +++ b/netbox/utilities/serialization.py @@ -2,7 +2,6 @@ import json from django.contrib.contenttypes.models import ContentType from django.core import serializers -from mptt.models import MPTTModel from extras.utils import is_taggable @@ -16,8 +15,7 @@ def serialize_object(obj, resolve_tags=True, extra=None, exclude=None): """ Return a generic JSON representation of an object using Django's built-in serializer. (This is used for things like change logging, not the REST API.) Optionally include a dictionary to supplement the object data. A list of keys - can be provided to exclude them from the returned dictionary. Private fields (prefaced with an underscore) are - implicitly excluded. + can be provided to exclude them from the returned dictionary. Args: obj: The object to serialize @@ -30,11 +28,6 @@ def serialize_object(obj, resolve_tags=True, extra=None, exclude=None): data = json.loads(json_str)[0]['fields'] exclude = exclude or [] - # Exclude any MPTTModel fields - if issubclass(obj.__class__, MPTTModel): - for field in ['level', 'lft', 'rght', 'tree_id']: - data.pop(field) - # Include custom_field_data as "custom_fields" if hasattr(obj, 'custom_field_data'): data['custom_fields'] = data.pop('custom_field_data') @@ -45,9 +38,9 @@ def serialize_object(obj, resolve_tags=True, extra=None, exclude=None): tags = getattr(obj, '_tags', None) or obj.tags.all() data['tags'] = sorted([tag.name for tag in tags]) - # Skip excluded and private (prefixes with an underscore) attributes + # Skip any excluded attributes for key in list(data.keys()): - if key in exclude or (isinstance(key, str) and key.startswith('_')): + if key in exclude: data.pop(key) # Append any extra data From f0a233dfc4926818ee1bfc07294f93206edaf368 Mon Sep 17 00:00:00 2001 From: Arthur Hanson Date: Wed, 29 May 2024 07:22:59 -0700 Subject: [PATCH 10/38] 16202 fix mapit button for internationalized decimal seperator (#16270) * 16202 fix mapit button for internationalized decimal seperator * 16202 revert untranslate * 16202 revert untranslate --- netbox/templates/dcim/device.html | 3 ++- netbox/templates/dcim/site.html | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/netbox/templates/dcim/device.html b/netbox/templates/dcim/device.html index bf53ef002..12ba4a8d4 100644 --- a/netbox/templates/dcim/device.html +++ b/netbox/templates/dcim/device.html @@ -5,6 +5,7 @@ {% load helpers %} {% load plugins %} {% load i18n %} +{% load l10n %} {% load mptt %} {% block content %} @@ -63,7 +64,7 @@ {% if object.latitude and object.longitude %} {% if config.MAPS_URL %}
diff --git a/netbox/templates/dcim/site.html b/netbox/templates/dcim/site.html index d3a44f3ac..1ad0a75ae 100644 --- a/netbox/templates/dcim/site.html +++ b/netbox/templates/dcim/site.html @@ -3,6 +3,7 @@ {% load plugins %} {% load tz %} {% load i18n %} +{% load l10n %} {% load mptt %} {% block breadcrumbs %} @@ -95,7 +96,7 @@ {% if object.latitude and object.longitude %} {% if config.MAPS_URL %} From f77a1b8c5994e1bb3a54e24cd411ca4148c9ed78 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Wed, 29 May 2024 11:37:25 -0400 Subject: [PATCH 11/38] Remove abhi1693 from issue triage rotation --- .github/workflows/auto-assign-issue.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/auto-assign-issue.yml b/.github/workflows/auto-assign-issue.yml index e32e23c84..4e93d9f0d 100644 --- a/.github/workflows/auto-assign-issue.yml +++ b/.github/workflows/auto-assign-issue.yml @@ -16,6 +16,6 @@ jobs: if: "contains(github.event.issue.labels.*.name, 'status: needs triage')" with: # Weighted assignments - assignees: arthanson:3, jeffgdotorg:3, jeremystretch:3, abhi1693, DanSheps + assignees: arthanson:3, jeffgdotorg:3, jeremystretch:3, DanSheps numOfAssignee: 1 abortIfPreviousAssignees: true From 82eaa48d9c5c14031bb8bb0ee752ff84ce7ec1e2 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 30 May 2024 08:37:24 -0400 Subject: [PATCH 12/38] Skip CI if changes are limited to non-code paths --- .github/workflows/ci.yml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d794786f1..b32f519bc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,7 +1,18 @@ name: CI -on: [push, pull_request] + +on: + push: + paths-ignore: + - 'contrib/**' + - 'docs/**' + pull_request: + paths-ignore: + - 'contrib/**' + - 'docs/**' + permissions: contents: read + jobs: build: runs-on: ubuntu-latest From ef315b1efaf73f584048249d75b462dcb16381ec Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 30 May 2024 09:56:56 -0400 Subject: [PATCH 13/38] Add GitHub action to run makemessages --- .../workflows/update-translation-strings.yml | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 .github/workflows/update-translation-strings.yml diff --git a/.github/workflows/update-translation-strings.yml b/.github/workflows/update-translation-strings.yml new file mode 100644 index 000000000..d9aa7c3c6 --- /dev/null +++ b/.github/workflows/update-translation-strings.yml @@ -0,0 +1,35 @@ +name: Update translation strings + +on: workflow_dispatch + +permissions: + contents: read + +jobs: + makemessages: + runs-on: ubuntu-latest + env: + NETBOX_CONFIGURATION: netbox.configuration_testing + + steps: + - name: Check out repo + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: 3.11 + + - name: Install dependencies & set up configuration + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + + - name: Run makemessages + run: python netbox/manage.py makemessages -l en + + - name: Commit changes + uses: EndBug/add-and-commit@v9 + with: + add: 'netbox/translations/' + message: 'Update source translation strings' From 84d9d55decc032ba305e758f24a10e86b82a8045 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 30 May 2024 10:14:43 -0400 Subject: [PATCH 14/38] Install gettext --- .github/workflows/update-translation-strings.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/update-translation-strings.yml b/.github/workflows/update-translation-strings.yml index d9aa7c3c6..9e68ae3c1 100644 --- a/.github/workflows/update-translation-strings.yml +++ b/.github/workflows/update-translation-strings.yml @@ -20,7 +20,10 @@ jobs: with: python-version: 3.11 - - name: Install dependencies & set up configuration + - name: Install system dependencies + run: sudo apt install -y gettext + + - name: Install Python dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt From ea13a691a900fed34b2d05ad8bc04971ee43507c Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 30 May 2024 10:21:02 -0400 Subject: [PATCH 15/38] Fix action permissions --- .github/workflows/update-translation-strings.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/update-translation-strings.yml b/.github/workflows/update-translation-strings.yml index 9e68ae3c1..a2802ab92 100644 --- a/.github/workflows/update-translation-strings.yml +++ b/.github/workflows/update-translation-strings.yml @@ -3,7 +3,7 @@ name: Update translation strings on: workflow_dispatch permissions: - contents: read + contents: write jobs: makemessages: @@ -35,4 +35,5 @@ jobs: uses: EndBug/add-and-commit@v9 with: add: 'netbox/translations/' + default_author: github_actions message: 'Update source translation strings' From c52a34d0f3666a643f024b0466aa1e032b5b3860 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 30 May 2024 14:23:18 +0000 Subject: [PATCH 16/38] Update source translation strings --- netbox/translations/en/LC_MESSAGES/django.po | 10305 +++++++++-------- 1 file changed, 5481 insertions(+), 4824 deletions(-) diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index be10d5686..51072d017 100644 --- a/netbox/translations/en/LC_MESSAGES/django.po +++ b/netbox/translations/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-05-22 17:41+0000\n" +"POT-Creation-Date: 2024-05-30 14:23+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,7060 +18,7549 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: account/tables.py:27 templates/account/token.html:22 -#: templates/users/token.html:17 users/forms/bulk_import.py:39 -#: users/forms/model_forms.py:113 +#: netbox/account/tables.py:27 netbox/templates/account/token.html:22 +#: netbox/templates/users/token.html:17 netbox/users/forms/bulk_import.py:39 +#: netbox/users/forms/model_forms.py:113 msgid "Key" msgstr "" -#: account/tables.py:31 users/forms/filtersets.py:133 +#: netbox/account/tables.py:31 netbox/users/forms/filtersets.py:133 msgid "Write Enabled" msgstr "" -#: account/tables.py:35 core/tables/jobs.py:29 core/tables/tasks.py:79 -#: extras/choices.py:138 extras/tables/tables.py:499 -#: templates/account/token.html:43 templates/core/configrevision.html:26 -#: templates/core/configrevision_restore.html:12 templates/core/job.html:51 -#: templates/core/rq_task.html:16 templates/core/rq_task.html:73 -#: templates/core/rq_worker.html:14 templates/extras/htmx/script_result.html:12 -#: templates/extras/journalentry.html:22 templates/generic/object.html:58 -#: templates/users/token.html:35 +#: netbox/account/tables.py:35 netbox/core/tables/jobs.py:29 +#: netbox/core/tables/tasks.py:79 netbox/extras/choices.py:138 +#: netbox/extras/tables/tables.py:499 netbox/templates/account/token.html:43 +#: netbox/templates/core/configrevision.html:26 +#: netbox/templates/core/configrevision_restore.html:12 +#: netbox/templates/core/job.html:51 netbox/templates/core/rq_task.html:16 +#: netbox/templates/core/rq_task.html:73 +#: netbox/templates/core/rq_worker.html:14 +#: netbox/templates/extras/htmx/script_result.html:12 +#: netbox/templates/extras/journalentry.html:22 +#: netbox/templates/generic/object.html:58 netbox/templates/users/token.html:35 msgid "Created" msgstr "" -#: account/tables.py:39 templates/account/token.html:47 -#: templates/users/token.html:39 users/forms/bulk_edit.py:117 -#: users/forms/filtersets.py:137 +#: netbox/account/tables.py:39 netbox/templates/account/token.html:47 +#: netbox/templates/users/token.html:39 netbox/users/forms/bulk_edit.py:117 +#: netbox/users/forms/filtersets.py:137 msgid "Expires" msgstr "" -#: account/tables.py:42 users/forms/filtersets.py:142 +#: netbox/account/tables.py:42 netbox/users/forms/filtersets.py:142 msgid "Last Used" msgstr "" -#: account/tables.py:45 templates/account/token.html:55 -#: templates/users/token.html:47 users/forms/bulk_edit.py:122 -#: users/forms/model_forms.py:125 +#: netbox/account/tables.py:45 netbox/templates/account/token.html:55 +#: netbox/templates/users/token.html:47 netbox/users/forms/bulk_edit.py:122 +#: netbox/users/forms/model_forms.py:125 msgid "Allowed IPs" msgstr "" -#: account/views.py:197 +#: netbox/account/views.py:197 msgid "Your preferences have been updated." msgstr "" -#: circuits/choices.py:21 dcim/choices.py:20 dcim/choices.py:102 -#: dcim/choices.py:174 dcim/choices.py:220 dcim/choices.py:1457 -#: dcim/choices.py:1533 dcim/choices.py:1583 virtualization/choices.py:20 -#: virtualization/choices.py:45 vpn/choices.py:18 +#: netbox/circuits/choices.py:21 netbox/dcim/choices.py:20 +#: netbox/dcim/choices.py:102 netbox/dcim/choices.py:174 +#: netbox/dcim/choices.py:220 netbox/dcim/choices.py:1459 +#: netbox/dcim/choices.py:1535 netbox/dcim/choices.py:1585 +#: netbox/virtualization/choices.py:20 netbox/virtualization/choices.py:45 +#: netbox/vpn/choices.py:18 msgid "Planned" msgstr "" -#: circuits/choices.py:22 netbox/navigation/menu.py:290 +#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:290 msgid "Provisioning" msgstr "" -#: circuits/choices.py:23 core/tables/tasks.py:22 dcim/choices.py:22 -#: dcim/choices.py:103 dcim/choices.py:173 dcim/choices.py:219 -#: dcim/choices.py:1532 dcim/choices.py:1582 extras/tables/tables.py:385 -#: ipam/choices.py:31 ipam/choices.py:49 ipam/choices.py:69 ipam/choices.py:154 -#: templates/extras/configcontext.html:25 templates/users/user.html:37 -#: users/forms/bulk_edit.py:38 virtualization/choices.py:22 -#: virtualization/choices.py:44 vpn/choices.py:19 wireless/choices.py:25 +#: netbox/circuits/choices.py:23 netbox/core/tables/tasks.py:22 +#: netbox/dcim/choices.py:22 netbox/dcim/choices.py:103 +#: netbox/dcim/choices.py:173 netbox/dcim/choices.py:219 +#: netbox/dcim/choices.py:1534 netbox/dcim/choices.py:1584 +#: netbox/extras/tables/tables.py:385 netbox/ipam/choices.py:31 +#: netbox/ipam/choices.py:49 netbox/ipam/choices.py:69 +#: netbox/ipam/choices.py:154 netbox/templates/extras/configcontext.html:25 +#: netbox/templates/users/user.html:37 netbox/users/forms/bulk_edit.py:38 +#: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:44 +#: netbox/vpn/choices.py:19 netbox/wireless/choices.py:25 msgid "Active" msgstr "" -#: circuits/choices.py:24 dcim/choices.py:172 dcim/choices.py:218 -#: dcim/choices.py:1531 dcim/choices.py:1584 virtualization/choices.py:24 -#: virtualization/choices.py:43 +#: netbox/circuits/choices.py:24 netbox/dcim/choices.py:172 +#: netbox/dcim/choices.py:218 netbox/dcim/choices.py:1533 +#: netbox/dcim/choices.py:1586 netbox/virtualization/choices.py:24 +#: netbox/virtualization/choices.py:43 msgid "Offline" msgstr "" -#: circuits/choices.py:25 +#: netbox/circuits/choices.py:25 msgid "Deprovisioning" msgstr "" -#: circuits/choices.py:26 +#: netbox/circuits/choices.py:26 msgid "Decommissioned" msgstr "" -#: circuits/filtersets.py:29 circuits/filtersets.py:196 dcim/filtersets.py:97 -#: dcim/filtersets.py:151 dcim/filtersets.py:211 dcim/filtersets.py:297 -#: dcim/filtersets.py:406 dcim/filtersets.py:969 dcim/filtersets.py:1305 -#: dcim/filtersets.py:1832 dcim/filtersets.py:2075 dcim/filtersets.py:2133 -#: ipam/filtersets.py:339 ipam/filtersets.py:945 -#: virtualization/filtersets.py:45 virtualization/filtersets.py:173 -#: vpn/filtersets.py:377 +#: netbox/circuits/filtersets.py:29 netbox/circuits/filtersets.py:196 +#: netbox/dcim/filtersets.py:97 netbox/dcim/filtersets.py:151 +#: netbox/dcim/filtersets.py:211 netbox/dcim/filtersets.py:297 +#: netbox/dcim/filtersets.py:406 netbox/dcim/filtersets.py:969 +#: netbox/dcim/filtersets.py:1305 netbox/dcim/filtersets.py:1832 +#: netbox/dcim/filtersets.py:2075 netbox/dcim/filtersets.py:2133 +#: netbox/ipam/filtersets.py:339 netbox/ipam/filtersets.py:945 +#: netbox/virtualization/filtersets.py:45 +#: netbox/virtualization/filtersets.py:173 netbox/vpn/filtersets.py:377 msgid "Region (ID)" msgstr "" -#: circuits/filtersets.py:36 circuits/filtersets.py:203 dcim/filtersets.py:104 -#: dcim/filtersets.py:157 dcim/filtersets.py:218 dcim/filtersets.py:304 -#: dcim/filtersets.py:413 dcim/filtersets.py:976 dcim/filtersets.py:1312 -#: dcim/filtersets.py:1839 dcim/filtersets.py:2082 dcim/filtersets.py:2140 -#: extras/filtersets.py:461 ipam/filtersets.py:346 ipam/filtersets.py:952 -#: virtualization/filtersets.py:52 virtualization/filtersets.py:180 -#: vpn/filtersets.py:372 +#: netbox/circuits/filtersets.py:36 netbox/circuits/filtersets.py:203 +#: netbox/dcim/filtersets.py:104 netbox/dcim/filtersets.py:157 +#: netbox/dcim/filtersets.py:218 netbox/dcim/filtersets.py:304 +#: netbox/dcim/filtersets.py:413 netbox/dcim/filtersets.py:976 +#: netbox/dcim/filtersets.py:1312 netbox/dcim/filtersets.py:1839 +#: netbox/dcim/filtersets.py:2082 netbox/dcim/filtersets.py:2140 +#: netbox/extras/filtersets.py:461 netbox/ipam/filtersets.py:346 +#: netbox/ipam/filtersets.py:952 netbox/virtualization/filtersets.py:52 +#: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:372 msgid "Region (slug)" msgstr "" -#: circuits/filtersets.py:42 circuits/filtersets.py:209 dcim/filtersets.py:127 -#: dcim/filtersets.py:224 dcim/filtersets.py:310 dcim/filtersets.py:419 -#: dcim/filtersets.py:982 dcim/filtersets.py:1318 dcim/filtersets.py:1845 -#: dcim/filtersets.py:2088 dcim/filtersets.py:2146 ipam/filtersets.py:352 -#: ipam/filtersets.py:958 virtualization/filtersets.py:58 -#: virtualization/filtersets.py:186 +#: netbox/circuits/filtersets.py:42 netbox/circuits/filtersets.py:209 +#: netbox/dcim/filtersets.py:127 netbox/dcim/filtersets.py:224 +#: netbox/dcim/filtersets.py:310 netbox/dcim/filtersets.py:419 +#: netbox/dcim/filtersets.py:982 netbox/dcim/filtersets.py:1318 +#: netbox/dcim/filtersets.py:1845 netbox/dcim/filtersets.py:2088 +#: netbox/dcim/filtersets.py:2146 netbox/ipam/filtersets.py:352 +#: netbox/ipam/filtersets.py:958 netbox/virtualization/filtersets.py:58 +#: netbox/virtualization/filtersets.py:186 msgid "Site group (ID)" msgstr "" -#: circuits/filtersets.py:49 circuits/filtersets.py:216 dcim/filtersets.py:134 -#: dcim/filtersets.py:231 dcim/filtersets.py:317 dcim/filtersets.py:426 -#: dcim/filtersets.py:989 dcim/filtersets.py:1325 dcim/filtersets.py:1852 -#: dcim/filtersets.py:2095 dcim/filtersets.py:2153 extras/filtersets.py:467 -#: ipam/filtersets.py:359 ipam/filtersets.py:965 -#: virtualization/filtersets.py:65 virtualization/filtersets.py:193 +#: netbox/circuits/filtersets.py:49 netbox/circuits/filtersets.py:216 +#: netbox/dcim/filtersets.py:134 netbox/dcim/filtersets.py:231 +#: netbox/dcim/filtersets.py:317 netbox/dcim/filtersets.py:426 +#: netbox/dcim/filtersets.py:989 netbox/dcim/filtersets.py:1325 +#: netbox/dcim/filtersets.py:1852 netbox/dcim/filtersets.py:2095 +#: netbox/dcim/filtersets.py:2153 netbox/extras/filtersets.py:467 +#: netbox/ipam/filtersets.py:359 netbox/ipam/filtersets.py:965 +#: netbox/virtualization/filtersets.py:65 +#: netbox/virtualization/filtersets.py:193 msgid "Site group (slug)" msgstr "" -#: circuits/filtersets.py:54 circuits/forms/bulk_edit.py:186 -#: circuits/forms/bulk_edit.py:214 circuits/forms/bulk_import.py:126 -#: circuits/forms/filtersets.py:49 circuits/forms/filtersets.py:169 -#: circuits/forms/filtersets.py:207 circuits/forms/model_forms.py:136 -#: circuits/forms/model_forms.py:152 circuits/tables/circuits.py:105 -#: dcim/forms/bulk_edit.py:167 dcim/forms/bulk_edit.py:239 -#: dcim/forms/bulk_edit.py:575 dcim/forms/bulk_edit.py:771 -#: dcim/forms/bulk_import.py:130 dcim/forms/bulk_import.py:184 -#: dcim/forms/bulk_import.py:257 dcim/forms/bulk_import.py:485 -#: dcim/forms/bulk_import.py:1262 dcim/forms/bulk_import.py:1290 -#: dcim/forms/filtersets.py:85 dcim/forms/filtersets.py:218 -#: dcim/forms/filtersets.py:265 dcim/forms/filtersets.py:374 -#: dcim/forms/filtersets.py:682 dcim/forms/filtersets.py:916 -#: dcim/forms/filtersets.py:940 dcim/forms/filtersets.py:1030 -#: dcim/forms/filtersets.py:1068 dcim/forms/filtersets.py:1476 -#: dcim/forms/filtersets.py:1500 dcim/forms/filtersets.py:1524 -#: dcim/forms/model_forms.py:136 dcim/forms/model_forms.py:164 -#: dcim/forms/model_forms.py:206 dcim/forms/model_forms.py:406 -#: dcim/forms/model_forms.py:668 dcim/forms/object_create.py:391 -#: dcim/tables/devices.py:158 dcim/tables/power.py:26 dcim/tables/power.py:93 -#: dcim/tables/racks.py:62 dcim/tables/racks.py:138 dcim/tables/sites.py:129 -#: extras/filtersets.py:477 ipam/forms/bulk_edit.py:216 -#: ipam/forms/bulk_edit.py:270 ipam/forms/bulk_edit.py:448 -#: ipam/forms/bulk_edit.py:522 ipam/forms/bulk_import.py:170 -#: ipam/forms/bulk_import.py:437 ipam/forms/filtersets.py:153 -#: ipam/forms/filtersets.py:231 ipam/forms/filtersets.py:432 -#: ipam/forms/filtersets.py:496 ipam/forms/model_forms.py:203 -#: ipam/forms/model_forms.py:587 ipam/forms/model_forms.py:682 -#: ipam/tables/ip.py:244 ipam/tables/vlans.py:114 ipam/tables/vlans.py:216 -#: templates/circuits/inc/circuit_termination_fields.html:6 -#: templates/dcim/device.html:21 templates/dcim/inc/cable_termination.html:8 -#: templates/dcim/inc/cable_termination.html:33 templates/dcim/location.html:37 -#: templates/dcim/powerpanel.html:22 templates/dcim/rack.html:22 -#: templates/dcim/rackreservation.html:28 templates/dcim/site.html:27 -#: templates/ipam/prefix.html:56 templates/ipam/vlan.html:23 -#: templates/ipam/vlan_edit.html:40 templates/virtualization/cluster.html:42 -#: templates/virtualization/virtualmachine.html:91 -#: virtualization/forms/bulk_edit.py:91 virtualization/forms/bulk_edit.py:109 -#: virtualization/forms/bulk_edit.py:124 virtualization/forms/bulk_import.py:59 -#: virtualization/forms/bulk_import.py:85 virtualization/forms/filtersets.py:79 -#: virtualization/forms/filtersets.py:148 -#: virtualization/forms/model_forms.py:71 -#: virtualization/forms/model_forms.py:104 -#: virtualization/forms/model_forms.py:171 virtualization/tables/clusters.py:77 -#: virtualization/tables/virtualmachines.py:62 vpn/forms/filtersets.py:266 -#: wireless/forms/model_forms.py:76 wireless/forms/model_forms.py:118 +#: netbox/circuits/filtersets.py:54 netbox/circuits/forms/bulk_edit.py:186 +#: netbox/circuits/forms/bulk_edit.py:214 +#: netbox/circuits/forms/bulk_import.py:126 +#: netbox/circuits/forms/filtersets.py:49 +#: netbox/circuits/forms/filtersets.py:169 +#: netbox/circuits/forms/filtersets.py:207 +#: netbox/circuits/forms/model_forms.py:136 +#: netbox/circuits/forms/model_forms.py:152 +#: netbox/circuits/tables/circuits.py:105 netbox/dcim/forms/bulk_edit.py:167 +#: netbox/dcim/forms/bulk_edit.py:239 netbox/dcim/forms/bulk_edit.py:575 +#: netbox/dcim/forms/bulk_edit.py:771 netbox/dcim/forms/bulk_import.py:130 +#: netbox/dcim/forms/bulk_import.py:184 netbox/dcim/forms/bulk_import.py:257 +#: netbox/dcim/forms/bulk_import.py:485 netbox/dcim/forms/bulk_import.py:1262 +#: netbox/dcim/forms/bulk_import.py:1290 netbox/dcim/forms/filtersets.py:85 +#: netbox/dcim/forms/filtersets.py:218 netbox/dcim/forms/filtersets.py:265 +#: netbox/dcim/forms/filtersets.py:374 netbox/dcim/forms/filtersets.py:682 +#: netbox/dcim/forms/filtersets.py:916 netbox/dcim/forms/filtersets.py:940 +#: netbox/dcim/forms/filtersets.py:1030 netbox/dcim/forms/filtersets.py:1068 +#: netbox/dcim/forms/filtersets.py:1476 netbox/dcim/forms/filtersets.py:1500 +#: netbox/dcim/forms/filtersets.py:1524 netbox/dcim/forms/model_forms.py:136 +#: netbox/dcim/forms/model_forms.py:164 netbox/dcim/forms/model_forms.py:206 +#: netbox/dcim/forms/model_forms.py:406 netbox/dcim/forms/model_forms.py:668 +#: netbox/dcim/forms/object_create.py:391 netbox/dcim/tables/devices.py:158 +#: netbox/dcim/tables/power.py:26 netbox/dcim/tables/power.py:93 +#: netbox/dcim/tables/racks.py:62 netbox/dcim/tables/racks.py:138 +#: netbox/dcim/tables/sites.py:129 netbox/extras/filtersets.py:477 +#: netbox/ipam/forms/bulk_edit.py:216 netbox/ipam/forms/bulk_edit.py:270 +#: netbox/ipam/forms/bulk_edit.py:448 netbox/ipam/forms/bulk_edit.py:522 +#: netbox/ipam/forms/bulk_import.py:170 netbox/ipam/forms/bulk_import.py:437 +#: netbox/ipam/forms/filtersets.py:153 netbox/ipam/forms/filtersets.py:231 +#: netbox/ipam/forms/filtersets.py:432 netbox/ipam/forms/filtersets.py:496 +#: netbox/ipam/forms/model_forms.py:203 netbox/ipam/forms/model_forms.py:587 +#: netbox/ipam/forms/model_forms.py:682 netbox/ipam/tables/ip.py:244 +#: netbox/ipam/tables/vlans.py:114 netbox/ipam/tables/vlans.py:216 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:6 +#: netbox/templates/dcim/device.html:22 +#: netbox/templates/dcim/inc/cable_termination.html:8 +#: netbox/templates/dcim/inc/cable_termination.html:33 +#: netbox/templates/dcim/location.html:37 +#: netbox/templates/dcim/powerpanel.html:22 netbox/templates/dcim/rack.html:22 +#: netbox/templates/dcim/rackreservation.html:28 +#: netbox/templates/dcim/site.html:28 netbox/templates/ipam/prefix.html:56 +#: netbox/templates/ipam/vlan.html:23 netbox/templates/ipam/vlan_edit.html:40 +#: netbox/templates/virtualization/cluster.html:42 +#: netbox/templates/virtualization/virtualmachine.html:91 +#: netbox/virtualization/forms/bulk_edit.py:91 +#: netbox/virtualization/forms/bulk_edit.py:109 +#: netbox/virtualization/forms/bulk_edit.py:124 +#: netbox/virtualization/forms/bulk_import.py:59 +#: netbox/virtualization/forms/bulk_import.py:85 +#: netbox/virtualization/forms/filtersets.py:79 +#: netbox/virtualization/forms/filtersets.py:148 +#: netbox/virtualization/forms/model_forms.py:71 +#: netbox/virtualization/forms/model_forms.py:104 +#: netbox/virtualization/forms/model_forms.py:171 +#: netbox/virtualization/tables/clusters.py:77 +#: netbox/virtualization/tables/virtualmachines.py:62 +#: netbox/vpn/forms/filtersets.py:266 netbox/wireless/forms/model_forms.py:76 +#: netbox/wireless/forms/model_forms.py:118 msgid "Site" msgstr "" -#: circuits/filtersets.py:60 circuits/filtersets.py:227 -#: circuits/filtersets.py:272 dcim/filtersets.py:241 dcim/filtersets.py:327 -#: dcim/filtersets.py:400 extras/filtersets.py:483 ipam/filtersets.py:238 -#: ipam/filtersets.py:369 ipam/filtersets.py:975 -#: virtualization/filtersets.py:75 virtualization/filtersets.py:203 -#: vpn/filtersets.py:382 +#: netbox/circuits/filtersets.py:60 netbox/circuits/filtersets.py:227 +#: netbox/circuits/filtersets.py:272 netbox/dcim/filtersets.py:241 +#: netbox/dcim/filtersets.py:327 netbox/dcim/filtersets.py:400 +#: netbox/extras/filtersets.py:483 netbox/ipam/filtersets.py:238 +#: netbox/ipam/filtersets.py:369 netbox/ipam/filtersets.py:975 +#: netbox/virtualization/filtersets.py:75 +#: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:382 msgid "Site (slug)" msgstr "" -#: circuits/filtersets.py:65 +#: netbox/circuits/filtersets.py:65 msgid "ASN (ID)" msgstr "" -#: circuits/filtersets.py:71 circuits/forms/filtersets.py:29 -#: ipam/forms/model_forms.py:157 ipam/models/asns.py:108 -#: ipam/models/asns.py:125 ipam/tables/asn.py:41 templates/ipam/asn.html:20 +#: netbox/circuits/filtersets.py:71 netbox/circuits/forms/filtersets.py:29 +#: netbox/ipam/forms/model_forms.py:157 netbox/ipam/models/asns.py:108 +#: netbox/ipam/models/asns.py:125 netbox/ipam/tables/asn.py:41 +#: netbox/templates/ipam/asn.html:20 msgid "ASN" msgstr "" -#: circuits/filtersets.py:93 circuits/filtersets.py:120 -#: circuits/filtersets.py:154 circuits/filtersets.py:281 ipam/filtersets.py:243 +#: netbox/circuits/filtersets.py:93 netbox/circuits/filtersets.py:120 +#: netbox/circuits/filtersets.py:154 netbox/circuits/filtersets.py:281 +#: netbox/ipam/filtersets.py:243 msgid "Provider (ID)" msgstr "" -#: circuits/filtersets.py:99 circuits/filtersets.py:126 -#: circuits/filtersets.py:160 circuits/filtersets.py:287 ipam/filtersets.py:249 +#: netbox/circuits/filtersets.py:99 netbox/circuits/filtersets.py:126 +#: netbox/circuits/filtersets.py:160 netbox/circuits/filtersets.py:287 +#: netbox/ipam/filtersets.py:249 msgid "Provider (slug)" msgstr "" -#: circuits/filtersets.py:165 +#: netbox/circuits/filtersets.py:165 msgid "Provider account (ID)" msgstr "" -#: circuits/filtersets.py:171 +#: netbox/circuits/filtersets.py:171 msgid "Provider account (account)" msgstr "" -#: circuits/filtersets.py:176 +#: netbox/circuits/filtersets.py:176 msgid "Provider network (ID)" msgstr "" -#: circuits/filtersets.py:180 +#: netbox/circuits/filtersets.py:180 msgid "Circuit type (ID)" msgstr "" -#: circuits/filtersets.py:186 +#: netbox/circuits/filtersets.py:186 msgid "Circuit type (slug)" msgstr "" -#: circuits/filtersets.py:221 circuits/filtersets.py:266 dcim/filtersets.py:235 -#: dcim/filtersets.py:321 dcim/filtersets.py:394 dcim/filtersets.py:993 -#: dcim/filtersets.py:1330 dcim/filtersets.py:1857 dcim/filtersets.py:2099 -#: dcim/filtersets.py:2158 ipam/filtersets.py:232 ipam/filtersets.py:363 -#: ipam/filtersets.py:969 virtualization/filtersets.py:69 -#: virtualization/filtersets.py:197 vpn/filtersets.py:387 +#: netbox/circuits/filtersets.py:221 netbox/circuits/filtersets.py:266 +#: netbox/dcim/filtersets.py:235 netbox/dcim/filtersets.py:321 +#: netbox/dcim/filtersets.py:394 netbox/dcim/filtersets.py:993 +#: netbox/dcim/filtersets.py:1330 netbox/dcim/filtersets.py:1857 +#: netbox/dcim/filtersets.py:2099 netbox/dcim/filtersets.py:2158 +#: netbox/ipam/filtersets.py:232 netbox/ipam/filtersets.py:363 +#: netbox/ipam/filtersets.py:969 netbox/virtualization/filtersets.py:69 +#: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:387 msgid "Site (ID)" msgstr "" -#: circuits/filtersets.py:231 circuits/filtersets.py:235 +#: netbox/circuits/filtersets.py:231 netbox/circuits/filtersets.py:235 msgid "Termination A (ID)" msgstr "" -#: circuits/filtersets.py:258 core/filtersets.py:73 core/filtersets.py:132 -#: dcim/filtersets.py:693 dcim/filtersets.py:1299 dcim/filtersets.py:2206 -#: extras/filtersets.py:41 extras/filtersets.py:63 extras/filtersets.py:92 -#: extras/filtersets.py:127 extras/filtersets.py:176 extras/filtersets.py:204 -#: extras/filtersets.py:234 extras/filtersets.py:271 extras/filtersets.py:343 -#: extras/filtersets.py:390 extras/filtersets.py:450 extras/filtersets.py:613 -#: extras/filtersets.py:655 extras/filtersets.py:696 -#: ipam/forms/model_forms.py:447 netbox/filtersets.py:275 -#: netbox/forms/__init__.py:22 netbox/forms/base.py:165 -#: templates/htmx/object_selector.html:28 templates/inc/filter_list.html:45 -#: templates/ipam/ipaddress_assign.html:29 templates/search.html:7 -#: templates/search.html:26 tenancy/filtersets.py:100 users/filtersets.py:23 -#: users/filtersets.py:52 users/filtersets.py:92 users/filtersets.py:140 -#: utilities/forms/forms.py:104 +#: netbox/circuits/filtersets.py:258 netbox/core/filtersets.py:73 +#: netbox/core/filtersets.py:132 netbox/dcim/filtersets.py:693 +#: netbox/dcim/filtersets.py:1299 netbox/dcim/filtersets.py:2206 +#: netbox/extras/filtersets.py:41 netbox/extras/filtersets.py:63 +#: netbox/extras/filtersets.py:92 netbox/extras/filtersets.py:127 +#: netbox/extras/filtersets.py:176 netbox/extras/filtersets.py:204 +#: netbox/extras/filtersets.py:234 netbox/extras/filtersets.py:271 +#: netbox/extras/filtersets.py:343 netbox/extras/filtersets.py:390 +#: netbox/extras/filtersets.py:450 netbox/extras/filtersets.py:613 +#: netbox/extras/filtersets.py:655 netbox/extras/filtersets.py:696 +#: netbox/ipam/forms/model_forms.py:447 netbox/netbox/filtersets.py:275 +#: netbox/netbox/forms/__init__.py:22 netbox/netbox/forms/base.py:165 +#: netbox/templates/htmx/object_selector.html:28 +#: netbox/templates/inc/filter_list.html:45 +#: netbox/templates/ipam/ipaddress_assign.html:29 +#: netbox/templates/search.html:7 netbox/templates/search.html:26 +#: netbox/tenancy/filtersets.py:100 netbox/users/filtersets.py:23 +#: netbox/users/filtersets.py:52 netbox/users/filtersets.py:92 +#: netbox/users/filtersets.py:140 netbox/utilities/forms/forms.py:104 msgid "Search" msgstr "" -#: circuits/filtersets.py:262 circuits/forms/bulk_edit.py:170 -#: circuits/forms/bulk_import.py:117 circuits/forms/filtersets.py:196 -#: circuits/forms/filtersets.py:212 circuits/forms/model_forms.py:109 -#: circuits/forms/model_forms.py:131 circuits/tables/circuits.py:96 -#: dcim/forms/connections.py:71 templates/circuits/circuit.html:15 -#: templates/circuits/circuittermination.html:19 -#: templates/dcim/inc/cable_termination.html:55 -#: templates/dcim/trace/circuit.html:4 +#: netbox/circuits/filtersets.py:262 netbox/circuits/forms/bulk_edit.py:170 +#: netbox/circuits/forms/bulk_import.py:117 +#: netbox/circuits/forms/filtersets.py:196 +#: netbox/circuits/forms/filtersets.py:212 +#: netbox/circuits/forms/model_forms.py:109 +#: netbox/circuits/forms/model_forms.py:131 +#: netbox/circuits/tables/circuits.py:96 netbox/dcim/forms/connections.py:71 +#: netbox/templates/circuits/circuit.html:15 +#: netbox/templates/circuits/circuittermination.html:19 +#: netbox/templates/dcim/inc/cable_termination.html:55 +#: netbox/templates/dcim/trace/circuit.html:4 msgid "Circuit" msgstr "" -#: circuits/filtersets.py:276 +#: netbox/circuits/filtersets.py:276 msgid "ProviderNetwork (ID)" msgstr "" -#: circuits/forms/bulk_edit.py:28 circuits/forms/filtersets.py:54 -#: circuits/forms/model_forms.py:27 circuits/tables/providers.py:33 -#: dcim/forms/bulk_edit.py:127 dcim/forms/filtersets.py:188 -#: dcim/forms/model_forms.py:122 dcim/tables/sites.py:94 -#: ipam/models/asns.py:126 ipam/tables/asn.py:27 ipam/views.py:219 -#: netbox/navigation/menu.py:159 netbox/navigation/menu.py:162 -#: templates/circuits/provider.html:23 +#: netbox/circuits/forms/bulk_edit.py:28 netbox/circuits/forms/filtersets.py:54 +#: netbox/circuits/forms/model_forms.py:27 +#: netbox/circuits/tables/providers.py:33 netbox/dcim/forms/bulk_edit.py:127 +#: netbox/dcim/forms/filtersets.py:188 netbox/dcim/forms/model_forms.py:122 +#: netbox/dcim/tables/sites.py:94 netbox/ipam/models/asns.py:126 +#: netbox/ipam/tables/asn.py:27 netbox/ipam/views.py:219 +#: netbox/netbox/navigation/menu.py:159 netbox/netbox/navigation/menu.py:162 +#: netbox/templates/circuits/provider.html:23 msgid "ASNs" msgstr "" -#: circuits/forms/bulk_edit.py:32 circuits/forms/bulk_edit.py:54 -#: circuits/forms/bulk_edit.py:81 circuits/forms/bulk_edit.py:102 -#: circuits/forms/bulk_edit.py:162 circuits/forms/bulk_edit.py:181 -#: core/forms/bulk_edit.py:28 core/tables/plugins.py:29 -#: dcim/forms/bulk_create.py:35 dcim/forms/bulk_edit.py:72 -#: dcim/forms/bulk_edit.py:91 dcim/forms/bulk_edit.py:150 -#: dcim/forms/bulk_edit.py:191 dcim/forms/bulk_edit.py:209 -#: dcim/forms/bulk_edit.py:337 dcim/forms/bulk_edit.py:373 -#: dcim/forms/bulk_edit.py:388 dcim/forms/bulk_edit.py:447 -#: dcim/forms/bulk_edit.py:486 dcim/forms/bulk_edit.py:516 -#: dcim/forms/bulk_edit.py:540 dcim/forms/bulk_edit.py:613 -#: dcim/forms/bulk_edit.py:665 dcim/forms/bulk_edit.py:717 -#: dcim/forms/bulk_edit.py:740 dcim/forms/bulk_edit.py:788 -#: dcim/forms/bulk_edit.py:858 dcim/forms/bulk_edit.py:911 -#: dcim/forms/bulk_edit.py:946 dcim/forms/bulk_edit.py:986 -#: dcim/forms/bulk_edit.py:1030 dcim/forms/bulk_edit.py:1075 -#: dcim/forms/bulk_edit.py:1102 dcim/forms/bulk_edit.py:1120 -#: dcim/forms/bulk_edit.py:1138 dcim/forms/bulk_edit.py:1156 -#: dcim/forms/bulk_edit.py:1575 extras/forms/bulk_edit.py:36 -#: extras/forms/bulk_edit.py:124 extras/forms/bulk_edit.py:153 -#: extras/forms/bulk_edit.py:183 extras/forms/bulk_edit.py:264 -#: extras/forms/bulk_edit.py:288 extras/forms/bulk_edit.py:302 -#: extras/tables/tables.py:58 ipam/forms/bulk_edit.py:51 -#: ipam/forms/bulk_edit.py:71 ipam/forms/bulk_edit.py:91 -#: ipam/forms/bulk_edit.py:115 ipam/forms/bulk_edit.py:144 -#: ipam/forms/bulk_edit.py:173 ipam/forms/bulk_edit.py:192 -#: ipam/forms/bulk_edit.py:261 ipam/forms/bulk_edit.py:305 -#: ipam/forms/bulk_edit.py:353 ipam/forms/bulk_edit.py:396 -#: ipam/forms/bulk_edit.py:424 ipam/forms/bulk_edit.py:554 -#: ipam/forms/bulk_edit.py:585 templates/account/token.html:35 -#: templates/circuits/circuit.html:59 templates/circuits/circuittype.html:26 -#: templates/circuits/inc/circuit_termination_fields.html:88 -#: templates/circuits/provider.html:33 -#: templates/circuits/providernetwork.html:32 templates/core/datasource.html:54 -#: templates/dcim/cable.html:36 templates/dcim/consoleport.html:44 -#: templates/dcim/consoleserverport.html:44 templates/dcim/device.html:93 -#: templates/dcim/devicebay.html:32 templates/dcim/devicerole.html:30 -#: templates/dcim/devicetype.html:33 templates/dcim/frontport.html:58 -#: templates/dcim/interface.html:69 templates/dcim/inventoryitem.html:60 -#: templates/dcim/inventoryitemrole.html:22 templates/dcim/location.html:33 -#: templates/dcim/manufacturer.html:40 templates/dcim/module.html:70 -#: templates/dcim/modulebay.html:38 templates/dcim/moduletype.html:26 -#: templates/dcim/platform.html:33 templates/dcim/powerfeed.html:40 -#: templates/dcim/poweroutlet.html:40 templates/dcim/powerpanel.html:30 -#: templates/dcim/powerport.html:40 templates/dcim/rack.html:51 -#: templates/dcim/rackreservation.html:62 templates/dcim/rackrole.html:26 -#: templates/dcim/rearport.html:54 templates/dcim/region.html:33 -#: templates/dcim/site.html:59 templates/dcim/sitegroup.html:33 -#: templates/dcim/virtualchassis.html:31 templates/extras/configcontext.html:21 -#: templates/extras/configtemplate.html:17 templates/extras/customfield.html:34 -#: templates/extras/dashboard/widget_add.html:14 -#: templates/extras/eventrule.html:21 templates/extras/exporttemplate.html:19 -#: templates/extras/savedfilter.html:17 templates/extras/script_list.html:47 -#: templates/extras/tag.html:20 templates/extras/webhook.html:17 -#: templates/generic/bulk_import.html:120 templates/ipam/aggregate.html:43 -#: templates/ipam/asn.html:42 templates/ipam/asnrange.html:38 -#: templates/ipam/fhrpgroup.html:34 templates/ipam/ipaddress.html:55 -#: templates/ipam/iprange.html:67 templates/ipam/prefix.html:81 -#: templates/ipam/rir.html:26 templates/ipam/role.html:26 -#: templates/ipam/routetarget.html:21 templates/ipam/service.html:50 -#: templates/ipam/servicetemplate.html:27 templates/ipam/vlan.html:62 -#: templates/ipam/vlangroup.html:34 templates/ipam/vrf.html:33 -#: templates/tenancy/contact.html:67 templates/tenancy/contactgroup.html:25 -#: templates/tenancy/contactrole.html:22 templates/tenancy/tenant.html:24 -#: templates/tenancy/tenantgroup.html:33 templates/users/group.html:21 -#: templates/users/objectpermission.html:21 templates/users/token.html:27 -#: templates/virtualization/cluster.html:25 -#: templates/virtualization/clustergroup.html:26 -#: templates/virtualization/clustertype.html:26 -#: templates/virtualization/virtualdisk.html:39 -#: templates/virtualization/virtualmachine.html:31 -#: templates/virtualization/vminterface.html:51 templates/vpn/ikepolicy.html:17 -#: templates/vpn/ikeproposal.html:17 templates/vpn/ipsecpolicy.html:17 -#: templates/vpn/ipsecprofile.html:17 templates/vpn/ipsecprofile.html:40 -#: templates/vpn/ipsecprofile.html:73 templates/vpn/ipsecproposal.html:17 -#: templates/vpn/l2vpn.html:26 templates/vpn/tunnel.html:33 -#: templates/vpn/tunnelgroup.html:30 templates/wireless/wirelesslan.html:26 -#: templates/wireless/wirelesslangroup.html:33 -#: templates/wireless/wirelesslink.html:34 tenancy/forms/bulk_edit.py:32 -#: tenancy/forms/bulk_edit.py:80 tenancy/forms/bulk_edit.py:122 -#: users/forms/bulk_edit.py:64 users/forms/bulk_edit.py:82 -#: users/forms/bulk_edit.py:112 virtualization/forms/bulk_edit.py:32 -#: virtualization/forms/bulk_edit.py:46 virtualization/forms/bulk_edit.py:100 -#: virtualization/forms/bulk_edit.py:177 virtualization/forms/bulk_edit.py:228 -#: virtualization/forms/bulk_edit.py:337 vpn/forms/bulk_edit.py:28 -#: vpn/forms/bulk_edit.py:64 vpn/forms/bulk_edit.py:121 -#: vpn/forms/bulk_edit.py:155 vpn/forms/bulk_edit.py:190 -#: vpn/forms/bulk_edit.py:215 vpn/forms/bulk_edit.py:247 -#: vpn/forms/bulk_edit.py:274 wireless/forms/bulk_edit.py:29 -#: wireless/forms/bulk_edit.py:82 wireless/forms/bulk_edit.py:129 +#: netbox/circuits/forms/bulk_edit.py:32 netbox/circuits/forms/bulk_edit.py:54 +#: netbox/circuits/forms/bulk_edit.py:81 netbox/circuits/forms/bulk_edit.py:102 +#: netbox/circuits/forms/bulk_edit.py:162 +#: netbox/circuits/forms/bulk_edit.py:181 netbox/core/forms/bulk_edit.py:28 +#: netbox/core/tables/plugins.py:29 netbox/dcim/forms/bulk_create.py:35 +#: netbox/dcim/forms/bulk_edit.py:72 netbox/dcim/forms/bulk_edit.py:91 +#: netbox/dcim/forms/bulk_edit.py:150 netbox/dcim/forms/bulk_edit.py:191 +#: netbox/dcim/forms/bulk_edit.py:209 netbox/dcim/forms/bulk_edit.py:337 +#: netbox/dcim/forms/bulk_edit.py:373 netbox/dcim/forms/bulk_edit.py:388 +#: netbox/dcim/forms/bulk_edit.py:447 netbox/dcim/forms/bulk_edit.py:486 +#: netbox/dcim/forms/bulk_edit.py:516 netbox/dcim/forms/bulk_edit.py:540 +#: netbox/dcim/forms/bulk_edit.py:613 netbox/dcim/forms/bulk_edit.py:665 +#: netbox/dcim/forms/bulk_edit.py:717 netbox/dcim/forms/bulk_edit.py:740 +#: netbox/dcim/forms/bulk_edit.py:788 netbox/dcim/forms/bulk_edit.py:858 +#: netbox/dcim/forms/bulk_edit.py:911 netbox/dcim/forms/bulk_edit.py:946 +#: netbox/dcim/forms/bulk_edit.py:986 netbox/dcim/forms/bulk_edit.py:1030 +#: netbox/dcim/forms/bulk_edit.py:1075 netbox/dcim/forms/bulk_edit.py:1102 +#: netbox/dcim/forms/bulk_edit.py:1120 netbox/dcim/forms/bulk_edit.py:1138 +#: netbox/dcim/forms/bulk_edit.py:1156 netbox/dcim/forms/bulk_edit.py:1575 +#: netbox/extras/forms/bulk_edit.py:36 netbox/extras/forms/bulk_edit.py:124 +#: netbox/extras/forms/bulk_edit.py:153 netbox/extras/forms/bulk_edit.py:183 +#: netbox/extras/forms/bulk_edit.py:264 netbox/extras/forms/bulk_edit.py:288 +#: netbox/extras/forms/bulk_edit.py:302 netbox/extras/tables/tables.py:58 +#: netbox/ipam/forms/bulk_edit.py:51 netbox/ipam/forms/bulk_edit.py:71 +#: netbox/ipam/forms/bulk_edit.py:91 netbox/ipam/forms/bulk_edit.py:115 +#: netbox/ipam/forms/bulk_edit.py:144 netbox/ipam/forms/bulk_edit.py:173 +#: netbox/ipam/forms/bulk_edit.py:192 netbox/ipam/forms/bulk_edit.py:261 +#: netbox/ipam/forms/bulk_edit.py:305 netbox/ipam/forms/bulk_edit.py:353 +#: netbox/ipam/forms/bulk_edit.py:396 netbox/ipam/forms/bulk_edit.py:424 +#: netbox/ipam/forms/bulk_edit.py:554 netbox/ipam/forms/bulk_edit.py:585 +#: netbox/templates/account/token.html:35 +#: netbox/templates/circuits/circuit.html:59 +#: netbox/templates/circuits/circuittype.html:26 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:88 +#: netbox/templates/circuits/provider.html:33 +#: netbox/templates/circuits/providernetwork.html:32 +#: netbox/templates/core/datasource.html:54 netbox/templates/dcim/cable.html:36 +#: netbox/templates/dcim/consoleport.html:44 +#: netbox/templates/dcim/consoleserverport.html:44 +#: netbox/templates/dcim/device.html:94 netbox/templates/dcim/devicebay.html:32 +#: netbox/templates/dcim/devicerole.html:30 +#: netbox/templates/dcim/devicetype.html:33 +#: netbox/templates/dcim/frontport.html:58 +#: netbox/templates/dcim/interface.html:69 +#: netbox/templates/dcim/inventoryitem.html:60 +#: netbox/templates/dcim/inventoryitemrole.html:22 +#: netbox/templates/dcim/location.html:33 +#: netbox/templates/dcim/manufacturer.html:40 +#: netbox/templates/dcim/module.html:70 netbox/templates/dcim/modulebay.html:38 +#: netbox/templates/dcim/moduletype.html:26 +#: netbox/templates/dcim/platform.html:33 +#: netbox/templates/dcim/powerfeed.html:40 +#: netbox/templates/dcim/poweroutlet.html:40 +#: netbox/templates/dcim/powerpanel.html:30 +#: netbox/templates/dcim/powerport.html:40 netbox/templates/dcim/rack.html:51 +#: netbox/templates/dcim/rackreservation.html:62 +#: netbox/templates/dcim/rackrole.html:26 +#: netbox/templates/dcim/rearport.html:54 netbox/templates/dcim/region.html:33 +#: netbox/templates/dcim/site.html:60 netbox/templates/dcim/sitegroup.html:33 +#: netbox/templates/dcim/virtualchassis.html:31 +#: netbox/templates/extras/configcontext.html:21 +#: netbox/templates/extras/configtemplate.html:17 +#: netbox/templates/extras/customfield.html:34 +#: netbox/templates/extras/dashboard/widget_add.html:14 +#: netbox/templates/extras/eventrule.html:21 +#: netbox/templates/extras/exporttemplate.html:19 +#: netbox/templates/extras/savedfilter.html:17 +#: netbox/templates/extras/script_list.html:47 +#: netbox/templates/extras/tag.html:20 netbox/templates/extras/webhook.html:17 +#: netbox/templates/generic/bulk_import.html:120 +#: netbox/templates/ipam/aggregate.html:43 netbox/templates/ipam/asn.html:42 +#: netbox/templates/ipam/asnrange.html:38 +#: netbox/templates/ipam/fhrpgroup.html:34 +#: netbox/templates/ipam/ipaddress.html:55 +#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:81 +#: netbox/templates/ipam/rir.html:26 netbox/templates/ipam/role.html:26 +#: netbox/templates/ipam/routetarget.html:21 +#: netbox/templates/ipam/service.html:50 +#: netbox/templates/ipam/servicetemplate.html:27 +#: netbox/templates/ipam/vlan.html:62 netbox/templates/ipam/vlangroup.html:34 +#: netbox/templates/ipam/vrf.html:33 netbox/templates/tenancy/contact.html:67 +#: netbox/templates/tenancy/contactgroup.html:25 +#: netbox/templates/tenancy/contactrole.html:22 +#: netbox/templates/tenancy/tenant.html:24 +#: netbox/templates/tenancy/tenantgroup.html:33 +#: netbox/templates/users/group.html:21 +#: netbox/templates/users/objectpermission.html:21 +#: netbox/templates/users/token.html:27 +#: netbox/templates/virtualization/cluster.html:25 +#: netbox/templates/virtualization/clustergroup.html:26 +#: netbox/templates/virtualization/clustertype.html:26 +#: netbox/templates/virtualization/virtualdisk.html:39 +#: netbox/templates/virtualization/virtualmachine.html:31 +#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/templates/vpn/ikepolicy.html:17 +#: netbox/templates/vpn/ikeproposal.html:17 +#: netbox/templates/vpn/ipsecpolicy.html:17 +#: netbox/templates/vpn/ipsecprofile.html:17 +#: netbox/templates/vpn/ipsecprofile.html:40 +#: netbox/templates/vpn/ipsecprofile.html:73 +#: netbox/templates/vpn/ipsecproposal.html:17 +#: netbox/templates/vpn/l2vpn.html:26 netbox/templates/vpn/tunnel.html:33 +#: netbox/templates/vpn/tunnelgroup.html:30 +#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/templates/wireless/wirelesslangroup.html:33 +#: netbox/templates/wireless/wirelesslink.html:34 +#: netbox/tenancy/forms/bulk_edit.py:32 netbox/tenancy/forms/bulk_edit.py:80 +#: netbox/tenancy/forms/bulk_edit.py:122 netbox/users/forms/bulk_edit.py:64 +#: netbox/users/forms/bulk_edit.py:82 netbox/users/forms/bulk_edit.py:112 +#: netbox/virtualization/forms/bulk_edit.py:32 +#: netbox/virtualization/forms/bulk_edit.py:46 +#: netbox/virtualization/forms/bulk_edit.py:100 +#: netbox/virtualization/forms/bulk_edit.py:177 +#: netbox/virtualization/forms/bulk_edit.py:228 +#: netbox/virtualization/forms/bulk_edit.py:337 +#: netbox/vpn/forms/bulk_edit.py:28 netbox/vpn/forms/bulk_edit.py:64 +#: netbox/vpn/forms/bulk_edit.py:121 netbox/vpn/forms/bulk_edit.py:155 +#: netbox/vpn/forms/bulk_edit.py:190 netbox/vpn/forms/bulk_edit.py:215 +#: netbox/vpn/forms/bulk_edit.py:247 netbox/vpn/forms/bulk_edit.py:274 +#: netbox/wireless/forms/bulk_edit.py:29 netbox/wireless/forms/bulk_edit.py:82 +#: netbox/wireless/forms/bulk_edit.py:129 msgid "Description" msgstr "" -#: circuits/forms/bulk_edit.py:49 circuits/forms/bulk_edit.py:71 -#: circuits/forms/bulk_edit.py:121 circuits/forms/bulk_import.py:35 -#: circuits/forms/bulk_import.py:50 circuits/forms/bulk_import.py:76 -#: circuits/forms/filtersets.py:68 circuits/forms/filtersets.py:86 -#: circuits/forms/filtersets.py:114 circuits/forms/filtersets.py:129 -#: circuits/forms/filtersets.py:197 circuits/forms/filtersets.py:230 -#: circuits/forms/model_forms.py:45 circuits/forms/model_forms.py:59 -#: circuits/forms/model_forms.py:91 circuits/tables/circuits.py:56 -#: circuits/tables/circuits.py:100 circuits/tables/providers.py:72 -#: circuits/tables/providers.py:103 templates/circuits/circuit.html:18 -#: templates/circuits/circuittermination.html:25 -#: templates/circuits/provider.html:20 -#: templates/circuits/provideraccount.html:20 -#: templates/circuits/providernetwork.html:20 -#: templates/dcim/inc/cable_termination.html:51 +#: netbox/circuits/forms/bulk_edit.py:49 netbox/circuits/forms/bulk_edit.py:71 +#: netbox/circuits/forms/bulk_edit.py:121 +#: netbox/circuits/forms/bulk_import.py:35 +#: netbox/circuits/forms/bulk_import.py:50 +#: netbox/circuits/forms/bulk_import.py:76 +#: netbox/circuits/forms/filtersets.py:68 +#: netbox/circuits/forms/filtersets.py:86 +#: netbox/circuits/forms/filtersets.py:114 +#: netbox/circuits/forms/filtersets.py:129 +#: netbox/circuits/forms/filtersets.py:197 +#: netbox/circuits/forms/filtersets.py:230 +#: netbox/circuits/forms/model_forms.py:45 +#: netbox/circuits/forms/model_forms.py:59 +#: netbox/circuits/forms/model_forms.py:91 +#: netbox/circuits/tables/circuits.py:56 netbox/circuits/tables/circuits.py:100 +#: netbox/circuits/tables/providers.py:72 +#: netbox/circuits/tables/providers.py:103 +#: netbox/templates/circuits/circuit.html:18 +#: netbox/templates/circuits/circuittermination.html:25 +#: netbox/templates/circuits/provider.html:20 +#: netbox/templates/circuits/provideraccount.html:20 +#: netbox/templates/circuits/providernetwork.html:20 +#: netbox/templates/dcim/inc/cable_termination.html:51 msgid "Provider" msgstr "" -#: circuits/forms/bulk_edit.py:78 circuits/forms/filtersets.py:89 -#: templates/circuits/providernetwork.html:28 +#: netbox/circuits/forms/bulk_edit.py:78 netbox/circuits/forms/filtersets.py:89 +#: netbox/templates/circuits/providernetwork.html:28 msgid "Service ID" msgstr "" -#: circuits/forms/bulk_edit.py:98 circuits/forms/filtersets.py:105 -#: dcim/forms/bulk_edit.py:205 dcim/forms/bulk_edit.py:502 -#: dcim/forms/bulk_edit.py:702 dcim/forms/bulk_edit.py:1071 -#: dcim/forms/bulk_edit.py:1098 dcim/forms/bulk_edit.py:1571 -#: dcim/forms/filtersets.py:983 dcim/forms/filtersets.py:1359 -#: dcim/forms/filtersets.py:1380 dcim/tables/devices.py:699 -#: dcim/tables/devices.py:759 dcim/tables/devices.py:986 -#: dcim/tables/devicetypes.py:245 dcim/tables/devicetypes.py:260 -#: dcim/tables/racks.py:32 extras/forms/bulk_edit.py:260 -#: extras/tables/tables.py:333 templates/circuits/circuittype.html:30 -#: templates/dcim/cable.html:40 templates/dcim/devicerole.html:34 -#: templates/dcim/frontport.html:40 templates/dcim/inventoryitemrole.html:26 -#: templates/dcim/rackrole.html:30 templates/dcim/rearport.html:40 -#: templates/extras/tag.html:26 +#: netbox/circuits/forms/bulk_edit.py:98 +#: netbox/circuits/forms/filtersets.py:105 netbox/dcim/forms/bulk_edit.py:205 +#: netbox/dcim/forms/bulk_edit.py:502 netbox/dcim/forms/bulk_edit.py:702 +#: netbox/dcim/forms/bulk_edit.py:1071 netbox/dcim/forms/bulk_edit.py:1098 +#: netbox/dcim/forms/bulk_edit.py:1571 netbox/dcim/forms/filtersets.py:983 +#: netbox/dcim/forms/filtersets.py:1359 netbox/dcim/forms/filtersets.py:1380 +#: netbox/dcim/tables/devices.py:699 netbox/dcim/tables/devices.py:759 +#: netbox/dcim/tables/devices.py:986 netbox/dcim/tables/devicetypes.py:245 +#: netbox/dcim/tables/devicetypes.py:260 netbox/dcim/tables/racks.py:32 +#: netbox/extras/forms/bulk_edit.py:260 netbox/extras/tables/tables.py:333 +#: netbox/templates/circuits/circuittype.html:30 +#: netbox/templates/dcim/cable.html:40 netbox/templates/dcim/devicerole.html:34 +#: netbox/templates/dcim/frontport.html:40 +#: netbox/templates/dcim/inventoryitemrole.html:26 +#: netbox/templates/dcim/rackrole.html:30 +#: netbox/templates/dcim/rearport.html:40 netbox/templates/extras/tag.html:26 msgid "Color" msgstr "" -#: circuits/forms/bulk_edit.py:116 circuits/forms/bulk_import.py:89 -#: circuits/forms/filtersets.py:124 core/forms/bulk_edit.py:18 -#: core/forms/filtersets.py:30 core/tables/data.py:20 core/tables/jobs.py:18 -#: dcim/forms/bulk_edit.py:282 dcim/forms/bulk_edit.py:680 -#: dcim/forms/bulk_edit.py:819 dcim/forms/bulk_edit.py:887 -#: dcim/forms/bulk_edit.py:906 dcim/forms/bulk_edit.py:929 -#: dcim/forms/bulk_edit.py:971 dcim/forms/bulk_edit.py:1015 -#: dcim/forms/bulk_edit.py:1066 dcim/forms/bulk_edit.py:1093 -#: dcim/forms/bulk_import.py:214 dcim/forms/bulk_import.py:653 -#: dcim/forms/bulk_import.py:679 dcim/forms/bulk_import.py:705 -#: dcim/forms/bulk_import.py:725 dcim/forms/bulk_import.py:808 -#: dcim/forms/bulk_import.py:902 dcim/forms/bulk_import.py:944 -#: dcim/forms/bulk_import.py:1161 dcim/forms/bulk_import.py:1327 -#: dcim/forms/filtersets.py:287 dcim/forms/filtersets.py:874 -#: dcim/forms/filtersets.py:973 dcim/forms/filtersets.py:1094 -#: dcim/forms/filtersets.py:1164 dcim/forms/filtersets.py:1186 -#: dcim/forms/filtersets.py:1208 dcim/forms/filtersets.py:1225 -#: dcim/forms/filtersets.py:1259 dcim/forms/filtersets.py:1354 -#: dcim/forms/filtersets.py:1375 dcim/forms/model_forms.py:643 -#: dcim/forms/model_forms.py:649 dcim/forms/object_import.py:84 -#: dcim/forms/object_import.py:113 dcim/forms/object_import.py:145 -#: dcim/tables/devices.py:183 dcim/tables/devices.py:815 -#: dcim/tables/power.py:77 extras/forms/bulk_import.py:39 -#: extras/tables/tables.py:283 extras/tables/tables.py:355 -#: extras/tables/tables.py:473 netbox/tables/tables.py:239 -#: templates/circuits/circuit.html:30 templates/core/datasource.html:38 -#: templates/dcim/cable.html:15 templates/dcim/consoleport.html:36 -#: templates/dcim/consoleserverport.html:36 templates/dcim/frontport.html:36 -#: templates/dcim/interface.html:46 templates/dcim/interface.html:169 -#: templates/dcim/interface.html:311 templates/dcim/powerfeed.html:32 -#: templates/dcim/poweroutlet.html:36 templates/dcim/powerport.html:36 -#: templates/dcim/rack.html:76 templates/dcim/rearport.html:36 -#: templates/extras/eventrule.html:80 templates/virtualization/cluster.html:17 -#: templates/vpn/l2vpn.html:22 -#: templates/wireless/inc/authentication_attrs.html:8 -#: templates/wireless/inc/wirelesslink_interface.html:14 -#: virtualization/forms/bulk_edit.py:60 virtualization/forms/bulk_import.py:41 -#: virtualization/forms/filtersets.py:54 virtualization/forms/model_forms.py:62 -#: virtualization/tables/clusters.py:66 vpn/forms/bulk_edit.py:264 -#: vpn/forms/bulk_import.py:264 vpn/forms/filtersets.py:217 -#: vpn/forms/model_forms.py:84 vpn/forms/model_forms.py:119 -#: vpn/forms/model_forms.py:231 +#: netbox/circuits/forms/bulk_edit.py:116 +#: netbox/circuits/forms/bulk_import.py:89 +#: netbox/circuits/forms/filtersets.py:124 netbox/core/forms/bulk_edit.py:18 +#: netbox/core/forms/filtersets.py:30 netbox/core/tables/data.py:20 +#: netbox/core/tables/jobs.py:18 netbox/dcim/forms/bulk_edit.py:282 +#: netbox/dcim/forms/bulk_edit.py:680 netbox/dcim/forms/bulk_edit.py:819 +#: netbox/dcim/forms/bulk_edit.py:887 netbox/dcim/forms/bulk_edit.py:906 +#: netbox/dcim/forms/bulk_edit.py:929 netbox/dcim/forms/bulk_edit.py:971 +#: netbox/dcim/forms/bulk_edit.py:1015 netbox/dcim/forms/bulk_edit.py:1066 +#: netbox/dcim/forms/bulk_edit.py:1093 netbox/dcim/forms/bulk_import.py:214 +#: netbox/dcim/forms/bulk_import.py:653 netbox/dcim/forms/bulk_import.py:679 +#: netbox/dcim/forms/bulk_import.py:705 netbox/dcim/forms/bulk_import.py:725 +#: netbox/dcim/forms/bulk_import.py:808 netbox/dcim/forms/bulk_import.py:902 +#: netbox/dcim/forms/bulk_import.py:944 netbox/dcim/forms/bulk_import.py:1161 +#: netbox/dcim/forms/bulk_import.py:1327 netbox/dcim/forms/filtersets.py:287 +#: netbox/dcim/forms/filtersets.py:874 netbox/dcim/forms/filtersets.py:973 +#: netbox/dcim/forms/filtersets.py:1094 netbox/dcim/forms/filtersets.py:1164 +#: netbox/dcim/forms/filtersets.py:1186 netbox/dcim/forms/filtersets.py:1208 +#: netbox/dcim/forms/filtersets.py:1225 netbox/dcim/forms/filtersets.py:1259 +#: netbox/dcim/forms/filtersets.py:1354 netbox/dcim/forms/filtersets.py:1375 +#: netbox/dcim/forms/model_forms.py:643 netbox/dcim/forms/model_forms.py:649 +#: netbox/dcim/forms/object_import.py:84 netbox/dcim/forms/object_import.py:113 +#: netbox/dcim/forms/object_import.py:145 netbox/dcim/tables/devices.py:183 +#: netbox/dcim/tables/devices.py:815 netbox/dcim/tables/power.py:77 +#: netbox/extras/forms/bulk_import.py:39 netbox/extras/tables/tables.py:283 +#: netbox/extras/tables/tables.py:355 netbox/extras/tables/tables.py:473 +#: netbox/netbox/tables/tables.py:239 netbox/templates/circuits/circuit.html:30 +#: netbox/templates/core/datasource.html:38 netbox/templates/dcim/cable.html:15 +#: netbox/templates/dcim/consoleport.html:36 +#: netbox/templates/dcim/consoleserverport.html:36 +#: netbox/templates/dcim/frontport.html:36 +#: netbox/templates/dcim/interface.html:46 +#: netbox/templates/dcim/interface.html:169 +#: netbox/templates/dcim/interface.html:311 +#: netbox/templates/dcim/powerfeed.html:32 +#: netbox/templates/dcim/poweroutlet.html:36 +#: netbox/templates/dcim/powerport.html:36 netbox/templates/dcim/rack.html:76 +#: netbox/templates/dcim/rearport.html:36 +#: netbox/templates/extras/eventrule.html:80 +#: netbox/templates/virtualization/cluster.html:17 +#: netbox/templates/vpn/l2vpn.html:22 +#: netbox/templates/wireless/inc/authentication_attrs.html:8 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:14 +#: netbox/virtualization/forms/bulk_edit.py:60 +#: netbox/virtualization/forms/bulk_import.py:41 +#: netbox/virtualization/forms/filtersets.py:54 +#: netbox/virtualization/forms/model_forms.py:62 +#: netbox/virtualization/tables/clusters.py:66 +#: netbox/vpn/forms/bulk_edit.py:264 netbox/vpn/forms/bulk_import.py:264 +#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:84 +#: netbox/vpn/forms/model_forms.py:119 netbox/vpn/forms/model_forms.py:231 msgid "Type" msgstr "" -#: circuits/forms/bulk_edit.py:126 circuits/forms/bulk_import.py:82 -#: circuits/forms/filtersets.py:137 circuits/forms/model_forms.py:96 +#: netbox/circuits/forms/bulk_edit.py:126 +#: netbox/circuits/forms/bulk_import.py:82 +#: netbox/circuits/forms/filtersets.py:137 +#: netbox/circuits/forms/model_forms.py:96 msgid "Provider account" msgstr "" -#: circuits/forms/bulk_edit.py:134 circuits/forms/bulk_import.py:95 -#: circuits/forms/filtersets.py:148 core/forms/filtersets.py:35 -#: core/forms/filtersets.py:76 core/tables/data.py:23 core/tables/jobs.py:26 -#: core/tables/tasks.py:88 dcim/forms/bulk_edit.py:105 -#: dcim/forms/bulk_edit.py:180 dcim/forms/bulk_edit.py:261 -#: dcim/forms/bulk_edit.py:598 dcim/forms/bulk_edit.py:654 -#: dcim/forms/bulk_edit.py:686 dcim/forms/bulk_edit.py:813 -#: dcim/forms/bulk_edit.py:1594 dcim/forms/bulk_import.py:87 -#: dcim/forms/bulk_import.py:146 dcim/forms/bulk_import.py:202 -#: dcim/forms/bulk_import.py:450 dcim/forms/bulk_import.py:604 -#: dcim/forms/bulk_import.py:1155 dcim/forms/bulk_import.py:1322 -#: dcim/forms/bulk_import.py:1386 dcim/forms/filtersets.py:171 -#: dcim/forms/filtersets.py:230 dcim/forms/filtersets.py:282 -#: dcim/forms/filtersets.py:728 dcim/forms/filtersets.py:843 -#: dcim/forms/filtersets.py:877 dcim/forms/filtersets.py:978 -#: dcim/forms/filtersets.py:1089 dcim/tables/devices.py:145 -#: dcim/tables/devices.py:818 dcim/tables/devices.py:1046 -#: dcim/tables/modules.py:69 dcim/tables/power.py:74 dcim/tables/racks.py:66 -#: dcim/tables/sites.py:82 dcim/tables/sites.py:133 ipam/forms/bulk_edit.py:241 -#: ipam/forms/bulk_edit.py:290 ipam/forms/bulk_edit.py:338 -#: ipam/forms/bulk_edit.py:544 ipam/forms/bulk_import.py:191 -#: ipam/forms/bulk_import.py:256 ipam/forms/bulk_import.py:292 -#: ipam/forms/bulk_import.py:458 ipam/forms/filtersets.py:210 -#: ipam/forms/filtersets.py:281 ipam/forms/filtersets.py:355 -#: ipam/forms/filtersets.py:508 ipam/forms/model_forms.py:466 -#: ipam/tables/ip.py:236 ipam/tables/ip.py:309 ipam/tables/ip.py:359 -#: ipam/tables/ip.py:421 ipam/tables/ip.py:448 ipam/tables/vlans.py:122 -#: ipam/tables/vlans.py:227 templates/circuits/circuit.html:34 -#: templates/core/datasource.html:46 templates/core/job.html:30 -#: templates/core/rq_task.html:81 templates/core/system.html:18 -#: templates/dcim/cable.html:19 templates/dcim/device.html:175 -#: templates/dcim/location.html:45 templates/dcim/module.html:66 -#: templates/dcim/powerfeed.html:36 templates/dcim/rack.html:43 -#: templates/dcim/site.html:42 templates/extras/script_list.html:49 -#: templates/ipam/ipaddress.html:37 templates/ipam/iprange.html:54 -#: templates/ipam/prefix.html:73 templates/ipam/vlan.html:48 -#: templates/virtualization/cluster.html:21 -#: templates/virtualization/virtualmachine.html:19 templates/vpn/tunnel.html:25 -#: templates/wireless/wirelesslan.html:22 -#: templates/wireless/wirelesslink.html:17 users/forms/filtersets.py:33 -#: users/forms/model_forms.py:195 virtualization/forms/bulk_edit.py:70 -#: virtualization/forms/bulk_edit.py:118 virtualization/forms/bulk_import.py:54 -#: virtualization/forms/bulk_import.py:80 virtualization/forms/filtersets.py:62 -#: virtualization/forms/filtersets.py:160 virtualization/tables/clusters.py:74 -#: virtualization/tables/virtualmachines.py:59 vpn/forms/bulk_edit.py:39 -#: vpn/forms/bulk_import.py:37 vpn/forms/filtersets.py:47 -#: vpn/tables/tunnels.py:48 wireless/forms/bulk_edit.py:43 -#: wireless/forms/bulk_edit.py:105 wireless/forms/bulk_import.py:43 -#: wireless/forms/bulk_import.py:84 wireless/forms/filtersets.py:49 -#: wireless/forms/filtersets.py:83 wireless/tables/wirelesslan.py:52 -#: wireless/tables/wirelesslink.py:19 +#: netbox/circuits/forms/bulk_edit.py:134 +#: netbox/circuits/forms/bulk_import.py:95 +#: netbox/circuits/forms/filtersets.py:148 netbox/core/forms/filtersets.py:35 +#: netbox/core/forms/filtersets.py:76 netbox/core/tables/data.py:23 +#: netbox/core/tables/jobs.py:26 netbox/core/tables/tasks.py:88 +#: netbox/dcim/forms/bulk_edit.py:105 netbox/dcim/forms/bulk_edit.py:180 +#: netbox/dcim/forms/bulk_edit.py:261 netbox/dcim/forms/bulk_edit.py:598 +#: netbox/dcim/forms/bulk_edit.py:654 netbox/dcim/forms/bulk_edit.py:686 +#: netbox/dcim/forms/bulk_edit.py:813 netbox/dcim/forms/bulk_edit.py:1594 +#: netbox/dcim/forms/bulk_import.py:87 netbox/dcim/forms/bulk_import.py:146 +#: netbox/dcim/forms/bulk_import.py:202 netbox/dcim/forms/bulk_import.py:450 +#: netbox/dcim/forms/bulk_import.py:604 netbox/dcim/forms/bulk_import.py:1155 +#: netbox/dcim/forms/bulk_import.py:1322 netbox/dcim/forms/bulk_import.py:1386 +#: netbox/dcim/forms/filtersets.py:171 netbox/dcim/forms/filtersets.py:230 +#: netbox/dcim/forms/filtersets.py:282 netbox/dcim/forms/filtersets.py:728 +#: netbox/dcim/forms/filtersets.py:843 netbox/dcim/forms/filtersets.py:877 +#: netbox/dcim/forms/filtersets.py:978 netbox/dcim/forms/filtersets.py:1089 +#: netbox/dcim/tables/devices.py:145 netbox/dcim/tables/devices.py:818 +#: netbox/dcim/tables/devices.py:1046 netbox/dcim/tables/modules.py:69 +#: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:66 +#: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:133 +#: netbox/ipam/forms/bulk_edit.py:241 netbox/ipam/forms/bulk_edit.py:290 +#: netbox/ipam/forms/bulk_edit.py:338 netbox/ipam/forms/bulk_edit.py:544 +#: netbox/ipam/forms/bulk_import.py:191 netbox/ipam/forms/bulk_import.py:256 +#: netbox/ipam/forms/bulk_import.py:292 netbox/ipam/forms/bulk_import.py:458 +#: netbox/ipam/forms/filtersets.py:210 netbox/ipam/forms/filtersets.py:281 +#: netbox/ipam/forms/filtersets.py:355 netbox/ipam/forms/filtersets.py:508 +#: netbox/ipam/forms/model_forms.py:466 netbox/ipam/tables/ip.py:236 +#: netbox/ipam/tables/ip.py:309 netbox/ipam/tables/ip.py:359 +#: netbox/ipam/tables/ip.py:421 netbox/ipam/tables/ip.py:448 +#: netbox/ipam/tables/vlans.py:122 netbox/ipam/tables/vlans.py:227 +#: netbox/templates/circuits/circuit.html:34 +#: netbox/templates/core/datasource.html:46 netbox/templates/core/job.html:30 +#: netbox/templates/core/rq_task.html:81 netbox/templates/core/system.html:18 +#: netbox/templates/dcim/cable.html:19 netbox/templates/dcim/device.html:176 +#: netbox/templates/dcim/location.html:45 netbox/templates/dcim/module.html:66 +#: netbox/templates/dcim/powerfeed.html:36 netbox/templates/dcim/rack.html:43 +#: netbox/templates/dcim/site.html:43 +#: netbox/templates/extras/script_list.html:49 +#: netbox/templates/ipam/ipaddress.html:37 +#: netbox/templates/ipam/iprange.html:54 netbox/templates/ipam/prefix.html:73 +#: netbox/templates/ipam/vlan.html:48 +#: netbox/templates/virtualization/cluster.html:21 +#: netbox/templates/virtualization/virtualmachine.html:19 +#: netbox/templates/vpn/tunnel.html:25 +#: netbox/templates/wireless/wirelesslan.html:22 +#: netbox/templates/wireless/wirelesslink.html:17 +#: netbox/users/forms/filtersets.py:33 netbox/users/forms/model_forms.py:195 +#: netbox/virtualization/forms/bulk_edit.py:70 +#: netbox/virtualization/forms/bulk_edit.py:118 +#: netbox/virtualization/forms/bulk_import.py:54 +#: netbox/virtualization/forms/bulk_import.py:80 +#: netbox/virtualization/forms/filtersets.py:62 +#: netbox/virtualization/forms/filtersets.py:160 +#: netbox/virtualization/tables/clusters.py:74 +#: netbox/virtualization/tables/virtualmachines.py:59 +#: netbox/vpn/forms/bulk_edit.py:39 netbox/vpn/forms/bulk_import.py:37 +#: netbox/vpn/forms/filtersets.py:47 netbox/vpn/tables/tunnels.py:48 +#: netbox/wireless/forms/bulk_edit.py:43 netbox/wireless/forms/bulk_edit.py:105 +#: netbox/wireless/forms/bulk_import.py:43 +#: netbox/wireless/forms/bulk_import.py:84 +#: netbox/wireless/forms/filtersets.py:49 +#: netbox/wireless/forms/filtersets.py:83 +#: netbox/wireless/tables/wirelesslan.py:52 +#: netbox/wireless/tables/wirelesslink.py:19 msgid "Status" msgstr "" -#: circuits/forms/bulk_edit.py:140 circuits/forms/bulk_import.py:100 -#: circuits/forms/filtersets.py:117 dcim/forms/bulk_edit.py:121 -#: dcim/forms/bulk_edit.py:186 dcim/forms/bulk_edit.py:256 -#: dcim/forms/bulk_edit.py:368 dcim/forms/bulk_edit.py:588 -#: dcim/forms/bulk_edit.py:692 dcim/forms/bulk_edit.py:1599 -#: dcim/forms/bulk_import.py:106 dcim/forms/bulk_import.py:151 -#: dcim/forms/bulk_import.py:195 dcim/forms/bulk_import.py:282 -#: dcim/forms/bulk_import.py:424 dcim/forms/bulk_import.py:1167 -#: dcim/forms/bulk_import.py:1379 dcim/forms/filtersets.py:166 -#: dcim/forms/filtersets.py:198 dcim/forms/filtersets.py:249 -#: dcim/forms/filtersets.py:334 dcim/forms/filtersets.py:355 -#: dcim/forms/filtersets.py:652 dcim/forms/filtersets.py:835 -#: dcim/forms/filtersets.py:897 dcim/forms/filtersets.py:927 -#: dcim/forms/filtersets.py:1049 dcim/tables/power.py:88 -#: extras/filtersets.py:564 extras/forms/filtersets.py:332 -#: extras/forms/filtersets.py:405 ipam/forms/bulk_edit.py:41 -#: ipam/forms/bulk_edit.py:66 ipam/forms/bulk_edit.py:110 -#: ipam/forms/bulk_edit.py:139 ipam/forms/bulk_edit.py:164 -#: ipam/forms/bulk_edit.py:236 ipam/forms/bulk_edit.py:285 -#: ipam/forms/bulk_edit.py:333 ipam/forms/bulk_edit.py:539 -#: ipam/forms/bulk_import.py:37 ipam/forms/bulk_import.py:66 -#: ipam/forms/bulk_import.py:94 ipam/forms/bulk_import.py:114 -#: ipam/forms/bulk_import.py:134 ipam/forms/bulk_import.py:163 -#: ipam/forms/bulk_import.py:249 ipam/forms/bulk_import.py:285 -#: ipam/forms/bulk_import.py:451 ipam/forms/filtersets.py:48 -#: ipam/forms/filtersets.py:68 ipam/forms/filtersets.py:100 -#: ipam/forms/filtersets.py:120 ipam/forms/filtersets.py:143 -#: ipam/forms/filtersets.py:174 ipam/forms/filtersets.py:267 -#: ipam/forms/filtersets.py:310 ipam/forms/filtersets.py:476 -#: ipam/tables/ip.py:451 ipam/tables/vlans.py:224 -#: templates/circuits/circuit.html:38 templates/dcim/cable.html:23 -#: templates/dcim/device.html:78 templates/dcim/location.html:49 -#: templates/dcim/powerfeed.html:44 templates/dcim/rack.html:34 -#: templates/dcim/rackreservation.html:49 templates/dcim/site.html:46 -#: templates/dcim/virtualdevicecontext.html:52 templates/ipam/aggregate.html:30 -#: templates/ipam/asn.html:33 templates/ipam/asnrange.html:29 -#: templates/ipam/ipaddress.html:28 templates/ipam/iprange.html:58 -#: templates/ipam/prefix.html:29 templates/ipam/routetarget.html:17 -#: templates/ipam/vlan.html:39 templates/ipam/vrf.html:20 -#: templates/tenancy/tenant.html:17 templates/virtualization/cluster.html:33 -#: templates/virtualization/virtualmachine.html:35 templates/vpn/l2vpn.html:30 -#: templates/vpn/tunnel.html:49 templates/wireless/wirelesslan.html:34 -#: templates/wireless/wirelesslink.html:25 tenancy/forms/forms.py:25 -#: tenancy/forms/forms.py:48 tenancy/forms/model_forms.py:52 -#: tenancy/tables/columns.py:64 virtualization/forms/bulk_edit.py:76 -#: virtualization/forms/bulk_edit.py:155 virtualization/forms/bulk_import.py:66 -#: virtualization/forms/bulk_import.py:115 -#: virtualization/forms/filtersets.py:47 virtualization/forms/filtersets.py:105 -#: vpn/forms/bulk_edit.py:59 vpn/forms/bulk_edit.py:269 -#: vpn/forms/bulk_import.py:59 vpn/forms/bulk_import.py:258 -#: vpn/forms/filtersets.py:214 wireless/forms/bulk_edit.py:63 -#: wireless/forms/bulk_edit.py:110 wireless/forms/bulk_import.py:55 -#: wireless/forms/bulk_import.py:97 wireless/forms/filtersets.py:35 -#: wireless/forms/filtersets.py:75 +#: netbox/circuits/forms/bulk_edit.py:140 +#: netbox/circuits/forms/bulk_import.py:100 +#: netbox/circuits/forms/filtersets.py:117 netbox/dcim/forms/bulk_edit.py:121 +#: netbox/dcim/forms/bulk_edit.py:186 netbox/dcim/forms/bulk_edit.py:256 +#: netbox/dcim/forms/bulk_edit.py:368 netbox/dcim/forms/bulk_edit.py:588 +#: netbox/dcim/forms/bulk_edit.py:692 netbox/dcim/forms/bulk_edit.py:1599 +#: netbox/dcim/forms/bulk_import.py:106 netbox/dcim/forms/bulk_import.py:151 +#: netbox/dcim/forms/bulk_import.py:195 netbox/dcim/forms/bulk_import.py:282 +#: netbox/dcim/forms/bulk_import.py:424 netbox/dcim/forms/bulk_import.py:1167 +#: netbox/dcim/forms/bulk_import.py:1379 netbox/dcim/forms/filtersets.py:166 +#: netbox/dcim/forms/filtersets.py:198 netbox/dcim/forms/filtersets.py:249 +#: netbox/dcim/forms/filtersets.py:334 netbox/dcim/forms/filtersets.py:355 +#: netbox/dcim/forms/filtersets.py:652 netbox/dcim/forms/filtersets.py:835 +#: netbox/dcim/forms/filtersets.py:897 netbox/dcim/forms/filtersets.py:927 +#: netbox/dcim/forms/filtersets.py:1049 netbox/dcim/tables/power.py:88 +#: netbox/extras/filtersets.py:564 netbox/extras/forms/filtersets.py:332 +#: netbox/extras/forms/filtersets.py:405 netbox/ipam/forms/bulk_edit.py:41 +#: netbox/ipam/forms/bulk_edit.py:66 netbox/ipam/forms/bulk_edit.py:110 +#: netbox/ipam/forms/bulk_edit.py:139 netbox/ipam/forms/bulk_edit.py:164 +#: netbox/ipam/forms/bulk_edit.py:236 netbox/ipam/forms/bulk_edit.py:285 +#: netbox/ipam/forms/bulk_edit.py:333 netbox/ipam/forms/bulk_edit.py:539 +#: netbox/ipam/forms/bulk_import.py:37 netbox/ipam/forms/bulk_import.py:66 +#: netbox/ipam/forms/bulk_import.py:94 netbox/ipam/forms/bulk_import.py:114 +#: netbox/ipam/forms/bulk_import.py:134 netbox/ipam/forms/bulk_import.py:163 +#: netbox/ipam/forms/bulk_import.py:249 netbox/ipam/forms/bulk_import.py:285 +#: netbox/ipam/forms/bulk_import.py:451 netbox/ipam/forms/filtersets.py:48 +#: netbox/ipam/forms/filtersets.py:68 netbox/ipam/forms/filtersets.py:100 +#: netbox/ipam/forms/filtersets.py:120 netbox/ipam/forms/filtersets.py:143 +#: netbox/ipam/forms/filtersets.py:174 netbox/ipam/forms/filtersets.py:267 +#: netbox/ipam/forms/filtersets.py:310 netbox/ipam/forms/filtersets.py:476 +#: netbox/ipam/tables/ip.py:451 netbox/ipam/tables/vlans.py:224 +#: netbox/templates/circuits/circuit.html:38 +#: netbox/templates/dcim/cable.html:23 netbox/templates/dcim/device.html:79 +#: netbox/templates/dcim/location.html:49 +#: netbox/templates/dcim/powerfeed.html:44 netbox/templates/dcim/rack.html:34 +#: netbox/templates/dcim/rackreservation.html:49 +#: netbox/templates/dcim/site.html:47 +#: netbox/templates/dcim/virtualdevicecontext.html:52 +#: netbox/templates/ipam/aggregate.html:30 netbox/templates/ipam/asn.html:33 +#: netbox/templates/ipam/asnrange.html:29 +#: netbox/templates/ipam/ipaddress.html:28 +#: netbox/templates/ipam/iprange.html:58 netbox/templates/ipam/prefix.html:29 +#: netbox/templates/ipam/routetarget.html:17 netbox/templates/ipam/vlan.html:39 +#: netbox/templates/ipam/vrf.html:20 netbox/templates/tenancy/tenant.html:17 +#: netbox/templates/virtualization/cluster.html:33 +#: netbox/templates/virtualization/virtualmachine.html:35 +#: netbox/templates/vpn/l2vpn.html:30 netbox/templates/vpn/tunnel.html:49 +#: netbox/templates/wireless/wirelesslan.html:34 +#: netbox/templates/wireless/wirelesslink.html:25 +#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:48 +#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:64 +#: netbox/virtualization/forms/bulk_edit.py:76 +#: netbox/virtualization/forms/bulk_edit.py:155 +#: netbox/virtualization/forms/bulk_import.py:66 +#: netbox/virtualization/forms/bulk_import.py:115 +#: netbox/virtualization/forms/filtersets.py:47 +#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/vpn/forms/bulk_edit.py:59 netbox/vpn/forms/bulk_edit.py:269 +#: netbox/vpn/forms/bulk_import.py:59 netbox/vpn/forms/bulk_import.py:258 +#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:63 +#: netbox/wireless/forms/bulk_edit.py:110 +#: netbox/wireless/forms/bulk_import.py:55 +#: netbox/wireless/forms/bulk_import.py:97 +#: netbox/wireless/forms/filtersets.py:35 +#: netbox/wireless/forms/filtersets.py:75 msgid "Tenant" msgstr "" -#: circuits/forms/bulk_edit.py:145 circuits/forms/filtersets.py:172 +#: netbox/circuits/forms/bulk_edit.py:145 +#: netbox/circuits/forms/filtersets.py:172 msgid "Install date" msgstr "" -#: circuits/forms/bulk_edit.py:150 circuits/forms/filtersets.py:177 +#: netbox/circuits/forms/bulk_edit.py:150 +#: netbox/circuits/forms/filtersets.py:177 msgid "Termination date" msgstr "" -#: circuits/forms/bulk_edit.py:156 circuits/forms/filtersets.py:184 +#: netbox/circuits/forms/bulk_edit.py:156 +#: netbox/circuits/forms/filtersets.py:184 msgid "Commit rate (Kbps)" msgstr "" -#: circuits/forms/bulk_edit.py:171 circuits/forms/model_forms.py:110 +#: netbox/circuits/forms/bulk_edit.py:171 +#: netbox/circuits/forms/model_forms.py:110 msgid "Service Parameters" msgstr "" -#: circuits/forms/bulk_edit.py:172 circuits/forms/model_forms.py:111 -#: dcim/forms/model_forms.py:138 dcim/forms/model_forms.py:180 -#: dcim/forms/model_forms.py:228 dcim/forms/model_forms.py:267 -#: dcim/forms/model_forms.py:713 dcim/forms/model_forms.py:1636 -#: ipam/forms/model_forms.py:62 ipam/forms/model_forms.py:79 -#: ipam/forms/model_forms.py:113 ipam/forms/model_forms.py:134 -#: ipam/forms/model_forms.py:158 ipam/forms/model_forms.py:230 -#: ipam/forms/model_forms.py:259 ipam/forms/model_forms.py:314 -#: netbox/navigation/menu.py:37 templates/dcim/device_edit.html:85 -#: templates/dcim/htmx/cable_edit.html:72 -#: templates/ipam/ipaddress_bulk_add.html:27 templates/ipam/vlan_edit.html:22 -#: virtualization/forms/model_forms.py:80 -#: virtualization/forms/model_forms.py:222 vpn/forms/bulk_edit.py:78 -#: vpn/forms/filtersets.py:44 vpn/forms/model_forms.py:62 -#: vpn/forms/model_forms.py:147 vpn/forms/model_forms.py:411 -#: wireless/forms/model_forms.py:54 wireless/forms/model_forms.py:163 +#: netbox/circuits/forms/bulk_edit.py:172 +#: netbox/circuits/forms/model_forms.py:111 +#: netbox/dcim/forms/model_forms.py:138 netbox/dcim/forms/model_forms.py:180 +#: netbox/dcim/forms/model_forms.py:228 netbox/dcim/forms/model_forms.py:267 +#: netbox/dcim/forms/model_forms.py:713 netbox/dcim/forms/model_forms.py:1636 +#: netbox/ipam/forms/model_forms.py:62 netbox/ipam/forms/model_forms.py:79 +#: netbox/ipam/forms/model_forms.py:113 netbox/ipam/forms/model_forms.py:134 +#: netbox/ipam/forms/model_forms.py:158 netbox/ipam/forms/model_forms.py:230 +#: netbox/ipam/forms/model_forms.py:259 netbox/ipam/forms/model_forms.py:314 +#: netbox/netbox/navigation/menu.py:37 +#: netbox/templates/dcim/device_edit.html:85 +#: netbox/templates/dcim/htmx/cable_edit.html:72 +#: netbox/templates/ipam/ipaddress_bulk_add.html:27 +#: netbox/templates/ipam/vlan_edit.html:22 +#: netbox/virtualization/forms/model_forms.py:80 +#: netbox/virtualization/forms/model_forms.py:222 +#: netbox/vpn/forms/bulk_edit.py:78 netbox/vpn/forms/filtersets.py:44 +#: netbox/vpn/forms/model_forms.py:62 netbox/vpn/forms/model_forms.py:147 +#: netbox/vpn/forms/model_forms.py:411 netbox/wireless/forms/model_forms.py:54 +#: netbox/wireless/forms/model_forms.py:163 msgid "Tenancy" msgstr "" -#: circuits/forms/bulk_edit.py:191 circuits/forms/bulk_edit.py:215 -#: circuits/forms/model_forms.py:153 circuits/tables/circuits.py:109 -#: templates/circuits/inc/circuit_termination_fields.html:62 -#: templates/circuits/providernetwork.html:17 +#: netbox/circuits/forms/bulk_edit.py:191 +#: netbox/circuits/forms/bulk_edit.py:215 +#: netbox/circuits/forms/model_forms.py:153 +#: netbox/circuits/tables/circuits.py:109 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:62 +#: netbox/templates/circuits/providernetwork.html:17 msgid "Provider Network" msgstr "" -#: circuits/forms/bulk_edit.py:197 +#: netbox/circuits/forms/bulk_edit.py:197 msgid "Port speed (Kbps)" msgstr "" -#: circuits/forms/bulk_edit.py:201 +#: netbox/circuits/forms/bulk_edit.py:201 msgid "Upstream speed (Kbps)" msgstr "" -#: circuits/forms/bulk_edit.py:204 dcim/forms/bulk_edit.py:849 -#: dcim/forms/bulk_edit.py:1208 dcim/forms/bulk_edit.py:1225 -#: dcim/forms/bulk_edit.py:1242 dcim/forms/bulk_edit.py:1260 -#: dcim/forms/bulk_edit.py:1348 dcim/forms/bulk_edit.py:1487 -#: dcim/forms/bulk_edit.py:1504 +#: netbox/circuits/forms/bulk_edit.py:204 netbox/dcim/forms/bulk_edit.py:849 +#: netbox/dcim/forms/bulk_edit.py:1208 netbox/dcim/forms/bulk_edit.py:1225 +#: netbox/dcim/forms/bulk_edit.py:1242 netbox/dcim/forms/bulk_edit.py:1260 +#: netbox/dcim/forms/bulk_edit.py:1348 netbox/dcim/forms/bulk_edit.py:1487 +#: netbox/dcim/forms/bulk_edit.py:1504 msgid "Mark connected" msgstr "" -#: circuits/forms/bulk_edit.py:217 circuits/forms/model_forms.py:155 -#: templates/circuits/inc/circuit_termination_fields.html:54 -#: templates/dcim/frontport.html:121 templates/dcim/interface.html:193 -#: templates/dcim/rearport.html:111 +#: netbox/circuits/forms/bulk_edit.py:217 +#: netbox/circuits/forms/model_forms.py:155 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 +#: netbox/templates/dcim/frontport.html:121 +#: netbox/templates/dcim/interface.html:193 +#: netbox/templates/dcim/rearport.html:111 msgid "Circuit Termination" msgstr "" -#: circuits/forms/bulk_edit.py:219 circuits/forms/model_forms.py:157 +#: netbox/circuits/forms/bulk_edit.py:219 +#: netbox/circuits/forms/model_forms.py:157 msgid "Termination Details" msgstr "" -#: circuits/forms/bulk_import.py:38 circuits/forms/bulk_import.py:53 -#: circuits/forms/bulk_import.py:79 +#: netbox/circuits/forms/bulk_import.py:38 +#: netbox/circuits/forms/bulk_import.py:53 +#: netbox/circuits/forms/bulk_import.py:79 msgid "Assigned provider" msgstr "" -#: circuits/forms/bulk_import.py:70 dcim/forms/bulk_import.py:178 -#: dcim/forms/bulk_import.py:388 dcim/forms/bulk_import.py:1108 -#: dcim/forms/bulk_import.py:1187 extras/forms/bulk_import.py:232 +#: netbox/circuits/forms/bulk_import.py:70 netbox/dcim/forms/bulk_import.py:178 +#: netbox/dcim/forms/bulk_import.py:388 netbox/dcim/forms/bulk_import.py:1108 +#: netbox/dcim/forms/bulk_import.py:1187 netbox/extras/forms/bulk_import.py:232 msgid "RGB color in hexadecimal. Example:" msgstr "" -#: circuits/forms/bulk_import.py:85 +#: netbox/circuits/forms/bulk_import.py:85 msgid "Assigned provider account" msgstr "" -#: circuits/forms/bulk_import.py:92 +#: netbox/circuits/forms/bulk_import.py:92 msgid "Type of circuit" msgstr "" -#: circuits/forms/bulk_import.py:97 dcim/forms/bulk_import.py:89 -#: dcim/forms/bulk_import.py:148 dcim/forms/bulk_import.py:204 -#: dcim/forms/bulk_import.py:452 dcim/forms/bulk_import.py:606 -#: dcim/forms/bulk_import.py:1324 ipam/forms/bulk_import.py:193 -#: ipam/forms/bulk_import.py:258 ipam/forms/bulk_import.py:294 -#: ipam/forms/bulk_import.py:460 virtualization/forms/bulk_import.py:56 -#: virtualization/forms/bulk_import.py:82 vpn/forms/bulk_import.py:39 -#: wireless/forms/bulk_import.py:45 +#: netbox/circuits/forms/bulk_import.py:97 netbox/dcim/forms/bulk_import.py:89 +#: netbox/dcim/forms/bulk_import.py:148 netbox/dcim/forms/bulk_import.py:204 +#: netbox/dcim/forms/bulk_import.py:452 netbox/dcim/forms/bulk_import.py:606 +#: netbox/dcim/forms/bulk_import.py:1324 netbox/ipam/forms/bulk_import.py:193 +#: netbox/ipam/forms/bulk_import.py:258 netbox/ipam/forms/bulk_import.py:294 +#: netbox/ipam/forms/bulk_import.py:460 +#: netbox/virtualization/forms/bulk_import.py:56 +#: netbox/virtualization/forms/bulk_import.py:82 +#: netbox/vpn/forms/bulk_import.py:39 netbox/wireless/forms/bulk_import.py:45 msgid "Operational status" msgstr "" -#: circuits/forms/bulk_import.py:104 dcim/forms/bulk_import.py:110 -#: dcim/forms/bulk_import.py:155 dcim/forms/bulk_import.py:286 -#: dcim/forms/bulk_import.py:428 dcim/forms/bulk_import.py:1171 -#: dcim/forms/bulk_import.py:1319 dcim/forms/bulk_import.py:1383 -#: ipam/forms/bulk_import.py:41 ipam/forms/bulk_import.py:70 -#: ipam/forms/bulk_import.py:98 ipam/forms/bulk_import.py:118 -#: ipam/forms/bulk_import.py:138 ipam/forms/bulk_import.py:167 -#: ipam/forms/bulk_import.py:253 ipam/forms/bulk_import.py:289 -#: ipam/forms/bulk_import.py:455 virtualization/forms/bulk_import.py:70 -#: virtualization/forms/bulk_import.py:119 vpn/forms/bulk_import.py:63 -#: wireless/forms/bulk_import.py:59 wireless/forms/bulk_import.py:101 +#: netbox/circuits/forms/bulk_import.py:104 +#: netbox/dcim/forms/bulk_import.py:110 netbox/dcim/forms/bulk_import.py:155 +#: netbox/dcim/forms/bulk_import.py:286 netbox/dcim/forms/bulk_import.py:428 +#: netbox/dcim/forms/bulk_import.py:1171 netbox/dcim/forms/bulk_import.py:1319 +#: netbox/dcim/forms/bulk_import.py:1383 netbox/ipam/forms/bulk_import.py:41 +#: netbox/ipam/forms/bulk_import.py:70 netbox/ipam/forms/bulk_import.py:98 +#: netbox/ipam/forms/bulk_import.py:118 netbox/ipam/forms/bulk_import.py:138 +#: netbox/ipam/forms/bulk_import.py:167 netbox/ipam/forms/bulk_import.py:253 +#: netbox/ipam/forms/bulk_import.py:289 netbox/ipam/forms/bulk_import.py:455 +#: netbox/virtualization/forms/bulk_import.py:70 +#: netbox/virtualization/forms/bulk_import.py:119 +#: netbox/vpn/forms/bulk_import.py:63 netbox/wireless/forms/bulk_import.py:59 +#: netbox/wireless/forms/bulk_import.py:101 msgid "Assigned tenant" msgstr "" -#: circuits/forms/bulk_import.py:122 -#: templates/circuits/inc/circuit_termination.html:6 -#: templates/circuits/inc/circuit_termination_fields.html:15 -#: templates/dcim/cable.html:68 templates/dcim/cable.html:72 -#: vpn/forms/bulk_import.py:100 vpn/forms/filtersets.py:77 +#: netbox/circuits/forms/bulk_import.py:122 +#: netbox/templates/circuits/inc/circuit_termination.html:6 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:15 +#: netbox/templates/dcim/cable.html:68 netbox/templates/dcim/cable.html:72 +#: netbox/vpn/forms/bulk_import.py:100 netbox/vpn/forms/filtersets.py:77 msgid "Termination" msgstr "" -#: circuits/forms/bulk_import.py:132 circuits/forms/filtersets.py:145 -#: circuits/forms/filtersets.py:225 circuits/forms/model_forms.py:142 +#: netbox/circuits/forms/bulk_import.py:132 +#: netbox/circuits/forms/filtersets.py:145 +#: netbox/circuits/forms/filtersets.py:225 +#: netbox/circuits/forms/model_forms.py:142 msgid "Provider network" msgstr "" -#: circuits/forms/filtersets.py:28 circuits/forms/filtersets.py:116 -#: circuits/forms/filtersets.py:198 dcim/forms/bulk_edit.py:248 -#: dcim/forms/bulk_edit.py:346 dcim/forms/bulk_edit.py:580 -#: dcim/forms/bulk_edit.py:627 dcim/forms/bulk_edit.py:780 -#: dcim/forms/bulk_import.py:189 dcim/forms/bulk_import.py:263 -#: dcim/forms/bulk_import.py:491 dcim/forms/bulk_import.py:1268 -#: dcim/forms/bulk_import.py:1302 dcim/forms/filtersets.py:93 -#: dcim/forms/filtersets.py:246 dcim/forms/filtersets.py:279 -#: dcim/forms/filtersets.py:331 dcim/forms/filtersets.py:382 -#: dcim/forms/filtersets.py:649 dcim/forms/filtersets.py:691 -#: dcim/forms/filtersets.py:896 dcim/forms/filtersets.py:925 -#: dcim/forms/filtersets.py:945 dcim/forms/filtersets.py:1009 -#: dcim/forms/filtersets.py:1039 dcim/forms/filtersets.py:1048 -#: dcim/forms/filtersets.py:1159 dcim/forms/filtersets.py:1181 -#: dcim/forms/filtersets.py:1203 dcim/forms/filtersets.py:1220 -#: dcim/forms/filtersets.py:1240 dcim/forms/filtersets.py:1348 -#: dcim/forms/filtersets.py:1370 dcim/forms/filtersets.py:1391 -#: dcim/forms/filtersets.py:1406 dcim/forms/filtersets.py:1420 -#: dcim/forms/model_forms.py:179 dcim/forms/model_forms.py:211 -#: dcim/forms/model_forms.py:411 dcim/forms/model_forms.py:673 -#: dcim/tables/devices.py:162 dcim/tables/power.py:30 dcim/tables/racks.py:58 -#: dcim/tables/racks.py:143 extras/filtersets.py:488 -#: extras/forms/filtersets.py:329 ipam/forms/bulk_edit.py:457 -#: ipam/forms/filtersets.py:173 ipam/forms/filtersets.py:414 -#: ipam/forms/filtersets.py:437 ipam/forms/filtersets.py:474 -#: ipam/forms/model_forms.py:599 templates/dcim/device.html:25 -#: templates/dcim/device_edit.html:30 -#: templates/dcim/inc/cable_termination.html:12 templates/dcim/location.html:26 -#: templates/dcim/powerpanel.html:26 templates/dcim/rack.html:26 -#: templates/dcim/rackreservation.html:32 virtualization/forms/filtersets.py:46 -#: virtualization/forms/filtersets.py:100 wireless/forms/model_forms.py:87 -#: wireless/forms/model_forms.py:129 +#: netbox/circuits/forms/filtersets.py:28 +#: netbox/circuits/forms/filtersets.py:116 +#: netbox/circuits/forms/filtersets.py:198 netbox/dcim/forms/bulk_edit.py:248 +#: netbox/dcim/forms/bulk_edit.py:346 netbox/dcim/forms/bulk_edit.py:580 +#: netbox/dcim/forms/bulk_edit.py:627 netbox/dcim/forms/bulk_edit.py:780 +#: netbox/dcim/forms/bulk_import.py:189 netbox/dcim/forms/bulk_import.py:263 +#: netbox/dcim/forms/bulk_import.py:491 netbox/dcim/forms/bulk_import.py:1268 +#: netbox/dcim/forms/bulk_import.py:1302 netbox/dcim/forms/filtersets.py:93 +#: netbox/dcim/forms/filtersets.py:246 netbox/dcim/forms/filtersets.py:279 +#: netbox/dcim/forms/filtersets.py:331 netbox/dcim/forms/filtersets.py:382 +#: netbox/dcim/forms/filtersets.py:649 netbox/dcim/forms/filtersets.py:691 +#: netbox/dcim/forms/filtersets.py:896 netbox/dcim/forms/filtersets.py:925 +#: netbox/dcim/forms/filtersets.py:945 netbox/dcim/forms/filtersets.py:1009 +#: netbox/dcim/forms/filtersets.py:1039 netbox/dcim/forms/filtersets.py:1048 +#: netbox/dcim/forms/filtersets.py:1159 netbox/dcim/forms/filtersets.py:1181 +#: netbox/dcim/forms/filtersets.py:1203 netbox/dcim/forms/filtersets.py:1220 +#: netbox/dcim/forms/filtersets.py:1240 netbox/dcim/forms/filtersets.py:1348 +#: netbox/dcim/forms/filtersets.py:1370 netbox/dcim/forms/filtersets.py:1391 +#: netbox/dcim/forms/filtersets.py:1406 netbox/dcim/forms/filtersets.py:1420 +#: netbox/dcim/forms/model_forms.py:179 netbox/dcim/forms/model_forms.py:211 +#: netbox/dcim/forms/model_forms.py:411 netbox/dcim/forms/model_forms.py:673 +#: netbox/dcim/tables/devices.py:162 netbox/dcim/tables/power.py:30 +#: netbox/dcim/tables/racks.py:58 netbox/dcim/tables/racks.py:143 +#: netbox/extras/filtersets.py:488 netbox/extras/forms/filtersets.py:329 +#: netbox/ipam/forms/bulk_edit.py:457 netbox/ipam/forms/filtersets.py:173 +#: netbox/ipam/forms/filtersets.py:414 netbox/ipam/forms/filtersets.py:437 +#: netbox/ipam/forms/filtersets.py:474 netbox/ipam/forms/model_forms.py:599 +#: netbox/templates/dcim/device.html:26 +#: netbox/templates/dcim/device_edit.html:30 +#: netbox/templates/dcim/inc/cable_termination.html:12 +#: netbox/templates/dcim/location.html:26 +#: netbox/templates/dcim/powerpanel.html:26 netbox/templates/dcim/rack.html:26 +#: netbox/templates/dcim/rackreservation.html:32 +#: netbox/virtualization/forms/filtersets.py:46 +#: netbox/virtualization/forms/filtersets.py:100 +#: netbox/wireless/forms/model_forms.py:87 +#: netbox/wireless/forms/model_forms.py:129 msgid "Location" msgstr "" -#: circuits/forms/filtersets.py:30 circuits/forms/filtersets.py:118 -#: dcim/forms/filtersets.py:137 dcim/forms/filtersets.py:151 -#: dcim/forms/filtersets.py:167 dcim/forms/filtersets.py:199 -#: dcim/forms/filtersets.py:250 dcim/forms/filtersets.py:335 -#: dcim/forms/filtersets.py:406 dcim/forms/filtersets.py:653 -#: dcim/forms/filtersets.py:1010 netbox/navigation/menu.py:44 -#: netbox/navigation/menu.py:46 tenancy/forms/filtersets.py:42 -#: tenancy/tables/columns.py:70 tenancy/tables/contacts.py:25 -#: tenancy/views.py:19 virtualization/forms/filtersets.py:37 -#: virtualization/forms/filtersets.py:48 virtualization/forms/filtersets.py:106 +#: netbox/circuits/forms/filtersets.py:30 +#: netbox/circuits/forms/filtersets.py:118 netbox/dcim/forms/filtersets.py:137 +#: netbox/dcim/forms/filtersets.py:151 netbox/dcim/forms/filtersets.py:167 +#: netbox/dcim/forms/filtersets.py:199 netbox/dcim/forms/filtersets.py:250 +#: netbox/dcim/forms/filtersets.py:335 netbox/dcim/forms/filtersets.py:406 +#: netbox/dcim/forms/filtersets.py:653 netbox/dcim/forms/filtersets.py:1010 +#: netbox/netbox/navigation/menu.py:44 netbox/netbox/navigation/menu.py:46 +#: netbox/tenancy/forms/filtersets.py:42 netbox/tenancy/tables/columns.py:70 +#: netbox/tenancy/tables/contacts.py:25 netbox/tenancy/views.py:19 +#: netbox/virtualization/forms/filtersets.py:37 +#: netbox/virtualization/forms/filtersets.py:48 +#: netbox/virtualization/forms/filtersets.py:106 msgid "Contacts" msgstr "" -#: circuits/forms/filtersets.py:35 circuits/forms/filtersets.py:155 -#: dcim/forms/bulk_edit.py:111 dcim/forms/bulk_edit.py:223 -#: dcim/forms/bulk_edit.py:755 dcim/forms/bulk_import.py:92 -#: dcim/forms/filtersets.py:71 dcim/forms/filtersets.py:178 -#: dcim/forms/filtersets.py:204 dcim/forms/filtersets.py:257 -#: dcim/forms/filtersets.py:360 dcim/forms/filtersets.py:668 -#: dcim/forms/filtersets.py:902 dcim/forms/filtersets.py:932 -#: dcim/forms/filtersets.py:1016 dcim/forms/filtersets.py:1055 -#: dcim/forms/filtersets.py:1468 dcim/forms/filtersets.py:1492 -#: dcim/forms/filtersets.py:1516 dcim/forms/model_forms.py:111 -#: dcim/forms/object_create.py:375 dcim/tables/devices.py:148 -#: dcim/tables/sites.py:85 extras/filtersets.py:455 ipam/forms/bulk_edit.py:206 -#: ipam/forms/bulk_edit.py:438 ipam/forms/bulk_edit.py:512 -#: ipam/forms/filtersets.py:217 ipam/forms/filtersets.py:422 -#: ipam/forms/filtersets.py:482 ipam/forms/model_forms.py:571 -#: templates/dcim/device.html:17 templates/dcim/rack.html:16 -#: templates/dcim/rackreservation.html:22 templates/dcim/region.html:26 -#: templates/dcim/site.html:30 templates/ipam/prefix.html:49 -#: templates/ipam/vlan.html:16 virtualization/forms/bulk_edit.py:81 -#: virtualization/forms/filtersets.py:59 virtualization/forms/filtersets.py:133 -#: virtualization/forms/model_forms.py:92 vpn/forms/filtersets.py:257 +#: netbox/circuits/forms/filtersets.py:35 +#: netbox/circuits/forms/filtersets.py:155 netbox/dcim/forms/bulk_edit.py:111 +#: netbox/dcim/forms/bulk_edit.py:223 netbox/dcim/forms/bulk_edit.py:755 +#: netbox/dcim/forms/bulk_import.py:92 netbox/dcim/forms/filtersets.py:71 +#: netbox/dcim/forms/filtersets.py:178 netbox/dcim/forms/filtersets.py:204 +#: netbox/dcim/forms/filtersets.py:257 netbox/dcim/forms/filtersets.py:360 +#: netbox/dcim/forms/filtersets.py:668 netbox/dcim/forms/filtersets.py:902 +#: netbox/dcim/forms/filtersets.py:932 netbox/dcim/forms/filtersets.py:1016 +#: netbox/dcim/forms/filtersets.py:1055 netbox/dcim/forms/filtersets.py:1468 +#: netbox/dcim/forms/filtersets.py:1492 netbox/dcim/forms/filtersets.py:1516 +#: netbox/dcim/forms/model_forms.py:111 netbox/dcim/forms/object_create.py:375 +#: netbox/dcim/tables/devices.py:148 netbox/dcim/tables/sites.py:85 +#: netbox/extras/filtersets.py:455 netbox/ipam/forms/bulk_edit.py:206 +#: netbox/ipam/forms/bulk_edit.py:438 netbox/ipam/forms/bulk_edit.py:512 +#: netbox/ipam/forms/filtersets.py:217 netbox/ipam/forms/filtersets.py:422 +#: netbox/ipam/forms/filtersets.py:482 netbox/ipam/forms/model_forms.py:571 +#: netbox/templates/dcim/device.html:18 netbox/templates/dcim/rack.html:16 +#: netbox/templates/dcim/rackreservation.html:22 +#: netbox/templates/dcim/region.html:26 netbox/templates/dcim/site.html:31 +#: netbox/templates/ipam/prefix.html:49 netbox/templates/ipam/vlan.html:16 +#: netbox/virtualization/forms/bulk_edit.py:81 +#: netbox/virtualization/forms/filtersets.py:59 +#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/model_forms.py:92 +#: netbox/vpn/forms/filtersets.py:257 msgid "Region" msgstr "" -#: circuits/forms/filtersets.py:40 circuits/forms/filtersets.py:160 -#: dcim/forms/bulk_edit.py:231 dcim/forms/bulk_edit.py:763 -#: dcim/forms/filtersets.py:76 dcim/forms/filtersets.py:183 -#: dcim/forms/filtersets.py:209 dcim/forms/filtersets.py:270 -#: dcim/forms/filtersets.py:365 dcim/forms/filtersets.py:673 -#: dcim/forms/filtersets.py:907 dcim/forms/filtersets.py:1021 -#: dcim/forms/filtersets.py:1060 dcim/forms/object_create.py:383 -#: extras/filtersets.py:472 ipam/forms/bulk_edit.py:211 -#: ipam/forms/bulk_edit.py:445 ipam/forms/bulk_edit.py:517 -#: ipam/forms/filtersets.py:222 ipam/forms/filtersets.py:427 -#: ipam/forms/filtersets.py:487 ipam/forms/model_forms.py:584 -#: virtualization/forms/bulk_edit.py:86 virtualization/forms/filtersets.py:69 -#: virtualization/forms/filtersets.py:138 -#: virtualization/forms/model_forms.py:98 +#: netbox/circuits/forms/filtersets.py:40 +#: netbox/circuits/forms/filtersets.py:160 netbox/dcim/forms/bulk_edit.py:231 +#: netbox/dcim/forms/bulk_edit.py:763 netbox/dcim/forms/filtersets.py:76 +#: netbox/dcim/forms/filtersets.py:183 netbox/dcim/forms/filtersets.py:209 +#: netbox/dcim/forms/filtersets.py:270 netbox/dcim/forms/filtersets.py:365 +#: netbox/dcim/forms/filtersets.py:673 netbox/dcim/forms/filtersets.py:907 +#: netbox/dcim/forms/filtersets.py:1021 netbox/dcim/forms/filtersets.py:1060 +#: netbox/dcim/forms/object_create.py:383 netbox/extras/filtersets.py:472 +#: netbox/ipam/forms/bulk_edit.py:211 netbox/ipam/forms/bulk_edit.py:445 +#: netbox/ipam/forms/bulk_edit.py:517 netbox/ipam/forms/filtersets.py:222 +#: netbox/ipam/forms/filtersets.py:427 netbox/ipam/forms/filtersets.py:487 +#: netbox/ipam/forms/model_forms.py:584 +#: netbox/virtualization/forms/bulk_edit.py:86 +#: netbox/virtualization/forms/filtersets.py:69 +#: netbox/virtualization/forms/filtersets.py:138 +#: netbox/virtualization/forms/model_forms.py:98 msgid "Site group" msgstr "" -#: circuits/forms/filtersets.py:63 circuits/forms/filtersets.py:81 -#: circuits/forms/filtersets.py:100 circuits/forms/filtersets.py:115 -#: core/forms/filtersets.py:64 dcim/forms/bulk_edit.py:726 -#: dcim/forms/filtersets.py:165 dcim/forms/filtersets.py:197 -#: dcim/forms/filtersets.py:834 dcim/forms/filtersets.py:926 -#: dcim/forms/filtersets.py:1050 dcim/forms/filtersets.py:1158 -#: dcim/forms/filtersets.py:1180 dcim/forms/filtersets.py:1202 -#: dcim/forms/filtersets.py:1219 dcim/forms/filtersets.py:1236 -#: dcim/forms/filtersets.py:1347 dcim/forms/filtersets.py:1369 -#: dcim/forms/filtersets.py:1390 dcim/forms/filtersets.py:1405 -#: dcim/forms/filtersets.py:1418 extras/forms/filtersets.py:43 -#: extras/forms/filtersets.py:112 extras/forms/filtersets.py:143 -#: extras/forms/filtersets.py:183 extras/forms/filtersets.py:199 -#: extras/forms/filtersets.py:230 extras/forms/filtersets.py:254 -#: extras/forms/filtersets.py:450 extras/forms/filtersets.py:488 -#: ipam/forms/filtersets.py:99 ipam/forms/filtersets.py:266 -#: ipam/forms/filtersets.py:307 ipam/forms/filtersets.py:382 -#: ipam/forms/filtersets.py:475 ipam/forms/filtersets.py:534 -#: ipam/forms/filtersets.py:552 netbox/tables/tables.py:255 -#: virtualization/forms/filtersets.py:45 virtualization/forms/filtersets.py:103 -#: virtualization/forms/filtersets.py:194 -#: virtualization/forms/filtersets.py:239 vpn/forms/filtersets.py:213 -#: wireless/forms/filtersets.py:34 wireless/forms/filtersets.py:74 +#: netbox/circuits/forms/filtersets.py:63 +#: netbox/circuits/forms/filtersets.py:81 +#: netbox/circuits/forms/filtersets.py:100 +#: netbox/circuits/forms/filtersets.py:115 netbox/core/forms/filtersets.py:64 +#: netbox/dcim/forms/bulk_edit.py:726 netbox/dcim/forms/filtersets.py:165 +#: netbox/dcim/forms/filtersets.py:197 netbox/dcim/forms/filtersets.py:834 +#: netbox/dcim/forms/filtersets.py:926 netbox/dcim/forms/filtersets.py:1050 +#: netbox/dcim/forms/filtersets.py:1158 netbox/dcim/forms/filtersets.py:1180 +#: netbox/dcim/forms/filtersets.py:1202 netbox/dcim/forms/filtersets.py:1219 +#: netbox/dcim/forms/filtersets.py:1236 netbox/dcim/forms/filtersets.py:1347 +#: netbox/dcim/forms/filtersets.py:1369 netbox/dcim/forms/filtersets.py:1390 +#: netbox/dcim/forms/filtersets.py:1405 netbox/dcim/forms/filtersets.py:1418 +#: netbox/extras/forms/filtersets.py:43 netbox/extras/forms/filtersets.py:112 +#: netbox/extras/forms/filtersets.py:143 netbox/extras/forms/filtersets.py:183 +#: netbox/extras/forms/filtersets.py:199 netbox/extras/forms/filtersets.py:230 +#: netbox/extras/forms/filtersets.py:254 netbox/extras/forms/filtersets.py:450 +#: netbox/extras/forms/filtersets.py:488 netbox/ipam/forms/filtersets.py:99 +#: netbox/ipam/forms/filtersets.py:266 netbox/ipam/forms/filtersets.py:307 +#: netbox/ipam/forms/filtersets.py:382 netbox/ipam/forms/filtersets.py:475 +#: netbox/ipam/forms/filtersets.py:534 netbox/ipam/forms/filtersets.py:552 +#: netbox/netbox/tables/tables.py:255 +#: netbox/virtualization/forms/filtersets.py:45 +#: netbox/virtualization/forms/filtersets.py:103 +#: netbox/virtualization/forms/filtersets.py:194 +#: netbox/virtualization/forms/filtersets.py:239 +#: netbox/vpn/forms/filtersets.py:213 netbox/wireless/forms/filtersets.py:34 +#: netbox/wireless/forms/filtersets.py:74 msgid "Attributes" msgstr "" -#: circuits/forms/filtersets.py:71 circuits/tables/circuits.py:61 -#: circuits/tables/providers.py:66 templates/circuits/circuit.html:22 -#: templates/circuits/provideraccount.html:24 +#: netbox/circuits/forms/filtersets.py:71 netbox/circuits/tables/circuits.py:61 +#: netbox/circuits/tables/providers.py:66 +#: netbox/templates/circuits/circuit.html:22 +#: netbox/templates/circuits/provideraccount.html:24 msgid "Account" msgstr "" -#: circuits/forms/filtersets.py:215 +#: netbox/circuits/forms/filtersets.py:215 msgid "Term Side" msgstr "" -#: circuits/models/circuits.py:25 dcim/models/cables.py:67 -#: dcim/models/device_component_templates.py:491 -#: dcim/models/device_component_templates.py:591 -#: dcim/models/device_components.py:976 dcim/models/device_components.py:1050 -#: dcim/models/device_components.py:1166 dcim/models/devices.py:469 -#: dcim/models/racks.py:44 extras/models/tags.py:28 +#: netbox/circuits/models/circuits.py:25 netbox/dcim/models/cables.py:67 +#: netbox/dcim/models/device_component_templates.py:491 +#: netbox/dcim/models/device_component_templates.py:591 +#: netbox/dcim/models/device_components.py:976 +#: netbox/dcim/models/device_components.py:1050 +#: netbox/dcim/models/device_components.py:1166 +#: netbox/dcim/models/devices.py:469 netbox/dcim/models/racks.py:44 +#: netbox/extras/models/tags.py:28 msgid "color" msgstr "" -#: circuits/models/circuits.py:34 +#: netbox/circuits/models/circuits.py:34 msgid "circuit type" msgstr "" -#: circuits/models/circuits.py:35 +#: netbox/circuits/models/circuits.py:35 msgid "circuit types" msgstr "" -#: circuits/models/circuits.py:46 +#: netbox/circuits/models/circuits.py:46 msgid "circuit ID" msgstr "" -#: circuits/models/circuits.py:47 +#: netbox/circuits/models/circuits.py:47 msgid "Unique circuit ID" msgstr "" -#: circuits/models/circuits.py:67 core/models/data.py:55 core/models/jobs.py:85 -#: dcim/models/cables.py:49 dcim/models/devices.py:643 -#: dcim/models/devices.py:1155 dcim/models/devices.py:1364 -#: dcim/models/power.py:96 dcim/models/racks.py:98 dcim/models/sites.py:154 -#: dcim/models/sites.py:266 ipam/models/ip.py:253 ipam/models/ip.py:522 -#: ipam/models/ip.py:730 ipam/models/vlans.py:175 -#: virtualization/models/clusters.py:74 -#: virtualization/models/virtualmachines.py:84 vpn/models/tunnels.py:40 -#: wireless/models.py:94 wireless/models.py:158 +#: netbox/circuits/models/circuits.py:67 netbox/core/models/data.py:55 +#: netbox/core/models/jobs.py:85 netbox/dcim/models/cables.py:49 +#: netbox/dcim/models/devices.py:643 netbox/dcim/models/devices.py:1155 +#: netbox/dcim/models/devices.py:1364 netbox/dcim/models/power.py:96 +#: netbox/dcim/models/racks.py:98 netbox/dcim/models/sites.py:154 +#: netbox/dcim/models/sites.py:266 netbox/ipam/models/ip.py:253 +#: netbox/ipam/models/ip.py:522 netbox/ipam/models/ip.py:730 +#: netbox/ipam/models/vlans.py:175 netbox/virtualization/models/clusters.py:74 +#: netbox/virtualization/models/virtualmachines.py:84 +#: netbox/vpn/models/tunnels.py:40 netbox/wireless/models.py:94 +#: netbox/wireless/models.py:158 msgid "status" msgstr "" -#: circuits/models/circuits.py:82 +#: netbox/circuits/models/circuits.py:82 msgid "installed" msgstr "" -#: circuits/models/circuits.py:87 +#: netbox/circuits/models/circuits.py:87 msgid "terminates" msgstr "" -#: circuits/models/circuits.py:92 +#: netbox/circuits/models/circuits.py:92 msgid "commit rate (Kbps)" msgstr "" -#: circuits/models/circuits.py:93 +#: netbox/circuits/models/circuits.py:93 msgid "Committed rate" msgstr "" -#: circuits/models/circuits.py:135 +#: netbox/circuits/models/circuits.py:135 msgid "circuit" msgstr "" -#: circuits/models/circuits.py:136 +#: netbox/circuits/models/circuits.py:136 msgid "circuits" msgstr "" -#: circuits/models/circuits.py:169 +#: netbox/circuits/models/circuits.py:169 msgid "termination" msgstr "" -#: circuits/models/circuits.py:186 +#: netbox/circuits/models/circuits.py:186 msgid "port speed (Kbps)" msgstr "" -#: circuits/models/circuits.py:189 +#: netbox/circuits/models/circuits.py:189 msgid "Physical circuit speed" msgstr "" -#: circuits/models/circuits.py:194 +#: netbox/circuits/models/circuits.py:194 msgid "upstream speed (Kbps)" msgstr "" -#: circuits/models/circuits.py:195 +#: netbox/circuits/models/circuits.py:195 msgid "Upstream speed, if different from port speed" msgstr "" -#: circuits/models/circuits.py:200 +#: netbox/circuits/models/circuits.py:200 msgid "cross-connect ID" msgstr "" -#: circuits/models/circuits.py:201 +#: netbox/circuits/models/circuits.py:201 msgid "ID of the local cross-connect" msgstr "" -#: circuits/models/circuits.py:206 +#: netbox/circuits/models/circuits.py:206 msgid "patch panel/port(s)" msgstr "" -#: circuits/models/circuits.py:207 +#: netbox/circuits/models/circuits.py:207 msgid "Patch panel ID and port number(s)" msgstr "" -#: circuits/models/circuits.py:210 dcim/models/device_component_templates.py:61 -#: dcim/models/device_components.py:69 dcim/models/racks.py:538 -#: extras/models/configs.py:45 extras/models/configs.py:219 -#: extras/models/customfields.py:123 extras/models/models.py:60 -#: extras/models/models.py:186 extras/models/models.py:424 -#: extras/models/models.py:539 extras/models/staging.py:31 -#: extras/models/tags.py:32 netbox/models/__init__.py:109 -#: netbox/models/__init__.py:144 netbox/models/__init__.py:190 -#: users/models/permissions.py:24 users/models/tokens.py:58 -#: users/models/users.py:33 virtualization/models/virtualmachines.py:284 +#: netbox/circuits/models/circuits.py:210 +#: netbox/dcim/models/device_component_templates.py:61 +#: netbox/dcim/models/device_components.py:69 netbox/dcim/models/racks.py:538 +#: netbox/extras/models/configs.py:45 netbox/extras/models/configs.py:219 +#: netbox/extras/models/customfields.py:123 netbox/extras/models/models.py:60 +#: netbox/extras/models/models.py:186 netbox/extras/models/models.py:424 +#: netbox/extras/models/models.py:539 netbox/extras/models/staging.py:31 +#: netbox/extras/models/tags.py:32 netbox/netbox/models/__init__.py:109 +#: netbox/netbox/models/__init__.py:144 netbox/netbox/models/__init__.py:190 +#: netbox/users/models/permissions.py:24 netbox/users/models/tokens.py:58 +#: netbox/users/models/users.py:33 +#: netbox/virtualization/models/virtualmachines.py:284 msgid "description" msgstr "" -#: circuits/models/circuits.py:223 +#: netbox/circuits/models/circuits.py:223 msgid "circuit termination" msgstr "" -#: circuits/models/circuits.py:224 +#: netbox/circuits/models/circuits.py:224 msgid "circuit terminations" msgstr "" -#: circuits/models/circuits.py:237 +#: netbox/circuits/models/circuits.py:237 msgid "" "A circuit termination must attach to either a site or a provider network." msgstr "" -#: circuits/models/circuits.py:239 +#: netbox/circuits/models/circuits.py:239 msgid "" "A circuit termination cannot attach to both a site and a provider network." msgstr "" -#: circuits/models/providers.py:22 circuits/models/providers.py:66 -#: circuits/models/providers.py:104 core/models/data.py:42 -#: core/models/jobs.py:46 dcim/models/device_component_templates.py:43 -#: dcim/models/device_components.py:54 dcim/models/devices.py:583 -#: dcim/models/devices.py:1295 dcim/models/devices.py:1360 -#: dcim/models/power.py:39 dcim/models/power.py:92 dcim/models/racks.py:63 -#: dcim/models/sites.py:138 extras/models/configs.py:36 -#: extras/models/configs.py:215 extras/models/customfields.py:90 -#: extras/models/models.py:55 extras/models/models.py:181 -#: extras/models/models.py:324 extras/models/models.py:420 -#: extras/models/models.py:529 extras/models/models.py:624 -#: extras/models/scripts.py:30 extras/models/staging.py:26 -#: ipam/models/asns.py:18 ipam/models/fhrp.py:25 ipam/models/services.py:51 -#: ipam/models/services.py:87 ipam/models/vlans.py:26 ipam/models/vlans.py:164 -#: ipam/models/vrfs.py:22 ipam/models/vrfs.py:79 netbox/models/__init__.py:136 -#: netbox/models/__init__.py:180 tenancy/models/contacts.py:64 -#: tenancy/models/tenants.py:20 tenancy/models/tenants.py:45 -#: users/models/permissions.py:20 users/models/users.py:28 -#: virtualization/models/clusters.py:57 -#: virtualization/models/virtualmachines.py:72 -#: virtualization/models/virtualmachines.py:274 vpn/models/crypto.py:24 -#: vpn/models/crypto.py:71 vpn/models/crypto.py:131 vpn/models/crypto.py:183 -#: vpn/models/crypto.py:221 vpn/models/l2vpn.py:22 vpn/models/tunnels.py:35 -#: wireless/models.py:50 +#: netbox/circuits/models/providers.py:22 +#: netbox/circuits/models/providers.py:66 +#: netbox/circuits/models/providers.py:104 netbox/core/models/data.py:42 +#: netbox/core/models/jobs.py:46 +#: netbox/dcim/models/device_component_templates.py:43 +#: netbox/dcim/models/device_components.py:54 netbox/dcim/models/devices.py:583 +#: netbox/dcim/models/devices.py:1295 netbox/dcim/models/devices.py:1360 +#: netbox/dcim/models/power.py:39 netbox/dcim/models/power.py:92 +#: netbox/dcim/models/racks.py:63 netbox/dcim/models/sites.py:138 +#: netbox/extras/models/configs.py:36 netbox/extras/models/configs.py:215 +#: netbox/extras/models/customfields.py:90 netbox/extras/models/models.py:55 +#: netbox/extras/models/models.py:181 netbox/extras/models/models.py:324 +#: netbox/extras/models/models.py:420 netbox/extras/models/models.py:529 +#: netbox/extras/models/models.py:624 netbox/extras/models/scripts.py:30 +#: netbox/extras/models/staging.py:26 netbox/ipam/models/asns.py:18 +#: netbox/ipam/models/fhrp.py:25 netbox/ipam/models/services.py:52 +#: netbox/ipam/models/services.py:88 netbox/ipam/models/vlans.py:26 +#: netbox/ipam/models/vlans.py:164 netbox/ipam/models/vrfs.py:22 +#: netbox/ipam/models/vrfs.py:79 netbox/netbox/models/__init__.py:136 +#: netbox/netbox/models/__init__.py:180 netbox/tenancy/models/contacts.py:64 +#: netbox/tenancy/models/tenants.py:20 netbox/tenancy/models/tenants.py:45 +#: netbox/users/models/permissions.py:20 netbox/users/models/users.py:28 +#: netbox/virtualization/models/clusters.py:57 +#: netbox/virtualization/models/virtualmachines.py:72 +#: netbox/virtualization/models/virtualmachines.py:274 +#: netbox/vpn/models/crypto.py:24 netbox/vpn/models/crypto.py:71 +#: netbox/vpn/models/crypto.py:131 netbox/vpn/models/crypto.py:183 +#: netbox/vpn/models/crypto.py:221 netbox/vpn/models/l2vpn.py:22 +#: netbox/vpn/models/tunnels.py:35 netbox/wireless/models.py:50 msgid "name" msgstr "" -#: circuits/models/providers.py:25 +#: netbox/circuits/models/providers.py:25 msgid "Full name of the provider" msgstr "" -#: circuits/models/providers.py:28 dcim/models/devices.py:86 -#: dcim/models/sites.py:149 extras/models/models.py:534 ipam/models/asns.py:23 -#: ipam/models/vlans.py:30 netbox/models/__init__.py:140 -#: netbox/models/__init__.py:185 tenancy/models/tenants.py:25 -#: tenancy/models/tenants.py:49 vpn/models/l2vpn.py:27 wireless/models.py:55 +#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:86 +#: netbox/dcim/models/sites.py:149 netbox/extras/models/models.py:534 +#: netbox/ipam/models/asns.py:23 netbox/ipam/models/vlans.py:30 +#: netbox/netbox/models/__init__.py:140 netbox/netbox/models/__init__.py:185 +#: netbox/tenancy/models/tenants.py:25 netbox/tenancy/models/tenants.py:49 +#: netbox/vpn/models/l2vpn.py:27 netbox/wireless/models.py:55 msgid "slug" msgstr "" -#: circuits/models/providers.py:42 +#: netbox/circuits/models/providers.py:42 msgid "provider" msgstr "" -#: circuits/models/providers.py:43 +#: netbox/circuits/models/providers.py:43 msgid "providers" msgstr "" -#: circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:63 msgid "account ID" msgstr "" -#: circuits/models/providers.py:86 +#: netbox/circuits/models/providers.py:86 msgid "provider account" msgstr "" -#: circuits/models/providers.py:87 +#: netbox/circuits/models/providers.py:87 msgid "provider accounts" msgstr "" -#: circuits/models/providers.py:115 +#: netbox/circuits/models/providers.py:115 msgid "service ID" msgstr "" -#: circuits/models/providers.py:126 +#: netbox/circuits/models/providers.py:126 msgid "provider network" msgstr "" -#: circuits/models/providers.py:127 +#: netbox/circuits/models/providers.py:127 msgid "provider networks" msgstr "" -#: circuits/tables/circuits.py:30 circuits/tables/providers.py:18 -#: circuits/tables/providers.py:69 circuits/tables/providers.py:99 -#: core/tables/data.py:16 core/tables/jobs.py:14 core/tables/plugins.py:13 -#: core/tables/tasks.py:11 core/tables/tasks.py:115 dcim/forms/filtersets.py:61 -#: dcim/forms/object_create.py:43 dcim/tables/devices.py:60 -#: dcim/tables/devices.py:97 dcim/tables/devices.py:139 -#: dcim/tables/devices.py:294 dcim/tables/devices.py:380 -#: dcim/tables/devices.py:424 dcim/tables/devices.py:476 -#: dcim/tables/devices.py:528 dcim/tables/devices.py:644 -#: dcim/tables/devices.py:726 dcim/tables/devices.py:776 -#: dcim/tables/devices.py:842 dcim/tables/devices.py:957 -#: dcim/tables/devices.py:977 dcim/tables/devices.py:1006 -#: dcim/tables/devices.py:1036 dcim/tables/devicetypes.py:32 -#: dcim/tables/power.py:22 dcim/tables/power.py:62 dcim/tables/racks.py:23 -#: dcim/tables/racks.py:53 dcim/tables/sites.py:24 dcim/tables/sites.py:51 -#: dcim/tables/sites.py:78 dcim/tables/sites.py:125 -#: extras/forms/filtersets.py:191 extras/tables/tables.py:42 -#: extras/tables/tables.py:88 extras/tables/tables.py:120 -#: extras/tables/tables.py:144 extras/tables/tables.py:209 -#: extras/tables/tables.py:256 extras/tables/tables.py:279 -#: extras/tables/tables.py:329 extras/tables/tables.py:381 -#: extras/tables/tables.py:404 ipam/forms/bulk_edit.py:391 -#: ipam/forms/filtersets.py:386 ipam/tables/asn.py:16 ipam/tables/ip.py:85 -#: ipam/tables/ip.py:159 ipam/tables/services.py:15 ipam/tables/services.py:40 -#: ipam/tables/vlans.py:64 ipam/tables/vlans.py:110 ipam/tables/vrfs.py:26 -#: ipam/tables/vrfs.py:67 templates/circuits/circuittype.html:22 -#: templates/circuits/provideraccount.html:28 -#: templates/circuits/providernetwork.html:24 templates/core/datasource.html:34 -#: templates/core/job.html:26 templates/core/rq_worker.html:43 -#: templates/dcim/consoleport.html:28 templates/dcim/consoleserverport.html:28 -#: templates/dcim/devicebay.html:24 templates/dcim/devicerole.html:26 -#: templates/dcim/frontport.html:28 -#: templates/dcim/inc/interface_vlans_table.html:5 -#: templates/dcim/inc/panels/inventory_items.html:18 -#: templates/dcim/interface.html:38 templates/dcim/interface.html:165 -#: templates/dcim/inventoryitem.html:28 -#: templates/dcim/inventoryitemrole.html:18 templates/dcim/location.html:29 -#: templates/dcim/manufacturer.html:36 templates/dcim/modulebay.html:26 -#: templates/dcim/platform.html:29 templates/dcim/poweroutlet.html:28 -#: templates/dcim/powerport.html:28 templates/dcim/rackrole.html:22 -#: templates/dcim/rearport.html:28 templates/dcim/region.html:29 -#: templates/dcim/sitegroup.html:29 templates/dcim/virtualdevicecontext.html:18 -#: templates/extras/configcontext.html:13 -#: templates/extras/configtemplate.html:13 templates/extras/customfield.html:13 -#: templates/extras/customlink.html:13 templates/extras/eventrule.html:13 -#: templates/extras/exporttemplate.html:15 templates/extras/savedfilter.html:13 -#: templates/extras/script_list.html:46 templates/extras/tag.html:14 -#: templates/extras/webhook.html:13 templates/ipam/asnrange.html:15 -#: templates/ipam/fhrpgroup.html:30 templates/ipam/rir.html:22 -#: templates/ipam/role.html:22 templates/ipam/routetarget.html:13 -#: templates/ipam/service.html:24 templates/ipam/servicetemplate.html:15 -#: templates/ipam/vlan.html:35 templates/ipam/vlangroup.html:30 -#: templates/tenancy/contact.html:25 templates/tenancy/contactgroup.html:21 -#: templates/tenancy/contactrole.html:18 templates/tenancy/tenantgroup.html:29 -#: templates/users/group.html:17 templates/users/objectpermission.html:17 -#: templates/virtualization/cluster.html:13 -#: templates/virtualization/clustergroup.html:22 -#: templates/virtualization/clustertype.html:22 -#: templates/virtualization/virtualdisk.html:25 -#: templates/virtualization/virtualmachine.html:15 -#: templates/virtualization/vminterface.html:25 templates/vpn/ikepolicy.html:13 -#: templates/vpn/ikeproposal.html:13 templates/vpn/ipsecpolicy.html:13 -#: templates/vpn/ipsecprofile.html:13 templates/vpn/ipsecprofile.html:36 -#: templates/vpn/ipsecprofile.html:69 templates/vpn/ipsecproposal.html:13 -#: templates/vpn/l2vpn.html:14 templates/vpn/tunnel.html:21 -#: templates/vpn/tunnelgroup.html:26 -#: templates/wireless/wirelesslangroup.html:29 tenancy/tables/contacts.py:19 -#: tenancy/tables/contacts.py:41 tenancy/tables/contacts.py:56 -#: tenancy/tables/tenants.py:16 tenancy/tables/tenants.py:38 users/tables.py:62 -#: users/tables.py:76 virtualization/forms/bulk_create.py:20 -#: virtualization/forms/object_create.py:13 -#: virtualization/forms/object_create.py:23 -#: virtualization/tables/clusters.py:17 virtualization/tables/clusters.py:39 -#: virtualization/tables/clusters.py:62 -#: virtualization/tables/virtualmachines.py:54 -#: virtualization/tables/virtualmachines.py:132 -#: virtualization/tables/virtualmachines.py:185 vpn/tables/crypto.py:18 -#: vpn/tables/crypto.py:57 vpn/tables/crypto.py:93 vpn/tables/crypto.py:129 -#: vpn/tables/crypto.py:158 vpn/tables/l2vpn.py:23 vpn/tables/tunnels.py:18 -#: vpn/tables/tunnels.py:40 wireless/tables/wirelesslan.py:18 -#: wireless/tables/wirelesslan.py:79 +#: netbox/circuits/tables/circuits.py:30 netbox/circuits/tables/providers.py:18 +#: netbox/circuits/tables/providers.py:69 +#: netbox/circuits/tables/providers.py:99 netbox/core/tables/data.py:16 +#: netbox/core/tables/jobs.py:14 netbox/core/tables/plugins.py:13 +#: netbox/core/tables/tasks.py:11 netbox/core/tables/tasks.py:115 +#: netbox/dcim/forms/filtersets.py:61 netbox/dcim/forms/object_create.py:43 +#: netbox/dcim/tables/devices.py:60 netbox/dcim/tables/devices.py:97 +#: netbox/dcim/tables/devices.py:139 netbox/dcim/tables/devices.py:294 +#: netbox/dcim/tables/devices.py:380 netbox/dcim/tables/devices.py:424 +#: netbox/dcim/tables/devices.py:476 netbox/dcim/tables/devices.py:528 +#: netbox/dcim/tables/devices.py:644 netbox/dcim/tables/devices.py:726 +#: netbox/dcim/tables/devices.py:776 netbox/dcim/tables/devices.py:842 +#: netbox/dcim/tables/devices.py:957 netbox/dcim/tables/devices.py:977 +#: netbox/dcim/tables/devices.py:1006 netbox/dcim/tables/devices.py:1036 +#: netbox/dcim/tables/devicetypes.py:32 netbox/dcim/tables/power.py:22 +#: netbox/dcim/tables/power.py:62 netbox/dcim/tables/racks.py:23 +#: netbox/dcim/tables/racks.py:53 netbox/dcim/tables/sites.py:24 +#: netbox/dcim/tables/sites.py:51 netbox/dcim/tables/sites.py:78 +#: netbox/dcim/tables/sites.py:125 netbox/extras/forms/filtersets.py:191 +#: netbox/extras/tables/tables.py:42 netbox/extras/tables/tables.py:88 +#: netbox/extras/tables/tables.py:120 netbox/extras/tables/tables.py:144 +#: netbox/extras/tables/tables.py:209 netbox/extras/tables/tables.py:256 +#: netbox/extras/tables/tables.py:279 netbox/extras/tables/tables.py:329 +#: netbox/extras/tables/tables.py:381 netbox/extras/tables/tables.py:404 +#: netbox/ipam/forms/bulk_edit.py:391 netbox/ipam/forms/filtersets.py:386 +#: netbox/ipam/tables/asn.py:16 netbox/ipam/tables/ip.py:85 +#: netbox/ipam/tables/ip.py:159 netbox/ipam/tables/services.py:15 +#: netbox/ipam/tables/services.py:40 netbox/ipam/tables/vlans.py:64 +#: netbox/ipam/tables/vlans.py:110 netbox/ipam/tables/vrfs.py:26 +#: netbox/ipam/tables/vrfs.py:67 netbox/templates/circuits/circuittype.html:22 +#: netbox/templates/circuits/provideraccount.html:28 +#: netbox/templates/circuits/providernetwork.html:24 +#: netbox/templates/core/datasource.html:34 netbox/templates/core/job.html:26 +#: netbox/templates/core/rq_worker.html:43 +#: netbox/templates/dcim/consoleport.html:28 +#: netbox/templates/dcim/consoleserverport.html:28 +#: netbox/templates/dcim/devicebay.html:24 +#: netbox/templates/dcim/devicerole.html:26 +#: netbox/templates/dcim/frontport.html:28 +#: netbox/templates/dcim/inc/interface_vlans_table.html:5 +#: netbox/templates/dcim/inc/panels/inventory_items.html:18 +#: netbox/templates/dcim/interface.html:38 +#: netbox/templates/dcim/interface.html:165 +#: netbox/templates/dcim/inventoryitem.html:28 +#: netbox/templates/dcim/inventoryitemrole.html:18 +#: netbox/templates/dcim/location.html:29 +#: netbox/templates/dcim/manufacturer.html:36 +#: netbox/templates/dcim/modulebay.html:26 +#: netbox/templates/dcim/platform.html:29 +#: netbox/templates/dcim/poweroutlet.html:28 +#: netbox/templates/dcim/powerport.html:28 +#: netbox/templates/dcim/rackrole.html:22 +#: netbox/templates/dcim/rearport.html:28 netbox/templates/dcim/region.html:29 +#: netbox/templates/dcim/sitegroup.html:29 +#: netbox/templates/dcim/virtualdevicecontext.html:18 +#: netbox/templates/extras/configcontext.html:13 +#: netbox/templates/extras/configtemplate.html:13 +#: netbox/templates/extras/customfield.html:13 +#: netbox/templates/extras/customlink.html:13 +#: netbox/templates/extras/eventrule.html:13 +#: netbox/templates/extras/exporttemplate.html:15 +#: netbox/templates/extras/savedfilter.html:13 +#: netbox/templates/extras/script_list.html:46 +#: netbox/templates/extras/tag.html:14 netbox/templates/extras/webhook.html:13 +#: netbox/templates/ipam/asnrange.html:15 +#: netbox/templates/ipam/fhrpgroup.html:30 netbox/templates/ipam/rir.html:22 +#: netbox/templates/ipam/role.html:22 netbox/templates/ipam/routetarget.html:13 +#: netbox/templates/ipam/service.html:24 +#: netbox/templates/ipam/servicetemplate.html:15 +#: netbox/templates/ipam/vlan.html:35 netbox/templates/ipam/vlangroup.html:30 +#: netbox/templates/tenancy/contact.html:25 +#: netbox/templates/tenancy/contactgroup.html:21 +#: netbox/templates/tenancy/contactrole.html:18 +#: netbox/templates/tenancy/tenantgroup.html:29 +#: netbox/templates/users/group.html:17 +#: netbox/templates/users/objectpermission.html:17 +#: netbox/templates/virtualization/cluster.html:13 +#: netbox/templates/virtualization/clustergroup.html:22 +#: netbox/templates/virtualization/clustertype.html:22 +#: netbox/templates/virtualization/virtualdisk.html:25 +#: netbox/templates/virtualization/virtualmachine.html:15 +#: netbox/templates/virtualization/vminterface.html:25 +#: netbox/templates/vpn/ikepolicy.html:13 +#: netbox/templates/vpn/ikeproposal.html:13 +#: netbox/templates/vpn/ipsecpolicy.html:13 +#: netbox/templates/vpn/ipsecprofile.html:13 +#: netbox/templates/vpn/ipsecprofile.html:36 +#: netbox/templates/vpn/ipsecprofile.html:69 +#: netbox/templates/vpn/ipsecproposal.html:13 +#: netbox/templates/vpn/l2vpn.html:14 netbox/templates/vpn/tunnel.html:21 +#: netbox/templates/vpn/tunnelgroup.html:26 +#: netbox/templates/wireless/wirelesslangroup.html:29 +#: netbox/tenancy/tables/contacts.py:19 netbox/tenancy/tables/contacts.py:41 +#: netbox/tenancy/tables/contacts.py:56 netbox/tenancy/tables/tenants.py:16 +#: netbox/tenancy/tables/tenants.py:38 netbox/users/tables.py:62 +#: netbox/users/tables.py:76 netbox/virtualization/forms/bulk_create.py:20 +#: netbox/virtualization/forms/object_create.py:13 +#: netbox/virtualization/forms/object_create.py:23 +#: netbox/virtualization/tables/clusters.py:17 +#: netbox/virtualization/tables/clusters.py:39 +#: netbox/virtualization/tables/clusters.py:62 +#: netbox/virtualization/tables/virtualmachines.py:54 +#: netbox/virtualization/tables/virtualmachines.py:132 +#: netbox/virtualization/tables/virtualmachines.py:185 +#: netbox/vpn/tables/crypto.py:18 netbox/vpn/tables/crypto.py:57 +#: netbox/vpn/tables/crypto.py:93 netbox/vpn/tables/crypto.py:129 +#: netbox/vpn/tables/crypto.py:158 netbox/vpn/tables/l2vpn.py:23 +#: netbox/vpn/tables/tunnels.py:18 netbox/vpn/tables/tunnels.py:40 +#: netbox/wireless/tables/wirelesslan.py:18 +#: netbox/wireless/tables/wirelesslan.py:79 msgid "Name" msgstr "" -#: circuits/tables/circuits.py:39 circuits/tables/providers.py:45 -#: circuits/tables/providers.py:79 netbox/navigation/menu.py:253 -#: netbox/navigation/menu.py:257 netbox/navigation/menu.py:259 -#: templates/circuits/provider.html:57 -#: templates/circuits/provideraccount.html:44 -#: templates/circuits/providernetwork.html:50 +#: netbox/circuits/tables/circuits.py:39 netbox/circuits/tables/providers.py:45 +#: netbox/circuits/tables/providers.py:79 netbox/netbox/navigation/menu.py:253 +#: netbox/netbox/navigation/menu.py:257 netbox/netbox/navigation/menu.py:259 +#: netbox/templates/circuits/provider.html:57 +#: netbox/templates/circuits/provideraccount.html:44 +#: netbox/templates/circuits/providernetwork.html:50 msgid "Circuits" msgstr "" -#: circuits/tables/circuits.py:53 templates/circuits/circuit.html:26 +#: netbox/circuits/tables/circuits.py:53 +#: netbox/templates/circuits/circuit.html:26 msgid "Circuit ID" msgstr "" -#: circuits/tables/circuits.py:66 wireless/forms/model_forms.py:160 +#: netbox/circuits/tables/circuits.py:66 +#: netbox/wireless/forms/model_forms.py:160 msgid "Side A" msgstr "" -#: circuits/tables/circuits.py:70 +#: netbox/circuits/tables/circuits.py:70 msgid "Side Z" msgstr "" -#: circuits/tables/circuits.py:73 templates/circuits/circuit.html:55 +#: netbox/circuits/tables/circuits.py:73 +#: netbox/templates/circuits/circuit.html:55 msgid "Commit Rate" msgstr "" -#: circuits/tables/circuits.py:76 circuits/tables/providers.py:48 -#: circuits/tables/providers.py:82 circuits/tables/providers.py:107 -#: dcim/tables/devices.py:1019 dcim/tables/devicetypes.py:92 -#: dcim/tables/modules.py:29 dcim/tables/modules.py:72 dcim/tables/power.py:39 -#: dcim/tables/power.py:96 dcim/tables/racks.py:76 dcim/tables/racks.py:156 -#: dcim/tables/sites.py:103 extras/tables/tables.py:515 ipam/tables/asn.py:69 -#: ipam/tables/fhrp.py:34 ipam/tables/ip.py:135 ipam/tables/ip.py:272 -#: ipam/tables/ip.py:325 ipam/tables/ip.py:392 ipam/tables/services.py:24 -#: ipam/tables/services.py:54 ipam/tables/vlans.py:141 ipam/tables/vrfs.py:46 -#: ipam/tables/vrfs.py:71 templates/dcim/htmx/cable_edit.html:89 -#: templates/generic/bulk_edit.html:86 templates/inc/panels/comments.html:6 -#: tenancy/tables/contacts.py:68 tenancy/tables/tenants.py:46 -#: utilities/forms/fields/fields.py:29 virtualization/tables/clusters.py:91 -#: virtualization/tables/virtualmachines.py:81 vpn/tables/crypto.py:37 -#: vpn/tables/crypto.py:74 vpn/tables/crypto.py:109 vpn/tables/crypto.py:140 -#: vpn/tables/crypto.py:173 vpn/tables/l2vpn.py:37 vpn/tables/tunnels.py:61 -#: wireless/tables/wirelesslan.py:27 wireless/tables/wirelesslan.py:58 +#: netbox/circuits/tables/circuits.py:76 netbox/circuits/tables/providers.py:48 +#: netbox/circuits/tables/providers.py:82 +#: netbox/circuits/tables/providers.py:107 netbox/dcim/tables/devices.py:1019 +#: netbox/dcim/tables/devicetypes.py:92 netbox/dcim/tables/modules.py:29 +#: netbox/dcim/tables/modules.py:72 netbox/dcim/tables/power.py:39 +#: netbox/dcim/tables/power.py:96 netbox/dcim/tables/racks.py:76 +#: netbox/dcim/tables/racks.py:156 netbox/dcim/tables/sites.py:103 +#: netbox/extras/tables/tables.py:515 netbox/ipam/tables/asn.py:69 +#: netbox/ipam/tables/fhrp.py:34 netbox/ipam/tables/ip.py:135 +#: netbox/ipam/tables/ip.py:272 netbox/ipam/tables/ip.py:325 +#: netbox/ipam/tables/ip.py:392 netbox/ipam/tables/services.py:24 +#: netbox/ipam/tables/services.py:54 netbox/ipam/tables/vlans.py:141 +#: netbox/ipam/tables/vrfs.py:46 netbox/ipam/tables/vrfs.py:71 +#: netbox/templates/dcim/htmx/cable_edit.html:89 +#: netbox/templates/generic/bulk_edit.html:86 +#: netbox/templates/inc/panels/comments.html:6 +#: netbox/tenancy/tables/contacts.py:68 netbox/tenancy/tables/tenants.py:46 +#: netbox/utilities/forms/fields/fields.py:29 +#: netbox/virtualization/tables/clusters.py:91 +#: netbox/virtualization/tables/virtualmachines.py:81 +#: netbox/vpn/tables/crypto.py:37 netbox/vpn/tables/crypto.py:74 +#: netbox/vpn/tables/crypto.py:109 netbox/vpn/tables/crypto.py:140 +#: netbox/vpn/tables/crypto.py:173 netbox/vpn/tables/l2vpn.py:37 +#: netbox/vpn/tables/tunnels.py:61 netbox/wireless/tables/wirelesslan.py:27 +#: netbox/wireless/tables/wirelesslan.py:58 msgid "Comments" msgstr "" -#: circuits/tables/providers.py:23 +#: netbox/circuits/tables/providers.py:23 msgid "Accounts" msgstr "" -#: circuits/tables/providers.py:29 +#: netbox/circuits/tables/providers.py:29 msgid "Account Count" msgstr "" -#: circuits/tables/providers.py:39 dcim/tables/sites.py:100 +#: netbox/circuits/tables/providers.py:39 netbox/dcim/tables/sites.py:100 msgid "ASN Count" msgstr "" -#: core/api/views.py:36 +#: netbox/core/api/views.py:36 msgid "This user does not have permission to synchronize this data source." msgstr "" -#: core/choices.py:18 +#: netbox/core/choices.py:18 msgid "New" msgstr "" -#: core/choices.py:19 core/constants.py:18 core/tables/tasks.py:15 -#: templates/core/rq_task.html:77 +#: netbox/core/choices.py:19 netbox/core/constants.py:18 +#: netbox/core/tables/tasks.py:15 netbox/templates/core/rq_task.html:77 msgid "Queued" msgstr "" -#: core/choices.py:20 +#: netbox/core/choices.py:20 msgid "Syncing" msgstr "" -#: core/choices.py:21 core/choices.py:57 core/tables/jobs.py:41 -#: extras/choices.py:224 templates/core/job.html:68 +#: netbox/core/choices.py:21 netbox/core/choices.py:57 +#: netbox/core/tables/jobs.py:41 netbox/extras/choices.py:224 +#: netbox/templates/core/job.html:68 msgid "Completed" msgstr "" -#: core/choices.py:22 core/choices.py:59 core/constants.py:20 -#: core/tables/tasks.py:34 dcim/choices.py:176 dcim/choices.py:222 -#: dcim/choices.py:1534 extras/choices.py:226 virtualization/choices.py:47 +#: netbox/core/choices.py:22 netbox/core/choices.py:59 +#: netbox/core/constants.py:20 netbox/core/tables/tasks.py:34 +#: netbox/dcim/choices.py:176 netbox/dcim/choices.py:222 +#: netbox/dcim/choices.py:1536 netbox/extras/choices.py:226 +#: netbox/virtualization/choices.py:47 msgid "Failed" msgstr "" -#: core/choices.py:35 netbox/navigation/menu.py:320 -#: netbox/navigation/menu.py:324 templates/extras/script/base.html:14 -#: templates/extras/script_list.html:7 templates/extras/script_list.html:12 -#: templates/extras/script_result.html:17 +#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:320 +#: netbox/netbox/navigation/menu.py:324 +#: netbox/templates/extras/script/base.html:14 +#: netbox/templates/extras/script_list.html:7 +#: netbox/templates/extras/script_list.html:12 +#: netbox/templates/extras/script_result.html:17 msgid "Scripts" msgstr "" -#: core/choices.py:36 templates/extras/report/base.html:13 +#: netbox/core/choices.py:36 netbox/templates/extras/report/base.html:13 msgid "Reports" msgstr "" -#: core/choices.py:54 extras/choices.py:221 +#: netbox/core/choices.py:54 netbox/extras/choices.py:221 msgid "Pending" msgstr "" -#: core/choices.py:55 core/constants.py:23 core/tables/jobs.py:32 -#: core/tables/tasks.py:38 extras/choices.py:222 templates/core/job.html:55 +#: netbox/core/choices.py:55 netbox/core/constants.py:23 +#: netbox/core/tables/jobs.py:32 netbox/core/tables/tasks.py:38 +#: netbox/extras/choices.py:222 netbox/templates/core/job.html:55 msgid "Scheduled" msgstr "" -#: core/choices.py:56 extras/choices.py:223 +#: netbox/core/choices.py:56 netbox/extras/choices.py:223 msgid "Running" msgstr "" -#: core/choices.py:58 extras/choices.py:225 +#: netbox/core/choices.py:58 netbox/extras/choices.py:225 msgid "Errored" msgstr "" -#: core/constants.py:19 core/tables/tasks.py:30 +#: netbox/core/constants.py:19 netbox/core/tables/tasks.py:30 msgid "Finished" msgstr "" -#: core/constants.py:21 core/tables/jobs.py:38 templates/core/job.html:64 -#: templates/extras/htmx/script_result.html:8 +#: netbox/core/constants.py:21 netbox/core/tables/jobs.py:38 +#: netbox/templates/core/job.html:64 +#: netbox/templates/extras/htmx/script_result.html:8 msgid "Started" msgstr "" -#: core/constants.py:22 core/tables/tasks.py:26 +#: netbox/core/constants.py:22 netbox/core/tables/tasks.py:26 msgid "Deferred" msgstr "" -#: core/constants.py:24 +#: netbox/core/constants.py:24 msgid "Stopped" msgstr "" -#: core/constants.py:25 +#: netbox/core/constants.py:25 msgid "Cancelled" msgstr "" -#: core/data_backends.py:29 templates/dcim/interface.html:216 +#: netbox/core/data_backends.py:29 netbox/templates/dcim/interface.html:216 msgid "Local" msgstr "" -#: core/data_backends.py:47 extras/tables/tables.py:461 -#: templates/account/profile.html:15 templates/users/user.html:17 -#: users/tables.py:31 +#: netbox/core/data_backends.py:47 netbox/extras/tables/tables.py:461 +#: netbox/templates/account/profile.html:15 netbox/templates/users/user.html:17 +#: netbox/users/tables.py:31 msgid "Username" msgstr "" -#: core/data_backends.py:49 core/data_backends.py:55 +#: netbox/core/data_backends.py:49 netbox/core/data_backends.py:55 msgid "Only used for cloning with HTTP(S)" msgstr "" -#: core/data_backends.py:53 templates/account/base.html:17 -#: templates/account/password.html:11 users/forms/model_forms.py:171 +#: netbox/core/data_backends.py:53 netbox/templates/account/base.html:17 +#: netbox/templates/account/password.html:11 +#: netbox/users/forms/model_forms.py:171 msgid "Password" msgstr "" -#: core/data_backends.py:59 +#: netbox/core/data_backends.py:59 msgid "Branch" msgstr "" -#: core/data_backends.py:105 +#: netbox/core/data_backends.py:105 #, python-brace-format msgid "Fetching remote data failed ({name}): {error}" msgstr "" -#: core/data_backends.py:118 +#: netbox/core/data_backends.py:118 msgid "AWS access key ID" msgstr "" -#: core/data_backends.py:122 +#: netbox/core/data_backends.py:122 msgid "AWS secret access key" msgstr "" -#: core/filtersets.py:49 extras/filtersets.py:245 extras/filtersets.py:585 -#: extras/filtersets.py:617 +#: netbox/core/filtersets.py:49 netbox/extras/filtersets.py:245 +#: netbox/extras/filtersets.py:585 netbox/extras/filtersets.py:617 msgid "Data source (ID)" msgstr "" -#: core/filtersets.py:55 +#: netbox/core/filtersets.py:55 msgid "Data source (name)" msgstr "" -#: core/forms/bulk_edit.py:25 core/forms/filtersets.py:40 -#: core/tables/data.py:26 dcim/forms/bulk_edit.py:1020 -#: dcim/forms/bulk_edit.py:1293 dcim/forms/filtersets.py:1276 -#: dcim/tables/devices.py:553 dcim/tables/devicetypes.py:221 -#: extras/forms/bulk_edit.py:98 extras/forms/bulk_edit.py:162 -#: extras/forms/bulk_edit.py:221 extras/forms/filtersets.py:120 -#: extras/forms/filtersets.py:207 extras/forms/filtersets.py:268 -#: extras/tables/tables.py:127 extras/tables/tables.py:216 -#: extras/tables/tables.py:293 netbox/preferences.py:22 -#: templates/core/datasource.html:42 templates/dcim/interface.html:61 -#: templates/extras/customlink.html:17 templates/extras/eventrule.html:17 -#: templates/extras/savedfilter.html:25 -#: templates/users/objectpermission.html:25 -#: templates/virtualization/vminterface.html:29 users/forms/bulk_edit.py:89 -#: users/forms/filtersets.py:71 users/tables.py:83 -#: virtualization/forms/bulk_edit.py:217 virtualization/forms/filtersets.py:211 +#: netbox/core/forms/bulk_edit.py:25 netbox/core/forms/filtersets.py:40 +#: netbox/core/tables/data.py:26 netbox/dcim/forms/bulk_edit.py:1020 +#: netbox/dcim/forms/bulk_edit.py:1293 netbox/dcim/forms/filtersets.py:1276 +#: netbox/dcim/tables/devices.py:553 netbox/dcim/tables/devicetypes.py:221 +#: netbox/extras/forms/bulk_edit.py:98 netbox/extras/forms/bulk_edit.py:162 +#: netbox/extras/forms/bulk_edit.py:221 netbox/extras/forms/filtersets.py:120 +#: netbox/extras/forms/filtersets.py:207 netbox/extras/forms/filtersets.py:268 +#: netbox/extras/tables/tables.py:127 netbox/extras/tables/tables.py:216 +#: netbox/extras/tables/tables.py:293 netbox/netbox/preferences.py:22 +#: netbox/templates/core/datasource.html:42 +#: netbox/templates/dcim/interface.html:61 +#: netbox/templates/extras/customlink.html:17 +#: netbox/templates/extras/eventrule.html:17 +#: netbox/templates/extras/savedfilter.html:25 +#: netbox/templates/users/objectpermission.html:25 +#: netbox/templates/virtualization/vminterface.html:29 +#: netbox/users/forms/bulk_edit.py:89 netbox/users/forms/filtersets.py:71 +#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:217 +#: netbox/virtualization/forms/filtersets.py:211 msgid "Enabled" msgstr "" -#: core/forms/bulk_edit.py:34 extras/forms/model_forms.py:211 -#: templates/extras/savedfilter.html:53 vpn/forms/filtersets.py:97 -#: vpn/forms/filtersets.py:127 vpn/forms/filtersets.py:151 -#: vpn/forms/filtersets.py:170 vpn/forms/model_forms.py:301 -#: vpn/forms/model_forms.py:321 vpn/forms/model_forms.py:337 -#: vpn/forms/model_forms.py:357 vpn/forms/model_forms.py:380 +#: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:211 +#: netbox/templates/extras/savedfilter.html:53 +#: netbox/vpn/forms/filtersets.py:97 netbox/vpn/forms/filtersets.py:127 +#: netbox/vpn/forms/filtersets.py:151 netbox/vpn/forms/filtersets.py:170 +#: netbox/vpn/forms/model_forms.py:301 netbox/vpn/forms/model_forms.py:321 +#: netbox/vpn/forms/model_forms.py:337 netbox/vpn/forms/model_forms.py:357 +#: netbox/vpn/forms/model_forms.py:380 msgid "Parameters" msgstr "" -#: core/forms/bulk_edit.py:38 templates/core/datasource.html:68 +#: netbox/core/forms/bulk_edit.py:38 netbox/templates/core/datasource.html:68 msgid "Ignore rules" msgstr "" -#: core/forms/filtersets.py:27 core/forms/model_forms.py:97 -#: extras/forms/model_forms.py:174 extras/forms/model_forms.py:454 -#: extras/forms/model_forms.py:508 extras/tables/tables.py:154 -#: extras/tables/tables.py:373 extras/tables/tables.py:408 -#: templates/core/datasource.html:31 -#: templates/dcim/device/render_config.html:18 -#: templates/extras/configcontext.html:29 -#: templates/extras/configtemplate.html:21 -#: templates/extras/exporttemplate.html:35 -#: templates/virtualization/virtualmachine/render_config.html:18 +#: netbox/core/forms/filtersets.py:27 netbox/core/forms/model_forms.py:97 +#: netbox/extras/forms/model_forms.py:174 +#: netbox/extras/forms/model_forms.py:454 +#: netbox/extras/forms/model_forms.py:508 netbox/extras/tables/tables.py:154 +#: netbox/extras/tables/tables.py:373 netbox/extras/tables/tables.py:408 +#: netbox/templates/core/datasource.html:31 +#: netbox/templates/dcim/device/render_config.html:18 +#: netbox/templates/extras/configcontext.html:29 +#: netbox/templates/extras/configtemplate.html:21 +#: netbox/templates/extras/exporttemplate.html:35 +#: netbox/templates/virtualization/virtualmachine/render_config.html:18 msgid "Data Source" msgstr "" -#: core/forms/filtersets.py:52 core/forms/mixins.py:21 +#: netbox/core/forms/filtersets.py:52 netbox/core/forms/mixins.py:21 msgid "File" msgstr "" -#: core/forms/filtersets.py:57 core/forms/mixins.py:16 -#: extras/forms/filtersets.py:148 extras/forms/filtersets.py:337 -#: extras/forms/filtersets.py:422 +#: netbox/core/forms/filtersets.py:57 netbox/core/forms/mixins.py:16 +#: netbox/extras/forms/filtersets.py:148 netbox/extras/forms/filtersets.py:337 +#: netbox/extras/forms/filtersets.py:422 msgid "Data source" msgstr "" -#: core/forms/filtersets.py:67 extras/forms/filtersets.py:449 +#: netbox/core/forms/filtersets.py:67 netbox/extras/forms/filtersets.py:449 msgid "Creation" msgstr "" -#: core/forms/filtersets.py:71 extras/forms/filtersets.py:470 -#: extras/forms/filtersets.py:513 extras/tables/tables.py:183 -#: extras/tables/tables.py:504 templates/core/job.html:20 -#: templates/extras/objectchange.html:51 tenancy/tables/contacts.py:90 -#: vpn/tables/l2vpn.py:59 +#: netbox/core/forms/filtersets.py:71 netbox/extras/forms/filtersets.py:470 +#: netbox/extras/forms/filtersets.py:513 netbox/extras/tables/tables.py:183 +#: netbox/extras/tables/tables.py:504 netbox/templates/core/job.html:20 +#: netbox/templates/extras/objectchange.html:51 +#: netbox/tenancy/tables/contacts.py:90 netbox/vpn/tables/l2vpn.py:59 msgid "Object Type" msgstr "" -#: core/forms/filtersets.py:81 +#: netbox/core/forms/filtersets.py:81 msgid "Created after" msgstr "" -#: core/forms/filtersets.py:86 +#: netbox/core/forms/filtersets.py:86 msgid "Created before" msgstr "" -#: core/forms/filtersets.py:91 +#: netbox/core/forms/filtersets.py:91 msgid "Scheduled after" msgstr "" -#: core/forms/filtersets.py:96 +#: netbox/core/forms/filtersets.py:96 msgid "Scheduled before" msgstr "" -#: core/forms/filtersets.py:101 +#: netbox/core/forms/filtersets.py:101 msgid "Started after" msgstr "" -#: core/forms/filtersets.py:106 +#: netbox/core/forms/filtersets.py:106 msgid "Started before" msgstr "" -#: core/forms/filtersets.py:111 +#: netbox/core/forms/filtersets.py:111 msgid "Completed after" msgstr "" -#: core/forms/filtersets.py:116 +#: netbox/core/forms/filtersets.py:116 msgid "Completed before" msgstr "" -#: core/forms/filtersets.py:123 dcim/forms/bulk_edit.py:361 -#: dcim/forms/filtersets.py:353 dcim/forms/filtersets.py:397 -#: dcim/forms/model_forms.py:258 extras/forms/filtersets.py:465 -#: extras/forms/filtersets.py:508 templates/dcim/rackreservation.html:58 -#: templates/extras/objectchange.html:35 templates/extras/savedfilter.html:21 -#: templates/inc/user_menu.html:15 templates/users/token.html:21 -#: templates/users/user.html:6 templates/users/user.html:14 -#: users/filtersets.py:97 users/filtersets.py:164 users/forms/filtersets.py:85 -#: users/forms/filtersets.py:126 users/forms/model_forms.py:156 -#: users/forms/model_forms.py:193 users/tables.py:19 +#: netbox/core/forms/filtersets.py:123 netbox/dcim/forms/bulk_edit.py:361 +#: netbox/dcim/forms/filtersets.py:353 netbox/dcim/forms/filtersets.py:397 +#: netbox/dcim/forms/model_forms.py:258 netbox/extras/forms/filtersets.py:465 +#: netbox/extras/forms/filtersets.py:508 +#: netbox/templates/dcim/rackreservation.html:58 +#: netbox/templates/extras/objectchange.html:35 +#: netbox/templates/extras/savedfilter.html:21 +#: netbox/templates/inc/user_menu.html:15 netbox/templates/users/token.html:21 +#: netbox/templates/users/user.html:6 netbox/templates/users/user.html:14 +#: netbox/users/filtersets.py:97 netbox/users/filtersets.py:164 +#: netbox/users/forms/filtersets.py:85 netbox/users/forms/filtersets.py:126 +#: netbox/users/forms/model_forms.py:156 netbox/users/forms/model_forms.py:193 +#: netbox/users/tables.py:19 msgid "User" msgstr "" -#: core/forms/model_forms.py:54 core/tables/data.py:46 -#: templates/core/datafile.html:27 templates/extras/report/base.html:33 -#: templates/extras/script/base.html:32 +#: netbox/core/forms/model_forms.py:54 netbox/core/tables/data.py:46 +#: netbox/templates/core/datafile.html:27 +#: netbox/templates/extras/report/base.html:33 +#: netbox/templates/extras/script/base.html:32 msgid "Source" msgstr "" -#: core/forms/model_forms.py:58 +#: netbox/core/forms/model_forms.py:58 msgid "Backend Parameters" msgstr "" -#: core/forms/model_forms.py:96 +#: netbox/core/forms/model_forms.py:96 msgid "File Upload" msgstr "" -#: core/forms/model_forms.py:108 +#: netbox/core/forms/model_forms.py:108 msgid "Cannot upload a file and sync from an existing file" msgstr "" -#: core/forms/model_forms.py:110 +#: netbox/core/forms/model_forms.py:110 msgid "Must upload a file or select a data file to sync" msgstr "" -#: core/forms/model_forms.py:153 templates/dcim/rack_elevation_list.html:6 +#: netbox/core/forms/model_forms.py:153 +#: netbox/templates/dcim/rack_elevation_list.html:6 msgid "Rack Elevations" msgstr "" -#: core/forms/model_forms.py:157 dcim/choices.py:1445 -#: dcim/forms/bulk_edit.py:867 dcim/forms/bulk_edit.py:1250 -#: dcim/forms/bulk_edit.py:1268 dcim/tables/racks.py:89 -#: netbox/navigation/menu.py:276 netbox/navigation/menu.py:280 +#: netbox/core/forms/model_forms.py:157 netbox/dcim/choices.py:1447 +#: netbox/dcim/forms/bulk_edit.py:867 netbox/dcim/forms/bulk_edit.py:1250 +#: netbox/dcim/forms/bulk_edit.py:1268 netbox/dcim/tables/racks.py:89 +#: netbox/netbox/navigation/menu.py:276 netbox/netbox/navigation/menu.py:280 msgid "Power" msgstr "" -#: core/forms/model_forms.py:159 netbox/navigation/menu.py:141 -#: templates/core/inc/config_data.html:37 +#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:141 +#: netbox/templates/core/inc/config_data.html:37 msgid "IPAM" msgstr "" -#: core/forms/model_forms.py:160 netbox/navigation/menu.py:217 -#: templates/core/inc/config_data.html:50 vpn/forms/bulk_edit.py:77 -#: vpn/forms/filtersets.py:43 vpn/forms/model_forms.py:61 -#: vpn/forms/model_forms.py:146 +#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:217 +#: netbox/templates/core/inc/config_data.html:50 +#: netbox/vpn/forms/bulk_edit.py:77 netbox/vpn/forms/filtersets.py:43 +#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 msgid "Security" msgstr "" -#: core/forms/model_forms.py:161 templates/core/inc/config_data.html:59 +#: netbox/core/forms/model_forms.py:161 +#: netbox/templates/core/inc/config_data.html:59 msgid "Banners" msgstr "" -#: core/forms/model_forms.py:162 templates/core/inc/config_data.html:80 +#: netbox/core/forms/model_forms.py:162 +#: netbox/templates/core/inc/config_data.html:80 msgid "Pagination" msgstr "" -#: core/forms/model_forms.py:163 extras/forms/model_forms.py:67 -#: templates/core/inc/config_data.html:93 +#: netbox/core/forms/model_forms.py:163 netbox/extras/forms/model_forms.py:67 +#: netbox/templates/core/inc/config_data.html:93 msgid "Validation" msgstr "" -#: core/forms/model_forms.py:164 templates/account/preferences.html:6 +#: netbox/core/forms/model_forms.py:164 +#: netbox/templates/account/preferences.html:6 msgid "User Preferences" msgstr "" -#: core/forms/model_forms.py:167 dcim/forms/filtersets.py:661 -#: templates/core/inc/config_data.html:127 users/forms/model_forms.py:65 +#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:661 +#: netbox/templates/core/inc/config_data.html:127 +#: netbox/users/forms/model_forms.py:65 msgid "Miscellaneous" msgstr "" -#: core/forms/model_forms.py:169 +#: netbox/core/forms/model_forms.py:169 msgid "Config Revision" msgstr "" -#: core/forms/model_forms.py:208 +#: netbox/core/forms/model_forms.py:208 msgid "This parameter has been defined statically and cannot be modified." msgstr "" -#: core/forms/model_forms.py:216 +#: netbox/core/forms/model_forms.py:216 #, python-brace-format msgid "Current value: {value}" msgstr "" -#: core/forms/model_forms.py:218 +#: netbox/core/forms/model_forms.py:218 msgid " (default)" msgstr "" -#: core/models/config.py:18 core/models/data.py:282 core/models/files.py:27 -#: core/models/jobs.py:50 extras/models/models.py:758 -#: netbox/models/features.py:51 users/models/tokens.py:33 +#: netbox/core/models/config.py:18 netbox/core/models/data.py:282 +#: netbox/core/models/files.py:27 netbox/core/models/jobs.py:50 +#: netbox/extras/models/models.py:758 netbox/netbox/models/features.py:51 +#: netbox/users/models/tokens.py:33 msgid "created" msgstr "" -#: core/models/config.py:22 +#: netbox/core/models/config.py:22 msgid "comment" msgstr "" -#: core/models/config.py:29 +#: netbox/core/models/config.py:29 msgid "configuration data" msgstr "" -#: core/models/config.py:36 +#: netbox/core/models/config.py:36 msgid "config revision" msgstr "" -#: core/models/config.py:37 +#: netbox/core/models/config.py:37 msgid "config revisions" msgstr "" -#: core/models/config.py:41 +#: netbox/core/models/config.py:41 msgid "Default configuration" msgstr "" -#: core/models/config.py:43 +#: netbox/core/models/config.py:43 msgid "Current configuration" msgstr "" -#: core/models/config.py:44 +#: netbox/core/models/config.py:44 #, python-brace-format msgid "Config revision #{id}" msgstr "" -#: core/models/data.py:47 dcim/models/cables.py:43 -#: dcim/models/device_component_templates.py:177 -#: dcim/models/device_component_templates.py:211 -#: dcim/models/device_component_templates.py:246 -#: dcim/models/device_component_templates.py:308 -#: dcim/models/device_component_templates.py:387 -#: dcim/models/device_component_templates.py:486 -#: dcim/models/device_component_templates.py:586 -#: dcim/models/device_components.py:284 dcim/models/device_components.py:313 -#: dcim/models/device_components.py:346 dcim/models/device_components.py:464 -#: dcim/models/device_components.py:606 dcim/models/device_components.py:971 -#: dcim/models/device_components.py:1045 dcim/models/power.py:102 -#: dcim/models/racks.py:128 extras/models/customfields.py:76 -#: extras/models/search.py:41 virtualization/models/clusters.py:61 -#: vpn/models/l2vpn.py:32 +#: netbox/core/models/data.py:47 netbox/dcim/models/cables.py:43 +#: netbox/dcim/models/device_component_templates.py:177 +#: netbox/dcim/models/device_component_templates.py:211 +#: netbox/dcim/models/device_component_templates.py:246 +#: netbox/dcim/models/device_component_templates.py:308 +#: netbox/dcim/models/device_component_templates.py:387 +#: netbox/dcim/models/device_component_templates.py:486 +#: netbox/dcim/models/device_component_templates.py:586 +#: netbox/dcim/models/device_components.py:284 +#: netbox/dcim/models/device_components.py:313 +#: netbox/dcim/models/device_components.py:346 +#: netbox/dcim/models/device_components.py:464 +#: netbox/dcim/models/device_components.py:606 +#: netbox/dcim/models/device_components.py:971 +#: netbox/dcim/models/device_components.py:1045 netbox/dcim/models/power.py:102 +#: netbox/dcim/models/racks.py:128 netbox/extras/models/customfields.py:76 +#: netbox/extras/models/search.py:41 +#: netbox/virtualization/models/clusters.py:61 netbox/vpn/models/l2vpn.py:32 msgid "type" msgstr "" -#: core/models/data.py:52 extras/choices.py:37 extras/models/models.py:192 -#: extras/tables/tables.py:577 templates/core/datasource.html:58 +#: netbox/core/models/data.py:52 netbox/extras/choices.py:37 +#: netbox/extras/models/models.py:192 netbox/extras/tables/tables.py:577 +#: netbox/templates/core/datasource.html:58 msgid "URL" msgstr "" -#: core/models/data.py:62 dcim/models/device_component_templates.py:392 -#: dcim/models/device_components.py:513 extras/models/models.py:90 -#: extras/models/models.py:329 extras/models/models.py:554 -#: users/models/permissions.py:29 +#: netbox/core/models/data.py:62 +#: netbox/dcim/models/device_component_templates.py:392 +#: netbox/dcim/models/device_components.py:513 +#: netbox/extras/models/models.py:90 netbox/extras/models/models.py:329 +#: netbox/extras/models/models.py:554 netbox/users/models/permissions.py:29 msgid "enabled" msgstr "" -#: core/models/data.py:66 +#: netbox/core/models/data.py:66 msgid "ignore rules" msgstr "" -#: core/models/data.py:68 +#: netbox/core/models/data.py:68 msgid "Patterns (one per line) matching files to ignore when syncing" msgstr "" -#: core/models/data.py:71 extras/models/models.py:562 +#: netbox/core/models/data.py:71 netbox/extras/models/models.py:562 msgid "parameters" msgstr "" -#: core/models/data.py:76 +#: netbox/core/models/data.py:76 msgid "last synced" msgstr "" -#: core/models/data.py:84 +#: netbox/core/models/data.py:84 msgid "data source" msgstr "" -#: core/models/data.py:85 +#: netbox/core/models/data.py:85 msgid "data sources" msgstr "" -#: core/models/data.py:125 +#: netbox/core/models/data.py:125 #, python-brace-format msgid "Unknown backend type: {type}" msgstr "" -#: core/models/data.py:180 +#: netbox/core/models/data.py:180 msgid "Cannot initiate sync; syncing already in progress." msgstr "" -#: core/models/data.py:193 +#: netbox/core/models/data.py:193 msgid "" "There was an error initializing the backend. A dependency needs to be " "installed: " msgstr "" -#: core/models/data.py:286 core/models/files.py:31 netbox/models/features.py:57 +#: netbox/core/models/data.py:286 netbox/core/models/files.py:31 +#: netbox/netbox/models/features.py:57 msgid "last updated" msgstr "" -#: core/models/data.py:296 dcim/models/cables.py:442 +#: netbox/core/models/data.py:296 netbox/dcim/models/cables.py:442 msgid "path" msgstr "" -#: core/models/data.py:299 +#: netbox/core/models/data.py:299 msgid "File path relative to the data source's root" msgstr "" -#: core/models/data.py:303 ipam/models/ip.py:503 +#: netbox/core/models/data.py:303 netbox/ipam/models/ip.py:503 msgid "size" msgstr "" -#: core/models/data.py:306 +#: netbox/core/models/data.py:306 msgid "hash" msgstr "" -#: core/models/data.py:310 +#: netbox/core/models/data.py:310 msgid "Length must be 64 hexadecimal characters." msgstr "" -#: core/models/data.py:312 +#: netbox/core/models/data.py:312 msgid "SHA256 hash of the file data" msgstr "" -#: core/models/data.py:329 +#: netbox/core/models/data.py:329 msgid "data file" msgstr "" -#: core/models/data.py:330 +#: netbox/core/models/data.py:330 msgid "data files" msgstr "" -#: core/models/data.py:417 +#: netbox/core/models/data.py:417 msgid "auto sync record" msgstr "" -#: core/models/data.py:418 +#: netbox/core/models/data.py:418 msgid "auto sync records" msgstr "" -#: core/models/files.py:37 +#: netbox/core/models/files.py:37 msgid "file root" msgstr "" -#: core/models/files.py:42 +#: netbox/core/models/files.py:42 msgid "file path" msgstr "" -#: core/models/files.py:44 +#: netbox/core/models/files.py:44 msgid "File path relative to the designated root path" msgstr "" -#: core/models/files.py:61 +#: netbox/core/models/files.py:61 msgid "managed file" msgstr "" -#: core/models/files.py:62 +#: netbox/core/models/files.py:62 msgid "managed files" msgstr "" -#: core/models/jobs.py:54 +#: netbox/core/models/jobs.py:54 msgid "scheduled" msgstr "" -#: core/models/jobs.py:59 +#: netbox/core/models/jobs.py:59 msgid "interval" msgstr "" -#: core/models/jobs.py:65 +#: netbox/core/models/jobs.py:65 msgid "Recurrence interval (in minutes)" msgstr "" -#: core/models/jobs.py:68 +#: netbox/core/models/jobs.py:68 msgid "started" msgstr "" -#: core/models/jobs.py:73 +#: netbox/core/models/jobs.py:73 msgid "completed" msgstr "" -#: core/models/jobs.py:91 extras/models/models.py:121 -#: extras/models/staging.py:87 +#: netbox/core/models/jobs.py:91 netbox/extras/models/models.py:121 +#: netbox/extras/models/staging.py:87 msgid "data" msgstr "" -#: core/models/jobs.py:96 +#: netbox/core/models/jobs.py:96 msgid "error" msgstr "" -#: core/models/jobs.py:101 +#: netbox/core/models/jobs.py:101 msgid "job ID" msgstr "" -#: core/models/jobs.py:112 +#: netbox/core/models/jobs.py:112 msgid "job" msgstr "" -#: core/models/jobs.py:113 +#: netbox/core/models/jobs.py:113 msgid "jobs" msgstr "" -#: core/models/jobs.py:135 +#: netbox/core/models/jobs.py:135 #, python-brace-format msgid "Jobs cannot be assigned to this object type ({type})." msgstr "" -#: core/models/jobs.py:185 +#: netbox/core/models/jobs.py:185 #, python-brace-format msgid "Invalid status for job termination. Choices are: {choices}" msgstr "" -#: core/tables/config.py:21 users/forms/filtersets.py:45 users/tables.py:39 +#: netbox/core/tables/config.py:21 netbox/users/forms/filtersets.py:45 +#: netbox/users/tables.py:39 msgid "Is Active" msgstr "" -#: core/tables/data.py:50 templates/core/datafile.html:31 +#: netbox/core/tables/data.py:50 netbox/templates/core/datafile.html:31 msgid "Path" msgstr "" -#: core/tables/data.py:54 templates/extras/inc/result_pending.html:7 +#: netbox/core/tables/data.py:54 +#: netbox/templates/extras/inc/result_pending.html:7 msgid "Last updated" msgstr "" -#: core/tables/jobs.py:10 core/tables/tasks.py:76 -#: dcim/tables/devicetypes.py:161 extras/tables/tables.py:179 -#: extras/tables/tables.py:350 netbox/tables/tables.py:188 -#: templates/dcim/virtualchassis_edit.html:52 utilities/forms/forms.py:73 -#: wireless/tables/wirelesslink.py:16 +#: netbox/core/tables/jobs.py:10 netbox/core/tables/tasks.py:76 +#: netbox/dcim/tables/devicetypes.py:161 netbox/extras/tables/tables.py:179 +#: netbox/extras/tables/tables.py:350 netbox/netbox/tables/tables.py:188 +#: netbox/templates/dcim/virtualchassis_edit.html:52 +#: netbox/utilities/forms/forms.py:73 netbox/wireless/tables/wirelesslink.py:16 msgid "ID" msgstr "" -#: core/tables/jobs.py:21 extras/choices.py:41 extras/tables/tables.py:241 -#: extras/tables/tables.py:287 extras/tables/tables.py:360 -#: extras/tables/tables.py:478 extras/tables/tables.py:509 -#: extras/tables/tables.py:574 netbox/tables/tables.py:243 -#: templates/extras/eventrule.html:84 templates/extras/journalentry.html:18 -#: templates/extras/objectchange.html:57 tenancy/tables/contacts.py:93 -#: vpn/tables/l2vpn.py:64 +#: netbox/core/tables/jobs.py:21 netbox/extras/choices.py:41 +#: netbox/extras/tables/tables.py:241 netbox/extras/tables/tables.py:287 +#: netbox/extras/tables/tables.py:360 netbox/extras/tables/tables.py:478 +#: netbox/extras/tables/tables.py:509 netbox/extras/tables/tables.py:574 +#: netbox/netbox/tables/tables.py:243 netbox/templates/extras/eventrule.html:84 +#: netbox/templates/extras/journalentry.html:18 +#: netbox/templates/extras/objectchange.html:57 +#: netbox/tenancy/tables/contacts.py:93 netbox/vpn/tables/l2vpn.py:64 msgid "Object" msgstr "" -#: core/tables/jobs.py:35 +#: netbox/core/tables/jobs.py:35 msgid "Interval" msgstr "" -#: core/tables/plugins.py:16 templates/vpn/ipsecprofile.html:44 -#: vpn/forms/bulk_edit.py:141 vpn/forms/bulk_import.py:172 -#: vpn/tables/crypto.py:61 +#: netbox/core/tables/plugins.py:16 netbox/templates/vpn/ipsecprofile.html:44 +#: netbox/vpn/forms/bulk_edit.py:141 netbox/vpn/forms/bulk_import.py:172 +#: netbox/vpn/tables/crypto.py:61 msgid "Version" msgstr "" -#: core/tables/plugins.py:20 +#: netbox/core/tables/plugins.py:20 msgid "Package" msgstr "" -#: core/tables/plugins.py:23 +#: netbox/core/tables/plugins.py:23 msgid "Author" msgstr "" -#: core/tables/plugins.py:26 +#: netbox/core/tables/plugins.py:26 msgid "Author Email" msgstr "" -#: core/tables/plugins.py:33 +#: netbox/core/tables/plugins.py:33 msgid "No plugins found" msgstr "" -#: core/tables/tasks.py:18 +#: netbox/core/tables/tasks.py:18 msgid "Oldest Task" msgstr "" -#: core/tables/tasks.py:42 templates/core/rq_worker_list.html:34 +#: netbox/core/tables/tasks.py:42 netbox/templates/core/rq_worker_list.html:34 msgid "Workers" msgstr "" -#: core/tables/tasks.py:46 vpn/tables/tunnels.py:88 +#: netbox/core/tables/tasks.py:46 netbox/vpn/tables/tunnels.py:88 msgid "Host" msgstr "" -#: core/tables/tasks.py:50 ipam/forms/filtersets.py:542 +#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:542 msgid "Port" msgstr "" -#: core/tables/tasks.py:54 +#: netbox/core/tables/tasks.py:54 msgid "DB" msgstr "" -#: core/tables/tasks.py:58 +#: netbox/core/tables/tasks.py:58 msgid "Scheduler PID" msgstr "" -#: core/tables/tasks.py:62 +#: netbox/core/tables/tasks.py:62 msgid "No queues found" msgstr "" -#: core/tables/tasks.py:82 +#: netbox/core/tables/tasks.py:82 msgid "Enqueued" msgstr "" -#: core/tables/tasks.py:85 +#: netbox/core/tables/tasks.py:85 msgid "Ended" msgstr "" -#: core/tables/tasks.py:93 templates/core/rq_task.html:85 +#: netbox/core/tables/tasks.py:93 netbox/templates/core/rq_task.html:85 msgid "Callable" msgstr "" -#: core/tables/tasks.py:97 +#: netbox/core/tables/tasks.py:97 msgid "No tasks found" msgstr "" -#: core/tables/tasks.py:118 templates/core/rq_worker.html:47 +#: netbox/core/tables/tasks.py:118 netbox/templates/core/rq_worker.html:47 msgid "State" msgstr "" -#: core/tables/tasks.py:121 templates/core/rq_worker.html:51 +#: netbox/core/tables/tasks.py:121 netbox/templates/core/rq_worker.html:51 msgid "Birth" msgstr "" -#: core/tables/tasks.py:124 templates/core/rq_worker.html:59 +#: netbox/core/tables/tasks.py:124 netbox/templates/core/rq_worker.html:59 msgid "PID" msgstr "" -#: core/tables/tasks.py:128 +#: netbox/core/tables/tasks.py:128 msgid "No workers found" msgstr "" -#: core/views.py:335 core/views.py:378 core/views.py:401 core/views.py:419 -#: core/views.py:454 +#: netbox/core/views.py:335 netbox/core/views.py:378 netbox/core/views.py:401 +#: netbox/core/views.py:419 netbox/core/views.py:454 #, python-brace-format msgid "Job {job_id} not found" msgstr "" -#: dcim/api/serializers_/devices.py:50 dcim/api/serializers_/devicetypes.py:26 +#: netbox/dcim/api/serializers_/devices.py:50 +#: netbox/dcim/api/serializers_/devicetypes.py:26 msgid "Position (U)" msgstr "" -#: dcim/api/serializers_/racks.py:45 templates/dcim/rack.html:30 +#: netbox/dcim/api/serializers_/racks.py:45 netbox/templates/dcim/rack.html:30 msgid "Facility ID" msgstr "" -#: dcim/choices.py:21 virtualization/choices.py:21 +#: netbox/dcim/choices.py:21 netbox/virtualization/choices.py:21 msgid "Staging" msgstr "" -#: dcim/choices.py:23 dcim/choices.py:178 dcim/choices.py:223 -#: dcim/choices.py:1458 virtualization/choices.py:23 -#: virtualization/choices.py:48 +#: netbox/dcim/choices.py:23 netbox/dcim/choices.py:178 +#: netbox/dcim/choices.py:223 netbox/dcim/choices.py:1460 +#: netbox/virtualization/choices.py:23 netbox/virtualization/choices.py:48 msgid "Decommissioning" msgstr "" -#: dcim/choices.py:24 +#: netbox/dcim/choices.py:24 msgid "Retired" msgstr "" -#: dcim/choices.py:65 +#: netbox/dcim/choices.py:65 msgid "2-post frame" msgstr "" -#: dcim/choices.py:66 +#: netbox/dcim/choices.py:66 msgid "4-post frame" msgstr "" -#: dcim/choices.py:67 +#: netbox/dcim/choices.py:67 msgid "4-post cabinet" msgstr "" -#: dcim/choices.py:68 +#: netbox/dcim/choices.py:68 msgid "Wall-mounted frame" msgstr "" -#: dcim/choices.py:69 +#: netbox/dcim/choices.py:69 msgid "Wall-mounted frame (vertical)" msgstr "" -#: dcim/choices.py:70 +#: netbox/dcim/choices.py:70 msgid "Wall-mounted cabinet" msgstr "" -#: dcim/choices.py:71 +#: netbox/dcim/choices.py:71 msgid "Wall-mounted cabinet (vertical)" msgstr "" -#: dcim/choices.py:83 dcim/choices.py:84 dcim/choices.py:85 dcim/choices.py:86 +#: netbox/dcim/choices.py:83 netbox/dcim/choices.py:84 +#: netbox/dcim/choices.py:85 netbox/dcim/choices.py:86 #, python-brace-format msgid "{n} inches" msgstr "" -#: dcim/choices.py:100 ipam/choices.py:32 ipam/choices.py:50 ipam/choices.py:70 -#: ipam/choices.py:155 wireless/choices.py:26 +#: netbox/dcim/choices.py:100 netbox/ipam/choices.py:32 +#: netbox/ipam/choices.py:50 netbox/ipam/choices.py:70 +#: netbox/ipam/choices.py:155 netbox/wireless/choices.py:26 msgid "Reserved" msgstr "" -#: dcim/choices.py:101 templates/dcim/device.html:251 +#: netbox/dcim/choices.py:101 netbox/templates/dcim/device.html:252 msgid "Available" msgstr "" -#: dcim/choices.py:104 ipam/choices.py:33 ipam/choices.py:51 ipam/choices.py:71 -#: ipam/choices.py:156 wireless/choices.py:28 +#: netbox/dcim/choices.py:104 netbox/ipam/choices.py:33 +#: netbox/ipam/choices.py:51 netbox/ipam/choices.py:71 +#: netbox/ipam/choices.py:156 netbox/wireless/choices.py:28 msgid "Deprecated" msgstr "" -#: dcim/choices.py:114 templates/dcim/rack.html:123 +#: netbox/dcim/choices.py:114 netbox/templates/dcim/rack.html:123 msgid "Millimeters" msgstr "" -#: dcim/choices.py:115 dcim/choices.py:1480 +#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1482 msgid "Inches" msgstr "" -#: dcim/choices.py:140 dcim/forms/bulk_edit.py:67 dcim/forms/bulk_edit.py:86 -#: dcim/forms/bulk_edit.py:172 dcim/forms/bulk_edit.py:1298 -#: dcim/forms/bulk_import.py:59 dcim/forms/bulk_import.py:73 -#: dcim/forms/bulk_import.py:136 dcim/forms/bulk_import.py:511 -#: dcim/forms/bulk_import.py:778 dcim/forms/bulk_import.py:1033 -#: dcim/forms/filtersets.py:227 dcim/forms/model_forms.py:73 -#: dcim/forms/model_forms.py:92 dcim/forms/model_forms.py:169 -#: dcim/forms/model_forms.py:1007 dcim/forms/model_forms.py:1446 -#: dcim/forms/object_import.py:176 dcim/tables/devices.py:652 -#: dcim/tables/devices.py:937 extras/tables/tables.py:186 -#: ipam/tables/fhrp.py:59 ipam/tables/ip.py:374 ipam/tables/services.py:44 -#: templates/dcim/interface.html:102 templates/dcim/interface.html:309 -#: templates/dcim/location.html:41 templates/dcim/region.html:37 -#: templates/dcim/sitegroup.html:37 templates/ipam/service.html:28 -#: templates/tenancy/contactgroup.html:29 templates/tenancy/tenantgroup.html:37 -#: templates/virtualization/vminterface.html:39 -#: templates/wireless/wirelesslangroup.html:37 tenancy/forms/bulk_edit.py:27 -#: tenancy/forms/bulk_edit.py:61 tenancy/forms/bulk_import.py:24 -#: tenancy/forms/bulk_import.py:58 tenancy/forms/model_forms.py:25 -#: tenancy/forms/model_forms.py:68 virtualization/forms/bulk_edit.py:207 -#: virtualization/forms/bulk_import.py:151 -#: virtualization/tables/virtualmachines.py:155 wireless/forms/bulk_edit.py:24 -#: wireless/forms/bulk_import.py:21 wireless/forms/model_forms.py:21 +#: netbox/dcim/choices.py:140 netbox/dcim/forms/bulk_edit.py:67 +#: netbox/dcim/forms/bulk_edit.py:86 netbox/dcim/forms/bulk_edit.py:172 +#: netbox/dcim/forms/bulk_edit.py:1298 netbox/dcim/forms/bulk_import.py:59 +#: netbox/dcim/forms/bulk_import.py:73 netbox/dcim/forms/bulk_import.py:136 +#: netbox/dcim/forms/bulk_import.py:511 netbox/dcim/forms/bulk_import.py:778 +#: netbox/dcim/forms/bulk_import.py:1033 netbox/dcim/forms/filtersets.py:227 +#: netbox/dcim/forms/model_forms.py:73 netbox/dcim/forms/model_forms.py:92 +#: netbox/dcim/forms/model_forms.py:169 netbox/dcim/forms/model_forms.py:1007 +#: netbox/dcim/forms/model_forms.py:1446 netbox/dcim/forms/object_import.py:176 +#: netbox/dcim/tables/devices.py:652 netbox/dcim/tables/devices.py:937 +#: netbox/extras/tables/tables.py:186 netbox/ipam/tables/fhrp.py:59 +#: netbox/ipam/tables/ip.py:374 netbox/ipam/tables/services.py:44 +#: netbox/templates/dcim/interface.html:102 +#: netbox/templates/dcim/interface.html:309 +#: netbox/templates/dcim/location.html:41 netbox/templates/dcim/region.html:37 +#: netbox/templates/dcim/sitegroup.html:37 +#: netbox/templates/ipam/service.html:28 +#: netbox/templates/tenancy/contactgroup.html:29 +#: netbox/templates/tenancy/tenantgroup.html:37 +#: netbox/templates/virtualization/vminterface.html:39 +#: netbox/templates/wireless/wirelesslangroup.html:37 +#: netbox/tenancy/forms/bulk_edit.py:27 netbox/tenancy/forms/bulk_edit.py:61 +#: netbox/tenancy/forms/bulk_import.py:24 +#: netbox/tenancy/forms/bulk_import.py:58 +#: netbox/tenancy/forms/model_forms.py:25 +#: netbox/tenancy/forms/model_forms.py:68 +#: netbox/virtualization/forms/bulk_edit.py:207 +#: netbox/virtualization/forms/bulk_import.py:151 +#: netbox/virtualization/tables/virtualmachines.py:155 +#: netbox/wireless/forms/bulk_edit.py:24 +#: netbox/wireless/forms/bulk_import.py:21 +#: netbox/wireless/forms/model_forms.py:21 msgid "Parent" msgstr "" -#: dcim/choices.py:141 +#: netbox/dcim/choices.py:141 msgid "Child" msgstr "" -#: dcim/choices.py:155 templates/dcim/device.html:331 -#: templates/dcim/rack.html:175 templates/dcim/rack_elevation_list.html:20 -#: templates/dcim/rackreservation.html:76 +#: netbox/dcim/choices.py:155 netbox/templates/dcim/device.html:332 +#: netbox/templates/dcim/rack.html:175 +#: netbox/templates/dcim/rack_elevation_list.html:20 +#: netbox/templates/dcim/rackreservation.html:76 msgid "Front" msgstr "" -#: dcim/choices.py:156 templates/dcim/device.html:337 -#: templates/dcim/rack.html:181 templates/dcim/rack_elevation_list.html:21 -#: templates/dcim/rackreservation.html:82 +#: netbox/dcim/choices.py:156 netbox/templates/dcim/device.html:338 +#: netbox/templates/dcim/rack.html:181 +#: netbox/templates/dcim/rack_elevation_list.html:21 +#: netbox/templates/dcim/rackreservation.html:82 msgid "Rear" msgstr "" -#: dcim/choices.py:175 dcim/choices.py:221 virtualization/choices.py:46 +#: netbox/dcim/choices.py:175 netbox/dcim/choices.py:221 +#: netbox/virtualization/choices.py:46 msgid "Staged" msgstr "" -#: dcim/choices.py:177 +#: netbox/dcim/choices.py:177 msgid "Inventory" msgstr "" -#: dcim/choices.py:193 +#: netbox/dcim/choices.py:193 msgid "Front to rear" msgstr "" -#: dcim/choices.py:194 +#: netbox/dcim/choices.py:194 msgid "Rear to front" msgstr "" -#: dcim/choices.py:195 +#: netbox/dcim/choices.py:195 msgid "Left to right" msgstr "" -#: dcim/choices.py:196 +#: netbox/dcim/choices.py:196 msgid "Right to left" msgstr "" -#: dcim/choices.py:197 +#: netbox/dcim/choices.py:197 msgid "Side to rear" msgstr "" -#: dcim/choices.py:198 dcim/choices.py:1253 +#: netbox/dcim/choices.py:198 netbox/dcim/choices.py:1255 msgid "Passive" msgstr "" -#: dcim/choices.py:199 +#: netbox/dcim/choices.py:199 msgid "Mixed" msgstr "" -#: dcim/choices.py:447 dcim/choices.py:693 +#: netbox/dcim/choices.py:447 netbox/dcim/choices.py:693 msgid "NEMA (Non-locking)" msgstr "" -#: dcim/choices.py:469 dcim/choices.py:715 +#: netbox/dcim/choices.py:469 netbox/dcim/choices.py:715 msgid "NEMA (Locking)" msgstr "" -#: dcim/choices.py:492 dcim/choices.py:738 +#: netbox/dcim/choices.py:492 netbox/dcim/choices.py:738 msgid "California Style" msgstr "" -#: dcim/choices.py:500 +#: netbox/dcim/choices.py:500 msgid "International/ITA" msgstr "" -#: dcim/choices.py:535 dcim/choices.py:773 +#: netbox/dcim/choices.py:535 netbox/dcim/choices.py:773 msgid "Proprietary" msgstr "" -#: dcim/choices.py:543 dcim/choices.py:782 dcim/choices.py:1169 -#: dcim/choices.py:1171 dcim/choices.py:1376 dcim/choices.py:1378 -#: netbox/navigation/menu.py:187 +#: netbox/dcim/choices.py:543 netbox/dcim/choices.py:782 +#: netbox/dcim/choices.py:1171 netbox/dcim/choices.py:1173 +#: netbox/dcim/choices.py:1378 netbox/dcim/choices.py:1380 +#: netbox/netbox/navigation/menu.py:187 msgid "Other" msgstr "" -#: dcim/choices.py:746 +#: netbox/dcim/choices.py:746 msgid "ITA/International" msgstr "" -#: dcim/choices.py:812 +#: netbox/dcim/choices.py:812 msgid "Physical" msgstr "" -#: dcim/choices.py:813 dcim/choices.py:977 +#: netbox/dcim/choices.py:813 netbox/dcim/choices.py:978 msgid "Virtual" msgstr "" -#: dcim/choices.py:814 dcim/choices.py:1049 dcim/forms/bulk_edit.py:1408 -#: dcim/forms/filtersets.py:1239 dcim/forms/model_forms.py:933 -#: dcim/forms/model_forms.py:1341 netbox/navigation/menu.py:127 -#: netbox/navigation/menu.py:131 templates/dcim/interface.html:210 +#: netbox/dcim/choices.py:814 netbox/dcim/choices.py:1051 +#: netbox/dcim/forms/bulk_edit.py:1408 netbox/dcim/forms/filtersets.py:1239 +#: netbox/dcim/forms/model_forms.py:933 netbox/dcim/forms/model_forms.py:1341 +#: netbox/netbox/navigation/menu.py:127 netbox/netbox/navigation/menu.py:131 +#: netbox/templates/dcim/interface.html:210 msgid "Wireless" msgstr "" -#: dcim/choices.py:975 +#: netbox/dcim/choices.py:976 msgid "Virtual interfaces" msgstr "" -#: dcim/choices.py:978 dcim/forms/bulk_edit.py:1303 -#: dcim/forms/bulk_import.py:785 dcim/forms/model_forms.py:919 -#: dcim/tables/devices.py:656 templates/dcim/interface.html:106 -#: templates/virtualization/vminterface.html:43 -#: virtualization/forms/bulk_edit.py:212 -#: virtualization/forms/bulk_import.py:158 -#: virtualization/tables/virtualmachines.py:159 +#: netbox/dcim/choices.py:979 netbox/dcim/forms/bulk_edit.py:1303 +#: netbox/dcim/forms/bulk_import.py:785 netbox/dcim/forms/model_forms.py:919 +#: netbox/dcim/tables/devices.py:656 netbox/templates/dcim/interface.html:106 +#: netbox/templates/virtualization/vminterface.html:43 +#: netbox/virtualization/forms/bulk_edit.py:212 +#: netbox/virtualization/forms/bulk_import.py:158 +#: netbox/virtualization/tables/virtualmachines.py:159 msgid "Bridge" msgstr "" -#: dcim/choices.py:979 +#: netbox/dcim/choices.py:980 msgid "Link Aggregation Group (LAG)" msgstr "" -#: dcim/choices.py:983 +#: netbox/dcim/choices.py:984 msgid "Ethernet (fixed)" msgstr "" -#: dcim/choices.py:997 +#: netbox/dcim/choices.py:999 msgid "Ethernet (modular)" msgstr "" -#: dcim/choices.py:1033 +#: netbox/dcim/choices.py:1035 msgid "Ethernet (backplane)" msgstr "" -#: dcim/choices.py:1063 +#: netbox/dcim/choices.py:1065 msgid "Cellular" msgstr "" -#: dcim/choices.py:1115 dcim/forms/filtersets.py:303 -#: dcim/forms/filtersets.py:738 dcim/forms/filtersets.py:882 -#: dcim/forms/filtersets.py:1434 templates/dcim/inventoryitem.html:52 -#: templates/dcim/virtualchassis_edit.html:54 +#: netbox/dcim/choices.py:1117 netbox/dcim/forms/filtersets.py:303 +#: netbox/dcim/forms/filtersets.py:738 netbox/dcim/forms/filtersets.py:882 +#: netbox/dcim/forms/filtersets.py:1434 +#: netbox/templates/dcim/inventoryitem.html:52 +#: netbox/templates/dcim/virtualchassis_edit.html:54 msgid "Serial" msgstr "" -#: dcim/choices.py:1130 +#: netbox/dcim/choices.py:1132 msgid "Coaxial" msgstr "" -#: dcim/choices.py:1150 +#: netbox/dcim/choices.py:1152 msgid "Stacking" msgstr "" -#: dcim/choices.py:1200 +#: netbox/dcim/choices.py:1202 msgid "Half" msgstr "" -#: dcim/choices.py:1201 +#: netbox/dcim/choices.py:1203 msgid "Full" msgstr "" -#: dcim/choices.py:1202 netbox/preferences.py:31 wireless/choices.py:480 +#: netbox/dcim/choices.py:1204 netbox/netbox/preferences.py:31 +#: netbox/wireless/choices.py:480 msgid "Auto" msgstr "" -#: dcim/choices.py:1213 +#: netbox/dcim/choices.py:1215 msgid "Access" msgstr "" -#: dcim/choices.py:1214 ipam/tables/vlans.py:168 ipam/tables/vlans.py:213 -#: templates/dcim/inc/interface_vlans_table.html:7 +#: netbox/dcim/choices.py:1216 netbox/ipam/tables/vlans.py:168 +#: netbox/ipam/tables/vlans.py:213 +#: netbox/templates/dcim/inc/interface_vlans_table.html:7 msgid "Tagged" msgstr "" -#: dcim/choices.py:1215 +#: netbox/dcim/choices.py:1217 msgid "Tagged (All)" msgstr "" -#: dcim/choices.py:1244 +#: netbox/dcim/choices.py:1246 msgid "IEEE Standard" msgstr "" -#: dcim/choices.py:1255 +#: netbox/dcim/choices.py:1257 msgid "Passive 24V (2-pair)" msgstr "" -#: dcim/choices.py:1256 +#: netbox/dcim/choices.py:1258 msgid "Passive 24V (4-pair)" msgstr "" -#: dcim/choices.py:1257 +#: netbox/dcim/choices.py:1259 msgid "Passive 48V (2-pair)" msgstr "" -#: dcim/choices.py:1258 +#: netbox/dcim/choices.py:1260 msgid "Passive 48V (4-pair)" msgstr "" -#: dcim/choices.py:1320 dcim/choices.py:1416 +#: netbox/dcim/choices.py:1322 netbox/dcim/choices.py:1418 msgid "Copper" msgstr "" -#: dcim/choices.py:1343 +#: netbox/dcim/choices.py:1345 msgid "Fiber Optic" msgstr "" -#: dcim/choices.py:1432 +#: netbox/dcim/choices.py:1434 msgid "Fiber" msgstr "" -#: dcim/choices.py:1456 dcim/forms/filtersets.py:1146 +#: netbox/dcim/choices.py:1458 netbox/dcim/forms/filtersets.py:1146 msgid "Connected" msgstr "" -#: dcim/choices.py:1475 +#: netbox/dcim/choices.py:1477 msgid "Kilometers" msgstr "" -#: dcim/choices.py:1476 templates/dcim/cable_trace.html:65 +#: netbox/dcim/choices.py:1478 netbox/templates/dcim/cable_trace.html:65 msgid "Meters" msgstr "" -#: dcim/choices.py:1477 +#: netbox/dcim/choices.py:1479 msgid "Centimeters" msgstr "" -#: dcim/choices.py:1478 +#: netbox/dcim/choices.py:1480 msgid "Miles" msgstr "" -#: dcim/choices.py:1479 templates/dcim/cable_trace.html:66 +#: netbox/dcim/choices.py:1481 netbox/templates/dcim/cable_trace.html:66 msgid "Feet" msgstr "" -#: dcim/choices.py:1495 templates/dcim/device.html:319 -#: templates/dcim/rack.html:152 +#: netbox/dcim/choices.py:1497 netbox/templates/dcim/device.html:320 +#: netbox/templates/dcim/rack.html:152 msgid "Kilograms" msgstr "" -#: dcim/choices.py:1496 +#: netbox/dcim/choices.py:1498 msgid "Grams" msgstr "" -#: dcim/choices.py:1497 templates/dcim/rack.html:153 +#: netbox/dcim/choices.py:1499 netbox/templates/dcim/rack.html:153 msgid "Pounds" msgstr "" -#: dcim/choices.py:1498 +#: netbox/dcim/choices.py:1500 msgid "Ounces" msgstr "" -#: dcim/choices.py:1544 tenancy/choices.py:17 +#: netbox/dcim/choices.py:1546 netbox/tenancy/choices.py:17 msgid "Primary" msgstr "" -#: dcim/choices.py:1545 +#: netbox/dcim/choices.py:1547 msgid "Redundant" msgstr "" -#: dcim/choices.py:1566 +#: netbox/dcim/choices.py:1568 msgid "Single phase" msgstr "" -#: dcim/choices.py:1567 +#: netbox/dcim/choices.py:1569 msgid "Three-phase" msgstr "" -#: dcim/fields.py:45 +#: netbox/dcim/fields.py:45 #, python-brace-format msgid "Invalid MAC address format: {value}" msgstr "" -#: dcim/fields.py:71 +#: netbox/dcim/fields.py:71 #, python-brace-format msgid "Invalid WWN format: {value}" msgstr "" -#: dcim/filtersets.py:85 +#: netbox/dcim/filtersets.py:85 msgid "Parent region (ID)" msgstr "" -#: dcim/filtersets.py:91 +#: netbox/dcim/filtersets.py:91 msgid "Parent region (slug)" msgstr "" -#: dcim/filtersets.py:115 +#: netbox/dcim/filtersets.py:115 msgid "Parent site group (ID)" msgstr "" -#: dcim/filtersets.py:121 +#: netbox/dcim/filtersets.py:121 msgid "Parent site group (slug)" msgstr "" -#: dcim/filtersets.py:163 ipam/filtersets.py:841 ipam/filtersets.py:979 +#: netbox/dcim/filtersets.py:163 netbox/ipam/filtersets.py:841 +#: netbox/ipam/filtersets.py:979 msgid "Group (ID)" msgstr "" -#: dcim/filtersets.py:169 +#: netbox/dcim/filtersets.py:169 msgid "Group (slug)" msgstr "" -#: dcim/filtersets.py:175 dcim/filtersets.py:180 +#: netbox/dcim/filtersets.py:175 netbox/dcim/filtersets.py:180 msgid "AS (ID)" msgstr "" -#: dcim/filtersets.py:245 +#: netbox/dcim/filtersets.py:245 msgid "Parent location (ID)" msgstr "" -#: dcim/filtersets.py:251 +#: netbox/dcim/filtersets.py:251 msgid "Parent location (slug)" msgstr "" -#: dcim/filtersets.py:257 dcim/filtersets.py:333 dcim/filtersets.py:432 -#: dcim/filtersets.py:1005 dcim/filtersets.py:1341 dcim/filtersets.py:2111 +#: netbox/dcim/filtersets.py:257 netbox/dcim/filtersets.py:333 +#: netbox/dcim/filtersets.py:432 netbox/dcim/filtersets.py:1005 +#: netbox/dcim/filtersets.py:1341 netbox/dcim/filtersets.py:2111 msgid "Location (ID)" msgstr "" -#: dcim/filtersets.py:264 dcim/filtersets.py:340 dcim/filtersets.py:439 -#: dcim/filtersets.py:1347 extras/filtersets.py:494 +#: netbox/dcim/filtersets.py:264 netbox/dcim/filtersets.py:340 +#: netbox/dcim/filtersets.py:439 netbox/dcim/filtersets.py:1347 +#: netbox/extras/filtersets.py:494 msgid "Location (slug)" msgstr "" -#: dcim/filtersets.py:354 dcim/filtersets.py:840 dcim/filtersets.py:942 -#: dcim/filtersets.py:1779 ipam/filtersets.py:381 ipam/filtersets.py:493 -#: ipam/filtersets.py:989 virtualization/filtersets.py:210 +#: netbox/dcim/filtersets.py:354 netbox/dcim/filtersets.py:840 +#: netbox/dcim/filtersets.py:942 netbox/dcim/filtersets.py:1779 +#: netbox/ipam/filtersets.py:381 netbox/ipam/filtersets.py:493 +#: netbox/ipam/filtersets.py:989 netbox/virtualization/filtersets.py:210 msgid "Role (ID)" msgstr "" -#: dcim/filtersets.py:360 dcim/filtersets.py:846 dcim/filtersets.py:948 -#: dcim/filtersets.py:1785 extras/filtersets.py:510 ipam/filtersets.py:387 -#: ipam/filtersets.py:499 ipam/filtersets.py:995 -#: virtualization/filtersets.py:216 +#: netbox/dcim/filtersets.py:360 netbox/dcim/filtersets.py:846 +#: netbox/dcim/filtersets.py:948 netbox/dcim/filtersets.py:1785 +#: netbox/extras/filtersets.py:510 netbox/ipam/filtersets.py:387 +#: netbox/ipam/filtersets.py:499 netbox/ipam/filtersets.py:995 +#: netbox/virtualization/filtersets.py:216 msgid "Role (slug)" msgstr "" -#: dcim/filtersets.py:389 dcim/filtersets.py:1010 dcim/filtersets.py:1352 -#: dcim/filtersets.py:2173 +#: netbox/dcim/filtersets.py:389 netbox/dcim/filtersets.py:1010 +#: netbox/dcim/filtersets.py:1352 netbox/dcim/filtersets.py:2173 msgid "Rack (ID)" msgstr "" -#: dcim/filtersets.py:443 extras/filtersets.py:282 extras/filtersets.py:326 -#: extras/filtersets.py:365 extras/filtersets.py:664 users/filtersets.py:28 +#: netbox/dcim/filtersets.py:443 netbox/extras/filtersets.py:282 +#: netbox/extras/filtersets.py:326 netbox/extras/filtersets.py:365 +#: netbox/extras/filtersets.py:664 netbox/users/filtersets.py:28 msgid "User (ID)" msgstr "" -#: dcim/filtersets.py:449 extras/filtersets.py:288 extras/filtersets.py:332 -#: extras/filtersets.py:371 users/filtersets.py:103 users/filtersets.py:170 +#: netbox/dcim/filtersets.py:449 netbox/extras/filtersets.py:288 +#: netbox/extras/filtersets.py:332 netbox/extras/filtersets.py:371 +#: netbox/users/filtersets.py:103 netbox/users/filtersets.py:170 msgid "User (name)" msgstr "" -#: dcim/filtersets.py:481 dcim/filtersets.py:620 dcim/filtersets.py:830 -#: dcim/filtersets.py:881 dcim/filtersets.py:921 dcim/filtersets.py:1243 -#: dcim/filtersets.py:1769 +#: netbox/dcim/filtersets.py:481 netbox/dcim/filtersets.py:620 +#: netbox/dcim/filtersets.py:830 netbox/dcim/filtersets.py:881 +#: netbox/dcim/filtersets.py:921 netbox/dcim/filtersets.py:1243 +#: netbox/dcim/filtersets.py:1769 msgid "Manufacturer (ID)" msgstr "" -#: dcim/filtersets.py:487 dcim/filtersets.py:626 dcim/filtersets.py:836 -#: dcim/filtersets.py:887 dcim/filtersets.py:927 dcim/filtersets.py:1249 -#: dcim/filtersets.py:1775 +#: netbox/dcim/filtersets.py:487 netbox/dcim/filtersets.py:626 +#: netbox/dcim/filtersets.py:836 netbox/dcim/filtersets.py:887 +#: netbox/dcim/filtersets.py:927 netbox/dcim/filtersets.py:1249 +#: netbox/dcim/filtersets.py:1775 msgid "Manufacturer (slug)" msgstr "" -#: dcim/filtersets.py:491 +#: netbox/dcim/filtersets.py:491 msgid "Default platform (ID)" msgstr "" -#: dcim/filtersets.py:497 +#: netbox/dcim/filtersets.py:497 msgid "Default platform (slug)" msgstr "" -#: dcim/filtersets.py:500 dcim/forms/filtersets.py:452 +#: netbox/dcim/filtersets.py:500 netbox/dcim/forms/filtersets.py:452 msgid "Has a front image" msgstr "" -#: dcim/filtersets.py:504 dcim/forms/filtersets.py:459 +#: netbox/dcim/filtersets.py:504 netbox/dcim/forms/filtersets.py:459 msgid "Has a rear image" msgstr "" -#: dcim/filtersets.py:509 dcim/filtersets.py:630 dcim/filtersets.py:1068 -#: dcim/forms/filtersets.py:466 dcim/forms/filtersets.py:562 -#: dcim/forms/filtersets.py:777 +#: netbox/dcim/filtersets.py:509 netbox/dcim/filtersets.py:630 +#: netbox/dcim/filtersets.py:1068 netbox/dcim/forms/filtersets.py:466 +#: netbox/dcim/forms/filtersets.py:562 netbox/dcim/forms/filtersets.py:777 msgid "Has console ports" msgstr "" -#: dcim/filtersets.py:513 dcim/filtersets.py:634 dcim/filtersets.py:1072 -#: dcim/forms/filtersets.py:473 dcim/forms/filtersets.py:569 -#: dcim/forms/filtersets.py:784 +#: netbox/dcim/filtersets.py:513 netbox/dcim/filtersets.py:634 +#: netbox/dcim/filtersets.py:1072 netbox/dcim/forms/filtersets.py:473 +#: netbox/dcim/forms/filtersets.py:569 netbox/dcim/forms/filtersets.py:784 msgid "Has console server ports" msgstr "" -#: dcim/filtersets.py:517 dcim/filtersets.py:638 dcim/filtersets.py:1076 -#: dcim/forms/filtersets.py:480 dcim/forms/filtersets.py:576 -#: dcim/forms/filtersets.py:791 +#: netbox/dcim/filtersets.py:517 netbox/dcim/filtersets.py:638 +#: netbox/dcim/filtersets.py:1076 netbox/dcim/forms/filtersets.py:480 +#: netbox/dcim/forms/filtersets.py:576 netbox/dcim/forms/filtersets.py:791 msgid "Has power ports" msgstr "" -#: dcim/filtersets.py:521 dcim/filtersets.py:642 dcim/filtersets.py:1080 -#: dcim/forms/filtersets.py:487 dcim/forms/filtersets.py:583 -#: dcim/forms/filtersets.py:798 +#: netbox/dcim/filtersets.py:521 netbox/dcim/filtersets.py:642 +#: netbox/dcim/filtersets.py:1080 netbox/dcim/forms/filtersets.py:487 +#: netbox/dcim/forms/filtersets.py:583 netbox/dcim/forms/filtersets.py:798 msgid "Has power outlets" msgstr "" -#: dcim/filtersets.py:525 dcim/filtersets.py:646 dcim/filtersets.py:1084 -#: dcim/forms/filtersets.py:494 dcim/forms/filtersets.py:590 -#: dcim/forms/filtersets.py:805 +#: netbox/dcim/filtersets.py:525 netbox/dcim/filtersets.py:646 +#: netbox/dcim/filtersets.py:1084 netbox/dcim/forms/filtersets.py:494 +#: netbox/dcim/forms/filtersets.py:590 netbox/dcim/forms/filtersets.py:805 msgid "Has interfaces" msgstr "" -#: dcim/filtersets.py:529 dcim/filtersets.py:650 dcim/filtersets.py:1088 -#: dcim/forms/filtersets.py:501 dcim/forms/filtersets.py:597 -#: dcim/forms/filtersets.py:812 +#: netbox/dcim/filtersets.py:529 netbox/dcim/filtersets.py:650 +#: netbox/dcim/filtersets.py:1088 netbox/dcim/forms/filtersets.py:501 +#: netbox/dcim/forms/filtersets.py:597 netbox/dcim/forms/filtersets.py:812 msgid "Has pass-through ports" msgstr "" -#: dcim/filtersets.py:533 dcim/filtersets.py:1092 dcim/forms/filtersets.py:515 +#: netbox/dcim/filtersets.py:533 netbox/dcim/filtersets.py:1092 +#: netbox/dcim/forms/filtersets.py:515 msgid "Has module bays" msgstr "" -#: dcim/filtersets.py:537 dcim/filtersets.py:1096 dcim/forms/filtersets.py:508 +#: netbox/dcim/filtersets.py:537 netbox/dcim/filtersets.py:1096 +#: netbox/dcim/forms/filtersets.py:508 msgid "Has device bays" msgstr "" -#: dcim/filtersets.py:541 dcim/forms/filtersets.py:522 +#: netbox/dcim/filtersets.py:541 netbox/dcim/forms/filtersets.py:522 msgid "Has inventory items" msgstr "" -#: dcim/filtersets.py:698 dcim/filtersets.py:937 dcim/filtersets.py:1373 +#: netbox/dcim/filtersets.py:698 netbox/dcim/filtersets.py:937 +#: netbox/dcim/filtersets.py:1373 msgid "Device type (ID)" msgstr "" -#: dcim/filtersets.py:717 dcim/filtersets.py:1254 +#: netbox/dcim/filtersets.py:717 netbox/dcim/filtersets.py:1254 msgid "Module type (ID)" msgstr "" -#: dcim/filtersets.py:752 dcim/filtersets.py:1524 +#: netbox/dcim/filtersets.py:752 netbox/dcim/filtersets.py:1524 msgid "Power port (ID)" msgstr "" -#: dcim/filtersets.py:826 dcim/filtersets.py:1765 +#: netbox/dcim/filtersets.py:826 netbox/dcim/filtersets.py:1765 msgid "Parent inventory item (ID)" msgstr "" -#: dcim/filtersets.py:869 dcim/filtersets.py:895 dcim/filtersets.py:1064 -#: virtualization/filtersets.py:238 +#: netbox/dcim/filtersets.py:869 netbox/dcim/filtersets.py:895 +#: netbox/dcim/filtersets.py:1064 netbox/virtualization/filtersets.py:238 msgid "Config template (ID)" msgstr "" -#: dcim/filtersets.py:933 +#: netbox/dcim/filtersets.py:933 msgid "Device type (slug)" msgstr "" -#: dcim/filtersets.py:953 +#: netbox/dcim/filtersets.py:953 msgid "Parent Device (ID)" msgstr "" -#: dcim/filtersets.py:957 virtualization/filtersets.py:220 +#: netbox/dcim/filtersets.py:957 netbox/virtualization/filtersets.py:220 msgid "Platform (ID)" msgstr "" -#: dcim/filtersets.py:963 extras/filtersets.py:521 -#: virtualization/filtersets.py:226 +#: netbox/dcim/filtersets.py:963 netbox/extras/filtersets.py:521 +#: netbox/virtualization/filtersets.py:226 msgid "Platform (slug)" msgstr "" -#: dcim/filtersets.py:999 dcim/filtersets.py:1336 dcim/filtersets.py:1863 -#: dcim/filtersets.py:2105 dcim/filtersets.py:2164 +#: netbox/dcim/filtersets.py:999 netbox/dcim/filtersets.py:1336 +#: netbox/dcim/filtersets.py:1863 netbox/dcim/filtersets.py:2105 +#: netbox/dcim/filtersets.py:2164 msgid "Site name (slug)" msgstr "" -#: dcim/filtersets.py:1015 +#: netbox/dcim/filtersets.py:1015 msgid "Parent bay (ID)" msgstr "" -#: dcim/filtersets.py:1019 +#: netbox/dcim/filtersets.py:1019 msgid "VM cluster (ID)" msgstr "" -#: dcim/filtersets.py:1025 +#: netbox/dcim/filtersets.py:1025 msgid "Device model (slug)" msgstr "" -#: dcim/filtersets.py:1036 dcim/forms/bulk_edit.py:423 +#: netbox/dcim/filtersets.py:1036 netbox/dcim/forms/bulk_edit.py:423 msgid "Is full depth" msgstr "" -#: dcim/filtersets.py:1040 dcim/forms/common.py:18 dcim/forms/filtersets.py:747 -#: dcim/forms/filtersets.py:1291 dcim/models/device_components.py:519 -#: virtualization/filtersets.py:230 virtualization/filtersets.py:297 -#: virtualization/forms/filtersets.py:172 -#: virtualization/forms/filtersets.py:219 +#: netbox/dcim/filtersets.py:1040 netbox/dcim/forms/common.py:18 +#: netbox/dcim/forms/filtersets.py:747 netbox/dcim/forms/filtersets.py:1291 +#: netbox/dcim/models/device_components.py:519 +#: netbox/virtualization/filtersets.py:230 +#: netbox/virtualization/filtersets.py:297 +#: netbox/virtualization/forms/filtersets.py:172 +#: netbox/virtualization/forms/filtersets.py:219 msgid "MAC address" msgstr "" -#: dcim/filtersets.py:1047 dcim/filtersets.py:1211 dcim/forms/filtersets.py:756 -#: dcim/forms/filtersets.py:849 virtualization/filtersets.py:234 -#: virtualization/forms/filtersets.py:176 +#: netbox/dcim/filtersets.py:1047 netbox/dcim/filtersets.py:1211 +#: netbox/dcim/forms/filtersets.py:756 netbox/dcim/forms/filtersets.py:849 +#: netbox/virtualization/filtersets.py:234 +#: netbox/virtualization/forms/filtersets.py:176 msgid "Has a primary IP" msgstr "" -#: dcim/filtersets.py:1051 +#: netbox/dcim/filtersets.py:1051 msgid "Has an out-of-band IP" msgstr "" -#: dcim/filtersets.py:1056 +#: netbox/dcim/filtersets.py:1056 msgid "Virtual chassis (ID)" msgstr "" -#: dcim/filtersets.py:1060 +#: netbox/dcim/filtersets.py:1060 msgid "Is a virtual chassis member" msgstr "" -#: dcim/filtersets.py:1101 +#: netbox/dcim/filtersets.py:1101 msgid "OOB IP (ID)" msgstr "" -#: dcim/filtersets.py:1105 +#: netbox/dcim/filtersets.py:1105 msgid "Has virtual device context" msgstr "" -#: dcim/filtersets.py:1194 +#: netbox/dcim/filtersets.py:1194 msgid "VDC (ID)" msgstr "" -#: dcim/filtersets.py:1199 +#: netbox/dcim/filtersets.py:1199 msgid "Device model" msgstr "" -#: dcim/filtersets.py:1204 ipam/filtersets.py:632 vpn/filtersets.py:102 -#: vpn/filtersets.py:420 +#: netbox/dcim/filtersets.py:1204 netbox/ipam/filtersets.py:632 +#: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:420 msgid "Interface (ID)" msgstr "" -#: dcim/filtersets.py:1260 +#: netbox/dcim/filtersets.py:1260 msgid "Module type (model)" msgstr "" -#: dcim/filtersets.py:1266 +#: netbox/dcim/filtersets.py:1266 msgid "Module Bay (ID)" msgstr "" -#: dcim/filtersets.py:1270 dcim/filtersets.py:1362 ipam/filtersets.py:611 -#: ipam/filtersets.py:851 ipam/filtersets.py:1075 -#: virtualization/filtersets.py:161 vpn/filtersets.py:398 +#: netbox/dcim/filtersets.py:1270 netbox/dcim/filtersets.py:1362 +#: netbox/ipam/filtersets.py:611 netbox/ipam/filtersets.py:851 +#: netbox/ipam/filtersets.py:1075 netbox/virtualization/filtersets.py:161 +#: netbox/vpn/filtersets.py:398 msgid "Device (ID)" msgstr "" -#: dcim/filtersets.py:1358 +#: netbox/dcim/filtersets.py:1358 msgid "Rack (name)" msgstr "" -#: dcim/filtersets.py:1368 ipam/filtersets.py:606 ipam/filtersets.py:846 -#: ipam/filtersets.py:1081 vpn/filtersets.py:393 +#: netbox/dcim/filtersets.py:1368 netbox/ipam/filtersets.py:606 +#: netbox/ipam/filtersets.py:846 netbox/ipam/filtersets.py:1081 +#: netbox/vpn/filtersets.py:393 msgid "Device (name)" msgstr "" -#: dcim/filtersets.py:1379 +#: netbox/dcim/filtersets.py:1379 msgid "Device type (model)" msgstr "" -#: dcim/filtersets.py:1384 +#: netbox/dcim/filtersets.py:1384 msgid "Device role (ID)" msgstr "" -#: dcim/filtersets.py:1390 +#: netbox/dcim/filtersets.py:1390 msgid "Device role (slug)" msgstr "" -#: dcim/filtersets.py:1395 +#: netbox/dcim/filtersets.py:1395 msgid "Virtual Chassis (ID)" msgstr "" -#: dcim/filtersets.py:1401 dcim/forms/filtersets.py:107 -#: dcim/tables/devices.py:211 netbox/navigation/menu.py:66 -#: templates/dcim/device.html:119 templates/dcim/device_edit.html:93 -#: templates/dcim/virtualchassis.html:20 -#: templates/dcim/virtualchassis_add.html:8 -#: templates/dcim/virtualchassis_edit.html:24 +#: netbox/dcim/filtersets.py:1401 netbox/dcim/forms/filtersets.py:107 +#: netbox/dcim/tables/devices.py:211 netbox/netbox/navigation/menu.py:66 +#: netbox/templates/dcim/device.html:120 +#: netbox/templates/dcim/device_edit.html:93 +#: netbox/templates/dcim/virtualchassis.html:20 +#: netbox/templates/dcim/virtualchassis_add.html:8 +#: netbox/templates/dcim/virtualchassis_edit.html:24 msgid "Virtual Chassis" msgstr "" -#: dcim/filtersets.py:1421 +#: netbox/dcim/filtersets.py:1421 msgid "Module (ID)" msgstr "" -#: dcim/filtersets.py:1428 +#: netbox/dcim/filtersets.py:1428 msgid "Cable (ID)" msgstr "" -#: dcim/filtersets.py:1537 ipam/forms/bulk_import.py:188 -#: vpn/forms/bulk_import.py:308 +#: netbox/dcim/filtersets.py:1537 netbox/ipam/forms/bulk_import.py:188 +#: netbox/vpn/forms/bulk_import.py:308 msgid "Assigned VLAN" msgstr "" -#: dcim/filtersets.py:1541 +#: netbox/dcim/filtersets.py:1541 msgid "Assigned VID" msgstr "" -#: dcim/filtersets.py:1546 dcim/forms/bulk_edit.py:1382 -#: dcim/forms/bulk_import.py:836 dcim/forms/filtersets.py:1334 -#: dcim/forms/model_forms.py:1322 dcim/models/device_components.py:712 -#: dcim/tables/devices.py:622 ipam/filtersets.py:316 ipam/filtersets.py:327 -#: ipam/filtersets.py:483 ipam/filtersets.py:584 ipam/filtersets.py:595 -#: ipam/forms/bulk_edit.py:227 ipam/forms/bulk_edit.py:282 -#: ipam/forms/bulk_edit.py:324 ipam/forms/bulk_import.py:156 -#: ipam/forms/bulk_import.py:242 ipam/forms/bulk_import.py:278 -#: ipam/forms/filtersets.py:67 ipam/forms/filtersets.py:172 -#: ipam/forms/filtersets.py:309 ipam/forms/model_forms.py:60 -#: ipam/forms/model_forms.py:200 ipam/forms/model_forms.py:245 -#: ipam/forms/model_forms.py:298 ipam/forms/model_forms.py:429 -#: ipam/forms/model_forms.py:443 ipam/forms/model_forms.py:457 -#: ipam/models/ip.py:233 ipam/models/ip.py:512 ipam/models/ip.py:720 -#: ipam/models/vrfs.py:62 ipam/tables/ip.py:241 ipam/tables/ip.py:306 -#: ipam/tables/ip.py:356 ipam/tables/ip.py:445 -#: templates/dcim/interface.html:133 templates/ipam/ipaddress.html:18 -#: templates/ipam/iprange.html:40 templates/ipam/prefix.html:19 -#: templates/ipam/vrf.html:7 templates/ipam/vrf.html:13 -#: templates/virtualization/vminterface.html:47 -#: virtualization/forms/bulk_edit.py:261 -#: virtualization/forms/bulk_import.py:171 -#: virtualization/forms/filtersets.py:224 -#: virtualization/forms/model_forms.py:344 -#: virtualization/models/virtualmachines.py:350 -#: virtualization/tables/virtualmachines.py:136 +#: netbox/dcim/filtersets.py:1546 netbox/dcim/forms/bulk_edit.py:1382 +#: netbox/dcim/forms/bulk_import.py:836 netbox/dcim/forms/filtersets.py:1334 +#: netbox/dcim/forms/model_forms.py:1322 +#: netbox/dcim/models/device_components.py:712 +#: netbox/dcim/tables/devices.py:622 netbox/ipam/filtersets.py:316 +#: netbox/ipam/filtersets.py:327 netbox/ipam/filtersets.py:483 +#: netbox/ipam/filtersets.py:584 netbox/ipam/filtersets.py:595 +#: netbox/ipam/forms/bulk_edit.py:227 netbox/ipam/forms/bulk_edit.py:282 +#: netbox/ipam/forms/bulk_edit.py:324 netbox/ipam/forms/bulk_import.py:156 +#: netbox/ipam/forms/bulk_import.py:242 netbox/ipam/forms/bulk_import.py:278 +#: netbox/ipam/forms/filtersets.py:67 netbox/ipam/forms/filtersets.py:172 +#: netbox/ipam/forms/filtersets.py:309 netbox/ipam/forms/model_forms.py:60 +#: netbox/ipam/forms/model_forms.py:200 netbox/ipam/forms/model_forms.py:245 +#: netbox/ipam/forms/model_forms.py:298 netbox/ipam/forms/model_forms.py:429 +#: netbox/ipam/forms/model_forms.py:443 netbox/ipam/forms/model_forms.py:457 +#: netbox/ipam/models/ip.py:233 netbox/ipam/models/ip.py:512 +#: netbox/ipam/models/ip.py:720 netbox/ipam/models/vrfs.py:62 +#: netbox/ipam/tables/ip.py:241 netbox/ipam/tables/ip.py:306 +#: netbox/ipam/tables/ip.py:356 netbox/ipam/tables/ip.py:445 +#: netbox/templates/dcim/interface.html:133 +#: netbox/templates/ipam/ipaddress.html:18 +#: netbox/templates/ipam/iprange.html:40 netbox/templates/ipam/prefix.html:19 +#: netbox/templates/ipam/vrf.html:7 netbox/templates/ipam/vrf.html:13 +#: netbox/templates/virtualization/vminterface.html:47 +#: netbox/virtualization/forms/bulk_edit.py:261 +#: netbox/virtualization/forms/bulk_import.py:171 +#: netbox/virtualization/forms/filtersets.py:224 +#: netbox/virtualization/forms/model_forms.py:344 +#: netbox/virtualization/models/virtualmachines.py:350 +#: netbox/virtualization/tables/virtualmachines.py:136 msgid "VRF" msgstr "" -#: dcim/filtersets.py:1552 ipam/filtersets.py:322 ipam/filtersets.py:333 -#: ipam/filtersets.py:489 ipam/filtersets.py:590 ipam/filtersets.py:601 +#: netbox/dcim/filtersets.py:1552 netbox/ipam/filtersets.py:322 +#: netbox/ipam/filtersets.py:333 netbox/ipam/filtersets.py:489 +#: netbox/ipam/filtersets.py:590 netbox/ipam/filtersets.py:601 msgid "VRF (RD)" msgstr "" -#: dcim/filtersets.py:1557 ipam/filtersets.py:1016 vpn/filtersets.py:361 +#: netbox/dcim/filtersets.py:1557 netbox/ipam/filtersets.py:1016 +#: netbox/vpn/filtersets.py:361 msgid "L2VPN (ID)" msgstr "" -#: dcim/filtersets.py:1563 dcim/forms/filtersets.py:1339 -#: dcim/tables/devices.py:570 ipam/filtersets.py:1022 -#: ipam/forms/filtersets.py:525 ipam/tables/vlans.py:133 -#: templates/dcim/interface.html:93 templates/ipam/vlan.html:66 -#: templates/vpn/l2vpntermination.html:12 -#: virtualization/forms/filtersets.py:229 vpn/forms/bulk_import.py:280 -#: vpn/forms/filtersets.py:246 vpn/forms/model_forms.py:409 -#: vpn/forms/model_forms.py:427 vpn/models/l2vpn.py:63 vpn/tables/l2vpn.py:55 +#: netbox/dcim/filtersets.py:1563 netbox/dcim/forms/filtersets.py:1339 +#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1022 +#: netbox/ipam/forms/filtersets.py:525 netbox/ipam/tables/vlans.py:133 +#: netbox/templates/dcim/interface.html:93 netbox/templates/ipam/vlan.html:66 +#: netbox/templates/vpn/l2vpntermination.html:12 +#: netbox/virtualization/forms/filtersets.py:229 +#: netbox/vpn/forms/bulk_import.py:280 netbox/vpn/forms/filtersets.py:246 +#: netbox/vpn/forms/model_forms.py:409 netbox/vpn/forms/model_forms.py:427 +#: netbox/vpn/models/l2vpn.py:63 netbox/vpn/tables/l2vpn.py:55 msgid "L2VPN" msgstr "" -#: dcim/filtersets.py:1595 +#: netbox/dcim/filtersets.py:1595 msgid "Virtual Chassis Interfaces for Device" msgstr "" -#: dcim/filtersets.py:1600 +#: netbox/dcim/filtersets.py:1600 msgid "Virtual Chassis Interfaces for Device (ID)" msgstr "" -#: dcim/filtersets.py:1604 +#: netbox/dcim/filtersets.py:1604 msgid "Kind of interface" msgstr "" -#: dcim/filtersets.py:1609 virtualization/filtersets.py:289 +#: netbox/dcim/filtersets.py:1609 netbox/virtualization/filtersets.py:289 msgid "Parent interface (ID)" msgstr "" -#: dcim/filtersets.py:1614 virtualization/filtersets.py:294 +#: netbox/dcim/filtersets.py:1614 netbox/virtualization/filtersets.py:294 msgid "Bridged interface (ID)" msgstr "" -#: dcim/filtersets.py:1619 +#: netbox/dcim/filtersets.py:1619 msgid "LAG interface (ID)" msgstr "" -#: dcim/filtersets.py:1646 dcim/filtersets.py:1658 -#: dcim/forms/filtersets.py:1251 dcim/forms/model_forms.py:1634 -#: templates/dcim/virtualdevicecontext.html:15 +#: netbox/dcim/filtersets.py:1646 netbox/dcim/filtersets.py:1658 +#: netbox/dcim/forms/filtersets.py:1251 netbox/dcim/forms/model_forms.py:1634 +#: netbox/templates/dcim/virtualdevicecontext.html:15 msgid "Virtual Device Context" msgstr "" -#: dcim/filtersets.py:1652 +#: netbox/dcim/filtersets.py:1652 msgid "Virtual Device Context (Identifier)" msgstr "" -#: dcim/filtersets.py:1663 templates/wireless/wirelesslan.html:11 -#: wireless/forms/model_forms.py:53 +#: netbox/dcim/filtersets.py:1663 netbox/templates/wireless/wirelesslan.html:11 +#: netbox/wireless/forms/model_forms.py:53 msgid "Wireless LAN" msgstr "" -#: dcim/filtersets.py:1667 dcim/tables/devices.py:609 +#: netbox/dcim/filtersets.py:1667 netbox/dcim/tables/devices.py:609 msgid "Wireless link" msgstr "" -#: dcim/filtersets.py:1737 +#: netbox/dcim/filtersets.py:1737 msgid "Installed module (ID)" msgstr "" -#: dcim/filtersets.py:1748 +#: netbox/dcim/filtersets.py:1748 msgid "Installed device (ID)" msgstr "" -#: dcim/filtersets.py:1754 +#: netbox/dcim/filtersets.py:1754 msgid "Installed device (name)" msgstr "" -#: dcim/filtersets.py:1820 +#: netbox/dcim/filtersets.py:1820 msgid "Master (ID)" msgstr "" -#: dcim/filtersets.py:1826 +#: netbox/dcim/filtersets.py:1826 msgid "Master (name)" msgstr "" -#: dcim/filtersets.py:1868 tenancy/filtersets.py:246 +#: netbox/dcim/filtersets.py:1868 netbox/tenancy/filtersets.py:246 msgid "Tenant (ID)" msgstr "" -#: dcim/filtersets.py:1874 extras/filtersets.py:570 tenancy/filtersets.py:252 +#: netbox/dcim/filtersets.py:1874 netbox/extras/filtersets.py:570 +#: netbox/tenancy/filtersets.py:252 msgid "Tenant (slug)" msgstr "" -#: dcim/filtersets.py:1910 dcim/forms/filtersets.py:996 +#: netbox/dcim/filtersets.py:1910 netbox/dcim/forms/filtersets.py:996 msgid "Unterminated" msgstr "" -#: dcim/filtersets.py:2168 +#: netbox/dcim/filtersets.py:2168 msgid "Power panel (ID)" msgstr "" -#: dcim/forms/bulk_create.py:40 extras/forms/filtersets.py:410 -#: extras/forms/model_forms.py:443 extras/forms/model_forms.py:495 -#: netbox/forms/base.py:84 netbox/forms/mixins.py:81 -#: netbox/tables/columns.py:458 -#: templates/circuits/inc/circuit_termination.html:32 -#: templates/generic/bulk_edit.html:65 templates/inc/panels/tags.html:5 -#: utilities/forms/fields/fields.py:81 +#: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py:410 +#: netbox/extras/forms/model_forms.py:443 +#: netbox/extras/forms/model_forms.py:495 netbox/netbox/forms/base.py:84 +#: netbox/netbox/forms/mixins.py:81 netbox/netbox/tables/columns.py:458 +#: netbox/templates/circuits/inc/circuit_termination.html:32 +#: netbox/templates/generic/bulk_edit.html:65 +#: netbox/templates/inc/panels/tags.html:5 +#: netbox/utilities/forms/fields/fields.py:81 msgid "Tags" msgstr "" -#: dcim/forms/bulk_create.py:112 dcim/forms/filtersets.py:1396 -#: dcim/forms/model_forms.py:431 dcim/forms/model_forms.py:486 -#: dcim/forms/object_create.py:197 dcim/forms/object_create.py:353 -#: dcim/tables/devices.py:170 dcim/tables/devices.py:702 -#: dcim/tables/devicetypes.py:242 templates/dcim/device.html:42 -#: templates/dcim/device.html:129 templates/dcim/modulebay.html:34 -#: templates/dcim/virtualchassis.html:66 -#: templates/dcim/virtualchassis_edit.html:55 +#: netbox/dcim/forms/bulk_create.py:112 netbox/dcim/forms/filtersets.py:1396 +#: netbox/dcim/forms/model_forms.py:431 netbox/dcim/forms/model_forms.py:486 +#: netbox/dcim/forms/object_create.py:197 +#: netbox/dcim/forms/object_create.py:353 netbox/dcim/tables/devices.py:170 +#: netbox/dcim/tables/devices.py:702 netbox/dcim/tables/devicetypes.py:242 +#: netbox/templates/dcim/device.html:43 netbox/templates/dcim/device.html:130 +#: netbox/templates/dcim/modulebay.html:34 +#: netbox/templates/dcim/virtualchassis.html:66 +#: netbox/templates/dcim/virtualchassis_edit.html:55 msgid "Position" msgstr "" -#: dcim/forms/bulk_create.py:114 +#: netbox/dcim/forms/bulk_create.py:114 msgid "" "Alphanumeric ranges are supported. (Must match the number of names being " "created.)" msgstr "" -#: dcim/forms/bulk_edit.py:116 dcim/forms/bulk_import.py:99 -#: dcim/forms/model_forms.py:116 dcim/tables/sites.py:89 ipam/filtersets.py:985 -#: ipam/forms/bulk_edit.py:531 ipam/forms/bulk_import.py:444 -#: ipam/forms/model_forms.py:526 ipam/tables/fhrp.py:67 -#: ipam/tables/vlans.py:118 ipam/tables/vlans.py:221 -#: templates/dcim/interface.html:284 templates/dcim/site.html:36 -#: templates/ipam/inc/panels/fhrp_groups.html:23 templates/ipam/vlan.html:27 -#: templates/tenancy/contact.html:21 templates/tenancy/tenant.html:20 -#: templates/users/group.html:6 templates/users/group.html:14 -#: templates/virtualization/cluster.html:29 templates/vpn/tunnel.html:29 -#: templates/wireless/wirelesslan.html:18 tenancy/forms/bulk_edit.py:43 -#: tenancy/forms/bulk_edit.py:94 tenancy/forms/bulk_import.py:40 -#: tenancy/forms/bulk_import.py:81 tenancy/forms/filtersets.py:48 -#: tenancy/forms/filtersets.py:78 tenancy/forms/filtersets.py:97 -#: tenancy/forms/model_forms.py:45 tenancy/forms/model_forms.py:97 -#: tenancy/forms/model_forms.py:122 tenancy/tables/contacts.py:60 -#: tenancy/tables/contacts.py:107 tenancy/tables/tenants.py:42 -#: users/filtersets.py:57 users/filtersets.py:175 users/forms/filtersets.py:32 -#: users/forms/filtersets.py:38 users/forms/filtersets.py:80 -#: virtualization/forms/bulk_edit.py:65 virtualization/forms/bulk_import.py:47 -#: virtualization/forms/filtersets.py:85 virtualization/forms/model_forms.py:66 -#: virtualization/tables/clusters.py:70 vpn/forms/bulk_edit.py:112 -#: vpn/forms/bulk_import.py:158 vpn/forms/filtersets.py:116 -#: vpn/tables/crypto.py:31 vpn/tables/tunnels.py:44 -#: wireless/forms/bulk_edit.py:48 wireless/forms/bulk_import.py:36 -#: wireless/forms/filtersets.py:46 wireless/forms/model_forms.py:40 -#: wireless/tables/wirelesslan.py:48 +#: netbox/dcim/forms/bulk_edit.py:116 netbox/dcim/forms/bulk_import.py:99 +#: netbox/dcim/forms/model_forms.py:116 netbox/dcim/tables/sites.py:89 +#: netbox/ipam/filtersets.py:985 netbox/ipam/forms/bulk_edit.py:531 +#: netbox/ipam/forms/bulk_import.py:444 netbox/ipam/forms/model_forms.py:526 +#: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:118 +#: netbox/ipam/tables/vlans.py:221 netbox/templates/dcim/interface.html:284 +#: netbox/templates/dcim/site.html:37 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:23 +#: netbox/templates/ipam/vlan.html:27 netbox/templates/tenancy/contact.html:21 +#: netbox/templates/tenancy/tenant.html:20 netbox/templates/users/group.html:6 +#: netbox/templates/users/group.html:14 +#: netbox/templates/virtualization/cluster.html:29 +#: netbox/templates/vpn/tunnel.html:29 +#: netbox/templates/wireless/wirelesslan.html:18 +#: netbox/tenancy/forms/bulk_edit.py:43 netbox/tenancy/forms/bulk_edit.py:94 +#: netbox/tenancy/forms/bulk_import.py:40 +#: netbox/tenancy/forms/bulk_import.py:81 netbox/tenancy/forms/filtersets.py:48 +#: netbox/tenancy/forms/filtersets.py:78 netbox/tenancy/forms/filtersets.py:97 +#: netbox/tenancy/forms/model_forms.py:45 +#: netbox/tenancy/forms/model_forms.py:97 +#: netbox/tenancy/forms/model_forms.py:122 netbox/tenancy/tables/contacts.py:60 +#: netbox/tenancy/tables/contacts.py:107 netbox/tenancy/tables/tenants.py:42 +#: netbox/users/filtersets.py:57 netbox/users/filtersets.py:175 +#: netbox/users/forms/filtersets.py:32 netbox/users/forms/filtersets.py:38 +#: netbox/users/forms/filtersets.py:80 +#: netbox/virtualization/forms/bulk_edit.py:65 +#: netbox/virtualization/forms/bulk_import.py:47 +#: netbox/virtualization/forms/filtersets.py:85 +#: netbox/virtualization/forms/model_forms.py:66 +#: netbox/virtualization/tables/clusters.py:70 +#: netbox/vpn/forms/bulk_edit.py:112 netbox/vpn/forms/bulk_import.py:158 +#: netbox/vpn/forms/filtersets.py:116 netbox/vpn/tables/crypto.py:31 +#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:48 +#: netbox/wireless/forms/bulk_import.py:36 +#: netbox/wireless/forms/filtersets.py:46 +#: netbox/wireless/forms/model_forms.py:40 +#: netbox/wireless/tables/wirelesslan.py:48 msgid "Group" msgstr "" -#: dcim/forms/bulk_edit.py:131 +#: netbox/dcim/forms/bulk_edit.py:131 msgid "Contact name" msgstr "" -#: dcim/forms/bulk_edit.py:136 +#: netbox/dcim/forms/bulk_edit.py:136 msgid "Contact phone" msgstr "" -#: dcim/forms/bulk_edit.py:142 +#: netbox/dcim/forms/bulk_edit.py:142 msgid "Contact E-mail" msgstr "" -#: dcim/forms/bulk_edit.py:145 dcim/forms/bulk_import.py:122 -#: dcim/forms/model_forms.py:127 +#: netbox/dcim/forms/bulk_edit.py:145 netbox/dcim/forms/bulk_import.py:122 +#: netbox/dcim/forms/model_forms.py:127 msgid "Time zone" msgstr "" -#: dcim/forms/bulk_edit.py:267 dcim/forms/bulk_edit.py:1160 -#: dcim/forms/bulk_edit.py:1548 dcim/forms/bulk_import.py:207 -#: dcim/forms/bulk_import.py:1021 dcim/forms/filtersets.py:300 -#: dcim/forms/filtersets.py:706 dcim/forms/filtersets.py:1426 -#: dcim/forms/model_forms.py:219 dcim/forms/model_forms.py:1015 -#: dcim/forms/model_forms.py:1454 dcim/forms/object_import.py:181 -#: dcim/tables/devices.py:174 dcim/tables/devices.py:810 -#: dcim/tables/devices.py:921 dcim/tables/devicetypes.py:300 -#: dcim/tables/racks.py:69 extras/filtersets.py:504 ipam/forms/bulk_edit.py:246 -#: ipam/forms/bulk_edit.py:295 ipam/forms/bulk_edit.py:343 -#: ipam/forms/bulk_edit.py:549 ipam/forms/bulk_import.py:196 -#: ipam/forms/bulk_import.py:261 ipam/forms/bulk_import.py:297 -#: ipam/forms/bulk_import.py:463 ipam/forms/filtersets.py:237 -#: ipam/forms/filtersets.py:289 ipam/forms/filtersets.py:360 -#: ipam/forms/filtersets.py:516 ipam/forms/model_forms.py:186 -#: ipam/forms/model_forms.py:219 ipam/forms/model_forms.py:248 -#: ipam/forms/model_forms.py:689 ipam/tables/ip.py:257 ipam/tables/ip.py:313 -#: ipam/tables/ip.py:363 ipam/tables/vlans.py:126 ipam/tables/vlans.py:230 -#: templates/dcim/device.html:179 -#: templates/dcim/inc/panels/inventory_items.html:20 -#: templates/dcim/interface.html:223 templates/dcim/inventoryitem.html:36 -#: templates/dcim/rack.html:47 templates/ipam/ipaddress.html:41 -#: templates/ipam/iprange.html:50 templates/ipam/prefix.html:77 -#: templates/ipam/role.html:19 templates/ipam/vlan.html:52 -#: templates/virtualization/virtualmachine.html:23 -#: templates/vpn/tunneltermination.html:17 -#: templates/wireless/inc/wirelesslink_interface.html:20 -#: tenancy/forms/bulk_edit.py:142 tenancy/forms/filtersets.py:107 -#: tenancy/forms/model_forms.py:137 tenancy/tables/contacts.py:102 -#: virtualization/forms/bulk_edit.py:145 -#: virtualization/forms/bulk_import.py:106 -#: virtualization/forms/filtersets.py:157 -#: virtualization/forms/model_forms.py:195 -#: virtualization/tables/virtualmachines.py:74 vpn/forms/bulk_edit.py:87 -#: vpn/forms/bulk_import.py:81 vpn/forms/filtersets.py:85 -#: vpn/forms/model_forms.py:78 vpn/forms/model_forms.py:113 -#: vpn/tables/tunnels.py:82 +#: netbox/dcim/forms/bulk_edit.py:267 netbox/dcim/forms/bulk_edit.py:1160 +#: netbox/dcim/forms/bulk_edit.py:1548 netbox/dcim/forms/bulk_import.py:207 +#: netbox/dcim/forms/bulk_import.py:1021 netbox/dcim/forms/filtersets.py:300 +#: netbox/dcim/forms/filtersets.py:706 netbox/dcim/forms/filtersets.py:1426 +#: netbox/dcim/forms/model_forms.py:219 netbox/dcim/forms/model_forms.py:1015 +#: netbox/dcim/forms/model_forms.py:1454 netbox/dcim/forms/object_import.py:181 +#: netbox/dcim/tables/devices.py:174 netbox/dcim/tables/devices.py:810 +#: netbox/dcim/tables/devices.py:921 netbox/dcim/tables/devicetypes.py:300 +#: netbox/dcim/tables/racks.py:69 netbox/extras/filtersets.py:504 +#: netbox/ipam/forms/bulk_edit.py:246 netbox/ipam/forms/bulk_edit.py:295 +#: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/bulk_edit.py:549 +#: netbox/ipam/forms/bulk_import.py:196 netbox/ipam/forms/bulk_import.py:261 +#: netbox/ipam/forms/bulk_import.py:297 netbox/ipam/forms/bulk_import.py:463 +#: netbox/ipam/forms/filtersets.py:237 netbox/ipam/forms/filtersets.py:289 +#: netbox/ipam/forms/filtersets.py:360 netbox/ipam/forms/filtersets.py:516 +#: netbox/ipam/forms/model_forms.py:186 netbox/ipam/forms/model_forms.py:219 +#: netbox/ipam/forms/model_forms.py:248 netbox/ipam/forms/model_forms.py:689 +#: netbox/ipam/tables/ip.py:257 netbox/ipam/tables/ip.py:313 +#: netbox/ipam/tables/ip.py:363 netbox/ipam/tables/vlans.py:126 +#: netbox/ipam/tables/vlans.py:230 netbox/templates/dcim/device.html:180 +#: netbox/templates/dcim/inc/panels/inventory_items.html:20 +#: netbox/templates/dcim/interface.html:223 +#: netbox/templates/dcim/inventoryitem.html:36 +#: netbox/templates/dcim/rack.html:47 netbox/templates/ipam/ipaddress.html:41 +#: netbox/templates/ipam/iprange.html:50 netbox/templates/ipam/prefix.html:77 +#: netbox/templates/ipam/role.html:19 netbox/templates/ipam/vlan.html:52 +#: netbox/templates/virtualization/virtualmachine.html:23 +#: netbox/templates/vpn/tunneltermination.html:17 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:20 +#: netbox/tenancy/forms/bulk_edit.py:142 netbox/tenancy/forms/filtersets.py:107 +#: netbox/tenancy/forms/model_forms.py:137 +#: netbox/tenancy/tables/contacts.py:102 +#: netbox/virtualization/forms/bulk_edit.py:145 +#: netbox/virtualization/forms/bulk_import.py:106 +#: netbox/virtualization/forms/filtersets.py:157 +#: netbox/virtualization/forms/model_forms.py:195 +#: netbox/virtualization/tables/virtualmachines.py:74 +#: netbox/vpn/forms/bulk_edit.py:87 netbox/vpn/forms/bulk_import.py:81 +#: netbox/vpn/forms/filtersets.py:85 netbox/vpn/forms/model_forms.py:78 +#: netbox/vpn/forms/model_forms.py:113 netbox/vpn/tables/tunnels.py:82 msgid "Role" msgstr "" -#: dcim/forms/bulk_edit.py:274 dcim/forms/bulk_edit.py:610 -#: dcim/forms/bulk_edit.py:662 templates/dcim/device.html:103 -#: templates/dcim/module.html:74 templates/dcim/modulebay.html:66 -#: templates/dcim/rack.html:55 +#: netbox/dcim/forms/bulk_edit.py:274 netbox/dcim/forms/bulk_edit.py:610 +#: netbox/dcim/forms/bulk_edit.py:662 netbox/templates/dcim/device.html:104 +#: netbox/templates/dcim/module.html:74 netbox/templates/dcim/modulebay.html:66 +#: netbox/templates/dcim/rack.html:55 msgid "Serial Number" msgstr "" -#: dcim/forms/bulk_edit.py:277 dcim/forms/filtersets.py:307 -#: dcim/forms/filtersets.py:742 dcim/forms/filtersets.py:886 -#: dcim/forms/filtersets.py:1438 +#: netbox/dcim/forms/bulk_edit.py:277 netbox/dcim/forms/filtersets.py:307 +#: netbox/dcim/forms/filtersets.py:742 netbox/dcim/forms/filtersets.py:886 +#: netbox/dcim/forms/filtersets.py:1438 msgid "Asset tag" msgstr "" -#: dcim/forms/bulk_edit.py:287 dcim/forms/bulk_import.py:220 -#: dcim/forms/filtersets.py:292 templates/dcim/rack.html:86 +#: netbox/dcim/forms/bulk_edit.py:287 netbox/dcim/forms/bulk_import.py:220 +#: netbox/dcim/forms/filtersets.py:292 netbox/templates/dcim/rack.html:86 msgid "Width" msgstr "" -#: dcim/forms/bulk_edit.py:293 templates/dcim/devicetype.html:37 +#: netbox/dcim/forms/bulk_edit.py:293 netbox/templates/dcim/devicetype.html:37 msgid "Height (U)" msgstr "" -#: dcim/forms/bulk_edit.py:298 +#: netbox/dcim/forms/bulk_edit.py:298 msgid "Descending units" msgstr "" -#: dcim/forms/bulk_edit.py:301 +#: netbox/dcim/forms/bulk_edit.py:301 msgid "Outer width" msgstr "" -#: dcim/forms/bulk_edit.py:306 +#: netbox/dcim/forms/bulk_edit.py:306 msgid "Outer depth" msgstr "" -#: dcim/forms/bulk_edit.py:311 dcim/forms/bulk_import.py:225 +#: netbox/dcim/forms/bulk_edit.py:311 netbox/dcim/forms/bulk_import.py:225 msgid "Outer unit" msgstr "" -#: dcim/forms/bulk_edit.py:316 +#: netbox/dcim/forms/bulk_edit.py:316 msgid "Mounting depth" msgstr "" -#: dcim/forms/bulk_edit.py:321 dcim/forms/bulk_edit.py:351 -#: dcim/forms/bulk_edit.py:436 dcim/forms/bulk_edit.py:459 -#: dcim/forms/bulk_edit.py:475 dcim/forms/bulk_edit.py:495 -#: dcim/forms/bulk_import.py:332 dcim/forms/bulk_import.py:358 -#: dcim/forms/filtersets.py:251 dcim/forms/filtersets.py:312 -#: dcim/forms/filtersets.py:336 dcim/forms/filtersets.py:423 -#: dcim/forms/filtersets.py:529 dcim/forms/filtersets.py:548 -#: dcim/forms/filtersets.py:604 dcim/forms/model_forms.py:232 -#: dcim/forms/model_forms.py:346 dcim/tables/devicetypes.py:103 -#: dcim/tables/modules.py:35 dcim/tables/racks.py:103 -#: extras/forms/bulk_edit.py:45 extras/forms/bulk_edit.py:108 -#: extras/forms/bulk_edit.py:158 extras/forms/bulk_edit.py:278 -#: extras/forms/filtersets.py:61 extras/forms/filtersets.py:134 -#: extras/forms/filtersets.py:221 ipam/forms/bulk_edit.py:188 -#: templates/dcim/device.html:316 templates/dcim/devicetype.html:49 -#: templates/dcim/moduletype.html:30 templates/extras/configcontext.html:17 -#: templates/extras/customlink.html:25 templates/extras/savedfilter.html:33 -#: templates/ipam/role.html:30 +#: netbox/dcim/forms/bulk_edit.py:321 netbox/dcim/forms/bulk_edit.py:351 +#: netbox/dcim/forms/bulk_edit.py:436 netbox/dcim/forms/bulk_edit.py:459 +#: netbox/dcim/forms/bulk_edit.py:475 netbox/dcim/forms/bulk_edit.py:495 +#: netbox/dcim/forms/bulk_import.py:332 netbox/dcim/forms/bulk_import.py:358 +#: netbox/dcim/forms/filtersets.py:251 netbox/dcim/forms/filtersets.py:312 +#: netbox/dcim/forms/filtersets.py:336 netbox/dcim/forms/filtersets.py:423 +#: netbox/dcim/forms/filtersets.py:529 netbox/dcim/forms/filtersets.py:548 +#: netbox/dcim/forms/filtersets.py:604 netbox/dcim/forms/model_forms.py:232 +#: netbox/dcim/forms/model_forms.py:346 netbox/dcim/tables/devicetypes.py:103 +#: netbox/dcim/tables/modules.py:35 netbox/dcim/tables/racks.py:103 +#: netbox/extras/forms/bulk_edit.py:45 netbox/extras/forms/bulk_edit.py:108 +#: netbox/extras/forms/bulk_edit.py:158 netbox/extras/forms/bulk_edit.py:278 +#: netbox/extras/forms/filtersets.py:61 netbox/extras/forms/filtersets.py:134 +#: netbox/extras/forms/filtersets.py:221 netbox/ipam/forms/bulk_edit.py:188 +#: netbox/templates/dcim/device.html:317 +#: netbox/templates/dcim/devicetype.html:49 +#: netbox/templates/dcim/moduletype.html:30 +#: netbox/templates/extras/configcontext.html:17 +#: netbox/templates/extras/customlink.html:25 +#: netbox/templates/extras/savedfilter.html:33 +#: netbox/templates/ipam/role.html:30 msgid "Weight" msgstr "" -#: dcim/forms/bulk_edit.py:326 dcim/forms/filtersets.py:317 +#: netbox/dcim/forms/bulk_edit.py:326 netbox/dcim/forms/filtersets.py:317 msgid "Max weight" msgstr "" -#: dcim/forms/bulk_edit.py:331 dcim/forms/bulk_edit.py:441 -#: dcim/forms/bulk_edit.py:480 dcim/forms/bulk_import.py:231 -#: dcim/forms/bulk_import.py:337 dcim/forms/bulk_import.py:363 -#: dcim/forms/filtersets.py:322 dcim/forms/filtersets.py:533 -#: dcim/forms/filtersets.py:608 +#: netbox/dcim/forms/bulk_edit.py:331 netbox/dcim/forms/bulk_edit.py:441 +#: netbox/dcim/forms/bulk_edit.py:480 netbox/dcim/forms/bulk_import.py:231 +#: netbox/dcim/forms/bulk_import.py:337 netbox/dcim/forms/bulk_import.py:363 +#: netbox/dcim/forms/filtersets.py:322 netbox/dcim/forms/filtersets.py:533 +#: netbox/dcim/forms/filtersets.py:608 msgid "Weight unit" msgstr "" -#: dcim/forms/bulk_edit.py:345 dcim/forms/bulk_edit.py:808 -#: dcim/forms/bulk_import.py:270 dcim/forms/bulk_import.py:273 -#: dcim/forms/bulk_import.py:498 dcim/forms/bulk_import.py:1309 -#: dcim/forms/bulk_import.py:1313 dcim/forms/filtersets.py:102 -#: dcim/forms/filtersets.py:340 dcim/forms/filtersets.py:354 -#: dcim/forms/filtersets.py:392 dcim/forms/filtersets.py:701 -#: dcim/forms/filtersets.py:954 dcim/forms/filtersets.py:1086 -#: dcim/forms/model_forms.py:226 dcim/forms/model_forms.py:248 -#: dcim/forms/model_forms.py:422 dcim/forms/model_forms.py:700 -#: dcim/forms/object_create.py:400 dcim/tables/devices.py:166 -#: dcim/tables/power.py:70 dcim/tables/racks.py:148 ipam/forms/bulk_edit.py:465 -#: ipam/forms/filtersets.py:442 ipam/forms/model_forms.py:610 -#: templates/dcim/device.html:29 templates/dcim/inc/cable_termination.html:16 -#: templates/dcim/powerfeed.html:28 templates/dcim/rack.html:13 -#: templates/dcim/rack/base.html:4 templates/dcim/rackreservation.html:19 -#: templates/dcim/rackreservation.html:36 -#: virtualization/forms/model_forms.py:113 +#: netbox/dcim/forms/bulk_edit.py:345 netbox/dcim/forms/bulk_edit.py:808 +#: netbox/dcim/forms/bulk_import.py:270 netbox/dcim/forms/bulk_import.py:273 +#: netbox/dcim/forms/bulk_import.py:498 netbox/dcim/forms/bulk_import.py:1309 +#: netbox/dcim/forms/bulk_import.py:1313 netbox/dcim/forms/filtersets.py:102 +#: netbox/dcim/forms/filtersets.py:340 netbox/dcim/forms/filtersets.py:354 +#: netbox/dcim/forms/filtersets.py:392 netbox/dcim/forms/filtersets.py:701 +#: netbox/dcim/forms/filtersets.py:954 netbox/dcim/forms/filtersets.py:1086 +#: netbox/dcim/forms/model_forms.py:226 netbox/dcim/forms/model_forms.py:248 +#: netbox/dcim/forms/model_forms.py:422 netbox/dcim/forms/model_forms.py:700 +#: netbox/dcim/forms/object_create.py:400 netbox/dcim/tables/devices.py:166 +#: netbox/dcim/tables/power.py:70 netbox/dcim/tables/racks.py:148 +#: netbox/ipam/forms/bulk_edit.py:465 netbox/ipam/forms/filtersets.py:442 +#: netbox/ipam/forms/model_forms.py:610 netbox/templates/dcim/device.html:30 +#: netbox/templates/dcim/inc/cable_termination.html:16 +#: netbox/templates/dcim/powerfeed.html:28 netbox/templates/dcim/rack.html:13 +#: netbox/templates/dcim/rack/base.html:4 +#: netbox/templates/dcim/rackreservation.html:19 +#: netbox/templates/dcim/rackreservation.html:36 +#: netbox/virtualization/forms/model_forms.py:113 msgid "Rack" msgstr "" -#: dcim/forms/bulk_edit.py:349 dcim/forms/bulk_edit.py:628 -#: dcim/forms/filtersets.py:248 dcim/forms/filtersets.py:333 -#: dcim/forms/filtersets.py:416 dcim/forms/filtersets.py:543 -#: dcim/forms/filtersets.py:651 dcim/forms/filtersets.py:861 -#: dcim/forms/model_forms.py:610 dcim/forms/model_forms.py:1524 -#: templates/dcim/device_edit.html:20 +#: netbox/dcim/forms/bulk_edit.py:349 netbox/dcim/forms/bulk_edit.py:628 +#: netbox/dcim/forms/filtersets.py:248 netbox/dcim/forms/filtersets.py:333 +#: netbox/dcim/forms/filtersets.py:416 netbox/dcim/forms/filtersets.py:543 +#: netbox/dcim/forms/filtersets.py:651 netbox/dcim/forms/filtersets.py:861 +#: netbox/dcim/forms/model_forms.py:610 netbox/dcim/forms/model_forms.py:1524 +#: netbox/templates/dcim/device_edit.html:20 msgid "Hardware" msgstr "" -#: dcim/forms/bulk_edit.py:402 dcim/forms/bulk_edit.py:466 -#: dcim/forms/bulk_edit.py:530 dcim/forms/bulk_edit.py:554 -#: dcim/forms/bulk_edit.py:638 dcim/forms/bulk_edit.py:1165 -#: dcim/forms/bulk_edit.py:1553 dcim/forms/bulk_import.py:319 -#: dcim/forms/bulk_import.py:353 dcim/forms/bulk_import.py:395 -#: dcim/forms/bulk_import.py:431 dcim/forms/bulk_import.py:1027 -#: dcim/forms/filtersets.py:429 dcim/forms/filtersets.py:554 -#: dcim/forms/filtersets.py:630 dcim/forms/filtersets.py:711 -#: dcim/forms/filtersets.py:866 dcim/forms/filtersets.py:1431 -#: dcim/forms/model_forms.py:281 dcim/forms/model_forms.py:293 -#: dcim/forms/model_forms.py:339 dcim/forms/model_forms.py:379 -#: dcim/forms/model_forms.py:1020 dcim/forms/model_forms.py:1459 -#: dcim/forms/object_import.py:187 dcim/tables/devices.py:101 -#: dcim/tables/devices.py:177 dcim/tables/devices.py:924 -#: dcim/tables/devicetypes.py:81 dcim/tables/devicetypes.py:304 -#: dcim/tables/modules.py:20 dcim/tables/modules.py:60 -#: templates/dcim/devicetype.html:14 templates/dcim/inventoryitem.html:44 -#: templates/dcim/manufacturer.html:33 templates/dcim/modulebay.html:58 -#: templates/dcim/moduletype.html:14 templates/dcim/platform.html:37 +#: netbox/dcim/forms/bulk_edit.py:402 netbox/dcim/forms/bulk_edit.py:466 +#: netbox/dcim/forms/bulk_edit.py:530 netbox/dcim/forms/bulk_edit.py:554 +#: netbox/dcim/forms/bulk_edit.py:638 netbox/dcim/forms/bulk_edit.py:1165 +#: netbox/dcim/forms/bulk_edit.py:1553 netbox/dcim/forms/bulk_import.py:319 +#: netbox/dcim/forms/bulk_import.py:353 netbox/dcim/forms/bulk_import.py:395 +#: netbox/dcim/forms/bulk_import.py:431 netbox/dcim/forms/bulk_import.py:1027 +#: netbox/dcim/forms/filtersets.py:429 netbox/dcim/forms/filtersets.py:554 +#: netbox/dcim/forms/filtersets.py:630 netbox/dcim/forms/filtersets.py:711 +#: netbox/dcim/forms/filtersets.py:866 netbox/dcim/forms/filtersets.py:1431 +#: netbox/dcim/forms/model_forms.py:281 netbox/dcim/forms/model_forms.py:293 +#: netbox/dcim/forms/model_forms.py:339 netbox/dcim/forms/model_forms.py:379 +#: netbox/dcim/forms/model_forms.py:1020 netbox/dcim/forms/model_forms.py:1459 +#: netbox/dcim/forms/object_import.py:187 netbox/dcim/tables/devices.py:101 +#: netbox/dcim/tables/devices.py:177 netbox/dcim/tables/devices.py:924 +#: netbox/dcim/tables/devicetypes.py:81 netbox/dcim/tables/devicetypes.py:304 +#: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:60 +#: netbox/templates/dcim/devicetype.html:14 +#: netbox/templates/dcim/inventoryitem.html:44 +#: netbox/templates/dcim/manufacturer.html:33 +#: netbox/templates/dcim/modulebay.html:58 +#: netbox/templates/dcim/moduletype.html:14 +#: netbox/templates/dcim/platform.html:37 msgid "Manufacturer" msgstr "" -#: dcim/forms/bulk_edit.py:407 dcim/forms/bulk_import.py:325 -#: dcim/forms/filtersets.py:434 dcim/forms/model_forms.py:297 +#: netbox/dcim/forms/bulk_edit.py:407 netbox/dcim/forms/bulk_import.py:325 +#: netbox/dcim/forms/filtersets.py:434 netbox/dcim/forms/model_forms.py:297 msgid "Default platform" msgstr "" -#: dcim/forms/bulk_edit.py:412 dcim/forms/bulk_edit.py:471 -#: dcim/forms/filtersets.py:437 dcim/forms/filtersets.py:557 +#: netbox/dcim/forms/bulk_edit.py:412 netbox/dcim/forms/bulk_edit.py:471 +#: netbox/dcim/forms/filtersets.py:437 netbox/dcim/forms/filtersets.py:557 msgid "Part number" msgstr "" -#: dcim/forms/bulk_edit.py:416 +#: netbox/dcim/forms/bulk_edit.py:416 msgid "U height" msgstr "" -#: dcim/forms/bulk_edit.py:428 +#: netbox/dcim/forms/bulk_edit.py:428 msgid "Exclude from utilization" msgstr "" -#: dcim/forms/bulk_edit.py:431 dcim/forms/bulk_edit.py:603 -#: dcim/forms/bulk_import.py:525 dcim/forms/filtersets.py:446 -#: dcim/forms/filtersets.py:733 templates/dcim/device.html:97 -#: templates/dcim/devicetype.html:65 +#: netbox/dcim/forms/bulk_edit.py:431 netbox/dcim/forms/bulk_edit.py:603 +#: netbox/dcim/forms/bulk_import.py:525 netbox/dcim/forms/filtersets.py:446 +#: netbox/dcim/forms/filtersets.py:733 netbox/templates/dcim/device.html:98 +#: netbox/templates/dcim/devicetype.html:65 msgid "Airflow" msgstr "" -#: dcim/forms/bulk_edit.py:457 dcim/forms/model_forms.py:312 -#: dcim/tables/devicetypes.py:78 templates/dcim/device.html:87 -#: templates/dcim/devicebay.html:52 templates/dcim/module.html:58 +#: netbox/dcim/forms/bulk_edit.py:457 netbox/dcim/forms/model_forms.py:312 +#: netbox/dcim/tables/devicetypes.py:78 netbox/templates/dcim/device.html:88 +#: netbox/templates/dcim/devicebay.html:52 netbox/templates/dcim/module.html:58 msgid "Device Type" msgstr "" -#: dcim/forms/bulk_edit.py:494 dcim/forms/model_forms.py:345 -#: dcim/tables/modules.py:17 dcim/tables/modules.py:65 -#: templates/dcim/module.html:62 templates/dcim/modulebay.html:62 -#: templates/dcim/moduletype.html:11 +#: netbox/dcim/forms/bulk_edit.py:494 netbox/dcim/forms/model_forms.py:345 +#: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:65 +#: netbox/templates/dcim/module.html:62 netbox/templates/dcim/modulebay.html:62 +#: netbox/templates/dcim/moduletype.html:11 msgid "Module Type" msgstr "" -#: dcim/forms/bulk_edit.py:508 dcim/models/devices.py:474 +#: netbox/dcim/forms/bulk_edit.py:508 netbox/dcim/models/devices.py:474 msgid "VM role" msgstr "" -#: dcim/forms/bulk_edit.py:511 dcim/forms/bulk_edit.py:535 -#: dcim/forms/bulk_edit.py:618 dcim/forms/bulk_import.py:376 -#: dcim/forms/bulk_import.py:380 dcim/forms/bulk_import.py:402 -#: dcim/forms/bulk_import.py:406 dcim/forms/bulk_import.py:531 -#: dcim/forms/bulk_import.py:535 dcim/forms/filtersets.py:619 -#: dcim/forms/filtersets.py:635 dcim/forms/filtersets.py:752 -#: dcim/forms/model_forms.py:358 dcim/forms/model_forms.py:384 -#: dcim/forms/model_forms.py:495 virtualization/forms/bulk_import.py:132 -#: virtualization/forms/bulk_import.py:133 -#: virtualization/forms/filtersets.py:184 -#: virtualization/forms/model_forms.py:215 +#: netbox/dcim/forms/bulk_edit.py:511 netbox/dcim/forms/bulk_edit.py:535 +#: netbox/dcim/forms/bulk_edit.py:618 netbox/dcim/forms/bulk_import.py:376 +#: netbox/dcim/forms/bulk_import.py:380 netbox/dcim/forms/bulk_import.py:402 +#: netbox/dcim/forms/bulk_import.py:406 netbox/dcim/forms/bulk_import.py:531 +#: netbox/dcim/forms/bulk_import.py:535 netbox/dcim/forms/filtersets.py:619 +#: netbox/dcim/forms/filtersets.py:635 netbox/dcim/forms/filtersets.py:752 +#: netbox/dcim/forms/model_forms.py:358 netbox/dcim/forms/model_forms.py:384 +#: netbox/dcim/forms/model_forms.py:495 +#: netbox/virtualization/forms/bulk_import.py:132 +#: netbox/virtualization/forms/bulk_import.py:133 +#: netbox/virtualization/forms/filtersets.py:184 +#: netbox/virtualization/forms/model_forms.py:215 msgid "Config template" msgstr "" -#: dcim/forms/bulk_edit.py:559 dcim/forms/bulk_edit.py:959 -#: dcim/forms/bulk_import.py:437 dcim/forms/filtersets.py:112 -#: dcim/forms/model_forms.py:444 dcim/forms/model_forms.py:817 -#: dcim/forms/model_forms.py:834 extras/filtersets.py:499 +#: netbox/dcim/forms/bulk_edit.py:559 netbox/dcim/forms/bulk_edit.py:959 +#: netbox/dcim/forms/bulk_import.py:437 netbox/dcim/forms/filtersets.py:112 +#: netbox/dcim/forms/model_forms.py:444 netbox/dcim/forms/model_forms.py:817 +#: netbox/dcim/forms/model_forms.py:834 netbox/extras/filtersets.py:499 msgid "Device type" msgstr "" -#: dcim/forms/bulk_edit.py:570 dcim/forms/bulk_import.py:418 -#: dcim/forms/filtersets.py:117 dcim/forms/model_forms.py:452 +#: netbox/dcim/forms/bulk_edit.py:570 netbox/dcim/forms/bulk_import.py:418 +#: netbox/dcim/forms/filtersets.py:117 netbox/dcim/forms/model_forms.py:452 msgid "Device role" msgstr "" -#: dcim/forms/bulk_edit.py:593 dcim/forms/bulk_import.py:443 -#: dcim/forms/filtersets.py:725 dcim/forms/model_forms.py:394 -#: dcim/forms/model_forms.py:456 dcim/tables/devices.py:187 -#: extras/filtersets.py:515 templates/dcim/device.html:183 -#: templates/dcim/platform.html:26 -#: templates/virtualization/virtualmachine.html:27 -#: virtualization/forms/bulk_edit.py:160 -#: virtualization/forms/bulk_import.py:122 -#: virtualization/forms/filtersets.py:168 -#: virtualization/forms/model_forms.py:203 -#: virtualization/tables/virtualmachines.py:78 +#: netbox/dcim/forms/bulk_edit.py:593 netbox/dcim/forms/bulk_import.py:443 +#: netbox/dcim/forms/filtersets.py:725 netbox/dcim/forms/model_forms.py:394 +#: netbox/dcim/forms/model_forms.py:456 netbox/dcim/tables/devices.py:187 +#: netbox/extras/filtersets.py:515 netbox/templates/dcim/device.html:184 +#: netbox/templates/dcim/platform.html:26 +#: netbox/templates/virtualization/virtualmachine.html:27 +#: netbox/virtualization/forms/bulk_edit.py:160 +#: netbox/virtualization/forms/bulk_import.py:122 +#: netbox/virtualization/forms/filtersets.py:168 +#: netbox/virtualization/forms/model_forms.py:203 +#: netbox/virtualization/tables/virtualmachines.py:78 msgid "Platform" msgstr "" -#: dcim/forms/bulk_edit.py:626 dcim/forms/bulk_edit.py:1179 -#: dcim/forms/bulk_edit.py:1543 dcim/forms/bulk_edit.py:1589 -#: dcim/forms/bulk_import.py:586 dcim/forms/bulk_import.py:648 -#: dcim/forms/bulk_import.py:674 dcim/forms/bulk_import.py:700 -#: dcim/forms/bulk_import.py:720 dcim/forms/bulk_import.py:773 -#: dcim/forms/bulk_import.py:891 dcim/forms/bulk_import.py:939 -#: dcim/forms/bulk_import.py:956 dcim/forms/bulk_import.py:968 -#: dcim/forms/bulk_import.py:1016 dcim/forms/bulk_import.py:1373 -#: dcim/forms/connections.py:24 dcim/forms/filtersets.py:129 -#: dcim/forms/filtersets.py:840 dcim/forms/filtersets.py:970 -#: dcim/forms/filtersets.py:1160 dcim/forms/filtersets.py:1182 -#: dcim/forms/filtersets.py:1204 dcim/forms/filtersets.py:1221 -#: dcim/forms/filtersets.py:1241 dcim/forms/filtersets.py:1349 -#: dcim/forms/filtersets.py:1371 dcim/forms/filtersets.py:1392 -#: dcim/forms/filtersets.py:1407 dcim/forms/filtersets.py:1421 -#: dcim/forms/filtersets.py:1484 dcim/forms/filtersets.py:1508 -#: dcim/forms/filtersets.py:1532 dcim/forms/model_forms.py:573 -#: dcim/forms/model_forms.py:794 dcim/forms/model_forms.py:1153 -#: dcim/forms/model_forms.py:1608 dcim/forms/object_create.py:257 -#: dcim/tables/connections.py:22 dcim/tables/connections.py:41 -#: dcim/tables/connections.py:60 dcim/tables/devices.py:290 -#: dcim/tables/devices.py:359 dcim/tables/devices.py:403 -#: dcim/tables/devices.py:448 dcim/tables/devices.py:502 -#: dcim/tables/devices.py:594 dcim/tables/devices.py:692 -#: dcim/tables/devices.py:752 dcim/tables/devices.py:802 -#: dcim/tables/devices.py:862 dcim/tables/devices.py:914 -#: dcim/tables/devices.py:1040 dcim/tables/modules.py:52 -#: extras/forms/filtersets.py:330 ipam/forms/bulk_import.py:303 -#: ipam/forms/bulk_import.py:489 ipam/forms/filtersets.py:558 -#: ipam/forms/model_forms.py:317 ipam/forms/model_forms.py:725 -#: ipam/forms/model_forms.py:758 ipam/forms/model_forms.py:784 -#: ipam/tables/vlans.py:176 templates/dcim/consoleport.html:20 -#: templates/dcim/consoleserverport.html:20 templates/dcim/device.html:14 -#: templates/dcim/device.html:128 templates/dcim/device_edit.html:10 -#: templates/dcim/devicebay.html:20 templates/dcim/devicebay.html:48 -#: templates/dcim/frontport.html:20 templates/dcim/interface.html:30 -#: templates/dcim/interface.html:161 templates/dcim/inventoryitem.html:20 -#: templates/dcim/module.html:54 templates/dcim/modulebay.html:20 -#: templates/dcim/poweroutlet.html:20 templates/dcim/powerport.html:20 -#: templates/dcim/rearport.html:20 templates/dcim/virtualchassis.html:65 -#: templates/dcim/virtualchassis_edit.html:51 -#: templates/dcim/virtualdevicecontext.html:22 -#: templates/virtualization/virtualmachine.html:110 -#: templates/vpn/tunneltermination.html:23 -#: templates/wireless/inc/wirelesslink_interface.html:6 -#: virtualization/filtersets.py:167 virtualization/forms/bulk_edit.py:137 -#: virtualization/forms/bulk_import.py:99 -#: virtualization/forms/filtersets.py:128 -#: virtualization/forms/model_forms.py:185 -#: virtualization/tables/virtualmachines.py:70 vpn/choices.py:44 -#: vpn/forms/bulk_import.py:86 vpn/forms/bulk_import.py:283 -#: vpn/forms/filtersets.py:275 vpn/forms/model_forms.py:90 -#: vpn/forms/model_forms.py:125 vpn/forms/model_forms.py:236 -#: vpn/forms/model_forms.py:453 wireless/forms/model_forms.py:99 -#: wireless/forms/model_forms.py:141 wireless/tables/wirelesslan.py:75 +#: netbox/dcim/forms/bulk_edit.py:626 netbox/dcim/forms/bulk_edit.py:1179 +#: netbox/dcim/forms/bulk_edit.py:1543 netbox/dcim/forms/bulk_edit.py:1589 +#: netbox/dcim/forms/bulk_import.py:586 netbox/dcim/forms/bulk_import.py:648 +#: netbox/dcim/forms/bulk_import.py:674 netbox/dcim/forms/bulk_import.py:700 +#: netbox/dcim/forms/bulk_import.py:720 netbox/dcim/forms/bulk_import.py:773 +#: netbox/dcim/forms/bulk_import.py:891 netbox/dcim/forms/bulk_import.py:939 +#: netbox/dcim/forms/bulk_import.py:956 netbox/dcim/forms/bulk_import.py:968 +#: netbox/dcim/forms/bulk_import.py:1016 netbox/dcim/forms/bulk_import.py:1373 +#: netbox/dcim/forms/connections.py:24 netbox/dcim/forms/filtersets.py:129 +#: netbox/dcim/forms/filtersets.py:840 netbox/dcim/forms/filtersets.py:970 +#: netbox/dcim/forms/filtersets.py:1160 netbox/dcim/forms/filtersets.py:1182 +#: netbox/dcim/forms/filtersets.py:1204 netbox/dcim/forms/filtersets.py:1221 +#: netbox/dcim/forms/filtersets.py:1241 netbox/dcim/forms/filtersets.py:1349 +#: netbox/dcim/forms/filtersets.py:1371 netbox/dcim/forms/filtersets.py:1392 +#: netbox/dcim/forms/filtersets.py:1407 netbox/dcim/forms/filtersets.py:1421 +#: netbox/dcim/forms/filtersets.py:1484 netbox/dcim/forms/filtersets.py:1508 +#: netbox/dcim/forms/filtersets.py:1532 netbox/dcim/forms/model_forms.py:573 +#: netbox/dcim/forms/model_forms.py:794 netbox/dcim/forms/model_forms.py:1153 +#: netbox/dcim/forms/model_forms.py:1608 netbox/dcim/forms/object_create.py:257 +#: netbox/dcim/tables/connections.py:22 netbox/dcim/tables/connections.py:41 +#: netbox/dcim/tables/connections.py:60 netbox/dcim/tables/devices.py:290 +#: netbox/dcim/tables/devices.py:359 netbox/dcim/tables/devices.py:403 +#: netbox/dcim/tables/devices.py:448 netbox/dcim/tables/devices.py:502 +#: netbox/dcim/tables/devices.py:594 netbox/dcim/tables/devices.py:692 +#: netbox/dcim/tables/devices.py:752 netbox/dcim/tables/devices.py:802 +#: netbox/dcim/tables/devices.py:862 netbox/dcim/tables/devices.py:914 +#: netbox/dcim/tables/devices.py:1040 netbox/dcim/tables/modules.py:52 +#: netbox/extras/forms/filtersets.py:330 netbox/ipam/forms/bulk_import.py:303 +#: netbox/ipam/forms/bulk_import.py:489 netbox/ipam/forms/filtersets.py:558 +#: netbox/ipam/forms/model_forms.py:317 netbox/ipam/forms/model_forms.py:725 +#: netbox/ipam/forms/model_forms.py:758 netbox/ipam/forms/model_forms.py:784 +#: netbox/ipam/tables/vlans.py:176 netbox/templates/dcim/consoleport.html:20 +#: netbox/templates/dcim/consoleserverport.html:20 +#: netbox/templates/dcim/device.html:15 netbox/templates/dcim/device.html:129 +#: netbox/templates/dcim/device_edit.html:10 +#: netbox/templates/dcim/devicebay.html:20 +#: netbox/templates/dcim/devicebay.html:48 +#: netbox/templates/dcim/frontport.html:20 +#: netbox/templates/dcim/interface.html:30 +#: netbox/templates/dcim/interface.html:161 +#: netbox/templates/dcim/inventoryitem.html:20 +#: netbox/templates/dcim/module.html:54 netbox/templates/dcim/modulebay.html:20 +#: netbox/templates/dcim/poweroutlet.html:20 +#: netbox/templates/dcim/powerport.html:20 +#: netbox/templates/dcim/rearport.html:20 +#: netbox/templates/dcim/virtualchassis.html:65 +#: netbox/templates/dcim/virtualchassis_edit.html:51 +#: netbox/templates/dcim/virtualdevicecontext.html:22 +#: netbox/templates/virtualization/virtualmachine.html:110 +#: netbox/templates/vpn/tunneltermination.html:23 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:6 +#: netbox/virtualization/filtersets.py:167 +#: netbox/virtualization/forms/bulk_edit.py:137 +#: netbox/virtualization/forms/bulk_import.py:99 +#: netbox/virtualization/forms/filtersets.py:128 +#: netbox/virtualization/forms/model_forms.py:185 +#: netbox/virtualization/tables/virtualmachines.py:70 netbox/vpn/choices.py:44 +#: netbox/vpn/forms/bulk_import.py:86 netbox/vpn/forms/bulk_import.py:283 +#: netbox/vpn/forms/filtersets.py:275 netbox/vpn/forms/model_forms.py:90 +#: netbox/vpn/forms/model_forms.py:125 netbox/vpn/forms/model_forms.py:236 +#: netbox/vpn/forms/model_forms.py:453 netbox/wireless/forms/model_forms.py:99 +#: netbox/wireless/forms/model_forms.py:141 +#: netbox/wireless/tables/wirelesslan.py:75 msgid "Device" msgstr "" -#: dcim/forms/bulk_edit.py:629 templates/extras/dashboard/widget_config.html:7 -#: virtualization/forms/bulk_edit.py:191 +#: netbox/dcim/forms/bulk_edit.py:629 +#: netbox/templates/extras/dashboard/widget_config.html:7 +#: netbox/virtualization/forms/bulk_edit.py:191 msgid "Configuration" msgstr "" -#: dcim/forms/bulk_edit.py:643 dcim/forms/bulk_import.py:598 -#: dcim/forms/model_forms.py:587 dcim/forms/model_forms.py:842 +#: netbox/dcim/forms/bulk_edit.py:643 netbox/dcim/forms/bulk_import.py:598 +#: netbox/dcim/forms/model_forms.py:587 netbox/dcim/forms/model_forms.py:842 msgid "Module type" msgstr "" -#: dcim/forms/bulk_edit.py:697 dcim/forms/bulk_edit.py:882 -#: dcim/forms/bulk_edit.py:901 dcim/forms/bulk_edit.py:924 -#: dcim/forms/bulk_edit.py:966 dcim/forms/bulk_edit.py:1010 -#: dcim/forms/bulk_edit.py:1061 dcim/forms/bulk_edit.py:1088 -#: dcim/forms/bulk_edit.py:1115 dcim/forms/bulk_edit.py:1133 -#: dcim/forms/bulk_edit.py:1151 dcim/forms/filtersets.py:65 -#: dcim/forms/object_create.py:46 templates/dcim/cable.html:32 -#: templates/dcim/consoleport.html:32 templates/dcim/consoleserverport.html:32 -#: templates/dcim/devicebay.html:28 templates/dcim/frontport.html:32 -#: templates/dcim/inc/panels/inventory_items.html:19 -#: templates/dcim/interface.html:42 templates/dcim/inventoryitem.html:32 -#: templates/dcim/modulebay.html:30 templates/dcim/poweroutlet.html:32 -#: templates/dcim/powerport.html:32 templates/dcim/rearport.html:32 -#: templates/extras/customfield.html:26 templates/generic/bulk_import.html:162 +#: netbox/dcim/forms/bulk_edit.py:697 netbox/dcim/forms/bulk_edit.py:882 +#: netbox/dcim/forms/bulk_edit.py:901 netbox/dcim/forms/bulk_edit.py:924 +#: netbox/dcim/forms/bulk_edit.py:966 netbox/dcim/forms/bulk_edit.py:1010 +#: netbox/dcim/forms/bulk_edit.py:1061 netbox/dcim/forms/bulk_edit.py:1088 +#: netbox/dcim/forms/bulk_edit.py:1115 netbox/dcim/forms/bulk_edit.py:1133 +#: netbox/dcim/forms/bulk_edit.py:1151 netbox/dcim/forms/filtersets.py:65 +#: netbox/dcim/forms/object_create.py:46 netbox/templates/dcim/cable.html:32 +#: netbox/templates/dcim/consoleport.html:32 +#: netbox/templates/dcim/consoleserverport.html:32 +#: netbox/templates/dcim/devicebay.html:28 +#: netbox/templates/dcim/frontport.html:32 +#: netbox/templates/dcim/inc/panels/inventory_items.html:19 +#: netbox/templates/dcim/interface.html:42 +#: netbox/templates/dcim/inventoryitem.html:32 +#: netbox/templates/dcim/modulebay.html:30 +#: netbox/templates/dcim/poweroutlet.html:32 +#: netbox/templates/dcim/powerport.html:32 +#: netbox/templates/dcim/rearport.html:32 +#: netbox/templates/extras/customfield.html:26 +#: netbox/templates/generic/bulk_import.html:162 msgid "Label" msgstr "" -#: dcim/forms/bulk_edit.py:706 dcim/forms/filtersets.py:987 -#: templates/dcim/cable.html:50 +#: netbox/dcim/forms/bulk_edit.py:706 netbox/dcim/forms/filtersets.py:987 +#: netbox/templates/dcim/cable.html:50 msgid "Length" msgstr "" -#: dcim/forms/bulk_edit.py:711 dcim/forms/bulk_import.py:1174 -#: dcim/forms/bulk_import.py:1177 dcim/forms/filtersets.py:991 +#: netbox/dcim/forms/bulk_edit.py:711 netbox/dcim/forms/bulk_import.py:1174 +#: netbox/dcim/forms/bulk_import.py:1177 netbox/dcim/forms/filtersets.py:991 msgid "Length unit" msgstr "" -#: dcim/forms/bulk_edit.py:735 templates/dcim/virtualchassis.html:23 +#: netbox/dcim/forms/bulk_edit.py:735 +#: netbox/templates/dcim/virtualchassis.html:23 msgid "Domain" msgstr "" -#: dcim/forms/bulk_edit.py:803 dcim/forms/bulk_import.py:1296 -#: dcim/forms/filtersets.py:1077 dcim/forms/model_forms.py:695 +#: netbox/dcim/forms/bulk_edit.py:803 netbox/dcim/forms/bulk_import.py:1296 +#: netbox/dcim/forms/filtersets.py:1077 netbox/dcim/forms/model_forms.py:695 msgid "Power panel" msgstr "" -#: dcim/forms/bulk_edit.py:825 dcim/forms/bulk_import.py:1332 -#: dcim/forms/filtersets.py:1099 templates/dcim/powerfeed.html:83 +#: netbox/dcim/forms/bulk_edit.py:825 netbox/dcim/forms/bulk_import.py:1332 +#: netbox/dcim/forms/filtersets.py:1099 netbox/templates/dcim/powerfeed.html:83 msgid "Supply" msgstr "" -#: dcim/forms/bulk_edit.py:831 dcim/forms/bulk_import.py:1337 -#: dcim/forms/filtersets.py:1104 templates/dcim/powerfeed.html:95 +#: netbox/dcim/forms/bulk_edit.py:831 netbox/dcim/forms/bulk_import.py:1337 +#: netbox/dcim/forms/filtersets.py:1104 netbox/templates/dcim/powerfeed.html:95 msgid "Phase" msgstr "" -#: dcim/forms/bulk_edit.py:837 dcim/forms/filtersets.py:1109 -#: templates/dcim/powerfeed.html:87 +#: netbox/dcim/forms/bulk_edit.py:837 netbox/dcim/forms/filtersets.py:1109 +#: netbox/templates/dcim/powerfeed.html:87 msgid "Voltage" msgstr "" -#: dcim/forms/bulk_edit.py:841 dcim/forms/filtersets.py:1113 -#: templates/dcim/powerfeed.html:91 +#: netbox/dcim/forms/bulk_edit.py:841 netbox/dcim/forms/filtersets.py:1113 +#: netbox/templates/dcim/powerfeed.html:91 msgid "Amperage" msgstr "" -#: dcim/forms/bulk_edit.py:845 dcim/forms/filtersets.py:1117 +#: netbox/dcim/forms/bulk_edit.py:845 netbox/dcim/forms/filtersets.py:1117 msgid "Max utilization" msgstr "" -#: dcim/forms/bulk_edit.py:934 +#: netbox/dcim/forms/bulk_edit.py:934 msgid "Maximum draw" msgstr "" -#: dcim/forms/bulk_edit.py:937 dcim/models/device_component_templates.py:256 -#: dcim/models/device_components.py:357 +#: netbox/dcim/forms/bulk_edit.py:937 +#: netbox/dcim/models/device_component_templates.py:256 +#: netbox/dcim/models/device_components.py:357 msgid "Maximum power draw (watts)" msgstr "" -#: dcim/forms/bulk_edit.py:940 +#: netbox/dcim/forms/bulk_edit.py:940 msgid "Allocated draw" msgstr "" -#: dcim/forms/bulk_edit.py:943 dcim/models/device_component_templates.py:263 -#: dcim/models/device_components.py:364 +#: netbox/dcim/forms/bulk_edit.py:943 +#: netbox/dcim/models/device_component_templates.py:263 +#: netbox/dcim/models/device_components.py:364 msgid "Allocated power draw (watts)" msgstr "" -#: dcim/forms/bulk_edit.py:976 dcim/forms/bulk_import.py:731 -#: dcim/forms/model_forms.py:898 dcim/forms/model_forms.py:1223 -#: dcim/forms/model_forms.py:1511 dcim/forms/object_import.py:55 +#: netbox/dcim/forms/bulk_edit.py:976 netbox/dcim/forms/bulk_import.py:731 +#: netbox/dcim/forms/model_forms.py:898 netbox/dcim/forms/model_forms.py:1223 +#: netbox/dcim/forms/model_forms.py:1511 netbox/dcim/forms/object_import.py:55 msgid "Power port" msgstr "" -#: dcim/forms/bulk_edit.py:981 dcim/forms/bulk_import.py:738 +#: netbox/dcim/forms/bulk_edit.py:981 netbox/dcim/forms/bulk_import.py:738 msgid "Feed leg" msgstr "" -#: dcim/forms/bulk_edit.py:1027 dcim/forms/bulk_edit.py:1333 +#: netbox/dcim/forms/bulk_edit.py:1027 netbox/dcim/forms/bulk_edit.py:1333 msgid "Management only" msgstr "" -#: dcim/forms/bulk_edit.py:1037 dcim/forms/bulk_edit.py:1339 -#: dcim/forms/bulk_import.py:821 dcim/forms/filtersets.py:1300 -#: dcim/forms/object_import.py:90 dcim/models/device_component_templates.py:411 -#: dcim/models/device_components.py:671 +#: netbox/dcim/forms/bulk_edit.py:1037 netbox/dcim/forms/bulk_edit.py:1339 +#: netbox/dcim/forms/bulk_import.py:821 netbox/dcim/forms/filtersets.py:1300 +#: netbox/dcim/forms/object_import.py:90 +#: netbox/dcim/models/device_component_templates.py:411 +#: netbox/dcim/models/device_components.py:671 msgid "PoE mode" msgstr "" -#: dcim/forms/bulk_edit.py:1043 dcim/forms/bulk_edit.py:1345 -#: dcim/forms/bulk_import.py:827 dcim/forms/filtersets.py:1305 -#: dcim/forms/object_import.py:95 dcim/models/device_component_templates.py:417 -#: dcim/models/device_components.py:677 +#: netbox/dcim/forms/bulk_edit.py:1043 netbox/dcim/forms/bulk_edit.py:1345 +#: netbox/dcim/forms/bulk_import.py:827 netbox/dcim/forms/filtersets.py:1305 +#: netbox/dcim/forms/object_import.py:95 +#: netbox/dcim/models/device_component_templates.py:417 +#: netbox/dcim/models/device_components.py:677 msgid "PoE type" msgstr "" -#: dcim/forms/bulk_edit.py:1049 dcim/forms/filtersets.py:1310 -#: dcim/forms/object_import.py:100 +#: netbox/dcim/forms/bulk_edit.py:1049 netbox/dcim/forms/filtersets.py:1310 +#: netbox/dcim/forms/object_import.py:100 msgid "Wireless role" msgstr "" -#: dcim/forms/bulk_edit.py:1186 dcim/forms/model_forms.py:609 -#: dcim/forms/model_forms.py:1168 dcim/tables/devices.py:313 -#: templates/dcim/consoleport.html:24 templates/dcim/consoleserverport.html:24 -#: templates/dcim/frontport.html:24 templates/dcim/interface.html:34 -#: templates/dcim/module.html:51 templates/dcim/modulebay.html:54 -#: templates/dcim/poweroutlet.html:24 templates/dcim/powerport.html:24 -#: templates/dcim/rearport.html:24 +#: netbox/dcim/forms/bulk_edit.py:1186 netbox/dcim/forms/model_forms.py:609 +#: netbox/dcim/forms/model_forms.py:1168 netbox/dcim/tables/devices.py:313 +#: netbox/templates/dcim/consoleport.html:24 +#: netbox/templates/dcim/consoleserverport.html:24 +#: netbox/templates/dcim/frontport.html:24 +#: netbox/templates/dcim/interface.html:34 netbox/templates/dcim/module.html:51 +#: netbox/templates/dcim/modulebay.html:54 +#: netbox/templates/dcim/poweroutlet.html:24 +#: netbox/templates/dcim/powerport.html:24 +#: netbox/templates/dcim/rearport.html:24 msgid "Module" msgstr "" -#: dcim/forms/bulk_edit.py:1313 dcim/tables/devices.py:661 -#: templates/dcim/interface.html:110 +#: netbox/dcim/forms/bulk_edit.py:1313 netbox/dcim/tables/devices.py:661 +#: netbox/templates/dcim/interface.html:110 msgid "LAG" msgstr "" -#: dcim/forms/bulk_edit.py:1318 dcim/forms/model_forms.py:1250 +#: netbox/dcim/forms/bulk_edit.py:1318 netbox/dcim/forms/model_forms.py:1250 msgid "Virtual device contexts" msgstr "" -#: dcim/forms/bulk_edit.py:1324 dcim/forms/bulk_import.py:659 -#: dcim/forms/bulk_import.py:685 dcim/forms/filtersets.py:1169 -#: dcim/forms/filtersets.py:1191 dcim/forms/filtersets.py:1264 -#: dcim/tables/devices.py:606 -#: templates/circuits/inc/circuit_termination_fields.html:67 -#: templates/dcim/consoleport.html:40 templates/dcim/consoleserverport.html:40 +#: netbox/dcim/forms/bulk_edit.py:1324 netbox/dcim/forms/bulk_import.py:659 +#: netbox/dcim/forms/bulk_import.py:685 netbox/dcim/forms/filtersets.py:1169 +#: netbox/dcim/forms/filtersets.py:1191 netbox/dcim/forms/filtersets.py:1264 +#: netbox/dcim/tables/devices.py:606 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:67 +#: netbox/templates/dcim/consoleport.html:40 +#: netbox/templates/dcim/consoleserverport.html:40 msgid "Speed" msgstr "" -#: dcim/forms/bulk_edit.py:1353 dcim/forms/bulk_import.py:830 -#: templates/vpn/ikepolicy.html:25 templates/vpn/ipsecprofile.html:21 -#: templates/vpn/ipsecprofile.html:48 virtualization/forms/bulk_edit.py:233 -#: virtualization/forms/bulk_import.py:165 vpn/forms/bulk_edit.py:146 -#: vpn/forms/bulk_edit.py:232 vpn/forms/bulk_import.py:176 -#: vpn/forms/bulk_import.py:234 vpn/forms/filtersets.py:135 -#: vpn/forms/filtersets.py:178 vpn/forms/filtersets.py:192 -#: vpn/tables/crypto.py:64 vpn/tables/crypto.py:162 +#: netbox/dcim/forms/bulk_edit.py:1353 netbox/dcim/forms/bulk_import.py:830 +#: netbox/templates/vpn/ikepolicy.html:25 +#: netbox/templates/vpn/ipsecprofile.html:21 +#: netbox/templates/vpn/ipsecprofile.html:48 +#: netbox/virtualization/forms/bulk_edit.py:233 +#: netbox/virtualization/forms/bulk_import.py:165 +#: netbox/vpn/forms/bulk_edit.py:146 netbox/vpn/forms/bulk_edit.py:232 +#: netbox/vpn/forms/bulk_import.py:176 netbox/vpn/forms/bulk_import.py:234 +#: netbox/vpn/forms/filtersets.py:135 netbox/vpn/forms/filtersets.py:178 +#: netbox/vpn/forms/filtersets.py:192 netbox/vpn/tables/crypto.py:64 +#: netbox/vpn/tables/crypto.py:162 msgid "Mode" msgstr "" -#: dcim/forms/bulk_edit.py:1361 dcim/forms/model_forms.py:1299 -#: ipam/forms/bulk_import.py:177 ipam/forms/filtersets.py:505 -#: ipam/models/vlans.py:84 virtualization/forms/bulk_edit.py:240 -#: virtualization/forms/model_forms.py:321 +#: netbox/dcim/forms/bulk_edit.py:1361 netbox/dcim/forms/model_forms.py:1299 +#: netbox/ipam/forms/bulk_import.py:177 netbox/ipam/forms/filtersets.py:505 +#: netbox/ipam/models/vlans.py:84 netbox/virtualization/forms/bulk_edit.py:240 +#: netbox/virtualization/forms/model_forms.py:321 msgid "VLAN group" msgstr "" -#: dcim/forms/bulk_edit.py:1369 dcim/forms/model_forms.py:1304 -#: dcim/tables/devices.py:579 virtualization/forms/bulk_edit.py:248 -#: virtualization/forms/model_forms.py:326 +#: netbox/dcim/forms/bulk_edit.py:1369 netbox/dcim/forms/model_forms.py:1304 +#: netbox/dcim/tables/devices.py:579 +#: netbox/virtualization/forms/bulk_edit.py:248 +#: netbox/virtualization/forms/model_forms.py:326 msgid "Untagged VLAN" msgstr "" -#: dcim/forms/bulk_edit.py:1377 dcim/forms/model_forms.py:1313 -#: dcim/tables/devices.py:585 virtualization/forms/bulk_edit.py:256 -#: virtualization/forms/model_forms.py:335 +#: netbox/dcim/forms/bulk_edit.py:1377 netbox/dcim/forms/model_forms.py:1313 +#: netbox/dcim/tables/devices.py:585 +#: netbox/virtualization/forms/bulk_edit.py:256 +#: netbox/virtualization/forms/model_forms.py:335 msgid "Tagged VLANs" msgstr "" -#: dcim/forms/bulk_edit.py:1387 dcim/forms/model_forms.py:1286 +#: netbox/dcim/forms/bulk_edit.py:1387 netbox/dcim/forms/model_forms.py:1286 msgid "Wireless LAN group" msgstr "" -#: dcim/forms/bulk_edit.py:1392 dcim/forms/model_forms.py:1291 -#: dcim/tables/devices.py:615 netbox/navigation/menu.py:133 -#: templates/dcim/interface.html:280 wireless/tables/wirelesslan.py:24 +#: netbox/dcim/forms/bulk_edit.py:1392 netbox/dcim/forms/model_forms.py:1291 +#: netbox/dcim/tables/devices.py:615 netbox/netbox/navigation/menu.py:133 +#: netbox/templates/dcim/interface.html:280 +#: netbox/wireless/tables/wirelesslan.py:24 msgid "Wireless LANs" msgstr "" -#: dcim/forms/bulk_edit.py:1401 dcim/forms/filtersets.py:1237 -#: dcim/forms/model_forms.py:1334 ipam/forms/bulk_edit.py:271 -#: ipam/forms/bulk_edit.py:362 ipam/forms/filtersets.py:169 -#: templates/dcim/interface.html:122 templates/ipam/prefix.html:95 -#: virtualization/forms/model_forms.py:349 +#: netbox/dcim/forms/bulk_edit.py:1401 netbox/dcim/forms/filtersets.py:1237 +#: netbox/dcim/forms/model_forms.py:1334 netbox/ipam/forms/bulk_edit.py:271 +#: netbox/ipam/forms/bulk_edit.py:362 netbox/ipam/forms/filtersets.py:169 +#: netbox/templates/dcim/interface.html:122 +#: netbox/templates/ipam/prefix.html:95 +#: netbox/virtualization/forms/model_forms.py:349 msgid "Addressing" msgstr "" -#: dcim/forms/bulk_edit.py:1402 dcim/forms/filtersets.py:650 -#: dcim/forms/model_forms.py:1335 virtualization/forms/model_forms.py:350 +#: netbox/dcim/forms/bulk_edit.py:1402 netbox/dcim/forms/filtersets.py:650 +#: netbox/dcim/forms/model_forms.py:1335 +#: netbox/virtualization/forms/model_forms.py:350 msgid "Operation" msgstr "" -#: dcim/forms/bulk_edit.py:1403 dcim/forms/filtersets.py:1238 -#: dcim/forms/model_forms.py:932 dcim/forms/model_forms.py:1337 +#: netbox/dcim/forms/bulk_edit.py:1403 netbox/dcim/forms/filtersets.py:1238 +#: netbox/dcim/forms/model_forms.py:932 netbox/dcim/forms/model_forms.py:1337 msgid "PoE" msgstr "" -#: dcim/forms/bulk_edit.py:1404 dcim/forms/model_forms.py:1336 -#: templates/dcim/interface.html:99 virtualization/forms/bulk_edit.py:267 -#: virtualization/forms/model_forms.py:351 +#: netbox/dcim/forms/bulk_edit.py:1404 netbox/dcim/forms/model_forms.py:1336 +#: netbox/templates/dcim/interface.html:99 +#: netbox/virtualization/forms/bulk_edit.py:267 +#: netbox/virtualization/forms/model_forms.py:351 msgid "Related Interfaces" msgstr "" -#: dcim/forms/bulk_edit.py:1405 dcim/forms/model_forms.py:1338 -#: virtualization/forms/bulk_edit.py:268 -#: virtualization/forms/model_forms.py:352 +#: netbox/dcim/forms/bulk_edit.py:1405 netbox/dcim/forms/model_forms.py:1338 +#: netbox/virtualization/forms/bulk_edit.py:268 +#: netbox/virtualization/forms/model_forms.py:352 msgid "802.1Q Switching" msgstr "" -#: dcim/forms/bulk_edit.py:1467 dcim/forms/bulk_edit.py:1469 +#: netbox/dcim/forms/bulk_edit.py:1467 netbox/dcim/forms/bulk_edit.py:1469 msgid "Interface mode must be specified to assign VLANs" msgstr "" -#: dcim/forms/bulk_edit.py:1474 dcim/forms/common.py:50 +#: netbox/dcim/forms/bulk_edit.py:1474 netbox/dcim/forms/common.py:50 msgid "An access interface cannot have tagged VLANs assigned." msgstr "" -#: dcim/forms/bulk_import.py:63 +#: netbox/dcim/forms/bulk_import.py:63 msgid "Name of parent region" msgstr "" -#: dcim/forms/bulk_import.py:77 +#: netbox/dcim/forms/bulk_import.py:77 msgid "Name of parent site group" msgstr "" -#: dcim/forms/bulk_import.py:96 +#: netbox/dcim/forms/bulk_import.py:96 msgid "Assigned region" msgstr "" -#: dcim/forms/bulk_import.py:103 tenancy/forms/bulk_import.py:44 -#: tenancy/forms/bulk_import.py:85 wireless/forms/bulk_import.py:40 +#: netbox/dcim/forms/bulk_import.py:103 netbox/tenancy/forms/bulk_import.py:44 +#: netbox/tenancy/forms/bulk_import.py:85 +#: netbox/wireless/forms/bulk_import.py:40 msgid "Assigned group" msgstr "" -#: dcim/forms/bulk_import.py:122 +#: netbox/dcim/forms/bulk_import.py:122 msgid "available options" msgstr "" -#: dcim/forms/bulk_import.py:133 dcim/forms/bulk_import.py:488 -#: dcim/forms/bulk_import.py:1293 ipam/forms/bulk_import.py:174 -#: ipam/forms/bulk_import.py:441 virtualization/forms/bulk_import.py:63 -#: virtualization/forms/bulk_import.py:89 +#: netbox/dcim/forms/bulk_import.py:133 netbox/dcim/forms/bulk_import.py:488 +#: netbox/dcim/forms/bulk_import.py:1293 netbox/ipam/forms/bulk_import.py:174 +#: netbox/ipam/forms/bulk_import.py:441 +#: netbox/virtualization/forms/bulk_import.py:63 +#: netbox/virtualization/forms/bulk_import.py:89 msgid "Assigned site" msgstr "" -#: dcim/forms/bulk_import.py:140 +#: netbox/dcim/forms/bulk_import.py:140 msgid "Parent location" msgstr "" -#: dcim/forms/bulk_import.py:142 +#: netbox/dcim/forms/bulk_import.py:142 msgid "Location not found." msgstr "" -#: dcim/forms/bulk_import.py:199 +#: netbox/dcim/forms/bulk_import.py:199 msgid "Name of assigned tenant" msgstr "" -#: dcim/forms/bulk_import.py:211 +#: netbox/dcim/forms/bulk_import.py:211 msgid "Name of assigned role" msgstr "" -#: dcim/forms/bulk_import.py:217 +#: netbox/dcim/forms/bulk_import.py:217 msgid "Rack type" msgstr "" -#: dcim/forms/bulk_import.py:222 +#: netbox/dcim/forms/bulk_import.py:222 msgid "Rail-to-rail width (in inches)" msgstr "" -#: dcim/forms/bulk_import.py:228 +#: netbox/dcim/forms/bulk_import.py:228 msgid "Unit for outer dimensions" msgstr "" -#: dcim/forms/bulk_import.py:234 +#: netbox/dcim/forms/bulk_import.py:234 msgid "Unit for rack weights" msgstr "" -#: dcim/forms/bulk_import.py:260 +#: netbox/dcim/forms/bulk_import.py:260 msgid "Parent site" msgstr "" -#: dcim/forms/bulk_import.py:267 dcim/forms/bulk_import.py:1306 +#: netbox/dcim/forms/bulk_import.py:267 netbox/dcim/forms/bulk_import.py:1306 msgid "Rack's location (if any)" msgstr "" -#: dcim/forms/bulk_import.py:276 dcim/forms/model_forms.py:253 -#: dcim/tables/racks.py:153 templates/dcim/rackreservation.html:12 -#: templates/dcim/rackreservation.html:45 +#: netbox/dcim/forms/bulk_import.py:276 netbox/dcim/forms/model_forms.py:253 +#: netbox/dcim/tables/racks.py:153 +#: netbox/templates/dcim/rackreservation.html:12 +#: netbox/templates/dcim/rackreservation.html:45 msgid "Units" msgstr "" -#: dcim/forms/bulk_import.py:279 +#: netbox/dcim/forms/bulk_import.py:279 msgid "Comma-separated list of individual unit numbers" msgstr "" -#: dcim/forms/bulk_import.py:322 +#: netbox/dcim/forms/bulk_import.py:322 msgid "The manufacturer which produces this device type" msgstr "" -#: dcim/forms/bulk_import.py:329 +#: netbox/dcim/forms/bulk_import.py:329 msgid "The default platform for devices of this type (optional)" msgstr "" -#: dcim/forms/bulk_import.py:334 +#: netbox/dcim/forms/bulk_import.py:334 msgid "Device weight" msgstr "" -#: dcim/forms/bulk_import.py:340 +#: netbox/dcim/forms/bulk_import.py:340 msgid "Unit for device weight" msgstr "" -#: dcim/forms/bulk_import.py:360 +#: netbox/dcim/forms/bulk_import.py:360 msgid "Module weight" msgstr "" -#: dcim/forms/bulk_import.py:366 +#: netbox/dcim/forms/bulk_import.py:366 msgid "Unit for module weight" msgstr "" -#: dcim/forms/bulk_import.py:399 +#: netbox/dcim/forms/bulk_import.py:399 msgid "Limit platform assignments to this manufacturer" msgstr "" -#: dcim/forms/bulk_import.py:421 dcim/forms/bulk_import.py:1376 -#: tenancy/forms/bulk_import.py:106 +#: netbox/dcim/forms/bulk_import.py:421 netbox/dcim/forms/bulk_import.py:1376 +#: netbox/tenancy/forms/bulk_import.py:106 msgid "Assigned role" msgstr "" -#: dcim/forms/bulk_import.py:434 +#: netbox/dcim/forms/bulk_import.py:434 msgid "Device type manufacturer" msgstr "" -#: dcim/forms/bulk_import.py:440 +#: netbox/dcim/forms/bulk_import.py:440 msgid "Device type model" msgstr "" -#: dcim/forms/bulk_import.py:447 virtualization/forms/bulk_import.py:126 +#: netbox/dcim/forms/bulk_import.py:447 +#: netbox/virtualization/forms/bulk_import.py:126 msgid "Assigned platform" msgstr "" -#: dcim/forms/bulk_import.py:455 dcim/forms/bulk_import.py:459 -#: dcim/forms/model_forms.py:476 +#: netbox/dcim/forms/bulk_import.py:455 netbox/dcim/forms/bulk_import.py:459 +#: netbox/dcim/forms/model_forms.py:476 msgid "Virtual chassis" msgstr "" -#: dcim/forms/bulk_import.py:462 dcim/forms/model_forms.py:465 -#: dcim/tables/devices.py:207 extras/filtersets.py:548 -#: extras/forms/filtersets.py:331 ipam/forms/bulk_edit.py:479 -#: ipam/forms/filtersets.py:415 ipam/forms/filtersets.py:459 -#: ipam/forms/model_forms.py:627 templates/dcim/device.html:231 -#: templates/virtualization/cluster.html:10 -#: templates/virtualization/virtualmachine.html:88 -#: templates/virtualization/virtualmachine.html:97 -#: virtualization/filtersets.py:157 virtualization/filtersets.py:273 -#: virtualization/forms/bulk_edit.py:129 virtualization/forms/bulk_import.py:92 -#: virtualization/forms/filtersets.py:99 virtualization/forms/filtersets.py:123 -#: virtualization/forms/filtersets.py:200 -#: virtualization/forms/model_forms.py:79 -#: virtualization/forms/model_forms.py:176 -#: virtualization/tables/virtualmachines.py:66 +#: netbox/dcim/forms/bulk_import.py:462 netbox/dcim/forms/model_forms.py:465 +#: netbox/dcim/tables/devices.py:207 netbox/extras/filtersets.py:548 +#: netbox/extras/forms/filtersets.py:331 netbox/ipam/forms/bulk_edit.py:479 +#: netbox/ipam/forms/filtersets.py:415 netbox/ipam/forms/filtersets.py:459 +#: netbox/ipam/forms/model_forms.py:627 netbox/templates/dcim/device.html:232 +#: netbox/templates/virtualization/cluster.html:10 +#: netbox/templates/virtualization/virtualmachine.html:88 +#: netbox/templates/virtualization/virtualmachine.html:97 +#: netbox/virtualization/filtersets.py:157 +#: netbox/virtualization/filtersets.py:273 +#: netbox/virtualization/forms/bulk_edit.py:129 +#: netbox/virtualization/forms/bulk_import.py:92 +#: netbox/virtualization/forms/filtersets.py:99 +#: netbox/virtualization/forms/filtersets.py:123 +#: netbox/virtualization/forms/filtersets.py:200 +#: netbox/virtualization/forms/model_forms.py:79 +#: netbox/virtualization/forms/model_forms.py:176 +#: netbox/virtualization/tables/virtualmachines.py:66 msgid "Cluster" msgstr "" -#: dcim/forms/bulk_import.py:466 +#: netbox/dcim/forms/bulk_import.py:466 msgid "Virtualization cluster" msgstr "" -#: dcim/forms/bulk_import.py:495 +#: netbox/dcim/forms/bulk_import.py:495 msgid "Assigned location (if any)" msgstr "" -#: dcim/forms/bulk_import.py:502 +#: netbox/dcim/forms/bulk_import.py:502 msgid "Assigned rack (if any)" msgstr "" -#: dcim/forms/bulk_import.py:505 +#: netbox/dcim/forms/bulk_import.py:505 msgid "Face" msgstr "" -#: dcim/forms/bulk_import.py:508 +#: netbox/dcim/forms/bulk_import.py:508 msgid "Mounted rack face" msgstr "" -#: dcim/forms/bulk_import.py:515 +#: netbox/dcim/forms/bulk_import.py:515 msgid "Parent device (for child devices)" msgstr "" -#: dcim/forms/bulk_import.py:518 +#: netbox/dcim/forms/bulk_import.py:518 msgid "Device bay" msgstr "" -#: dcim/forms/bulk_import.py:522 +#: netbox/dcim/forms/bulk_import.py:522 msgid "Device bay in which this device is installed (for child devices)" msgstr "" -#: dcim/forms/bulk_import.py:528 +#: netbox/dcim/forms/bulk_import.py:528 msgid "Airflow direction" msgstr "" -#: dcim/forms/bulk_import.py:589 +#: netbox/dcim/forms/bulk_import.py:589 msgid "The device in which this module is installed" msgstr "" -#: dcim/forms/bulk_import.py:592 dcim/forms/model_forms.py:580 +#: netbox/dcim/forms/bulk_import.py:592 netbox/dcim/forms/model_forms.py:580 msgid "Module bay" msgstr "" -#: dcim/forms/bulk_import.py:595 +#: netbox/dcim/forms/bulk_import.py:595 msgid "The module bay in which this module is installed" msgstr "" -#: dcim/forms/bulk_import.py:601 +#: netbox/dcim/forms/bulk_import.py:601 msgid "The type of module" msgstr "" -#: dcim/forms/bulk_import.py:609 dcim/forms/model_forms.py:596 +#: netbox/dcim/forms/bulk_import.py:609 netbox/dcim/forms/model_forms.py:596 msgid "Replicate components" msgstr "" -#: dcim/forms/bulk_import.py:611 +#: netbox/dcim/forms/bulk_import.py:611 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" msgstr "" -#: dcim/forms/bulk_import.py:614 dcim/forms/model_forms.py:602 +#: netbox/dcim/forms/bulk_import.py:614 netbox/dcim/forms/model_forms.py:602 msgid "Adopt components" msgstr "" -#: dcim/forms/bulk_import.py:616 dcim/forms/model_forms.py:605 +#: netbox/dcim/forms/bulk_import.py:616 netbox/dcim/forms/model_forms.py:605 msgid "Adopt already existing components" msgstr "" -#: dcim/forms/bulk_import.py:656 dcim/forms/bulk_import.py:682 -#: dcim/forms/bulk_import.py:708 +#: netbox/dcim/forms/bulk_import.py:656 netbox/dcim/forms/bulk_import.py:682 +#: netbox/dcim/forms/bulk_import.py:708 msgid "Port type" msgstr "" -#: dcim/forms/bulk_import.py:664 dcim/forms/bulk_import.py:690 +#: netbox/dcim/forms/bulk_import.py:664 netbox/dcim/forms/bulk_import.py:690 msgid "Port speed in bps" msgstr "" -#: dcim/forms/bulk_import.py:728 +#: netbox/dcim/forms/bulk_import.py:728 msgid "Outlet type" msgstr "" -#: dcim/forms/bulk_import.py:735 +#: netbox/dcim/forms/bulk_import.py:735 msgid "Local power port which feeds this outlet" msgstr "" -#: dcim/forms/bulk_import.py:741 +#: netbox/dcim/forms/bulk_import.py:741 msgid "Electrical phase (for three-phase circuits)" msgstr "" -#: dcim/forms/bulk_import.py:782 dcim/forms/model_forms.py:1261 -#: virtualization/forms/bulk_import.py:155 -#: virtualization/forms/model_forms.py:305 +#: netbox/dcim/forms/bulk_import.py:782 netbox/dcim/forms/model_forms.py:1261 +#: netbox/virtualization/forms/bulk_import.py:155 +#: netbox/virtualization/forms/model_forms.py:305 msgid "Parent interface" msgstr "" -#: dcim/forms/bulk_import.py:789 dcim/forms/model_forms.py:1269 -#: virtualization/forms/bulk_import.py:162 -#: virtualization/forms/model_forms.py:313 +#: netbox/dcim/forms/bulk_import.py:789 netbox/dcim/forms/model_forms.py:1269 +#: netbox/virtualization/forms/bulk_import.py:162 +#: netbox/virtualization/forms/model_forms.py:313 msgid "Bridged interface" msgstr "" -#: dcim/forms/bulk_import.py:792 +#: netbox/dcim/forms/bulk_import.py:792 msgid "Lag" msgstr "" -#: dcim/forms/bulk_import.py:796 +#: netbox/dcim/forms/bulk_import.py:796 msgid "Parent LAG interface" msgstr "" -#: dcim/forms/bulk_import.py:799 +#: netbox/dcim/forms/bulk_import.py:799 msgid "Vdcs" msgstr "" -#: dcim/forms/bulk_import.py:804 +#: netbox/dcim/forms/bulk_import.py:804 msgid "VDC names separated by commas, encased with double quotes. Example:" msgstr "" -#: dcim/forms/bulk_import.py:810 +#: netbox/dcim/forms/bulk_import.py:810 msgid "Physical medium" msgstr "" -#: dcim/forms/bulk_import.py:813 dcim/forms/filtersets.py:1271 +#: netbox/dcim/forms/bulk_import.py:813 netbox/dcim/forms/filtersets.py:1271 msgid "Duplex" msgstr "" -#: dcim/forms/bulk_import.py:818 +#: netbox/dcim/forms/bulk_import.py:818 msgid "Poe mode" msgstr "" -#: dcim/forms/bulk_import.py:824 +#: netbox/dcim/forms/bulk_import.py:824 msgid "Poe type" msgstr "" -#: dcim/forms/bulk_import.py:833 virtualization/forms/bulk_import.py:168 +#: netbox/dcim/forms/bulk_import.py:833 +#: netbox/virtualization/forms/bulk_import.py:168 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "" -#: dcim/forms/bulk_import.py:840 ipam/forms/bulk_import.py:160 -#: ipam/forms/bulk_import.py:246 ipam/forms/bulk_import.py:282 -#: ipam/forms/filtersets.py:201 ipam/forms/filtersets.py:277 -#: ipam/forms/filtersets.py:336 virtualization/forms/bulk_import.py:175 +#: netbox/dcim/forms/bulk_import.py:840 netbox/ipam/forms/bulk_import.py:160 +#: netbox/ipam/forms/bulk_import.py:246 netbox/ipam/forms/bulk_import.py:282 +#: netbox/ipam/forms/filtersets.py:201 netbox/ipam/forms/filtersets.py:277 +#: netbox/ipam/forms/filtersets.py:336 +#: netbox/virtualization/forms/bulk_import.py:175 msgid "Assigned VRF" msgstr "" -#: dcim/forms/bulk_import.py:843 +#: netbox/dcim/forms/bulk_import.py:843 msgid "Rf role" msgstr "" -#: dcim/forms/bulk_import.py:846 +#: netbox/dcim/forms/bulk_import.py:846 msgid "Wireless role (AP/station)" msgstr "" -#: dcim/forms/bulk_import.py:882 +#: netbox/dcim/forms/bulk_import.py:882 #, python-brace-format msgid "VDC {vdc} is not assigned to device {device}" msgstr "" -#: dcim/forms/bulk_import.py:896 dcim/forms/model_forms.py:945 -#: dcim/forms/model_forms.py:1519 dcim/forms/object_import.py:117 +#: netbox/dcim/forms/bulk_import.py:896 netbox/dcim/forms/model_forms.py:945 +#: netbox/dcim/forms/model_forms.py:1519 netbox/dcim/forms/object_import.py:117 msgid "Rear port" msgstr "" -#: dcim/forms/bulk_import.py:899 +#: netbox/dcim/forms/bulk_import.py:899 msgid "Corresponding rear port" msgstr "" -#: dcim/forms/bulk_import.py:904 dcim/forms/bulk_import.py:945 -#: dcim/forms/bulk_import.py:1164 +#: netbox/dcim/forms/bulk_import.py:904 netbox/dcim/forms/bulk_import.py:945 +#: netbox/dcim/forms/bulk_import.py:1164 msgid "Physical medium classification" msgstr "" -#: dcim/forms/bulk_import.py:973 dcim/tables/devices.py:823 +#: netbox/dcim/forms/bulk_import.py:973 netbox/dcim/tables/devices.py:823 msgid "Installed device" msgstr "" -#: dcim/forms/bulk_import.py:977 +#: netbox/dcim/forms/bulk_import.py:977 msgid "Child device installed within this bay" msgstr "" -#: dcim/forms/bulk_import.py:979 +#: netbox/dcim/forms/bulk_import.py:979 msgid "Child device not found." msgstr "" -#: dcim/forms/bulk_import.py:1037 +#: netbox/dcim/forms/bulk_import.py:1037 msgid "Parent inventory item" msgstr "" -#: dcim/forms/bulk_import.py:1040 +#: netbox/dcim/forms/bulk_import.py:1040 msgid "Component type" msgstr "" -#: dcim/forms/bulk_import.py:1044 +#: netbox/dcim/forms/bulk_import.py:1044 msgid "Component Type" msgstr "" -#: dcim/forms/bulk_import.py:1047 +#: netbox/dcim/forms/bulk_import.py:1047 msgid "Compnent name" msgstr "" -#: dcim/forms/bulk_import.py:1049 +#: netbox/dcim/forms/bulk_import.py:1049 msgid "Component Name" msgstr "" -#: dcim/forms/bulk_import.py:1091 +#: netbox/dcim/forms/bulk_import.py:1091 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "" -#: dcim/forms/bulk_import.py:1119 +#: netbox/dcim/forms/bulk_import.py:1119 msgid "Side A device" msgstr "" -#: dcim/forms/bulk_import.py:1122 dcim/forms/bulk_import.py:1140 +#: netbox/dcim/forms/bulk_import.py:1122 netbox/dcim/forms/bulk_import.py:1140 msgid "Device name" msgstr "" -#: dcim/forms/bulk_import.py:1125 +#: netbox/dcim/forms/bulk_import.py:1125 msgid "Side A type" msgstr "" -#: dcim/forms/bulk_import.py:1128 dcim/forms/bulk_import.py:1146 +#: netbox/dcim/forms/bulk_import.py:1128 netbox/dcim/forms/bulk_import.py:1146 msgid "Termination type" msgstr "" -#: dcim/forms/bulk_import.py:1131 +#: netbox/dcim/forms/bulk_import.py:1131 msgid "Side A name" msgstr "" -#: dcim/forms/bulk_import.py:1132 dcim/forms/bulk_import.py:1150 +#: netbox/dcim/forms/bulk_import.py:1132 netbox/dcim/forms/bulk_import.py:1150 msgid "Termination name" msgstr "" -#: dcim/forms/bulk_import.py:1137 +#: netbox/dcim/forms/bulk_import.py:1137 msgid "Side B device" msgstr "" -#: dcim/forms/bulk_import.py:1143 +#: netbox/dcim/forms/bulk_import.py:1143 msgid "Side B type" msgstr "" -#: dcim/forms/bulk_import.py:1149 +#: netbox/dcim/forms/bulk_import.py:1149 msgid "Side B name" msgstr "" -#: dcim/forms/bulk_import.py:1158 wireless/forms/bulk_import.py:86 +#: netbox/dcim/forms/bulk_import.py:1158 +#: netbox/wireless/forms/bulk_import.py:86 msgid "Connection status" msgstr "" -#: dcim/forms/bulk_import.py:1213 +#: netbox/dcim/forms/bulk_import.py:1213 #, python-brace-format msgid "Side {side_upper}: {device} {termination_object} is already connected" msgstr "" -#: dcim/forms/bulk_import.py:1219 +#: netbox/dcim/forms/bulk_import.py:1219 #, python-brace-format msgid "{side_upper} side termination not found: {device} {name}" msgstr "" -#: dcim/forms/bulk_import.py:1244 dcim/forms/model_forms.py:730 -#: dcim/tables/devices.py:1010 templates/dcim/device.html:130 -#: templates/dcim/virtualchassis.html:27 templates/dcim/virtualchassis.html:67 +#: netbox/dcim/forms/bulk_import.py:1244 netbox/dcim/forms/model_forms.py:730 +#: netbox/dcim/tables/devices.py:1010 netbox/templates/dcim/device.html:131 +#: netbox/templates/dcim/virtualchassis.html:27 +#: netbox/templates/dcim/virtualchassis.html:67 msgid "Master" msgstr "" -#: dcim/forms/bulk_import.py:1248 +#: netbox/dcim/forms/bulk_import.py:1248 msgid "Master device" msgstr "" -#: dcim/forms/bulk_import.py:1265 +#: netbox/dcim/forms/bulk_import.py:1265 msgid "Name of parent site" msgstr "" -#: dcim/forms/bulk_import.py:1299 +#: netbox/dcim/forms/bulk_import.py:1299 msgid "Upstream power panel" msgstr "" -#: dcim/forms/bulk_import.py:1329 +#: netbox/dcim/forms/bulk_import.py:1329 msgid "Primary or redundant" msgstr "" -#: dcim/forms/bulk_import.py:1334 +#: netbox/dcim/forms/bulk_import.py:1334 msgid "Supply type (AC/DC)" msgstr "" -#: dcim/forms/bulk_import.py:1339 +#: netbox/dcim/forms/bulk_import.py:1339 msgid "Single or three-phase" msgstr "" -#: dcim/forms/common.py:24 dcim/models/device_components.py:528 -#: templates/dcim/interface.html:57 -#: templates/virtualization/vminterface.html:55 -#: virtualization/forms/bulk_edit.py:225 +#: netbox/dcim/forms/common.py:24 netbox/dcim/models/device_components.py:528 +#: netbox/templates/dcim/interface.html:57 +#: netbox/templates/virtualization/vminterface.html:55 +#: netbox/virtualization/forms/bulk_edit.py:225 msgid "MTU" msgstr "" -#: dcim/forms/common.py:65 +#: netbox/dcim/forms/common.py:65 #, python-brace-format msgid "" "The tagged VLANs ({vlans}) must belong to the same site as the interface's " "parent device/VM, or they must be global" msgstr "" -#: dcim/forms/common.py:110 +#: netbox/dcim/forms/common.py:110 msgid "" "Cannot install module with placeholder values in a module bay with no " "position defined." msgstr "" -#: dcim/forms/common.py:119 +#: netbox/dcim/forms/common.py:119 #, python-brace-format msgid "Cannot adopt {model} {name} as it already belongs to a module" msgstr "" -#: dcim/forms/common.py:128 +#: netbox/dcim/forms/common.py:128 #, python-brace-format msgid "A {model} named {name} already exists" msgstr "" -#: dcim/forms/connections.py:48 dcim/forms/model_forms.py:683 -#: dcim/tables/power.py:66 templates/dcim/inc/cable_termination.html:37 -#: templates/dcim/powerfeed.html:24 templates/dcim/powerpanel.html:19 -#: templates/dcim/trace/powerpanel.html:4 +#: netbox/dcim/forms/connections.py:48 netbox/dcim/forms/model_forms.py:683 +#: netbox/dcim/tables/power.py:66 +#: netbox/templates/dcim/inc/cable_termination.html:37 +#: netbox/templates/dcim/powerfeed.html:24 +#: netbox/templates/dcim/powerpanel.html:19 +#: netbox/templates/dcim/trace/powerpanel.html:4 msgid "Power Panel" msgstr "" -#: dcim/forms/connections.py:57 dcim/forms/model_forms.py:710 -#: templates/dcim/powerfeed.html:21 templates/dcim/powerport.html:80 +#: netbox/dcim/forms/connections.py:57 netbox/dcim/forms/model_forms.py:710 +#: netbox/templates/dcim/powerfeed.html:21 +#: netbox/templates/dcim/powerport.html:80 msgid "Power Feed" msgstr "" -#: dcim/forms/connections.py:79 +#: netbox/dcim/forms/connections.py:79 msgid "Side" msgstr "" -#: dcim/forms/filtersets.py:142 +#: netbox/dcim/forms/filtersets.py:142 msgid "Parent region" msgstr "" -#: dcim/forms/filtersets.py:156 tenancy/forms/bulk_import.py:28 -#: tenancy/forms/bulk_import.py:62 tenancy/forms/filtersets.py:33 -#: tenancy/forms/filtersets.py:62 wireless/forms/bulk_import.py:25 -#: wireless/forms/filtersets.py:25 +#: netbox/dcim/forms/filtersets.py:156 netbox/tenancy/forms/bulk_import.py:28 +#: netbox/tenancy/forms/bulk_import.py:62 netbox/tenancy/forms/filtersets.py:33 +#: netbox/tenancy/forms/filtersets.py:62 +#: netbox/wireless/forms/bulk_import.py:25 +#: netbox/wireless/forms/filtersets.py:25 msgid "Parent group" msgstr "" -#: dcim/forms/filtersets.py:247 dcim/forms/filtersets.py:332 +#: netbox/dcim/forms/filtersets.py:247 netbox/dcim/forms/filtersets.py:332 msgid "Function" msgstr "" -#: dcim/forms/filtersets.py:418 dcim/forms/model_forms.py:317 -#: templates/inc/panels/image_attachments.html:6 +#: netbox/dcim/forms/filtersets.py:418 netbox/dcim/forms/model_forms.py:317 +#: netbox/templates/inc/panels/image_attachments.html:6 msgid "Images" msgstr "" -#: dcim/forms/filtersets.py:421 dcim/forms/filtersets.py:546 -#: dcim/forms/filtersets.py:656 +#: netbox/dcim/forms/filtersets.py:421 netbox/dcim/forms/filtersets.py:546 +#: netbox/dcim/forms/filtersets.py:656 msgid "Components" msgstr "" -#: dcim/forms/filtersets.py:441 +#: netbox/dcim/forms/filtersets.py:441 msgid "Subdevice role" msgstr "" -#: dcim/forms/filtersets.py:719 +#: netbox/dcim/forms/filtersets.py:719 msgid "Model" msgstr "" -#: dcim/forms/filtersets.py:763 +#: netbox/dcim/forms/filtersets.py:763 msgid "Has an OOB IP" msgstr "" -#: dcim/forms/filtersets.py:770 +#: netbox/dcim/forms/filtersets.py:770 msgid "Virtual chassis member" msgstr "" -#: dcim/forms/filtersets.py:819 +#: netbox/dcim/forms/filtersets.py:819 msgid "Has virtual device contexts" msgstr "" -#: dcim/forms/filtersets.py:1129 +#: netbox/dcim/forms/filtersets.py:1129 msgid "Cabled" msgstr "" -#: dcim/forms/filtersets.py:1136 +#: netbox/dcim/forms/filtersets.py:1136 msgid "Occupied" msgstr "" -#: dcim/forms/filtersets.py:1161 dcim/forms/filtersets.py:1183 -#: dcim/forms/filtersets.py:1205 dcim/forms/filtersets.py:1222 -#: dcim/forms/filtersets.py:1242 dcim/tables/devices.py:352 -#: templates/dcim/consoleport.html:55 templates/dcim/consoleserverport.html:55 -#: templates/dcim/frontport.html:69 templates/dcim/interface.html:140 -#: templates/dcim/powerfeed.html:110 templates/dcim/poweroutlet.html:59 -#: templates/dcim/powerport.html:59 templates/dcim/rearport.html:65 +#: netbox/dcim/forms/filtersets.py:1161 netbox/dcim/forms/filtersets.py:1183 +#: netbox/dcim/forms/filtersets.py:1205 netbox/dcim/forms/filtersets.py:1222 +#: netbox/dcim/forms/filtersets.py:1242 netbox/dcim/tables/devices.py:352 +#: netbox/templates/dcim/consoleport.html:55 +#: netbox/templates/dcim/consoleserverport.html:55 +#: netbox/templates/dcim/frontport.html:69 +#: netbox/templates/dcim/interface.html:140 +#: netbox/templates/dcim/powerfeed.html:110 +#: netbox/templates/dcim/poweroutlet.html:59 +#: netbox/templates/dcim/powerport.html:59 +#: netbox/templates/dcim/rearport.html:65 msgid "Connection" msgstr "" -#: dcim/forms/filtersets.py:1254 extras/forms/bulk_edit.py:316 -#: extras/forms/bulk_import.py:242 extras/forms/filtersets.py:476 -#: extras/forms/model_forms.py:551 extras/tables/tables.py:512 -#: templates/extras/journalentry.html:30 +#: netbox/dcim/forms/filtersets.py:1254 netbox/extras/forms/bulk_edit.py:316 +#: netbox/extras/forms/bulk_import.py:242 netbox/extras/forms/filtersets.py:476 +#: netbox/extras/forms/model_forms.py:551 netbox/extras/tables/tables.py:512 +#: netbox/templates/extras/journalentry.html:30 msgid "Kind" msgstr "" -#: dcim/forms/filtersets.py:1283 +#: netbox/dcim/forms/filtersets.py:1283 msgid "Mgmt only" msgstr "" -#: dcim/forms/filtersets.py:1295 dcim/forms/model_forms.py:1327 -#: dcim/models/device_components.py:630 templates/dcim/interface.html:129 +#: netbox/dcim/forms/filtersets.py:1295 netbox/dcim/forms/model_forms.py:1327 +#: netbox/dcim/models/device_components.py:630 +#: netbox/templates/dcim/interface.html:129 msgid "WWN" msgstr "" -#: dcim/forms/filtersets.py:1315 +#: netbox/dcim/forms/filtersets.py:1315 msgid "Wireless channel" msgstr "" -#: dcim/forms/filtersets.py:1319 +#: netbox/dcim/forms/filtersets.py:1319 msgid "Channel frequency (MHz)" msgstr "" -#: dcim/forms/filtersets.py:1323 +#: netbox/dcim/forms/filtersets.py:1323 msgid "Channel width (MHz)" msgstr "" -#: dcim/forms/filtersets.py:1327 templates/dcim/interface.html:85 +#: netbox/dcim/forms/filtersets.py:1327 netbox/templates/dcim/interface.html:85 msgid "Transmit power (dBm)" msgstr "" -#: dcim/forms/filtersets.py:1350 dcim/forms/filtersets.py:1372 -#: dcim/tables/devices.py:324 templates/dcim/cable.html:12 -#: templates/dcim/cable_trace.html:46 templates/dcim/frontport.html:77 -#: templates/dcim/htmx/cable_edit.html:50 -#: templates/dcim/inc/connection_endpoints.html:4 -#: templates/dcim/rearport.html:73 templates/dcim/trace/cable.html:7 +#: netbox/dcim/forms/filtersets.py:1350 netbox/dcim/forms/filtersets.py:1372 +#: netbox/dcim/tables/devices.py:324 netbox/templates/dcim/cable.html:12 +#: netbox/templates/dcim/cable_trace.html:46 +#: netbox/templates/dcim/frontport.html:77 +#: netbox/templates/dcim/htmx/cable_edit.html:50 +#: netbox/templates/dcim/inc/connection_endpoints.html:4 +#: netbox/templates/dcim/rearport.html:73 +#: netbox/templates/dcim/trace/cable.html:7 msgid "Cable" msgstr "" -#: dcim/forms/filtersets.py:1442 dcim/tables/devices.py:933 +#: netbox/dcim/forms/filtersets.py:1442 netbox/dcim/tables/devices.py:933 msgid "Discovered" msgstr "" -#: dcim/forms/formsets.py:20 +#: netbox/dcim/forms/formsets.py:20 #, python-brace-format msgid "A virtual chassis member already exists in position {vc_position}." msgstr "" -#: dcim/forms/model_forms.py:139 +#: netbox/dcim/forms/model_forms.py:139 msgid "Contact Info" msgstr "" -#: dcim/forms/model_forms.py:194 templates/dcim/rackrole.html:19 +#: netbox/dcim/forms/model_forms.py:194 netbox/templates/dcim/rackrole.html:19 msgid "Rack Role" msgstr "" -#: dcim/forms/model_forms.py:227 +#: netbox/dcim/forms/model_forms.py:227 msgid "Inventory Control" msgstr "" -#: dcim/forms/model_forms.py:231 +#: netbox/dcim/forms/model_forms.py:231 msgid "Outer Dimensions" msgstr "" -#: dcim/forms/model_forms.py:233 templates/dcim/device.html:307 -#: templates/dcim/rack.html:73 +#: netbox/dcim/forms/model_forms.py:233 netbox/templates/dcim/device.html:308 +#: netbox/templates/dcim/rack.html:73 msgid "Dimensions" msgstr "" -#: dcim/forms/model_forms.py:255 +#: netbox/dcim/forms/model_forms.py:255 msgid "" "Comma-separated list of numeric unit IDs. A range may be specified using a " "hyphen." msgstr "" -#: dcim/forms/model_forms.py:266 dcim/tables/racks.py:133 +#: netbox/dcim/forms/model_forms.py:266 netbox/dcim/tables/racks.py:133 msgid "Reservation" msgstr "" -#: dcim/forms/model_forms.py:306 dcim/forms/model_forms.py:389 -#: utilities/forms/fields/fields.py:47 +#: netbox/dcim/forms/model_forms.py:306 netbox/dcim/forms/model_forms.py:389 +#: netbox/utilities/forms/fields/fields.py:47 msgid "Slug" msgstr "" -#: dcim/forms/model_forms.py:315 templates/dcim/devicetype.html:11 +#: netbox/dcim/forms/model_forms.py:315 +#: netbox/templates/dcim/devicetype.html:11 msgid "Chassis" msgstr "" -#: dcim/forms/model_forms.py:366 templates/dcim/devicerole.html:23 +#: netbox/dcim/forms/model_forms.py:366 +#: netbox/templates/dcim/devicerole.html:23 msgid "Device Role" msgstr "" -#: dcim/forms/model_forms.py:433 dcim/models/devices.py:634 +#: netbox/dcim/forms/model_forms.py:433 netbox/dcim/models/devices.py:634 msgid "The lowest-numbered unit occupied by the device" msgstr "" -#: dcim/forms/model_forms.py:487 +#: netbox/dcim/forms/model_forms.py:487 msgid "The position in the virtual chassis this device is identified by" msgstr "" -#: dcim/forms/model_forms.py:491 templates/dcim/device.html:131 -#: templates/dcim/virtualchassis.html:68 -#: templates/dcim/virtualchassis_edit.html:56 -#: templates/ipam/inc/panels/fhrp_groups.html:26 tenancy/forms/bulk_edit.py:147 -#: tenancy/forms/filtersets.py:110 +#: netbox/dcim/forms/model_forms.py:491 netbox/templates/dcim/device.html:132 +#: netbox/templates/dcim/virtualchassis.html:68 +#: netbox/templates/dcim/virtualchassis_edit.html:56 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:26 +#: netbox/tenancy/forms/bulk_edit.py:147 netbox/tenancy/forms/filtersets.py:110 msgid "Priority" msgstr "" -#: dcim/forms/model_forms.py:492 +#: netbox/dcim/forms/model_forms.py:492 msgid "The priority of the device in the virtual chassis" msgstr "" -#: dcim/forms/model_forms.py:599 +#: netbox/dcim/forms/model_forms.py:599 msgid "Automatically populate components associated with this module type" msgstr "" -#: dcim/forms/model_forms.py:661 +#: netbox/dcim/forms/model_forms.py:661 msgid "Maximum length is 32767 (any unit)" msgstr "" -#: dcim/forms/model_forms.py:712 +#: netbox/dcim/forms/model_forms.py:712 msgid "Characteristics" msgstr "" -#: dcim/forms/model_forms.py:1032 +#: netbox/dcim/forms/model_forms.py:1032 msgid "Console port template" msgstr "" -#: dcim/forms/model_forms.py:1040 +#: netbox/dcim/forms/model_forms.py:1040 msgid "Console server port template" msgstr "" -#: dcim/forms/model_forms.py:1048 +#: netbox/dcim/forms/model_forms.py:1048 msgid "Front port template" msgstr "" -#: dcim/forms/model_forms.py:1056 +#: netbox/dcim/forms/model_forms.py:1056 msgid "Interface template" msgstr "" -#: dcim/forms/model_forms.py:1064 +#: netbox/dcim/forms/model_forms.py:1064 msgid "Power outlet template" msgstr "" -#: dcim/forms/model_forms.py:1072 +#: netbox/dcim/forms/model_forms.py:1072 msgid "Power port template" msgstr "" -#: dcim/forms/model_forms.py:1080 +#: netbox/dcim/forms/model_forms.py:1080 msgid "Rear port template" msgstr "" -#: dcim/forms/model_forms.py:1089 dcim/forms/model_forms.py:1332 -#: dcim/forms/model_forms.py:1495 dcim/forms/model_forms.py:1527 -#: dcim/tables/connections.py:65 ipam/forms/bulk_import.py:317 -#: ipam/forms/model_forms.py:278 ipam/forms/model_forms.py:287 -#: ipam/tables/fhrp.py:64 ipam/tables/ip.py:368 ipam/tables/vlans.py:165 -#: templates/circuits/inc/circuit_termination_fields.html:51 -#: templates/dcim/frontport.html:106 templates/dcim/interface.html:27 -#: templates/dcim/interface.html:184 templates/dcim/interface.html:310 -#: templates/dcim/rearport.html:102 -#: templates/virtualization/vminterface.html:18 -#: templates/vpn/tunneltermination.html:31 -#: templates/wireless/inc/wirelesslink_interface.html:10 -#: templates/wireless/wirelesslink.html:10 -#: templates/wireless/wirelesslink.html:45 -#: virtualization/forms/model_forms.py:348 vpn/forms/bulk_import.py:297 -#: vpn/forms/model_forms.py:436 vpn/forms/model_forms.py:445 -#: wireless/forms/model_forms.py:113 wireless/forms/model_forms.py:155 +#: netbox/dcim/forms/model_forms.py:1089 netbox/dcim/forms/model_forms.py:1332 +#: netbox/dcim/forms/model_forms.py:1495 netbox/dcim/forms/model_forms.py:1527 +#: netbox/dcim/tables/connections.py:65 netbox/ipam/forms/bulk_import.py:317 +#: netbox/ipam/forms/model_forms.py:278 netbox/ipam/forms/model_forms.py:287 +#: netbox/ipam/tables/fhrp.py:64 netbox/ipam/tables/ip.py:368 +#: netbox/ipam/tables/vlans.py:165 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:51 +#: netbox/templates/dcim/frontport.html:106 +#: netbox/templates/dcim/interface.html:27 +#: netbox/templates/dcim/interface.html:184 +#: netbox/templates/dcim/interface.html:310 +#: netbox/templates/dcim/rearport.html:102 +#: netbox/templates/virtualization/vminterface.html:18 +#: netbox/templates/vpn/tunneltermination.html:31 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:10 +#: netbox/templates/wireless/wirelesslink.html:10 +#: netbox/templates/wireless/wirelesslink.html:45 +#: netbox/virtualization/forms/model_forms.py:348 +#: netbox/vpn/forms/bulk_import.py:297 netbox/vpn/forms/model_forms.py:436 +#: netbox/vpn/forms/model_forms.py:445 netbox/wireless/forms/model_forms.py:113 +#: netbox/wireless/forms/model_forms.py:155 msgid "Interface" msgstr "" -#: dcim/forms/model_forms.py:1090 dcim/forms/model_forms.py:1528 -#: dcim/tables/connections.py:27 templates/dcim/consoleport.html:17 -#: templates/dcim/consoleserverport.html:74 templates/dcim/frontport.html:112 +#: netbox/dcim/forms/model_forms.py:1090 netbox/dcim/forms/model_forms.py:1528 +#: netbox/dcim/tables/connections.py:27 +#: netbox/templates/dcim/consoleport.html:17 +#: netbox/templates/dcim/consoleserverport.html:74 +#: netbox/templates/dcim/frontport.html:112 msgid "Console Port" msgstr "" -#: dcim/forms/model_forms.py:1091 dcim/forms/model_forms.py:1529 -#: templates/dcim/consoleport.html:73 templates/dcim/consoleserverport.html:17 -#: templates/dcim/frontport.html:109 +#: netbox/dcim/forms/model_forms.py:1091 netbox/dcim/forms/model_forms.py:1529 +#: netbox/templates/dcim/consoleport.html:73 +#: netbox/templates/dcim/consoleserverport.html:17 +#: netbox/templates/dcim/frontport.html:109 msgid "Console Server Port" msgstr "" -#: dcim/forms/model_forms.py:1092 dcim/forms/model_forms.py:1530 -#: templates/circuits/inc/circuit_termination_fields.html:52 -#: templates/dcim/consoleport.html:76 templates/dcim/consoleserverport.html:77 -#: templates/dcim/frontport.html:17 templates/dcim/frontport.html:115 -#: templates/dcim/interface.html:187 templates/dcim/rearport.html:105 +#: netbox/dcim/forms/model_forms.py:1092 netbox/dcim/forms/model_forms.py:1530 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/templates/dcim/consoleport.html:76 +#: netbox/templates/dcim/consoleserverport.html:77 +#: netbox/templates/dcim/frontport.html:17 +#: netbox/templates/dcim/frontport.html:115 +#: netbox/templates/dcim/interface.html:187 +#: netbox/templates/dcim/rearport.html:105 msgid "Front Port" msgstr "" -#: dcim/forms/model_forms.py:1093 dcim/forms/model_forms.py:1531 -#: dcim/tables/devices.py:705 -#: templates/circuits/inc/circuit_termination_fields.html:53 -#: templates/dcim/consoleport.html:79 templates/dcim/consoleserverport.html:80 -#: templates/dcim/frontport.html:50 templates/dcim/frontport.html:118 -#: templates/dcim/interface.html:190 templates/dcim/rearport.html:17 -#: templates/dcim/rearport.html:108 +#: netbox/dcim/forms/model_forms.py:1093 netbox/dcim/forms/model_forms.py:1531 +#: netbox/dcim/tables/devices.py:705 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 +#: netbox/templates/dcim/consoleport.html:79 +#: netbox/templates/dcim/consoleserverport.html:80 +#: netbox/templates/dcim/frontport.html:50 +#: netbox/templates/dcim/frontport.html:118 +#: netbox/templates/dcim/interface.html:190 +#: netbox/templates/dcim/rearport.html:17 +#: netbox/templates/dcim/rearport.html:108 msgid "Rear Port" msgstr "" -#: dcim/forms/model_forms.py:1094 dcim/forms/model_forms.py:1532 -#: dcim/tables/connections.py:46 dcim/tables/devices.py:509 -#: templates/dcim/poweroutlet.html:44 templates/dcim/powerport.html:17 +#: netbox/dcim/forms/model_forms.py:1094 netbox/dcim/forms/model_forms.py:1532 +#: netbox/dcim/tables/connections.py:46 netbox/dcim/tables/devices.py:509 +#: netbox/templates/dcim/poweroutlet.html:44 +#: netbox/templates/dcim/powerport.html:17 msgid "Power Port" msgstr "" -#: dcim/forms/model_forms.py:1095 dcim/forms/model_forms.py:1533 -#: templates/dcim/poweroutlet.html:17 templates/dcim/powerport.html:77 +#: netbox/dcim/forms/model_forms.py:1095 netbox/dcim/forms/model_forms.py:1533 +#: netbox/templates/dcim/poweroutlet.html:17 +#: netbox/templates/dcim/powerport.html:77 msgid "Power Outlet" msgstr "" -#: dcim/forms/model_forms.py:1097 dcim/forms/model_forms.py:1535 +#: netbox/dcim/forms/model_forms.py:1097 netbox/dcim/forms/model_forms.py:1535 msgid "Component Assignment" msgstr "" -#: dcim/forms/model_forms.py:1140 dcim/forms/model_forms.py:1582 +#: netbox/dcim/forms/model_forms.py:1140 netbox/dcim/forms/model_forms.py:1582 msgid "An InventoryItem can only be assigned to a single component." msgstr "" -#: dcim/forms/model_forms.py:1277 +#: netbox/dcim/forms/model_forms.py:1277 msgid "LAG interface" msgstr "" -#: dcim/forms/model_forms.py:1428 +#: netbox/dcim/forms/model_forms.py:1428 msgid "Child Device" msgstr "" -#: dcim/forms/model_forms.py:1429 +#: netbox/dcim/forms/model_forms.py:1429 msgid "" "Child devices must first be created and assigned to the site and rack of the " "parent device." msgstr "" -#: dcim/forms/model_forms.py:1471 +#: netbox/dcim/forms/model_forms.py:1471 msgid "Console port" msgstr "" -#: dcim/forms/model_forms.py:1479 +#: netbox/dcim/forms/model_forms.py:1479 msgid "Console server port" msgstr "" -#: dcim/forms/model_forms.py:1487 +#: netbox/dcim/forms/model_forms.py:1487 msgid "Front port" msgstr "" -#: dcim/forms/model_forms.py:1503 +#: netbox/dcim/forms/model_forms.py:1503 msgid "Power outlet" msgstr "" -#: dcim/forms/model_forms.py:1523 templates/dcim/inventoryitem.html:17 +#: netbox/dcim/forms/model_forms.py:1523 +#: netbox/templates/dcim/inventoryitem.html:17 msgid "Inventory Item" msgstr "" -#: dcim/forms/model_forms.py:1596 templates/dcim/inventoryitemrole.html:15 +#: netbox/dcim/forms/model_forms.py:1596 +#: netbox/templates/dcim/inventoryitemrole.html:15 msgid "Inventory Item Role" msgstr "" -#: dcim/forms/model_forms.py:1614 templates/dcim/device.html:187 -#: templates/dcim/virtualdevicecontext.html:30 -#: templates/virtualization/virtualmachine.html:48 +#: netbox/dcim/forms/model_forms.py:1614 netbox/templates/dcim/device.html:188 +#: netbox/templates/dcim/virtualdevicecontext.html:30 +#: netbox/templates/virtualization/virtualmachine.html:48 msgid "Primary IPv4" msgstr "" -#: dcim/forms/model_forms.py:1623 templates/dcim/device.html:203 -#: templates/dcim/virtualdevicecontext.html:41 -#: templates/virtualization/virtualmachine.html:64 +#: netbox/dcim/forms/model_forms.py:1623 netbox/templates/dcim/device.html:204 +#: netbox/templates/dcim/virtualdevicecontext.html:41 +#: netbox/templates/virtualization/virtualmachine.html:64 msgid "Primary IPv6" msgstr "" -#: dcim/forms/object_create.py:48 dcim/forms/object_create.py:199 -#: dcim/forms/object_create.py:355 +#: netbox/dcim/forms/object_create.py:48 netbox/dcim/forms/object_create.py:199 +#: netbox/dcim/forms/object_create.py:355 msgid "" "Alphanumeric ranges are supported. (Must match the number of objects being " "created.)" msgstr "" -#: dcim/forms/object_create.py:68 +#: netbox/dcim/forms/object_create.py:68 #, python-brace-format msgid "" "The provided pattern specifies {value_count} values, but {pattern_count} are " "expected." msgstr "" -#: dcim/forms/object_create.py:110 dcim/forms/object_create.py:271 -#: dcim/tables/devices.py:257 +#: netbox/dcim/forms/object_create.py:110 +#: netbox/dcim/forms/object_create.py:271 netbox/dcim/tables/devices.py:257 msgid "Rear ports" msgstr "" -#: dcim/forms/object_create.py:111 dcim/forms/object_create.py:272 +#: netbox/dcim/forms/object_create.py:111 +#: netbox/dcim/forms/object_create.py:272 msgid "Select one rear port assignment for each front port being created." msgstr "" -#: dcim/forms/object_create.py:164 +#: netbox/dcim/forms/object_create.py:164 #, python-brace-format msgid "" "The number of front port templates to be created ({frontport_count}) must " "match the selected number of rear port positions ({rearport_count})." msgstr "" -#: dcim/forms/object_create.py:251 +#: netbox/dcim/forms/object_create.py:251 #, python-brace-format msgid "" "The string {module} will be replaced with the position of the " "assigned module, if any." msgstr "" -#: dcim/forms/object_create.py:320 +#: netbox/dcim/forms/object_create.py:320 #, python-brace-format msgid "" "The number of front ports to be created ({frontport_count}) must match the " "selected number of rear port positions ({rearport_count})." msgstr "" -#: dcim/forms/object_create.py:409 dcim/tables/devices.py:1016 -#: ipam/tables/fhrp.py:31 templates/dcim/virtualchassis.html:53 -#: templates/dcim/virtualchassis_edit.html:47 templates/ipam/fhrpgroup.html:38 +#: netbox/dcim/forms/object_create.py:409 netbox/dcim/tables/devices.py:1016 +#: netbox/ipam/tables/fhrp.py:31 netbox/templates/dcim/virtualchassis.html:53 +#: netbox/templates/dcim/virtualchassis_edit.html:47 +#: netbox/templates/ipam/fhrpgroup.html:38 msgid "Members" msgstr "" -#: dcim/forms/object_create.py:418 +#: netbox/dcim/forms/object_create.py:418 msgid "Initial position" msgstr "" -#: dcim/forms/object_create.py:421 +#: netbox/dcim/forms/object_create.py:421 msgid "" "Position of the first member device. Increases by one for each additional " "member." msgstr "" -#: dcim/forms/object_create.py:435 +#: netbox/dcim/forms/object_create.py:435 msgid "A position must be specified for the first VC member." msgstr "" -#: dcim/models/cables.py:62 dcim/models/device_component_templates.py:55 -#: dcim/models/device_components.py:63 extras/models/customfields.py:109 +#: netbox/dcim/models/cables.py:62 +#: netbox/dcim/models/device_component_templates.py:55 +#: netbox/dcim/models/device_components.py:63 +#: netbox/extras/models/customfields.py:109 msgid "label" msgstr "" -#: dcim/models/cables.py:71 +#: netbox/dcim/models/cables.py:71 msgid "length" msgstr "" -#: dcim/models/cables.py:78 +#: netbox/dcim/models/cables.py:78 msgid "length unit" msgstr "" -#: dcim/models/cables.py:93 +#: netbox/dcim/models/cables.py:93 msgid "cable" msgstr "" -#: dcim/models/cables.py:94 +#: netbox/dcim/models/cables.py:94 msgid "cables" msgstr "" -#: dcim/models/cables.py:163 +#: netbox/dcim/models/cables.py:163 msgid "Must specify a unit when setting a cable length" msgstr "" -#: dcim/models/cables.py:166 +#: netbox/dcim/models/cables.py:166 msgid "Must define A and B terminations when creating a new cable." msgstr "" -#: dcim/models/cables.py:173 +#: netbox/dcim/models/cables.py:173 msgid "Cannot connect different termination types to same end of cable." msgstr "" -#: dcim/models/cables.py:181 +#: netbox/dcim/models/cables.py:181 #, python-brace-format msgid "Incompatible termination types: {type_a} and {type_b}" msgstr "" -#: dcim/models/cables.py:191 +#: netbox/dcim/models/cables.py:191 msgid "A and B terminations cannot connect to the same object." msgstr "" -#: dcim/models/cables.py:258 ipam/models/asns.py:37 +#: netbox/dcim/models/cables.py:258 netbox/ipam/models/asns.py:37 msgid "end" msgstr "" -#: dcim/models/cables.py:311 +#: netbox/dcim/models/cables.py:311 msgid "cable termination" msgstr "" -#: dcim/models/cables.py:312 +#: netbox/dcim/models/cables.py:312 msgid "cable terminations" msgstr "" -#: dcim/models/cables.py:331 +#: netbox/dcim/models/cables.py:331 #, python-brace-format msgid "" "Duplicate termination found for {app_label}.{model} {termination_id}: cable " "{cable_pk}" msgstr "" -#: dcim/models/cables.py:341 +#: netbox/dcim/models/cables.py:341 #, python-brace-format msgid "Cables cannot be terminated to {type_display} interfaces" msgstr "" -#: dcim/models/cables.py:348 +#: netbox/dcim/models/cables.py:348 msgid "Circuit terminations attached to a provider network may not be cabled." msgstr "" -#: dcim/models/cables.py:446 extras/models/configs.py:50 +#: netbox/dcim/models/cables.py:446 netbox/extras/models/configs.py:50 msgid "is active" msgstr "" -#: dcim/models/cables.py:450 +#: netbox/dcim/models/cables.py:450 msgid "is complete" msgstr "" -#: dcim/models/cables.py:454 +#: netbox/dcim/models/cables.py:454 msgid "is split" msgstr "" -#: dcim/models/cables.py:462 +#: netbox/dcim/models/cables.py:462 msgid "cable path" msgstr "" -#: dcim/models/cables.py:463 +#: netbox/dcim/models/cables.py:463 msgid "cable paths" msgstr "" -#: dcim/models/device_component_templates.py:46 +#: netbox/dcim/models/device_component_templates.py:46 #, python-brace-format msgid "" "{module} is accepted as a substitution for the module bay position when " "attached to a module type." msgstr "" -#: dcim/models/device_component_templates.py:58 -#: dcim/models/device_components.py:66 +#: netbox/dcim/models/device_component_templates.py:58 +#: netbox/dcim/models/device_components.py:66 msgid "Physical label" msgstr "" -#: dcim/models/device_component_templates.py:103 +#: netbox/dcim/models/device_component_templates.py:103 msgid "Component templates cannot be moved to a different device type." msgstr "" -#: dcim/models/device_component_templates.py:154 +#: netbox/dcim/models/device_component_templates.py:154 msgid "" "A component template cannot be associated with both a device type and a " "module type." msgstr "" -#: dcim/models/device_component_templates.py:158 +#: netbox/dcim/models/device_component_templates.py:158 msgid "" "A component template must be associated with either a device type or a " "module type." msgstr "" -#: dcim/models/device_component_templates.py:186 +#: netbox/dcim/models/device_component_templates.py:186 msgid "console port template" msgstr "" -#: dcim/models/device_component_templates.py:187 +#: netbox/dcim/models/device_component_templates.py:187 msgid "console port templates" msgstr "" -#: dcim/models/device_component_templates.py:220 +#: netbox/dcim/models/device_component_templates.py:220 msgid "console server port template" msgstr "" -#: dcim/models/device_component_templates.py:221 +#: netbox/dcim/models/device_component_templates.py:221 msgid "console server port templates" msgstr "" -#: dcim/models/device_component_templates.py:252 -#: dcim/models/device_components.py:353 +#: netbox/dcim/models/device_component_templates.py:252 +#: netbox/dcim/models/device_components.py:353 msgid "maximum draw" msgstr "" -#: dcim/models/device_component_templates.py:259 -#: dcim/models/device_components.py:360 +#: netbox/dcim/models/device_component_templates.py:259 +#: netbox/dcim/models/device_components.py:360 msgid "allocated draw" msgstr "" -#: dcim/models/device_component_templates.py:269 +#: netbox/dcim/models/device_component_templates.py:269 msgid "power port template" msgstr "" -#: dcim/models/device_component_templates.py:270 +#: netbox/dcim/models/device_component_templates.py:270 msgid "power port templates" msgstr "" -#: dcim/models/device_component_templates.py:289 -#: dcim/models/device_components.py:383 +#: netbox/dcim/models/device_component_templates.py:289 +#: netbox/dcim/models/device_components.py:383 #, python-brace-format msgid "Allocated draw cannot exceed the maximum draw ({maximum_draw}W)." msgstr "" -#: dcim/models/device_component_templates.py:321 -#: dcim/models/device_components.py:478 +#: netbox/dcim/models/device_component_templates.py:321 +#: netbox/dcim/models/device_components.py:478 msgid "feed leg" msgstr "" -#: dcim/models/device_component_templates.py:325 -#: dcim/models/device_components.py:482 +#: netbox/dcim/models/device_component_templates.py:325 +#: netbox/dcim/models/device_components.py:482 msgid "Phase (for three-phase feeds)" msgstr "" -#: dcim/models/device_component_templates.py:331 +#: netbox/dcim/models/device_component_templates.py:331 msgid "power outlet template" msgstr "" -#: dcim/models/device_component_templates.py:332 +#: netbox/dcim/models/device_component_templates.py:332 msgid "power outlet templates" msgstr "" -#: dcim/models/device_component_templates.py:341 +#: netbox/dcim/models/device_component_templates.py:341 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device type" msgstr "" -#: dcim/models/device_component_templates.py:345 +#: netbox/dcim/models/device_component_templates.py:345 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same module type" msgstr "" -#: dcim/models/device_component_templates.py:397 -#: dcim/models/device_components.py:612 +#: netbox/dcim/models/device_component_templates.py:397 +#: netbox/dcim/models/device_components.py:612 msgid "management only" msgstr "" -#: dcim/models/device_component_templates.py:405 -#: dcim/models/device_components.py:551 +#: netbox/dcim/models/device_component_templates.py:405 +#: netbox/dcim/models/device_components.py:551 msgid "bridge interface" msgstr "" -#: dcim/models/device_component_templates.py:423 -#: dcim/models/device_components.py:637 +#: netbox/dcim/models/device_component_templates.py:423 +#: netbox/dcim/models/device_components.py:637 msgid "wireless role" msgstr "" -#: dcim/models/device_component_templates.py:429 +#: netbox/dcim/models/device_component_templates.py:429 msgid "interface template" msgstr "" -#: dcim/models/device_component_templates.py:430 +#: netbox/dcim/models/device_component_templates.py:430 msgid "interface templates" msgstr "" -#: dcim/models/device_component_templates.py:437 -#: dcim/models/device_components.py:805 -#: virtualization/models/virtualmachines.py:400 +#: netbox/dcim/models/device_component_templates.py:437 +#: netbox/dcim/models/device_components.py:805 +#: netbox/virtualization/models/virtualmachines.py:400 msgid "An interface cannot be bridged to itself." msgstr "" -#: dcim/models/device_component_templates.py:440 +#: netbox/dcim/models/device_component_templates.py:440 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same device type" msgstr "" -#: dcim/models/device_component_templates.py:444 +#: netbox/dcim/models/device_component_templates.py:444 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same module type" msgstr "" -#: dcim/models/device_component_templates.py:500 -#: dcim/models/device_components.py:985 +#: netbox/dcim/models/device_component_templates.py:500 +#: netbox/dcim/models/device_components.py:985 msgid "rear port position" msgstr "" -#: dcim/models/device_component_templates.py:525 +#: netbox/dcim/models/device_component_templates.py:525 msgid "front port template" msgstr "" -#: dcim/models/device_component_templates.py:526 +#: netbox/dcim/models/device_component_templates.py:526 msgid "front port templates" msgstr "" -#: dcim/models/device_component_templates.py:536 +#: netbox/dcim/models/device_component_templates.py:536 #, python-brace-format msgid "Rear port ({name}) must belong to the same device type" msgstr "" -#: dcim/models/device_component_templates.py:542 +#: netbox/dcim/models/device_component_templates.py:542 #, python-brace-format msgid "" "Invalid rear port position ({position}); rear port {name} has only {count} " "positions" msgstr "" -#: dcim/models/device_component_templates.py:595 -#: dcim/models/device_components.py:1054 +#: netbox/dcim/models/device_component_templates.py:595 +#: netbox/dcim/models/device_components.py:1054 msgid "positions" msgstr "" -#: dcim/models/device_component_templates.py:606 +#: netbox/dcim/models/device_component_templates.py:606 msgid "rear port template" msgstr "" -#: dcim/models/device_component_templates.py:607 +#: netbox/dcim/models/device_component_templates.py:607 msgid "rear port templates" msgstr "" -#: dcim/models/device_component_templates.py:636 -#: dcim/models/device_components.py:1095 +#: netbox/dcim/models/device_component_templates.py:636 +#: netbox/dcim/models/device_components.py:1095 msgid "position" msgstr "" -#: dcim/models/device_component_templates.py:639 -#: dcim/models/device_components.py:1098 +#: netbox/dcim/models/device_component_templates.py:639 +#: netbox/dcim/models/device_components.py:1098 msgid "Identifier to reference when renaming installed components" msgstr "" -#: dcim/models/device_component_templates.py:645 +#: netbox/dcim/models/device_component_templates.py:645 msgid "module bay template" msgstr "" -#: dcim/models/device_component_templates.py:646 +#: netbox/dcim/models/device_component_templates.py:646 msgid "module bay templates" msgstr "" -#: dcim/models/device_component_templates.py:673 +#: netbox/dcim/models/device_component_templates.py:673 msgid "device bay template" msgstr "" -#: dcim/models/device_component_templates.py:674 +#: netbox/dcim/models/device_component_templates.py:674 msgid "device bay templates" msgstr "" -#: dcim/models/device_component_templates.py:687 +#: netbox/dcim/models/device_component_templates.py:687 #, python-brace-format msgid "" "Subdevice role of device type ({device_type}) must be set to \"parent\" to " "allow device bays." msgstr "" -#: dcim/models/device_component_templates.py:742 -#: dcim/models/device_components.py:1224 +#: netbox/dcim/models/device_component_templates.py:742 +#: netbox/dcim/models/device_components.py:1224 msgid "part ID" msgstr "" -#: dcim/models/device_component_templates.py:744 -#: dcim/models/device_components.py:1226 +#: netbox/dcim/models/device_component_templates.py:744 +#: netbox/dcim/models/device_components.py:1226 msgid "Manufacturer-assigned part identifier" msgstr "" -#: dcim/models/device_component_templates.py:761 +#: netbox/dcim/models/device_component_templates.py:761 msgid "inventory item template" msgstr "" -#: dcim/models/device_component_templates.py:762 +#: netbox/dcim/models/device_component_templates.py:762 msgid "inventory item templates" msgstr "" -#: dcim/models/device_components.py:106 +#: netbox/dcim/models/device_components.py:106 msgid "Components cannot be moved to a different device." msgstr "" -#: dcim/models/device_components.py:145 +#: netbox/dcim/models/device_components.py:145 msgid "cable end" msgstr "" -#: dcim/models/device_components.py:151 +#: netbox/dcim/models/device_components.py:151 msgid "mark connected" msgstr "" -#: dcim/models/device_components.py:153 +#: netbox/dcim/models/device_components.py:153 msgid "Treat as if a cable is connected" msgstr "" -#: dcim/models/device_components.py:171 +#: netbox/dcim/models/device_components.py:171 msgid "Must specify cable end (A or B) when attaching a cable." msgstr "" -#: dcim/models/device_components.py:175 +#: netbox/dcim/models/device_components.py:175 msgid "Cable end must not be set without a cable." msgstr "" -#: dcim/models/device_components.py:179 +#: netbox/dcim/models/device_components.py:179 msgid "Cannot mark as connected with a cable attached." msgstr "" -#: dcim/models/device_components.py:203 +#: netbox/dcim/models/device_components.py:203 #, python-brace-format msgid "{class_name} models must declare a parent_object property" msgstr "" -#: dcim/models/device_components.py:288 dcim/models/device_components.py:317 -#: dcim/models/device_components.py:350 dcim/models/device_components.py:468 +#: netbox/dcim/models/device_components.py:288 +#: netbox/dcim/models/device_components.py:317 +#: netbox/dcim/models/device_components.py:350 +#: netbox/dcim/models/device_components.py:468 msgid "Physical port type" msgstr "" -#: dcim/models/device_components.py:291 dcim/models/device_components.py:320 +#: netbox/dcim/models/device_components.py:291 +#: netbox/dcim/models/device_components.py:320 msgid "speed" msgstr "" -#: dcim/models/device_components.py:295 dcim/models/device_components.py:324 +#: netbox/dcim/models/device_components.py:295 +#: netbox/dcim/models/device_components.py:324 msgid "Port speed in bits per second" msgstr "" -#: dcim/models/device_components.py:301 +#: netbox/dcim/models/device_components.py:301 msgid "console port" msgstr "" -#: dcim/models/device_components.py:302 +#: netbox/dcim/models/device_components.py:302 msgid "console ports" msgstr "" -#: dcim/models/device_components.py:330 +#: netbox/dcim/models/device_components.py:330 msgid "console server port" msgstr "" -#: dcim/models/device_components.py:331 +#: netbox/dcim/models/device_components.py:331 msgid "console server ports" msgstr "" -#: dcim/models/device_components.py:370 +#: netbox/dcim/models/device_components.py:370 msgid "power port" msgstr "" -#: dcim/models/device_components.py:371 +#: netbox/dcim/models/device_components.py:371 msgid "power ports" msgstr "" -#: dcim/models/device_components.py:488 +#: netbox/dcim/models/device_components.py:488 msgid "power outlet" msgstr "" -#: dcim/models/device_components.py:489 +#: netbox/dcim/models/device_components.py:489 msgid "power outlets" msgstr "" -#: dcim/models/device_components.py:500 +#: netbox/dcim/models/device_components.py:500 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device" msgstr "" -#: dcim/models/device_components.py:531 vpn/models/crypto.py:81 -#: vpn/models/crypto.py:226 +#: netbox/dcim/models/device_components.py:531 netbox/vpn/models/crypto.py:81 +#: netbox/vpn/models/crypto.py:226 msgid "mode" msgstr "" -#: dcim/models/device_components.py:535 +#: netbox/dcim/models/device_components.py:535 msgid "IEEE 802.1Q tagging strategy" msgstr "" -#: dcim/models/device_components.py:543 +#: netbox/dcim/models/device_components.py:543 msgid "parent interface" msgstr "" -#: dcim/models/device_components.py:603 +#: netbox/dcim/models/device_components.py:603 msgid "parent LAG" msgstr "" -#: dcim/models/device_components.py:613 +#: netbox/dcim/models/device_components.py:613 msgid "This interface is used only for out-of-band management" msgstr "" -#: dcim/models/device_components.py:618 +#: netbox/dcim/models/device_components.py:618 msgid "speed (Kbps)" msgstr "" -#: dcim/models/device_components.py:621 +#: netbox/dcim/models/device_components.py:621 msgid "duplex" msgstr "" -#: dcim/models/device_components.py:631 +#: netbox/dcim/models/device_components.py:631 msgid "64-bit World Wide Name" msgstr "" -#: dcim/models/device_components.py:643 +#: netbox/dcim/models/device_components.py:643 msgid "wireless channel" msgstr "" -#: dcim/models/device_components.py:650 +#: netbox/dcim/models/device_components.py:650 msgid "channel frequency (MHz)" msgstr "" -#: dcim/models/device_components.py:651 dcim/models/device_components.py:659 +#: netbox/dcim/models/device_components.py:651 +#: netbox/dcim/models/device_components.py:659 msgid "Populated by selected channel (if set)" msgstr "" -#: dcim/models/device_components.py:665 +#: netbox/dcim/models/device_components.py:665 msgid "transmit power (dBm)" msgstr "" -#: dcim/models/device_components.py:690 wireless/models.py:116 +#: netbox/dcim/models/device_components.py:690 netbox/wireless/models.py:116 msgid "wireless LANs" msgstr "" -#: dcim/models/device_components.py:698 -#: virtualization/models/virtualmachines.py:330 +#: netbox/dcim/models/device_components.py:698 +#: netbox/virtualization/models/virtualmachines.py:330 msgid "untagged VLAN" msgstr "" -#: dcim/models/device_components.py:704 -#: virtualization/models/virtualmachines.py:336 +#: netbox/dcim/models/device_components.py:704 +#: netbox/virtualization/models/virtualmachines.py:336 msgid "tagged VLANs" msgstr "" -#: dcim/models/device_components.py:746 -#: virtualization/models/virtualmachines.py:372 +#: netbox/dcim/models/device_components.py:746 +#: netbox/virtualization/models/virtualmachines.py:372 msgid "interface" msgstr "" -#: dcim/models/device_components.py:747 -#: virtualization/models/virtualmachines.py:373 +#: netbox/dcim/models/device_components.py:747 +#: netbox/virtualization/models/virtualmachines.py:373 msgid "interfaces" msgstr "" -#: dcim/models/device_components.py:758 +#: netbox/dcim/models/device_components.py:758 #, python-brace-format msgid "{display_type} interfaces cannot have a cable attached." msgstr "" -#: dcim/models/device_components.py:766 +#: netbox/dcim/models/device_components.py:766 #, python-brace-format msgid "{display_type} interfaces cannot be marked as connected." msgstr "" -#: dcim/models/device_components.py:775 -#: virtualization/models/virtualmachines.py:385 +#: netbox/dcim/models/device_components.py:775 +#: netbox/virtualization/models/virtualmachines.py:385 msgid "An interface cannot be its own parent." msgstr "" -#: dcim/models/device_components.py:779 +#: netbox/dcim/models/device_components.py:779 msgid "Only virtual interfaces may be assigned to a parent interface." msgstr "" -#: dcim/models/device_components.py:786 +#: netbox/dcim/models/device_components.py:786 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to a different device " "({device})" msgstr "" -#: dcim/models/device_components.py:792 +#: netbox/dcim/models/device_components.py:792 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to {device}, which is " "not part of virtual chassis {virtual_chassis}." msgstr "" -#: dcim/models/device_components.py:812 +#: netbox/dcim/models/device_components.py:812 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different device " "({device})." msgstr "" -#: dcim/models/device_components.py:818 +#: netbox/dcim/models/device_components.py:818 #, python-brace-format msgid "" "The selected bridge interface ({interface}) belongs to {device}, which is " "not part of virtual chassis {virtual_chassis}." msgstr "" -#: dcim/models/device_components.py:829 +#: netbox/dcim/models/device_components.py:829 msgid "Virtual interfaces cannot have a parent LAG interface." msgstr "" -#: dcim/models/device_components.py:833 +#: netbox/dcim/models/device_components.py:833 msgid "A LAG interface cannot be its own parent." msgstr "" -#: dcim/models/device_components.py:840 +#: netbox/dcim/models/device_components.py:840 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to a different device ({device})." msgstr "" -#: dcim/models/device_components.py:846 +#: netbox/dcim/models/device_components.py:846 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to {device}, which is not part of " "virtual chassis {virtual_chassis}." msgstr "" -#: dcim/models/device_components.py:857 +#: netbox/dcim/models/device_components.py:857 msgid "Virtual interfaces cannot have a PoE mode." msgstr "" -#: dcim/models/device_components.py:861 +#: netbox/dcim/models/device_components.py:861 msgid "Virtual interfaces cannot have a PoE type." msgstr "" -#: dcim/models/device_components.py:867 +#: netbox/dcim/models/device_components.py:867 msgid "Must specify PoE mode when designating a PoE type." msgstr "" -#: dcim/models/device_components.py:874 +#: netbox/dcim/models/device_components.py:874 msgid "Wireless role may be set only on wireless interfaces." msgstr "" -#: dcim/models/device_components.py:876 +#: netbox/dcim/models/device_components.py:876 msgid "Channel may be set only on wireless interfaces." msgstr "" -#: dcim/models/device_components.py:882 +#: netbox/dcim/models/device_components.py:882 msgid "Channel frequency may be set only on wireless interfaces." msgstr "" -#: dcim/models/device_components.py:886 +#: netbox/dcim/models/device_components.py:886 msgid "Cannot specify custom frequency with channel selected." msgstr "" -#: dcim/models/device_components.py:892 +#: netbox/dcim/models/device_components.py:892 msgid "Channel width may be set only on wireless interfaces." msgstr "" -#: dcim/models/device_components.py:894 +#: netbox/dcim/models/device_components.py:894 msgid "Cannot specify custom width with channel selected." msgstr "" -#: dcim/models/device_components.py:902 +#: netbox/dcim/models/device_components.py:902 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " "interface's parent device, or it must be global." msgstr "" -#: dcim/models/device_components.py:991 +#: netbox/dcim/models/device_components.py:991 msgid "Mapped position on corresponding rear port" msgstr "" -#: dcim/models/device_components.py:1007 +#: netbox/dcim/models/device_components.py:1007 msgid "front port" msgstr "" -#: dcim/models/device_components.py:1008 +#: netbox/dcim/models/device_components.py:1008 msgid "front ports" msgstr "" -#: dcim/models/device_components.py:1022 +#: netbox/dcim/models/device_components.py:1022 #, python-brace-format msgid "Rear port ({rear_port}) must belong to the same device" msgstr "" -#: dcim/models/device_components.py:1030 +#: netbox/dcim/models/device_components.py:1030 #, python-brace-format msgid "" "Invalid rear port position ({rear_port_position}): Rear port {name} has only " "{positions} positions." msgstr "" -#: dcim/models/device_components.py:1060 +#: netbox/dcim/models/device_components.py:1060 msgid "Number of front ports which may be mapped" msgstr "" -#: dcim/models/device_components.py:1065 +#: netbox/dcim/models/device_components.py:1065 msgid "rear port" msgstr "" -#: dcim/models/device_components.py:1066 +#: netbox/dcim/models/device_components.py:1066 msgid "rear ports" msgstr "" -#: dcim/models/device_components.py:1080 +#: netbox/dcim/models/device_components.py:1080 #, python-brace-format msgid "" "The number of positions cannot be less than the number of mapped front ports " "({frontport_count})" msgstr "" -#: dcim/models/device_components.py:1104 +#: netbox/dcim/models/device_components.py:1104 msgid "module bay" msgstr "" -#: dcim/models/device_components.py:1105 +#: netbox/dcim/models/device_components.py:1105 msgid "module bays" msgstr "" -#: dcim/models/device_components.py:1126 +#: netbox/dcim/models/device_components.py:1126 msgid "device bay" msgstr "" -#: dcim/models/device_components.py:1127 +#: netbox/dcim/models/device_components.py:1127 msgid "device bays" msgstr "" -#: dcim/models/device_components.py:1137 +#: netbox/dcim/models/device_components.py:1137 #, python-brace-format msgid "This type of device ({device_type}) does not support device bays." msgstr "" -#: dcim/models/device_components.py:1143 +#: netbox/dcim/models/device_components.py:1143 msgid "Cannot install a device into itself." msgstr "" -#: dcim/models/device_components.py:1151 +#: netbox/dcim/models/device_components.py:1151 #, python-brace-format msgid "" "Cannot install the specified device; device is already installed in {bay}." msgstr "" -#: dcim/models/device_components.py:1172 +#: netbox/dcim/models/device_components.py:1172 msgid "inventory item role" msgstr "" -#: dcim/models/device_components.py:1173 +#: netbox/dcim/models/device_components.py:1173 msgid "inventory item roles" msgstr "" -#: dcim/models/device_components.py:1230 dcim/models/devices.py:597 -#: dcim/models/devices.py:1163 dcim/models/racks.py:114 +#: netbox/dcim/models/device_components.py:1230 +#: netbox/dcim/models/devices.py:597 netbox/dcim/models/devices.py:1163 +#: netbox/dcim/models/racks.py:114 msgid "serial number" msgstr "" -#: dcim/models/device_components.py:1238 dcim/models/devices.py:605 -#: dcim/models/devices.py:1170 dcim/models/racks.py:121 +#: netbox/dcim/models/device_components.py:1238 +#: netbox/dcim/models/devices.py:605 netbox/dcim/models/devices.py:1170 +#: netbox/dcim/models/racks.py:121 msgid "asset tag" msgstr "" -#: dcim/models/device_components.py:1239 +#: netbox/dcim/models/device_components.py:1239 msgid "A unique tag used to identify this item" msgstr "" -#: dcim/models/device_components.py:1242 +#: netbox/dcim/models/device_components.py:1242 msgid "discovered" msgstr "" -#: dcim/models/device_components.py:1244 +#: netbox/dcim/models/device_components.py:1244 msgid "This item was automatically discovered" msgstr "" -#: dcim/models/device_components.py:1262 +#: netbox/dcim/models/device_components.py:1262 msgid "inventory item" msgstr "" -#: dcim/models/device_components.py:1263 +#: netbox/dcim/models/device_components.py:1263 msgid "inventory items" msgstr "" -#: dcim/models/device_components.py:1274 +#: netbox/dcim/models/device_components.py:1274 msgid "Cannot assign self as parent." msgstr "" -#: dcim/models/device_components.py:1282 +#: netbox/dcim/models/device_components.py:1282 msgid "Parent inventory item does not belong to the same device." msgstr "" -#: dcim/models/device_components.py:1288 +#: netbox/dcim/models/device_components.py:1288 msgid "Cannot move an inventory item with dependent children" msgstr "" -#: dcim/models/device_components.py:1296 +#: netbox/dcim/models/device_components.py:1296 msgid "Cannot assign inventory item to component on another device" msgstr "" -#: dcim/models/devices.py:54 +#: netbox/dcim/models/devices.py:54 msgid "manufacturer" msgstr "" -#: dcim/models/devices.py:55 +#: netbox/dcim/models/devices.py:55 msgid "manufacturers" msgstr "" -#: dcim/models/devices.py:82 dcim/models/devices.py:382 +#: netbox/dcim/models/devices.py:82 netbox/dcim/models/devices.py:382 msgid "model" msgstr "" -#: dcim/models/devices.py:95 +#: netbox/dcim/models/devices.py:95 msgid "default platform" msgstr "" -#: dcim/models/devices.py:98 dcim/models/devices.py:386 +#: netbox/dcim/models/devices.py:98 netbox/dcim/models/devices.py:386 msgid "part number" msgstr "" -#: dcim/models/devices.py:101 dcim/models/devices.py:389 +#: netbox/dcim/models/devices.py:101 netbox/dcim/models/devices.py:389 msgid "Discrete part number (optional)" msgstr "" -#: dcim/models/devices.py:107 dcim/models/racks.py:138 +#: netbox/dcim/models/devices.py:107 netbox/dcim/models/racks.py:138 msgid "height (U)" msgstr "" -#: dcim/models/devices.py:111 +#: netbox/dcim/models/devices.py:111 msgid "exclude from utilization" msgstr "" -#: dcim/models/devices.py:112 +#: netbox/dcim/models/devices.py:112 msgid "Devices of this type are excluded when calculating rack utilization." msgstr "" -#: dcim/models/devices.py:116 +#: netbox/dcim/models/devices.py:116 msgid "is full depth" msgstr "" -#: dcim/models/devices.py:117 +#: netbox/dcim/models/devices.py:117 msgid "Device consumes both front and rear rack faces." msgstr "" -#: dcim/models/devices.py:123 +#: netbox/dcim/models/devices.py:123 msgid "parent/child status" msgstr "" -#: dcim/models/devices.py:124 +#: netbox/dcim/models/devices.py:124 msgid "" "Parent devices house child devices in device bays. Leave blank if this " "device type is neither a parent nor a child." msgstr "" -#: dcim/models/devices.py:128 dcim/models/devices.py:649 +#: netbox/dcim/models/devices.py:128 netbox/dcim/models/devices.py:649 msgid "airflow" msgstr "" -#: dcim/models/devices.py:204 +#: netbox/dcim/models/devices.py:204 msgid "device type" msgstr "" -#: dcim/models/devices.py:205 +#: netbox/dcim/models/devices.py:205 msgid "device types" msgstr "" -#: dcim/models/devices.py:290 +#: netbox/dcim/models/devices.py:290 msgid "U height must be in increments of 0.5 rack units." msgstr "" -#: dcim/models/devices.py:307 +#: netbox/dcim/models/devices.py:307 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate " "a height of {height}U" msgstr "" -#: dcim/models/devices.py:322 +#: netbox/dcim/models/devices.py:322 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " "instances already mounted within racks." msgstr "" -#: dcim/models/devices.py:331 +#: netbox/dcim/models/devices.py:331 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." msgstr "" -#: dcim/models/devices.py:337 +#: netbox/dcim/models/devices.py:337 msgid "Child device types must be 0U." msgstr "" -#: dcim/models/devices.py:405 +#: netbox/dcim/models/devices.py:405 msgid "module type" msgstr "" -#: dcim/models/devices.py:406 +#: netbox/dcim/models/devices.py:406 msgid "module types" msgstr "" -#: dcim/models/devices.py:475 +#: netbox/dcim/models/devices.py:475 msgid "Virtual machines may be assigned to this role" msgstr "" -#: dcim/models/devices.py:487 +#: netbox/dcim/models/devices.py:487 msgid "device role" msgstr "" -#: dcim/models/devices.py:488 +#: netbox/dcim/models/devices.py:488 msgid "device roles" msgstr "" -#: dcim/models/devices.py:505 +#: netbox/dcim/models/devices.py:505 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "" -#: dcim/models/devices.py:517 +#: netbox/dcim/models/devices.py:517 msgid "platform" msgstr "" -#: dcim/models/devices.py:518 +#: netbox/dcim/models/devices.py:518 msgid "platforms" msgstr "" -#: dcim/models/devices.py:566 +#: netbox/dcim/models/devices.py:566 msgid "The function this device serves" msgstr "" -#: dcim/models/devices.py:598 +#: netbox/dcim/models/devices.py:598 msgid "Chassis serial number, assigned by the manufacturer" msgstr "" -#: dcim/models/devices.py:606 dcim/models/devices.py:1171 +#: netbox/dcim/models/devices.py:606 netbox/dcim/models/devices.py:1171 msgid "A unique tag used to identify this device" msgstr "" -#: dcim/models/devices.py:633 +#: netbox/dcim/models/devices.py:633 msgid "position (U)" msgstr "" -#: dcim/models/devices.py:640 +#: netbox/dcim/models/devices.py:640 msgid "rack face" msgstr "" -#: dcim/models/devices.py:660 dcim/models/devices.py:1380 -#: virtualization/models/virtualmachines.py:100 +#: netbox/dcim/models/devices.py:660 netbox/dcim/models/devices.py:1380 +#: netbox/virtualization/models/virtualmachines.py:100 msgid "primary IPv4" msgstr "" -#: dcim/models/devices.py:668 dcim/models/devices.py:1388 -#: virtualization/models/virtualmachines.py:108 +#: netbox/dcim/models/devices.py:668 netbox/dcim/models/devices.py:1388 +#: netbox/virtualization/models/virtualmachines.py:108 msgid "primary IPv6" msgstr "" -#: dcim/models/devices.py:676 +#: netbox/dcim/models/devices.py:676 msgid "out-of-band IP" msgstr "" -#: dcim/models/devices.py:693 +#: netbox/dcim/models/devices.py:693 msgid "VC position" msgstr "" -#: dcim/models/devices.py:696 +#: netbox/dcim/models/devices.py:696 msgid "Virtual chassis position" msgstr "" -#: dcim/models/devices.py:699 +#: netbox/dcim/models/devices.py:699 msgid "VC priority" msgstr "" -#: dcim/models/devices.py:703 +#: netbox/dcim/models/devices.py:703 msgid "Virtual chassis master election priority" msgstr "" -#: dcim/models/devices.py:706 dcim/models/sites.py:207 +#: netbox/dcim/models/devices.py:706 netbox/dcim/models/sites.py:207 msgid "latitude" msgstr "" -#: dcim/models/devices.py:711 dcim/models/devices.py:719 -#: dcim/models/sites.py:212 dcim/models/sites.py:220 +#: netbox/dcim/models/devices.py:711 netbox/dcim/models/devices.py:719 +#: netbox/dcim/models/sites.py:212 netbox/dcim/models/sites.py:220 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "" -#: dcim/models/devices.py:714 dcim/models/sites.py:215 +#: netbox/dcim/models/devices.py:714 netbox/dcim/models/sites.py:215 msgid "longitude" msgstr "" -#: dcim/models/devices.py:787 +#: netbox/dcim/models/devices.py:787 msgid "Device name must be unique per site." msgstr "" -#: dcim/models/devices.py:798 ipam/models/services.py:74 +#: netbox/dcim/models/devices.py:798 netbox/ipam/models/services.py:75 msgid "device" msgstr "" -#: dcim/models/devices.py:799 +#: netbox/dcim/models/devices.py:799 msgid "devices" msgstr "" -#: dcim/models/devices.py:825 +#: netbox/dcim/models/devices.py:825 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "" -#: dcim/models/devices.py:830 +#: netbox/dcim/models/devices.py:830 #, python-brace-format msgid "Location {location} does not belong to site {site}." msgstr "" -#: dcim/models/devices.py:836 +#: netbox/dcim/models/devices.py:836 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "" -#: dcim/models/devices.py:843 +#: netbox/dcim/models/devices.py:843 msgid "Cannot select a rack face without assigning a rack." msgstr "" -#: dcim/models/devices.py:847 +#: netbox/dcim/models/devices.py:847 msgid "Cannot select a rack position without assigning a rack." msgstr "" -#: dcim/models/devices.py:853 +#: netbox/dcim/models/devices.py:853 msgid "Position must be in increments of 0.5 rack units." msgstr "" -#: dcim/models/devices.py:857 +#: netbox/dcim/models/devices.py:857 msgid "Must specify rack face when defining rack position." msgstr "" -#: dcim/models/devices.py:865 +#: netbox/dcim/models/devices.py:865 #, python-brace-format msgid "A 0U device type ({device_type}) cannot be assigned to a rack position." msgstr "" -#: dcim/models/devices.py:876 +#: netbox/dcim/models/devices.py:876 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." msgstr "" -#: dcim/models/devices.py:883 +#: netbox/dcim/models/devices.py:883 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." msgstr "" -#: dcim/models/devices.py:897 +#: netbox/dcim/models/devices.py:897 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " "accommodate this device type: {device_type} ({u_height}U)" msgstr "" -#: dcim/models/devices.py:912 +#: netbox/dcim/models/devices.py:912 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "" -#: dcim/models/devices.py:921 dcim/models/devices.py:936 +#: netbox/dcim/models/devices.py:921 netbox/dcim/models/devices.py:936 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this device." msgstr "" -#: dcim/models/devices.py:927 +#: netbox/dcim/models/devices.py:927 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "" -#: dcim/models/devices.py:954 +#: netbox/dcim/models/devices.py:954 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " "but this device's type belongs to {devicetype_manufacturer}." msgstr "" -#: dcim/models/devices.py:965 +#: netbox/dcim/models/devices.py:965 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "" -#: dcim/models/devices.py:973 +#: netbox/dcim/models/devices.py:973 msgid "A device assigned to a virtual chassis must have its position defined." msgstr "" -#: dcim/models/devices.py:1178 +#: netbox/dcim/models/devices.py:1178 msgid "module" msgstr "" -#: dcim/models/devices.py:1179 +#: netbox/dcim/models/devices.py:1179 msgid "modules" msgstr "" -#: dcim/models/devices.py:1195 +#: netbox/dcim/models/devices.py:1195 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " "device ({device})." msgstr "" -#: dcim/models/devices.py:1299 +#: netbox/dcim/models/devices.py:1299 msgid "domain" msgstr "" -#: dcim/models/devices.py:1312 dcim/models/devices.py:1313 +#: netbox/dcim/models/devices.py:1312 netbox/dcim/models/devices.py:1313 msgid "virtual chassis" msgstr "" -#: dcim/models/devices.py:1328 +#: netbox/dcim/models/devices.py:1328 #, python-brace-format msgid "The selected master ({master}) is not assigned to this virtual chassis." msgstr "" -#: dcim/models/devices.py:1344 +#: netbox/dcim/models/devices.py:1344 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " "form a cross-chassis LAG interfaces." msgstr "" -#: dcim/models/devices.py:1369 vpn/models/l2vpn.py:37 +#: netbox/dcim/models/devices.py:1369 netbox/vpn/models/l2vpn.py:37 msgid "identifier" msgstr "" -#: dcim/models/devices.py:1370 +#: netbox/dcim/models/devices.py:1370 msgid "Numeric identifier unique to the parent device" msgstr "" -#: dcim/models/devices.py:1398 extras/models/customfields.py:210 -#: extras/models/models.py:127 extras/models/models.py:722 -#: netbox/models/__init__.py:114 +#: netbox/dcim/models/devices.py:1398 netbox/extras/models/customfields.py:210 +#: netbox/extras/models/models.py:127 netbox/extras/models/models.py:722 +#: netbox/netbox/models/__init__.py:114 msgid "comments" msgstr "" -#: dcim/models/devices.py:1414 +#: netbox/dcim/models/devices.py:1414 msgid "virtual device context" msgstr "" -#: dcim/models/devices.py:1415 +#: netbox/dcim/models/devices.py:1415 msgid "virtual device contexts" msgstr "" -#: dcim/models/devices.py:1447 +#: netbox/dcim/models/devices.py:1447 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "" -#: dcim/models/devices.py:1453 +#: netbox/dcim/models/devices.py:1453 msgid "Primary IP address must belong to an interface on the assigned device." msgstr "" -#: dcim/models/mixins.py:15 extras/models/configs.py:41 -#: extras/models/models.py:341 extras/models/models.py:550 -#: extras/models/search.py:48 ipam/models/ip.py:194 +#: netbox/dcim/models/mixins.py:15 netbox/extras/models/configs.py:41 +#: netbox/extras/models/models.py:341 netbox/extras/models/models.py:550 +#: netbox/extras/models/search.py:48 netbox/ipam/models/ip.py:194 msgid "weight" msgstr "" -#: dcim/models/mixins.py:22 +#: netbox/dcim/models/mixins.py:22 msgid "weight unit" msgstr "" -#: dcim/models/mixins.py:51 +#: netbox/dcim/models/mixins.py:51 msgid "Must specify a unit when setting a weight" msgstr "" -#: dcim/models/power.py:55 +#: netbox/dcim/models/power.py:55 msgid "power panel" msgstr "" -#: dcim/models/power.py:56 +#: netbox/dcim/models/power.py:56 msgid "power panels" msgstr "" -#: dcim/models/power.py:70 +#: netbox/dcim/models/power.py:70 #, python-brace-format msgid "" "Location {location} ({location_site}) is in a different site than {site}" msgstr "" -#: dcim/models/power.py:108 +#: netbox/dcim/models/power.py:108 msgid "supply" msgstr "" -#: dcim/models/power.py:114 +#: netbox/dcim/models/power.py:114 msgid "phase" msgstr "" -#: dcim/models/power.py:120 +#: netbox/dcim/models/power.py:120 msgid "voltage" msgstr "" -#: dcim/models/power.py:125 +#: netbox/dcim/models/power.py:125 msgid "amperage" msgstr "" -#: dcim/models/power.py:130 +#: netbox/dcim/models/power.py:130 msgid "max utilization" msgstr "" -#: dcim/models/power.py:133 +#: netbox/dcim/models/power.py:133 msgid "Maximum permissible draw (percentage)" msgstr "" -#: dcim/models/power.py:136 +#: netbox/dcim/models/power.py:136 msgid "available power" msgstr "" -#: dcim/models/power.py:164 +#: netbox/dcim/models/power.py:164 msgid "power feed" msgstr "" -#: dcim/models/power.py:165 +#: netbox/dcim/models/power.py:165 msgid "power feeds" msgstr "" -#: dcim/models/power.py:179 +#: netbox/dcim/models/power.py:179 #, python-brace-format msgid "" "Rack {rack} ({rack_site}) and power panel {powerpanel} ({powerpanel_site}) " "are in different sites." msgstr "" -#: dcim/models/power.py:190 +#: netbox/dcim/models/power.py:190 msgid "Voltage cannot be negative for AC supply" msgstr "" -#: dcim/models/racks.py:50 +#: netbox/dcim/models/racks.py:50 msgid "rack role" msgstr "" -#: dcim/models/racks.py:51 +#: netbox/dcim/models/racks.py:51 msgid "rack roles" msgstr "" -#: dcim/models/racks.py:75 +#: netbox/dcim/models/racks.py:75 msgid "facility ID" msgstr "" -#: dcim/models/racks.py:76 +#: netbox/dcim/models/racks.py:76 msgid "Locally-assigned identifier" msgstr "" -#: dcim/models/racks.py:109 ipam/forms/bulk_import.py:200 -#: ipam/forms/bulk_import.py:265 ipam/forms/bulk_import.py:300 -#: ipam/forms/bulk_import.py:467 virtualization/forms/bulk_import.py:112 +#: netbox/dcim/models/racks.py:109 netbox/ipam/forms/bulk_import.py:200 +#: netbox/ipam/forms/bulk_import.py:265 netbox/ipam/forms/bulk_import.py:300 +#: netbox/ipam/forms/bulk_import.py:467 +#: netbox/virtualization/forms/bulk_import.py:112 msgid "Functional role" msgstr "" -#: dcim/models/racks.py:122 +#: netbox/dcim/models/racks.py:122 msgid "A unique tag used to identify this rack" msgstr "" -#: dcim/models/racks.py:133 +#: netbox/dcim/models/racks.py:133 msgid "width" msgstr "" -#: dcim/models/racks.py:134 +#: netbox/dcim/models/racks.py:134 msgid "Rail-to-rail width" msgstr "" -#: dcim/models/racks.py:140 +#: netbox/dcim/models/racks.py:140 msgid "Height in rack units" msgstr "" -#: dcim/models/racks.py:144 +#: netbox/dcim/models/racks.py:144 msgid "starting unit" msgstr "" -#: dcim/models/racks.py:146 +#: netbox/dcim/models/racks.py:146 msgid "Starting unit for rack" msgstr "" -#: dcim/models/racks.py:150 +#: netbox/dcim/models/racks.py:150 msgid "descending units" msgstr "" -#: dcim/models/racks.py:151 +#: netbox/dcim/models/racks.py:151 msgid "Units are numbered top-to-bottom" msgstr "" -#: dcim/models/racks.py:154 +#: netbox/dcim/models/racks.py:154 msgid "outer width" msgstr "" -#: dcim/models/racks.py:157 +#: netbox/dcim/models/racks.py:157 msgid "Outer dimension of rack (width)" msgstr "" -#: dcim/models/racks.py:160 +#: netbox/dcim/models/racks.py:160 msgid "outer depth" msgstr "" -#: dcim/models/racks.py:163 +#: netbox/dcim/models/racks.py:163 msgid "Outer dimension of rack (depth)" msgstr "" -#: dcim/models/racks.py:166 +#: netbox/dcim/models/racks.py:166 msgid "outer unit" msgstr "" -#: dcim/models/racks.py:172 +#: netbox/dcim/models/racks.py:172 msgid "max weight" msgstr "" -#: dcim/models/racks.py:175 +#: netbox/dcim/models/racks.py:175 msgid "Maximum load capacity for the rack" msgstr "" -#: dcim/models/racks.py:183 +#: netbox/dcim/models/racks.py:183 msgid "mounting depth" msgstr "" -#: dcim/models/racks.py:187 +#: netbox/dcim/models/racks.py:187 msgid "" "Maximum depth of a mounted device, in millimeters. For four-post racks, this " "is the distance between the front and rear rails." msgstr "" -#: dcim/models/racks.py:221 +#: netbox/dcim/models/racks.py:221 msgid "rack" msgstr "" -#: dcim/models/racks.py:222 +#: netbox/dcim/models/racks.py:222 msgid "racks" msgstr "" -#: dcim/models/racks.py:237 +#: netbox/dcim/models/racks.py:237 #, python-brace-format msgid "Assigned location must belong to parent site ({site})." msgstr "" -#: dcim/models/racks.py:241 +#: netbox/dcim/models/racks.py:241 msgid "Must specify a unit when setting an outer width/depth" msgstr "" -#: dcim/models/racks.py:245 +#: netbox/dcim/models/racks.py:245 msgid "Must specify a unit when setting a maximum weight" msgstr "" -#: dcim/models/racks.py:255 +#: netbox/dcim/models/racks.py:255 #, python-brace-format msgid "" "Rack must be at least {min_height}U tall to house currently installed " "devices." msgstr "" -#: dcim/models/racks.py:262 +#: netbox/dcim/models/racks.py:262 #, python-brace-format msgid "" "Rack unit numbering must begin at {position} or less to house currently " "installed devices." msgstr "" -#: dcim/models/racks.py:270 +#: netbox/dcim/models/racks.py:270 #, python-brace-format msgid "Location must be from the same site, {site}." msgstr "" -#: dcim/models/racks.py:523 +#: netbox/dcim/models/racks.py:523 msgid "units" msgstr "" -#: dcim/models/racks.py:549 +#: netbox/dcim/models/racks.py:549 msgid "rack reservation" msgstr "" -#: dcim/models/racks.py:550 +#: netbox/dcim/models/racks.py:550 msgid "rack reservations" msgstr "" -#: dcim/models/racks.py:567 +#: netbox/dcim/models/racks.py:567 #, python-brace-format msgid "Invalid unit(s) for {height}U rack: {unit_list}" msgstr "" -#: dcim/models/racks.py:580 +#: netbox/dcim/models/racks.py:580 #, python-brace-format msgid "The following units have already been reserved: {unit_list}" msgstr "" -#: dcim/models/sites.py:49 +#: netbox/dcim/models/sites.py:49 msgid "A top-level region with this name already exists." msgstr "" -#: dcim/models/sites.py:59 +#: netbox/dcim/models/sites.py:59 msgid "A top-level region with this slug already exists." msgstr "" -#: dcim/models/sites.py:62 +#: netbox/dcim/models/sites.py:62 msgid "region" msgstr "" -#: dcim/models/sites.py:63 +#: netbox/dcim/models/sites.py:63 msgid "regions" msgstr "" -#: dcim/models/sites.py:102 +#: netbox/dcim/models/sites.py:102 msgid "A top-level site group with this name already exists." msgstr "" -#: dcim/models/sites.py:112 +#: netbox/dcim/models/sites.py:112 msgid "A top-level site group with this slug already exists." msgstr "" -#: dcim/models/sites.py:115 +#: netbox/dcim/models/sites.py:115 msgid "site group" msgstr "" -#: dcim/models/sites.py:116 +#: netbox/dcim/models/sites.py:116 msgid "site groups" msgstr "" -#: dcim/models/sites.py:141 +#: netbox/dcim/models/sites.py:141 msgid "Full name of the site" msgstr "" -#: dcim/models/sites.py:181 dcim/models/sites.py:279 +#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:279 msgid "facility" msgstr "" -#: dcim/models/sites.py:184 dcim/models/sites.py:282 +#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:282 msgid "Local facility ID or description" msgstr "" -#: dcim/models/sites.py:195 +#: netbox/dcim/models/sites.py:195 msgid "physical address" msgstr "" -#: dcim/models/sites.py:198 +#: netbox/dcim/models/sites.py:198 msgid "Physical location of the building" msgstr "" -#: dcim/models/sites.py:201 +#: netbox/dcim/models/sites.py:201 msgid "shipping address" msgstr "" -#: dcim/models/sites.py:204 +#: netbox/dcim/models/sites.py:204 msgid "If different from the physical address" msgstr "" -#: dcim/models/sites.py:238 +#: netbox/dcim/models/sites.py:238 msgid "site" msgstr "" -#: dcim/models/sites.py:239 +#: netbox/dcim/models/sites.py:239 msgid "sites" msgstr "" -#: dcim/models/sites.py:309 +#: netbox/dcim/models/sites.py:309 msgid "A location with this name already exists within the specified site." msgstr "" -#: dcim/models/sites.py:319 +#: netbox/dcim/models/sites.py:319 msgid "A location with this slug already exists within the specified site." msgstr "" -#: dcim/models/sites.py:322 +#: netbox/dcim/models/sites.py:322 msgid "location" msgstr "" -#: dcim/models/sites.py:323 +#: netbox/dcim/models/sites.py:323 msgid "locations" msgstr "" -#: dcim/models/sites.py:337 +#: netbox/dcim/models/sites.py:337 #, python-brace-format msgid "Parent location ({parent}) must belong to the same site ({site})." msgstr "" -#: dcim/tables/cables.py:54 +#: netbox/dcim/tables/cables.py:54 msgid "Termination A" msgstr "" -#: dcim/tables/cables.py:59 +#: netbox/dcim/tables/cables.py:59 msgid "Termination B" msgstr "" -#: dcim/tables/cables.py:65 wireless/tables/wirelesslink.py:22 +#: netbox/dcim/tables/cables.py:65 netbox/wireless/tables/wirelesslink.py:22 msgid "Device A" msgstr "" -#: dcim/tables/cables.py:71 wireless/tables/wirelesslink.py:31 +#: netbox/dcim/tables/cables.py:71 netbox/wireless/tables/wirelesslink.py:31 msgid "Device B" msgstr "" -#: dcim/tables/cables.py:77 +#: netbox/dcim/tables/cables.py:77 msgid "Location A" msgstr "" -#: dcim/tables/cables.py:83 +#: netbox/dcim/tables/cables.py:83 msgid "Location B" msgstr "" -#: dcim/tables/cables.py:89 +#: netbox/dcim/tables/cables.py:89 msgid "Rack A" msgstr "" -#: dcim/tables/cables.py:95 +#: netbox/dcim/tables/cables.py:95 msgid "Rack B" msgstr "" -#: dcim/tables/cables.py:101 +#: netbox/dcim/tables/cables.py:101 msgid "Site A" msgstr "" -#: dcim/tables/cables.py:107 +#: netbox/dcim/tables/cables.py:107 msgid "Site B" msgstr "" -#: dcim/tables/connections.py:31 dcim/tables/connections.py:50 -#: dcim/tables/connections.py:71 -#: templates/dcim/inc/connection_endpoints.html:16 +#: netbox/dcim/tables/connections.py:31 netbox/dcim/tables/connections.py:50 +#: netbox/dcim/tables/connections.py:71 +#: netbox/templates/dcim/inc/connection_endpoints.html:16 msgid "Reachable" msgstr "" -#: dcim/tables/devices.py:66 dcim/tables/devices.py:111 dcim/tables/racks.py:81 -#: dcim/tables/sites.py:143 extras/tables/tables.py:435 -#: netbox/navigation/menu.py:56 netbox/navigation/menu.py:60 -#: netbox/navigation/menu.py:62 virtualization/forms/model_forms.py:122 -#: virtualization/tables/clusters.py:83 virtualization/views.py:210 +#: netbox/dcim/tables/devices.py:66 netbox/dcim/tables/devices.py:111 +#: netbox/dcim/tables/racks.py:81 netbox/dcim/tables/sites.py:143 +#: netbox/extras/tables/tables.py:435 netbox/netbox/navigation/menu.py:56 +#: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 +#: netbox/virtualization/forms/model_forms.py:122 +#: netbox/virtualization/tables/clusters.py:83 +#: netbox/virtualization/views.py:210 msgid "Devices" msgstr "" -#: dcim/tables/devices.py:71 dcim/tables/devices.py:116 -#: virtualization/tables/clusters.py:88 +#: netbox/dcim/tables/devices.py:71 netbox/dcim/tables/devices.py:116 +#: netbox/virtualization/tables/clusters.py:88 msgid "VMs" msgstr "" -#: dcim/tables/devices.py:105 dcim/tables/devices.py:221 -#: extras/forms/model_forms.py:506 templates/dcim/device.html:111 -#: templates/dcim/device/render_config.html:11 -#: templates/dcim/device/render_config.html:14 -#: templates/dcim/devicerole.html:44 templates/dcim/platform.html:41 -#: templates/extras/configtemplate.html:10 -#: templates/virtualization/virtualmachine.html:44 -#: templates/virtualization/virtualmachine/render_config.html:11 -#: templates/virtualization/virtualmachine/render_config.html:14 -#: virtualization/tables/virtualmachines.py:106 +#: netbox/dcim/tables/devices.py:105 netbox/dcim/tables/devices.py:221 +#: netbox/extras/forms/model_forms.py:506 netbox/templates/dcim/device.html:112 +#: netbox/templates/dcim/device/render_config.html:11 +#: netbox/templates/dcim/device/render_config.html:14 +#: netbox/templates/dcim/devicerole.html:44 +#: netbox/templates/dcim/platform.html:41 +#: netbox/templates/extras/configtemplate.html:10 +#: netbox/templates/virtualization/virtualmachine.html:44 +#: netbox/templates/virtualization/virtualmachine/render_config.html:11 +#: netbox/templates/virtualization/virtualmachine/render_config.html:14 +#: netbox/virtualization/tables/virtualmachines.py:106 msgid "Config Template" msgstr "" -#: dcim/tables/devices.py:155 templates/dcim/sitegroup.html:26 +#: netbox/dcim/tables/devices.py:155 netbox/templates/dcim/sitegroup.html:26 msgid "Site Group" msgstr "" -#: dcim/tables/devices.py:192 dcim/tables/devices.py:1051 -#: ipam/forms/bulk_import.py:511 ipam/forms/model_forms.py:304 -#: ipam/forms/model_forms.py:313 ipam/tables/ip.py:352 ipam/tables/ip.py:418 -#: ipam/tables/ip.py:441 templates/ipam/ipaddress.html:11 -#: virtualization/tables/virtualmachines.py:94 +#: netbox/dcim/tables/devices.py:192 netbox/dcim/tables/devices.py:1051 +#: netbox/ipam/forms/bulk_import.py:511 netbox/ipam/forms/model_forms.py:304 +#: netbox/ipam/forms/model_forms.py:313 netbox/ipam/tables/ip.py:352 +#: netbox/ipam/tables/ip.py:418 netbox/ipam/tables/ip.py:441 +#: netbox/templates/ipam/ipaddress.html:11 +#: netbox/virtualization/tables/virtualmachines.py:94 msgid "IP Address" msgstr "" -#: dcim/tables/devices.py:196 dcim/tables/devices.py:1055 -#: virtualization/tables/virtualmachines.py:85 +#: netbox/dcim/tables/devices.py:196 netbox/dcim/tables/devices.py:1055 +#: netbox/virtualization/tables/virtualmachines.py:85 msgid "IPv4 Address" msgstr "" -#: dcim/tables/devices.py:200 dcim/tables/devices.py:1059 -#: virtualization/tables/virtualmachines.py:89 +#: netbox/dcim/tables/devices.py:200 netbox/dcim/tables/devices.py:1059 +#: netbox/virtualization/tables/virtualmachines.py:89 msgid "IPv6 Address" msgstr "" -#: dcim/tables/devices.py:215 +#: netbox/dcim/tables/devices.py:215 msgid "VC Position" msgstr "" -#: dcim/tables/devices.py:218 +#: netbox/dcim/tables/devices.py:218 msgid "VC Priority" msgstr "" -#: dcim/tables/devices.py:225 templates/dcim/device_edit.html:38 -#: templates/dcim/devicebay_populate.html:16 +#: netbox/dcim/tables/devices.py:225 netbox/templates/dcim/device_edit.html:38 +#: netbox/templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "" -#: dcim/tables/devices.py:230 +#: netbox/dcim/tables/devices.py:230 msgid "Position (Device Bay)" msgstr "" -#: dcim/tables/devices.py:239 +#: netbox/dcim/tables/devices.py:239 msgid "Console ports" msgstr "" -#: dcim/tables/devices.py:242 +#: netbox/dcim/tables/devices.py:242 msgid "Console server ports" msgstr "" -#: dcim/tables/devices.py:245 +#: netbox/dcim/tables/devices.py:245 msgid "Power ports" msgstr "" -#: dcim/tables/devices.py:248 +#: netbox/dcim/tables/devices.py:248 msgid "Power outlets" msgstr "" -#: dcim/tables/devices.py:251 dcim/tables/devices.py:1064 -#: dcim/tables/devicetypes.py:125 dcim/views.py:1006 dcim/views.py:1245 -#: dcim/views.py:1931 netbox/navigation/menu.py:81 -#: netbox/navigation/menu.py:237 templates/dcim/device/base.html:37 -#: templates/dcim/device_list.html:43 templates/dcim/devicetype/base.html:34 -#: templates/dcim/module.html:34 templates/dcim/moduletype/base.html:34 -#: templates/dcim/virtualdevicecontext.html:61 -#: templates/dcim/virtualdevicecontext.html:81 -#: templates/virtualization/virtualmachine/base.html:27 -#: templates/virtualization/virtualmachine_list.html:14 -#: virtualization/tables/virtualmachines.py:100 virtualization/views.py:367 -#: wireless/tables/wirelesslan.py:55 +#: netbox/dcim/tables/devices.py:251 netbox/dcim/tables/devices.py:1064 +#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1006 +#: netbox/dcim/views.py:1245 netbox/dcim/views.py:1931 +#: netbox/netbox/navigation/menu.py:81 netbox/netbox/navigation/menu.py:237 +#: netbox/templates/dcim/device/base.html:37 +#: netbox/templates/dcim/device_list.html:43 +#: netbox/templates/dcim/devicetype/base.html:34 +#: netbox/templates/dcim/module.html:34 +#: netbox/templates/dcim/moduletype/base.html:34 +#: netbox/templates/dcim/virtualdevicecontext.html:61 +#: netbox/templates/dcim/virtualdevicecontext.html:81 +#: netbox/templates/virtualization/virtualmachine/base.html:27 +#: netbox/templates/virtualization/virtualmachine_list.html:14 +#: netbox/virtualization/tables/virtualmachines.py:100 +#: netbox/virtualization/views.py:367 netbox/wireless/tables/wirelesslan.py:55 msgid "Interfaces" msgstr "" -#: dcim/tables/devices.py:254 +#: netbox/dcim/tables/devices.py:254 msgid "Front ports" msgstr "" -#: dcim/tables/devices.py:260 +#: netbox/dcim/tables/devices.py:260 msgid "Device bays" msgstr "" -#: dcim/tables/devices.py:263 +#: netbox/dcim/tables/devices.py:263 msgid "Module bays" msgstr "" -#: dcim/tables/devices.py:266 +#: netbox/dcim/tables/devices.py:266 msgid "Inventory items" msgstr "" -#: dcim/tables/devices.py:305 dcim/tables/modules.py:56 -#: templates/dcim/modulebay.html:17 +#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:56 +#: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "" -#: dcim/tables/devices.py:318 dcim/tables/devicetypes.py:48 -#: dcim/tables/devicetypes.py:140 dcim/views.py:1081 dcim/views.py:2024 -#: netbox/navigation/menu.py:90 templates/dcim/device/base.html:52 -#: templates/dcim/device_list.html:71 templates/dcim/devicetype/base.html:49 -#: templates/dcim/inc/panels/inventory_items.html:6 -#: templates/dcim/inventoryitemrole.html:32 +#: netbox/dcim/tables/devices.py:318 netbox/dcim/tables/devicetypes.py:48 +#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1081 +#: netbox/dcim/views.py:2024 netbox/netbox/navigation/menu.py:90 +#: netbox/templates/dcim/device/base.html:52 +#: netbox/templates/dcim/device_list.html:71 +#: netbox/templates/dcim/devicetype/base.html:49 +#: netbox/templates/dcim/inc/panels/inventory_items.html:6 +#: netbox/templates/dcim/inventoryitemrole.html:32 msgid "Inventory Items" msgstr "" -#: dcim/tables/devices.py:330 +#: netbox/dcim/tables/devices.py:330 msgid "Cable Color" msgstr "" -#: dcim/tables/devices.py:336 +#: netbox/dcim/tables/devices.py:336 msgid "Link Peers" msgstr "" -#: dcim/tables/devices.py:339 +#: netbox/dcim/tables/devices.py:339 msgid "Mark Connected" msgstr "" -#: dcim/tables/devices.py:455 +#: netbox/dcim/tables/devices.py:455 msgid "Maximum draw (W)" msgstr "" -#: dcim/tables/devices.py:458 +#: netbox/dcim/tables/devices.py:458 msgid "Allocated draw (W)" msgstr "" -#: dcim/tables/devices.py:558 ipam/forms/model_forms.py:747 -#: ipam/tables/fhrp.py:28 ipam/views.py:602 ipam/views.py:701 -#: netbox/navigation/menu.py:145 netbox/navigation/menu.py:147 -#: templates/dcim/interface.html:339 templates/ipam/ipaddress_bulk_add.html:15 -#: templates/ipam/service.html:40 templates/virtualization/vminterface.html:85 -#: vpn/tables/tunnels.py:98 +#: netbox/dcim/tables/devices.py:558 netbox/ipam/forms/model_forms.py:747 +#: netbox/ipam/tables/fhrp.py:28 netbox/ipam/views.py:602 +#: netbox/ipam/views.py:701 netbox/netbox/navigation/menu.py:145 +#: netbox/netbox/navigation/menu.py:147 +#: netbox/templates/dcim/interface.html:339 +#: netbox/templates/ipam/ipaddress_bulk_add.html:15 +#: netbox/templates/ipam/service.html:40 +#: netbox/templates/virtualization/vminterface.html:85 +#: netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "" -#: dcim/tables/devices.py:564 netbox/navigation/menu.py:189 -#: templates/ipam/inc/panels/fhrp_groups.html:6 +#: netbox/dcim/tables/devices.py:564 netbox/netbox/navigation/menu.py:189 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:6 msgid "FHRP Groups" msgstr "" -#: dcim/tables/devices.py:576 templates/dcim/interface.html:89 -#: templates/virtualization/vminterface.html:67 templates/vpn/tunnel.html:18 -#: templates/vpn/tunneltermination.html:13 vpn/forms/bulk_edit.py:76 -#: vpn/forms/bulk_import.py:76 vpn/forms/filtersets.py:42 -#: vpn/forms/filtersets.py:82 vpn/forms/model_forms.py:60 -#: vpn/forms/model_forms.py:145 vpn/tables/tunnels.py:78 +#: netbox/dcim/tables/devices.py:576 netbox/templates/dcim/interface.html:89 +#: netbox/templates/virtualization/vminterface.html:67 +#: netbox/templates/vpn/tunnel.html:18 +#: netbox/templates/vpn/tunneltermination.html:13 +#: netbox/vpn/forms/bulk_edit.py:76 netbox/vpn/forms/bulk_import.py:76 +#: netbox/vpn/forms/filtersets.py:42 netbox/vpn/forms/filtersets.py:82 +#: netbox/vpn/forms/model_forms.py:60 netbox/vpn/forms/model_forms.py:145 +#: netbox/vpn/tables/tunnels.py:78 msgid "Tunnel" msgstr "" -#: dcim/tables/devices.py:601 dcim/tables/devicetypes.py:224 -#: templates/dcim/interface.html:65 +#: netbox/dcim/tables/devices.py:601 netbox/dcim/tables/devicetypes.py:224 +#: netbox/templates/dcim/interface.html:65 msgid "Management Only" msgstr "" -#: dcim/tables/devices.py:619 +#: netbox/dcim/tables/devices.py:619 msgid "VDCs" msgstr "" -#: dcim/tables/devices.py:870 templates/dcim/modulebay.html:49 +#: netbox/dcim/tables/devices.py:870 netbox/templates/dcim/modulebay.html:49 msgid "Installed Module" msgstr "" -#: dcim/tables/devices.py:873 +#: netbox/dcim/tables/devices.py:873 msgid "Module Serial" msgstr "" -#: dcim/tables/devices.py:877 +#: netbox/dcim/tables/devices.py:877 msgid "Module Asset Tag" msgstr "" -#: dcim/tables/devices.py:886 +#: netbox/dcim/tables/devices.py:886 msgid "Module Status" msgstr "" -#: dcim/tables/devices.py:928 dcim/tables/devicetypes.py:308 -#: templates/dcim/inventoryitem.html:40 +#: netbox/dcim/tables/devices.py:928 netbox/dcim/tables/devicetypes.py:308 +#: netbox/templates/dcim/inventoryitem.html:40 msgid "Component" msgstr "" -#: dcim/tables/devices.py:983 +#: netbox/dcim/tables/devices.py:983 msgid "Items" msgstr "" -#: dcim/tables/devicetypes.py:38 netbox/navigation/menu.py:71 -#: netbox/navigation/menu.py:73 +#: netbox/dcim/tables/devicetypes.py:38 netbox/netbox/navigation/menu.py:71 +#: netbox/netbox/navigation/menu.py:73 msgid "Device Types" msgstr "" -#: dcim/tables/devicetypes.py:43 netbox/navigation/menu.py:74 +#: netbox/dcim/tables/devicetypes.py:43 netbox/netbox/navigation/menu.py:74 msgid "Module Types" msgstr "" -#: dcim/tables/devicetypes.py:53 extras/forms/filtersets.py:380 -#: extras/forms/model_forms.py:413 extras/tables/tables.py:430 -#: netbox/navigation/menu.py:65 +#: netbox/dcim/tables/devicetypes.py:53 netbox/extras/forms/filtersets.py:380 +#: netbox/extras/forms/model_forms.py:413 netbox/extras/tables/tables.py:430 +#: netbox/netbox/navigation/menu.py:65 msgid "Platforms" msgstr "" -#: dcim/tables/devicetypes.py:85 templates/dcim/devicetype.html:29 +#: netbox/dcim/tables/devicetypes.py:85 +#: netbox/templates/dcim/devicetype.html:29 msgid "Default Platform" msgstr "" -#: dcim/tables/devicetypes.py:89 templates/dcim/devicetype.html:45 +#: netbox/dcim/tables/devicetypes.py:89 +#: netbox/templates/dcim/devicetype.html:45 msgid "Full Depth" msgstr "" -#: dcim/tables/devicetypes.py:98 +#: netbox/dcim/tables/devicetypes.py:98 msgid "U Height" msgstr "" -#: dcim/tables/devicetypes.py:110 dcim/tables/modules.py:26 +#: netbox/dcim/tables/devicetypes.py:110 netbox/dcim/tables/modules.py:26 msgid "Instances" msgstr "" -#: dcim/tables/devicetypes.py:113 dcim/views.py:946 dcim/views.py:1185 -#: dcim/views.py:1871 netbox/navigation/menu.py:84 -#: templates/dcim/device/base.html:25 templates/dcim/device_list.html:15 -#: templates/dcim/devicetype/base.html:22 templates/dcim/module.html:22 -#: templates/dcim/moduletype/base.html:22 +#: netbox/dcim/tables/devicetypes.py:113 netbox/dcim/views.py:946 +#: netbox/dcim/views.py:1185 netbox/dcim/views.py:1871 +#: netbox/netbox/navigation/menu.py:84 +#: netbox/templates/dcim/device/base.html:25 +#: netbox/templates/dcim/device_list.html:15 +#: netbox/templates/dcim/devicetype/base.html:22 +#: netbox/templates/dcim/module.html:22 +#: netbox/templates/dcim/moduletype/base.html:22 msgid "Console Ports" msgstr "" -#: dcim/tables/devicetypes.py:116 dcim/views.py:961 dcim/views.py:1200 -#: dcim/views.py:1886 netbox/navigation/menu.py:85 -#: templates/dcim/device/base.html:28 templates/dcim/device_list.html:22 -#: templates/dcim/devicetype/base.html:25 templates/dcim/module.html:25 -#: templates/dcim/moduletype/base.html:25 +#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:961 +#: netbox/dcim/views.py:1200 netbox/dcim/views.py:1886 +#: netbox/netbox/navigation/menu.py:85 +#: netbox/templates/dcim/device/base.html:28 +#: netbox/templates/dcim/device_list.html:22 +#: netbox/templates/dcim/devicetype/base.html:25 +#: netbox/templates/dcim/module.html:25 +#: netbox/templates/dcim/moduletype/base.html:25 msgid "Console Server Ports" msgstr "" -#: dcim/tables/devicetypes.py:119 dcim/views.py:976 dcim/views.py:1215 -#: dcim/views.py:1901 netbox/navigation/menu.py:86 -#: templates/dcim/device/base.html:31 templates/dcim/device_list.html:29 -#: templates/dcim/devicetype/base.html:28 templates/dcim/module.html:28 -#: templates/dcim/moduletype/base.html:28 +#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:976 +#: netbox/dcim/views.py:1215 netbox/dcim/views.py:1901 +#: netbox/netbox/navigation/menu.py:86 +#: netbox/templates/dcim/device/base.html:31 +#: netbox/templates/dcim/device_list.html:29 +#: netbox/templates/dcim/devicetype/base.html:28 +#: netbox/templates/dcim/module.html:28 +#: netbox/templates/dcim/moduletype/base.html:28 msgid "Power Ports" msgstr "" -#: dcim/tables/devicetypes.py:122 dcim/views.py:991 dcim/views.py:1230 -#: dcim/views.py:1916 netbox/navigation/menu.py:87 -#: templates/dcim/device/base.html:34 templates/dcim/device_list.html:36 -#: templates/dcim/devicetype/base.html:31 templates/dcim/module.html:31 -#: templates/dcim/moduletype/base.html:31 +#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:991 +#: netbox/dcim/views.py:1230 netbox/dcim/views.py:1916 +#: netbox/netbox/navigation/menu.py:87 +#: netbox/templates/dcim/device/base.html:34 +#: netbox/templates/dcim/device_list.html:36 +#: netbox/templates/dcim/devicetype/base.html:31 +#: netbox/templates/dcim/module.html:31 +#: netbox/templates/dcim/moduletype/base.html:31 msgid "Power Outlets" msgstr "" -#: dcim/tables/devicetypes.py:128 dcim/views.py:1021 dcim/views.py:1260 -#: dcim/views.py:1952 netbox/navigation/menu.py:82 -#: templates/dcim/device/base.html:40 templates/dcim/devicetype/base.html:37 -#: templates/dcim/module.html:37 templates/dcim/moduletype/base.html:37 +#: netbox/dcim/tables/devicetypes.py:128 netbox/dcim/views.py:1021 +#: netbox/dcim/views.py:1260 netbox/dcim/views.py:1952 +#: netbox/netbox/navigation/menu.py:82 +#: netbox/templates/dcim/device/base.html:40 +#: netbox/templates/dcim/devicetype/base.html:37 +#: netbox/templates/dcim/module.html:37 +#: netbox/templates/dcim/moduletype/base.html:37 msgid "Front Ports" msgstr "" -#: dcim/tables/devicetypes.py:131 dcim/views.py:1036 dcim/views.py:1275 -#: dcim/views.py:1967 netbox/navigation/menu.py:83 -#: templates/dcim/device/base.html:43 templates/dcim/device_list.html:50 -#: templates/dcim/devicetype/base.html:40 templates/dcim/module.html:40 -#: templates/dcim/moduletype/base.html:40 +#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1036 +#: netbox/dcim/views.py:1275 netbox/dcim/views.py:1967 +#: netbox/netbox/navigation/menu.py:83 +#: netbox/templates/dcim/device/base.html:43 +#: netbox/templates/dcim/device_list.html:50 +#: netbox/templates/dcim/devicetype/base.html:40 +#: netbox/templates/dcim/module.html:40 +#: netbox/templates/dcim/moduletype/base.html:40 msgid "Rear Ports" msgstr "" -#: dcim/tables/devicetypes.py:134 dcim/views.py:1066 dcim/views.py:2005 -#: netbox/navigation/menu.py:89 templates/dcim/device/base.html:49 -#: templates/dcim/device_list.html:57 templates/dcim/devicetype/base.html:46 +#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1066 +#: netbox/dcim/views.py:2005 netbox/netbox/navigation/menu.py:89 +#: netbox/templates/dcim/device/base.html:49 +#: netbox/templates/dcim/device_list.html:57 +#: netbox/templates/dcim/devicetype/base.html:46 msgid "Device Bays" msgstr "" -#: dcim/tables/devicetypes.py:137 dcim/views.py:1051 dcim/views.py:1986 -#: netbox/navigation/menu.py:88 templates/dcim/device/base.html:46 -#: templates/dcim/device_list.html:64 templates/dcim/devicetype/base.html:43 +#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1051 +#: netbox/dcim/views.py:1986 netbox/netbox/navigation/menu.py:88 +#: netbox/templates/dcim/device/base.html:46 +#: netbox/templates/dcim/device_list.html:64 +#: netbox/templates/dcim/devicetype/base.html:43 msgid "Module Bays" msgstr "" -#: dcim/tables/power.py:36 netbox/navigation/menu.py:282 -#: templates/dcim/powerpanel.html:51 +#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:282 +#: netbox/templates/dcim/powerpanel.html:51 msgid "Power Feeds" msgstr "" -#: dcim/tables/power.py:80 templates/dcim/powerfeed.html:99 +#: netbox/dcim/tables/power.py:80 netbox/templates/dcim/powerfeed.html:99 msgid "Max Utilization" msgstr "" -#: dcim/tables/power.py:84 +#: netbox/dcim/tables/power.py:84 msgid "Available Power (VA)" msgstr "" -#: dcim/tables/racks.py:29 dcim/tables/sites.py:138 -#: netbox/navigation/menu.py:24 netbox/navigation/menu.py:26 +#: netbox/dcim/tables/racks.py:29 netbox/dcim/tables/sites.py:138 +#: netbox/netbox/navigation/menu.py:24 netbox/netbox/navigation/menu.py:26 msgid "Racks" msgstr "" -#: dcim/tables/racks.py:73 templates/dcim/device.html:310 -#: templates/dcim/rack.html:90 +#: netbox/dcim/tables/racks.py:73 netbox/templates/dcim/device.html:311 +#: netbox/templates/dcim/rack.html:90 msgid "Height" msgstr "" -#: dcim/tables/racks.py:85 +#: netbox/dcim/tables/racks.py:85 msgid "Space" msgstr "" -#: dcim/tables/racks.py:96 templates/dcim/rack.html:100 +#: netbox/dcim/tables/racks.py:96 netbox/templates/dcim/rack.html:100 msgid "Outer Width" msgstr "" -#: dcim/tables/racks.py:100 templates/dcim/rack.html:110 +#: netbox/dcim/tables/racks.py:100 netbox/templates/dcim/rack.html:110 msgid "Outer Depth" msgstr "" -#: dcim/tables/racks.py:108 +#: netbox/dcim/tables/racks.py:108 msgid "Max Weight" msgstr "" -#: dcim/tables/sites.py:30 dcim/tables/sites.py:57 -#: extras/forms/filtersets.py:360 extras/forms/model_forms.py:393 -#: ipam/forms/bulk_edit.py:129 ipam/forms/model_forms.py:151 -#: ipam/tables/asn.py:66 netbox/navigation/menu.py:15 -#: netbox/navigation/menu.py:17 +#: netbox/dcim/tables/sites.py:30 netbox/dcim/tables/sites.py:57 +#: netbox/extras/forms/filtersets.py:360 netbox/extras/forms/model_forms.py:393 +#: netbox/ipam/forms/bulk_edit.py:129 netbox/ipam/forms/model_forms.py:151 +#: netbox/ipam/tables/asn.py:66 netbox/netbox/navigation/menu.py:15 +#: netbox/netbox/navigation/menu.py:17 msgid "Sites" msgstr "" -#: dcim/tests/test_api.py:50 +#: netbox/dcim/tests/test_api.py:50 msgid "Test case must set peer_termination_type" msgstr "" -#: dcim/views.py:137 +#: netbox/dcim/views.py:137 #, python-brace-format msgid "Disconnected {count} {type}" msgstr "" -#: dcim/views.py:698 netbox/navigation/menu.py:28 +#: netbox/dcim/views.py:698 netbox/netbox/navigation/menu.py:28 msgid "Reservations" msgstr "" -#: dcim/views.py:716 templates/dcim/location.html:90 -#: templates/dcim/site.html:139 +#: netbox/dcim/views.py:716 netbox/templates/dcim/location.html:90 +#: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "" -#: dcim/views.py:2037 extras/forms/model_forms.py:453 -#: templates/extras/configcontext.html:10 -#: virtualization/forms/model_forms.py:225 virtualization/views.py:407 +#: netbox/dcim/views.py:2037 netbox/extras/forms/model_forms.py:453 +#: netbox/templates/extras/configcontext.html:10 +#: netbox/virtualization/forms/model_forms.py:225 +#: netbox/virtualization/views.py:407 msgid "Config Context" msgstr "" -#: dcim/views.py:2047 virtualization/views.py:417 +#: netbox/dcim/views.py:2047 netbox/virtualization/views.py:417 msgid "Render Config" msgstr "" -#: dcim/views.py:2097 extras/tables/tables.py:440 netbox/navigation/menu.py:234 -#: netbox/navigation/menu.py:236 virtualization/views.py:185 +#: netbox/dcim/views.py:2097 netbox/extras/tables/tables.py:440 +#: netbox/netbox/navigation/menu.py:234 netbox/netbox/navigation/menu.py:236 +#: netbox/virtualization/views.py:185 msgid "Virtual Machines" msgstr "" -#: dcim/views.py:2989 ipam/tables/ip.py:233 +#: netbox/dcim/views.py:2989 netbox/ipam/tables/ip.py:233 msgid "Children" msgstr "" -#: extras/api/customfields.py:88 +#: netbox/extras/api/customfields.py:88 #, python-brace-format msgid "Unknown related object(s): {name}" msgstr "" -#: extras/api/serializers_/customfields.py:74 +#: netbox/extras/api/serializers_/customfields.py:74 msgid "Changing the type of custom fields is not supported." msgstr "" -#: extras/api/serializers_/scripts.py:71 extras/api/serializers_/scripts.py:76 +#: netbox/extras/api/serializers_/scripts.py:71 +#: netbox/extras/api/serializers_/scripts.py:76 msgid "Scheduling is not enabled for this script." msgstr "" -#: extras/choices.py:30 extras/forms/misc.py:14 +#: netbox/extras/choices.py:30 netbox/extras/forms/misc.py:14 msgid "Text" msgstr "" -#: extras/choices.py:31 +#: netbox/extras/choices.py:31 msgid "Text (long)" msgstr "" -#: extras/choices.py:32 +#: netbox/extras/choices.py:32 msgid "Integer" msgstr "" -#: extras/choices.py:33 +#: netbox/extras/choices.py:33 msgid "Decimal" msgstr "" -#: extras/choices.py:34 +#: netbox/extras/choices.py:34 msgid "Boolean (true/false)" msgstr "" -#: extras/choices.py:35 +#: netbox/extras/choices.py:35 msgid "Date" msgstr "" -#: extras/choices.py:36 +#: netbox/extras/choices.py:36 msgid "Date & time" msgstr "" -#: extras/choices.py:38 +#: netbox/extras/choices.py:38 msgid "JSON" msgstr "" -#: extras/choices.py:39 +#: netbox/extras/choices.py:39 msgid "Selection" msgstr "" -#: extras/choices.py:40 +#: netbox/extras/choices.py:40 msgid "Multiple selection" msgstr "" -#: extras/choices.py:42 +#: netbox/extras/choices.py:42 msgid "Multiple objects" msgstr "" -#: extras/choices.py:53 netbox/preferences.py:21 -#: templates/extras/customfield.html:66 vpn/choices.py:20 -#: wireless/choices.py:27 +#: netbox/extras/choices.py:53 netbox/netbox/preferences.py:21 +#: netbox/templates/extras/customfield.html:66 netbox/vpn/choices.py:20 +#: netbox/wireless/choices.py:27 msgid "Disabled" msgstr "" -#: extras/choices.py:54 +#: netbox/extras/choices.py:54 msgid "Loose" msgstr "" -#: extras/choices.py:55 +#: netbox/extras/choices.py:55 msgid "Exact" msgstr "" -#: extras/choices.py:66 +#: netbox/extras/choices.py:66 msgid "Always" msgstr "" -#: extras/choices.py:67 +#: netbox/extras/choices.py:67 msgid "If set" msgstr "" -#: extras/choices.py:68 extras/choices.py:81 +#: netbox/extras/choices.py:68 netbox/extras/choices.py:81 msgid "Hidden" msgstr "" -#: extras/choices.py:79 +#: netbox/extras/choices.py:79 msgid "Yes" msgstr "" -#: extras/choices.py:80 +#: netbox/extras/choices.py:80 msgid "No" msgstr "" -#: extras/choices.py:108 templates/tenancy/contact.html:57 -#: tenancy/forms/bulk_edit.py:118 wireless/forms/model_forms.py:162 +#: netbox/extras/choices.py:108 netbox/templates/tenancy/contact.html:57 +#: netbox/tenancy/forms/bulk_edit.py:118 +#: netbox/wireless/forms/model_forms.py:162 msgid "Link" msgstr "" -#: extras/choices.py:122 +#: netbox/extras/choices.py:122 msgid "Newest" msgstr "" -#: extras/choices.py:123 +#: netbox/extras/choices.py:123 msgid "Oldest" msgstr "" -#: extras/choices.py:139 templates/generic/object.html:61 +#: netbox/extras/choices.py:139 netbox/templates/generic/object.html:61 msgid "Updated" msgstr "" -#: extras/choices.py:140 +#: netbox/extras/choices.py:140 msgid "Deleted" msgstr "" -#: extras/choices.py:157 extras/choices.py:181 +#: netbox/extras/choices.py:157 netbox/extras/choices.py:181 msgid "Info" msgstr "" -#: extras/choices.py:158 extras/choices.py:180 +#: netbox/extras/choices.py:158 netbox/extras/choices.py:180 msgid "Success" msgstr "" -#: extras/choices.py:159 extras/choices.py:182 +#: netbox/extras/choices.py:159 netbox/extras/choices.py:182 msgid "Warning" msgstr "" -#: extras/choices.py:160 +#: netbox/extras/choices.py:160 msgid "Danger" msgstr "" -#: extras/choices.py:178 +#: netbox/extras/choices.py:178 msgid "Debug" msgstr "" -#: extras/choices.py:179 netbox/choices.py:104 +#: netbox/extras/choices.py:179 netbox/netbox/choices.py:104 msgid "Default" msgstr "" -#: extras/choices.py:183 +#: netbox/extras/choices.py:183 msgid "Failure" msgstr "" -#: extras/choices.py:199 +#: netbox/extras/choices.py:199 msgid "Hourly" msgstr "" -#: extras/choices.py:200 +#: netbox/extras/choices.py:200 msgid "12 hours" msgstr "" -#: extras/choices.py:201 +#: netbox/extras/choices.py:201 msgid "Daily" msgstr "" -#: extras/choices.py:202 +#: netbox/extras/choices.py:202 msgid "Weekly" msgstr "" -#: extras/choices.py:203 +#: netbox/extras/choices.py:203 msgid "30 days" msgstr "" -#: extras/choices.py:268 extras/tables/tables.py:296 -#: templates/dcim/virtualchassis_edit.html:107 -#: templates/extras/eventrule.html:40 -#: templates/generic/bulk_add_component.html:68 -#: templates/generic/object_edit.html:47 templates/generic/object_edit.html:80 -#: templates/ipam/inc/ipaddress_edit_header.html:7 +#: netbox/extras/choices.py:268 netbox/extras/tables/tables.py:296 +#: netbox/templates/dcim/virtualchassis_edit.html:107 +#: netbox/templates/extras/eventrule.html:40 +#: netbox/templates/generic/bulk_add_component.html:68 +#: netbox/templates/generic/object_edit.html:47 +#: netbox/templates/generic/object_edit.html:80 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:7 msgid "Create" msgstr "" -#: extras/choices.py:269 extras/tables/tables.py:299 -#: templates/extras/eventrule.html:44 +#: netbox/extras/choices.py:269 netbox/extras/tables/tables.py:299 +#: netbox/templates/extras/eventrule.html:44 msgid "Update" msgstr "" -#: extras/choices.py:270 extras/tables/tables.py:302 -#: templates/circuits/inc/circuit_termination.html:23 -#: templates/dcim/inc/panels/inventory_items.html:37 -#: templates/dcim/moduletype/component_templates.html:23 -#: templates/dcim/powerpanel.html:66 templates/extras/eventrule.html:48 -#: templates/extras/script_list.html:37 templates/generic/bulk_delete.html:20 -#: templates/generic/bulk_delete.html:66 -#: templates/generic/object_delete.html:19 templates/htmx/delete_form.html:57 -#: templates/ipam/inc/panels/fhrp_groups.html:48 -#: templates/users/objectpermission.html:46 -#: utilities/templates/buttons/delete.html:11 +#: netbox/extras/choices.py:270 netbox/extras/tables/tables.py:302 +#: netbox/templates/circuits/inc/circuit_termination.html:23 +#: netbox/templates/dcim/inc/panels/inventory_items.html:37 +#: netbox/templates/dcim/moduletype/component_templates.html:23 +#: netbox/templates/dcim/powerpanel.html:66 +#: netbox/templates/extras/eventrule.html:48 +#: netbox/templates/extras/script_list.html:37 +#: netbox/templates/generic/bulk_delete.html:20 +#: netbox/templates/generic/bulk_delete.html:66 +#: netbox/templates/generic/object_delete.html:19 +#: netbox/templates/htmx/delete_form.html:57 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:48 +#: netbox/templates/users/objectpermission.html:46 +#: netbox/utilities/templates/buttons/delete.html:11 msgid "Delete" msgstr "" -#: extras/choices.py:294 netbox/choices.py:57 netbox/choices.py:105 +#: netbox/extras/choices.py:294 netbox/netbox/choices.py:57 +#: netbox/netbox/choices.py:105 msgid "Blue" msgstr "" -#: extras/choices.py:295 netbox/choices.py:56 netbox/choices.py:106 +#: netbox/extras/choices.py:295 netbox/netbox/choices.py:56 +#: netbox/netbox/choices.py:106 msgid "Indigo" msgstr "" -#: extras/choices.py:296 netbox/choices.py:54 netbox/choices.py:107 +#: netbox/extras/choices.py:296 netbox/netbox/choices.py:54 +#: netbox/netbox/choices.py:107 msgid "Purple" msgstr "" -#: extras/choices.py:297 netbox/choices.py:51 netbox/choices.py:108 +#: netbox/extras/choices.py:297 netbox/netbox/choices.py:51 +#: netbox/netbox/choices.py:108 msgid "Pink" msgstr "" -#: extras/choices.py:298 netbox/choices.py:50 netbox/choices.py:109 +#: netbox/extras/choices.py:298 netbox/netbox/choices.py:50 +#: netbox/netbox/choices.py:109 msgid "Red" msgstr "" -#: extras/choices.py:299 netbox/choices.py:68 netbox/choices.py:110 +#: netbox/extras/choices.py:299 netbox/netbox/choices.py:68 +#: netbox/netbox/choices.py:110 msgid "Orange" msgstr "" -#: extras/choices.py:300 netbox/choices.py:66 netbox/choices.py:111 +#: netbox/extras/choices.py:300 netbox/netbox/choices.py:66 +#: netbox/netbox/choices.py:111 msgid "Yellow" msgstr "" -#: extras/choices.py:301 netbox/choices.py:63 netbox/choices.py:112 +#: netbox/extras/choices.py:301 netbox/netbox/choices.py:63 +#: netbox/netbox/choices.py:112 msgid "Green" msgstr "" -#: extras/choices.py:302 netbox/choices.py:60 netbox/choices.py:113 +#: netbox/extras/choices.py:302 netbox/netbox/choices.py:60 +#: netbox/netbox/choices.py:113 msgid "Teal" msgstr "" -#: extras/choices.py:303 netbox/choices.py:59 netbox/choices.py:114 +#: netbox/extras/choices.py:303 netbox/netbox/choices.py:59 +#: netbox/netbox/choices.py:114 msgid "Cyan" msgstr "" -#: extras/choices.py:304 netbox/choices.py:115 +#: netbox/extras/choices.py:304 netbox/netbox/choices.py:115 msgid "Gray" msgstr "" -#: extras/choices.py:305 netbox/choices.py:74 netbox/choices.py:116 +#: netbox/extras/choices.py:305 netbox/netbox/choices.py:74 +#: netbox/netbox/choices.py:116 msgid "Black" msgstr "" -#: extras/choices.py:306 netbox/choices.py:75 netbox/choices.py:117 +#: netbox/extras/choices.py:306 netbox/netbox/choices.py:75 +#: netbox/netbox/choices.py:117 msgid "White" msgstr "" -#: extras/choices.py:320 extras/forms/model_forms.py:242 -#: extras/forms/model_forms.py:324 templates/extras/webhook.html:10 +#: netbox/extras/choices.py:320 netbox/extras/forms/model_forms.py:242 +#: netbox/extras/forms/model_forms.py:324 +#: netbox/templates/extras/webhook.html:10 msgid "Webhook" msgstr "" -#: extras/choices.py:321 extras/forms/model_forms.py:312 -#: templates/extras/script/base.html:29 +#: netbox/extras/choices.py:321 netbox/extras/forms/model_forms.py:312 +#: netbox/templates/extras/script/base.html:29 msgid "Script" msgstr "" -#: extras/conditions.py:54 +#: netbox/extras/conditions.py:54 #, python-brace-format msgid "Unknown operator: {op}. Must be one of: {operators}" msgstr "" -#: extras/conditions.py:58 +#: netbox/extras/conditions.py:58 #, python-brace-format msgid "Unsupported value type: {value}" msgstr "" -#: extras/conditions.py:60 +#: netbox/extras/conditions.py:60 #, python-brace-format msgid "Invalid type for {op} operation: {value}" msgstr "" -#: extras/conditions.py:137 +#: netbox/extras/conditions.py:137 #, python-brace-format msgid "Ruleset must be a dictionary, not {ruleset}." msgstr "" -#: extras/conditions.py:139 +#: netbox/extras/conditions.py:139 #, python-brace-format msgid "Ruleset must have exactly one logical operator (found {ruleset})" msgstr "" -#: extras/conditions.py:145 +#: netbox/extras/conditions.py:145 #, python-brace-format msgid "Invalid logic type: {logic} (must be '{op_and}' or '{op_or}')" msgstr "" -#: extras/dashboard/forms.py:38 +#: netbox/extras/dashboard/forms.py:38 msgid "Widget type" msgstr "" -#: extras/dashboard/utils.py:36 +#: netbox/extras/dashboard/utils.py:36 #, python-brace-format msgid "Unregistered widget class: {name}" msgstr "" -#: extras/dashboard/widgets.py:126 +#: netbox/extras/dashboard/widgets.py:126 #, python-brace-format msgid "{class_name} must define a render() method." msgstr "" -#: extras/dashboard/widgets.py:161 +#: netbox/extras/dashboard/widgets.py:161 msgid "Note" msgstr "" -#: extras/dashboard/widgets.py:162 +#: netbox/extras/dashboard/widgets.py:162 msgid "Display some arbitrary custom content. Markdown is supported." msgstr "" -#: extras/dashboard/widgets.py:175 +#: netbox/extras/dashboard/widgets.py:175 msgid "Object Counts" msgstr "" -#: extras/dashboard/widgets.py:176 +#: netbox/extras/dashboard/widgets.py:176 msgid "" "Display a set of NetBox models and the number of objects created for each " "type." msgstr "" -#: extras/dashboard/widgets.py:186 +#: netbox/extras/dashboard/widgets.py:186 msgid "Filters to apply when counting the number of objects" msgstr "" -#: extras/dashboard/widgets.py:194 +#: netbox/extras/dashboard/widgets.py:194 msgid "Invalid format. Object filters must be passed as a dictionary." msgstr "" -#: extras/dashboard/widgets.py:222 +#: netbox/extras/dashboard/widgets.py:222 msgid "Object List" msgstr "" -#: extras/dashboard/widgets.py:223 +#: netbox/extras/dashboard/widgets.py:223 msgid "Display an arbitrary list of objects." msgstr "" -#: extras/dashboard/widgets.py:236 +#: netbox/extras/dashboard/widgets.py:236 msgid "The default number of objects to display" msgstr "" -#: extras/dashboard/widgets.py:248 +#: netbox/extras/dashboard/widgets.py:248 msgid "Invalid format. URL parameters must be passed as a dictionary." msgstr "" -#: extras/dashboard/widgets.py:283 +#: netbox/extras/dashboard/widgets.py:283 msgid "RSS Feed" msgstr "" -#: extras/dashboard/widgets.py:288 +#: netbox/extras/dashboard/widgets.py:288 msgid "Embed an RSS feed from an external website." msgstr "" -#: extras/dashboard/widgets.py:295 +#: netbox/extras/dashboard/widgets.py:295 msgid "Feed URL" msgstr "" -#: extras/dashboard/widgets.py:300 +#: netbox/extras/dashboard/widgets.py:300 msgid "The maximum number of objects to display" msgstr "" -#: extras/dashboard/widgets.py:305 +#: netbox/extras/dashboard/widgets.py:305 msgid "How long to stored the cached content (in seconds)" msgstr "" -#: extras/dashboard/widgets.py:357 templates/account/base.html:10 -#: templates/account/bookmarks.html:7 templates/inc/user_menu.html:30 +#: netbox/extras/dashboard/widgets.py:357 netbox/templates/account/base.html:10 +#: netbox/templates/account/bookmarks.html:7 +#: netbox/templates/inc/user_menu.html:30 msgid "Bookmarks" msgstr "" -#: extras/dashboard/widgets.py:361 +#: netbox/extras/dashboard/widgets.py:361 msgid "Show your personal bookmarks" msgstr "" -#: extras/events.py:128 +#: netbox/extras/events.py:128 #, python-brace-format msgid "Unknown action type for an event rule: {action_type}" msgstr "" -#: extras/events.py:176 +#: netbox/extras/events.py:176 #, python-brace-format msgid "Cannot import events pipeline {name} error: {error}" msgstr "" -#: extras/filtersets.py:45 +#: netbox/extras/filtersets.py:45 msgid "Script module (ID)" msgstr "" -#: extras/filtersets.py:249 extras/filtersets.py:589 extras/filtersets.py:621 +#: netbox/extras/filtersets.py:249 netbox/extras/filtersets.py:589 +#: netbox/extras/filtersets.py:621 msgid "Data file (ID)" msgstr "" -#: extras/filtersets.py:526 virtualization/forms/filtersets.py:118 +#: netbox/extras/filtersets.py:526 +#: netbox/virtualization/forms/filtersets.py:118 msgid "Cluster type" msgstr "" -#: extras/filtersets.py:532 virtualization/filtersets.py:95 -#: virtualization/filtersets.py:147 +#: netbox/extras/filtersets.py:532 netbox/virtualization/filtersets.py:95 +#: netbox/virtualization/filtersets.py:147 msgid "Cluster type (slug)" msgstr "" -#: extras/filtersets.py:537 ipam/forms/bulk_edit.py:476 -#: ipam/forms/filtersets.py:464 ipam/forms/model_forms.py:624 -#: virtualization/forms/filtersets.py:112 +#: netbox/extras/filtersets.py:537 netbox/ipam/forms/bulk_edit.py:476 +#: netbox/ipam/forms/filtersets.py:464 netbox/ipam/forms/model_forms.py:624 +#: netbox/virtualization/forms/filtersets.py:112 msgid "Cluster group" msgstr "" -#: extras/filtersets.py:543 virtualization/filtersets.py:136 +#: netbox/extras/filtersets.py:543 netbox/virtualization/filtersets.py:136 msgid "Cluster group (slug)" msgstr "" -#: extras/filtersets.py:553 tenancy/forms/forms.py:16 tenancy/forms/forms.py:39 +#: netbox/extras/filtersets.py:553 netbox/tenancy/forms/forms.py:16 +#: netbox/tenancy/forms/forms.py:39 msgid "Tenant group" msgstr "" -#: extras/filtersets.py:559 tenancy/filtersets.py:189 tenancy/filtersets.py:209 +#: netbox/extras/filtersets.py:559 netbox/tenancy/filtersets.py:189 +#: netbox/tenancy/filtersets.py:209 msgid "Tenant group (slug)" msgstr "" -#: extras/filtersets.py:575 extras/forms/model_forms.py:371 -#: templates/extras/tag.html:11 +#: netbox/extras/filtersets.py:575 netbox/extras/forms/model_forms.py:371 +#: netbox/templates/extras/tag.html:11 msgid "Tag" msgstr "" -#: extras/filtersets.py:581 +#: netbox/extras/filtersets.py:581 msgid "Tag (slug)" msgstr "" -#: extras/filtersets.py:645 extras/forms/filtersets.py:438 +#: netbox/extras/filtersets.py:645 netbox/extras/forms/filtersets.py:438 msgid "Has local config context data" msgstr "" -#: extras/filtersets.py:670 +#: netbox/extras/filtersets.py:670 msgid "User name" msgstr "" -#: extras/forms/bulk_edit.py:32 extras/forms/filtersets.py:57 +#: netbox/extras/forms/bulk_edit.py:32 netbox/extras/forms/filtersets.py:57 msgid "Group name" msgstr "" -#: extras/forms/bulk_edit.py:40 extras/forms/filtersets.py:65 -#: extras/tables/tables.py:49 templates/extras/customfield.html:38 -#: templates/generic/bulk_import.html:118 +#: netbox/extras/forms/bulk_edit.py:40 netbox/extras/forms/filtersets.py:65 +#: netbox/extras/tables/tables.py:49 +#: netbox/templates/extras/customfield.html:38 +#: netbox/templates/generic/bulk_import.html:118 msgid "Required" msgstr "" -#: extras/forms/bulk_edit.py:53 extras/forms/bulk_import.py:57 -#: extras/forms/filtersets.py:79 extras/models/customfields.py:194 +#: netbox/extras/forms/bulk_edit.py:53 netbox/extras/forms/bulk_import.py:57 +#: netbox/extras/forms/filtersets.py:79 +#: netbox/extras/models/customfields.py:194 msgid "UI visible" msgstr "" -#: extras/forms/bulk_edit.py:58 extras/forms/bulk_import.py:63 -#: extras/forms/filtersets.py:84 extras/models/customfields.py:201 +#: netbox/extras/forms/bulk_edit.py:58 netbox/extras/forms/bulk_import.py:63 +#: netbox/extras/forms/filtersets.py:84 +#: netbox/extras/models/customfields.py:201 msgid "UI editable" msgstr "" -#: extras/forms/bulk_edit.py:63 extras/forms/filtersets.py:87 +#: netbox/extras/forms/bulk_edit.py:63 netbox/extras/forms/filtersets.py:87 msgid "Is cloneable" msgstr "" -#: extras/forms/bulk_edit.py:103 extras/forms/filtersets.py:127 +#: netbox/extras/forms/bulk_edit.py:103 netbox/extras/forms/filtersets.py:127 msgid "New window" msgstr "" -#: extras/forms/bulk_edit.py:112 +#: netbox/extras/forms/bulk_edit.py:112 msgid "Button class" msgstr "" -#: extras/forms/bulk_edit.py:129 extras/forms/filtersets.py:165 -#: extras/models/models.py:437 +#: netbox/extras/forms/bulk_edit.py:129 netbox/extras/forms/filtersets.py:165 +#: netbox/extras/models/models.py:437 msgid "MIME type" msgstr "" -#: extras/forms/bulk_edit.py:134 extras/forms/filtersets.py:168 +#: netbox/extras/forms/bulk_edit.py:134 netbox/extras/forms/filtersets.py:168 msgid "File extension" msgstr "" -#: extras/forms/bulk_edit.py:139 extras/forms/filtersets.py:172 +#: netbox/extras/forms/bulk_edit.py:139 netbox/extras/forms/filtersets.py:172 msgid "As attachment" msgstr "" -#: extras/forms/bulk_edit.py:167 extras/forms/filtersets.py:214 -#: extras/tables/tables.py:219 templates/extras/savedfilter.html:29 +#: netbox/extras/forms/bulk_edit.py:167 netbox/extras/forms/filtersets.py:214 +#: netbox/extras/tables/tables.py:219 +#: netbox/templates/extras/savedfilter.html:29 msgid "Shared" msgstr "" -#: extras/forms/bulk_edit.py:190 extras/forms/filtersets.py:243 -#: extras/models/models.py:202 +#: netbox/extras/forms/bulk_edit.py:190 netbox/extras/forms/filtersets.py:243 +#: netbox/extras/models/models.py:202 msgid "HTTP method" msgstr "" -#: extras/forms/bulk_edit.py:194 extras/forms/filtersets.py:237 -#: templates/extras/webhook.html:30 +#: netbox/extras/forms/bulk_edit.py:194 netbox/extras/forms/filtersets.py:237 +#: netbox/templates/extras/webhook.html:30 msgid "Payload URL" msgstr "" -#: extras/forms/bulk_edit.py:199 extras/models/models.py:242 +#: netbox/extras/forms/bulk_edit.py:199 netbox/extras/models/models.py:242 msgid "SSL verification" msgstr "" -#: extras/forms/bulk_edit.py:202 templates/extras/webhook.html:38 +#: netbox/extras/forms/bulk_edit.py:202 netbox/templates/extras/webhook.html:38 msgid "Secret" msgstr "" -#: extras/forms/bulk_edit.py:207 +#: netbox/extras/forms/bulk_edit.py:207 msgid "CA file path" msgstr "" -#: extras/forms/bulk_edit.py:226 +#: netbox/extras/forms/bulk_edit.py:226 msgid "On create" msgstr "" -#: extras/forms/bulk_edit.py:231 +#: netbox/extras/forms/bulk_edit.py:231 msgid "On update" msgstr "" -#: extras/forms/bulk_edit.py:236 +#: netbox/extras/forms/bulk_edit.py:236 msgid "On delete" msgstr "" -#: extras/forms/bulk_edit.py:241 +#: netbox/extras/forms/bulk_edit.py:241 msgid "On job start" msgstr "" -#: extras/forms/bulk_edit.py:246 +#: netbox/extras/forms/bulk_edit.py:246 msgid "On job end" msgstr "" -#: extras/forms/bulk_edit.py:283 +#: netbox/extras/forms/bulk_edit.py:283 msgid "Is active" msgstr "" -#: extras/forms/bulk_import.py:34 extras/forms/bulk_import.py:115 -#: extras/forms/bulk_import.py:136 extras/forms/bulk_import.py:159 -#: extras/forms/bulk_import.py:183 extras/forms/filtersets.py:115 -#: extras/forms/filtersets.py:202 extras/forms/model_forms.py:43 -#: extras/forms/model_forms.py:131 extras/forms/model_forms.py:163 -#: extras/forms/model_forms.py:204 extras/forms/model_forms.py:261 -#: extras/forms/model_forms.py:365 users/forms/model_forms.py:273 +#: netbox/extras/forms/bulk_import.py:34 netbox/extras/forms/bulk_import.py:115 +#: netbox/extras/forms/bulk_import.py:136 +#: netbox/extras/forms/bulk_import.py:159 +#: netbox/extras/forms/bulk_import.py:183 netbox/extras/forms/filtersets.py:115 +#: netbox/extras/forms/filtersets.py:202 netbox/extras/forms/model_forms.py:43 +#: netbox/extras/forms/model_forms.py:131 +#: netbox/extras/forms/model_forms.py:163 +#: netbox/extras/forms/model_forms.py:204 +#: netbox/extras/forms/model_forms.py:261 +#: netbox/extras/forms/model_forms.py:365 netbox/users/forms/model_forms.py:273 msgid "Object types" msgstr "" -#: extras/forms/bulk_import.py:36 extras/forms/bulk_import.py:117 -#: extras/forms/bulk_import.py:138 extras/forms/bulk_import.py:161 -#: extras/forms/bulk_import.py:185 tenancy/forms/bulk_import.py:96 +#: netbox/extras/forms/bulk_import.py:36 netbox/extras/forms/bulk_import.py:117 +#: netbox/extras/forms/bulk_import.py:138 +#: netbox/extras/forms/bulk_import.py:161 +#: netbox/extras/forms/bulk_import.py:185 +#: netbox/tenancy/forms/bulk_import.py:96 msgid "One or more assigned object types" msgstr "" -#: extras/forms/bulk_import.py:41 +#: netbox/extras/forms/bulk_import.py:41 msgid "Field data type (e.g. text, integer, etc.)" msgstr "" -#: extras/forms/bulk_import.py:44 extras/forms/filtersets.py:186 -#: extras/forms/filtersets.py:260 extras/forms/model_forms.py:230 -#: tenancy/forms/filtersets.py:92 +#: netbox/extras/forms/bulk_import.py:44 netbox/extras/forms/filtersets.py:186 +#: netbox/extras/forms/filtersets.py:260 netbox/extras/forms/model_forms.py:230 +#: netbox/tenancy/forms/filtersets.py:92 msgid "Object type" msgstr "" -#: extras/forms/bulk_import.py:47 +#: netbox/extras/forms/bulk_import.py:47 msgid "Object type (for object or multi-object fields)" msgstr "" -#: extras/forms/bulk_import.py:50 extras/forms/filtersets.py:74 +#: netbox/extras/forms/bulk_import.py:50 netbox/extras/forms/filtersets.py:74 msgid "Choice set" msgstr "" -#: extras/forms/bulk_import.py:54 +#: netbox/extras/forms/bulk_import.py:54 msgid "Choice set (for selection fields)" msgstr "" -#: extras/forms/bulk_import.py:60 +#: netbox/extras/forms/bulk_import.py:60 msgid "Whether the custom field is displayed in the UI" msgstr "" -#: extras/forms/bulk_import.py:66 +#: netbox/extras/forms/bulk_import.py:66 msgid "Whether the custom field is editable in the UI" msgstr "" -#: extras/forms/bulk_import.py:82 +#: netbox/extras/forms/bulk_import.py:82 msgid "The base set of predefined choices to use (if any)" msgstr "" -#: extras/forms/bulk_import.py:88 +#: netbox/extras/forms/bulk_import.py:88 msgid "" "Quoted string of comma-separated field choices with optional labels " "separated by colon: \"choice1:First Choice,choice2:Second Choice\"" msgstr "" -#: extras/forms/bulk_import.py:120 extras/models/models.py:351 +#: netbox/extras/forms/bulk_import.py:120 netbox/extras/models/models.py:351 msgid "button class" msgstr "" -#: extras/forms/bulk_import.py:123 extras/models/models.py:355 +#: netbox/extras/forms/bulk_import.py:123 netbox/extras/models/models.py:355 msgid "" "The class of the first link in a group will be used for the dropdown button" msgstr "" -#: extras/forms/bulk_import.py:188 +#: netbox/extras/forms/bulk_import.py:188 msgid "Action object" msgstr "" -#: extras/forms/bulk_import.py:190 +#: netbox/extras/forms/bulk_import.py:190 msgid "Webhook name or script as dotted path module.Class" msgstr "" -#: extras/forms/bulk_import.py:211 +#: netbox/extras/forms/bulk_import.py:211 #, python-brace-format msgid "Webhook {name} not found" msgstr "" -#: extras/forms/bulk_import.py:220 +#: netbox/extras/forms/bulk_import.py:220 #, python-brace-format msgid "Script {name} not found" msgstr "" -#: extras/forms/bulk_import.py:239 +#: netbox/extras/forms/bulk_import.py:239 msgid "Assigned object type" msgstr "" -#: extras/forms/bulk_import.py:244 +#: netbox/extras/forms/bulk_import.py:244 msgid "The classification of entry" msgstr "" -#: extras/forms/filtersets.py:49 extras/forms/model_forms.py:47 +#: netbox/extras/forms/filtersets.py:49 netbox/extras/forms/model_forms.py:47 msgid "Related object type" msgstr "" -#: extras/forms/filtersets.py:54 +#: netbox/extras/forms/filtersets.py:54 msgid "Field type" msgstr "" -#: extras/forms/filtersets.py:98 extras/tables/tables.py:70 -#: templates/generic/bulk_import.html:154 +#: netbox/extras/forms/filtersets.py:98 netbox/extras/tables/tables.py:70 +#: netbox/templates/generic/bulk_import.html:154 msgid "Choices" msgstr "" -#: extras/forms/filtersets.py:142 extras/forms/filtersets.py:328 -#: extras/forms/filtersets.py:417 extras/forms/model_forms.py:448 -#: templates/core/job.html:78 templates/extras/eventrule.html:90 +#: netbox/extras/forms/filtersets.py:142 netbox/extras/forms/filtersets.py:328 +#: netbox/extras/forms/filtersets.py:417 netbox/extras/forms/model_forms.py:448 +#: netbox/templates/core/job.html:78 netbox/templates/extras/eventrule.html:90 msgid "Data" msgstr "" -#: extras/forms/filtersets.py:153 extras/forms/filtersets.py:342 -#: extras/forms/filtersets.py:427 netbox/choices.py:133 -#: utilities/forms/bulk_import.py:26 +#: netbox/extras/forms/filtersets.py:153 netbox/extras/forms/filtersets.py:342 +#: netbox/extras/forms/filtersets.py:427 netbox/netbox/choices.py:133 +#: netbox/utilities/forms/bulk_import.py:26 msgid "Data file" msgstr "" -#: extras/forms/filtersets.py:161 +#: netbox/extras/forms/filtersets.py:161 msgid "Content types" msgstr "" -#: extras/forms/filtersets.py:233 extras/models/models.py:207 +#: netbox/extras/forms/filtersets.py:233 netbox/extras/models/models.py:207 msgid "HTTP content type" msgstr "" -#: extras/forms/filtersets.py:255 extras/forms/model_forms.py:280 -#: templates/extras/eventrule.html:37 +#: netbox/extras/forms/filtersets.py:255 netbox/extras/forms/model_forms.py:280 +#: netbox/templates/extras/eventrule.html:37 msgid "Events" msgstr "" -#: extras/forms/filtersets.py:265 +#: netbox/extras/forms/filtersets.py:265 msgid "Action type" msgstr "" -#: extras/forms/filtersets.py:279 +#: netbox/extras/forms/filtersets.py:279 msgid "Object creations" msgstr "" -#: extras/forms/filtersets.py:286 +#: netbox/extras/forms/filtersets.py:286 msgid "Object updates" msgstr "" -#: extras/forms/filtersets.py:293 +#: netbox/extras/forms/filtersets.py:293 msgid "Object deletions" msgstr "" -#: extras/forms/filtersets.py:300 +#: netbox/extras/forms/filtersets.py:300 msgid "Job starts" msgstr "" -#: extras/forms/filtersets.py:307 extras/forms/model_forms.py:297 +#: netbox/extras/forms/filtersets.py:307 netbox/extras/forms/model_forms.py:297 msgid "Job terminations" msgstr "" -#: extras/forms/filtersets.py:316 +#: netbox/extras/forms/filtersets.py:316 msgid "Tagged object type" msgstr "" -#: extras/forms/filtersets.py:321 +#: netbox/extras/forms/filtersets.py:321 msgid "Allowed object type" msgstr "" -#: extras/forms/filtersets.py:350 extras/forms/model_forms.py:383 -#: netbox/navigation/menu.py:18 +#: netbox/extras/forms/filtersets.py:350 netbox/extras/forms/model_forms.py:383 +#: netbox/netbox/navigation/menu.py:18 msgid "Regions" msgstr "" -#: extras/forms/filtersets.py:355 extras/forms/model_forms.py:388 +#: netbox/extras/forms/filtersets.py:355 netbox/extras/forms/model_forms.py:388 msgid "Site groups" msgstr "" -#: extras/forms/filtersets.py:365 extras/forms/model_forms.py:398 -#: netbox/navigation/menu.py:20 templates/dcim/site.html:126 +#: netbox/extras/forms/filtersets.py:365 netbox/extras/forms/model_forms.py:398 +#: netbox/netbox/navigation/menu.py:20 netbox/templates/dcim/site.html:127 msgid "Locations" msgstr "" -#: extras/forms/filtersets.py:370 extras/forms/model_forms.py:403 +#: netbox/extras/forms/filtersets.py:370 netbox/extras/forms/model_forms.py:403 msgid "Device types" msgstr "" -#: extras/forms/filtersets.py:375 extras/forms/model_forms.py:408 +#: netbox/extras/forms/filtersets.py:375 netbox/extras/forms/model_forms.py:408 msgid "Roles" msgstr "" -#: extras/forms/filtersets.py:385 extras/forms/model_forms.py:418 +#: netbox/extras/forms/filtersets.py:385 netbox/extras/forms/model_forms.py:418 msgid "Cluster types" msgstr "" -#: extras/forms/filtersets.py:390 extras/forms/model_forms.py:423 +#: netbox/extras/forms/filtersets.py:390 netbox/extras/forms/model_forms.py:423 msgid "Cluster groups" msgstr "" -#: extras/forms/filtersets.py:395 extras/forms/model_forms.py:428 -#: netbox/navigation/menu.py:242 netbox/navigation/menu.py:244 -#: templates/virtualization/clustertype.html:30 -#: virtualization/tables/clusters.py:23 virtualization/tables/clusters.py:45 +#: netbox/extras/forms/filtersets.py:395 netbox/extras/forms/model_forms.py:428 +#: netbox/netbox/navigation/menu.py:242 netbox/netbox/navigation/menu.py:244 +#: netbox/templates/virtualization/clustertype.html:30 +#: netbox/virtualization/tables/clusters.py:23 +#: netbox/virtualization/tables/clusters.py:45 msgid "Clusters" msgstr "" -#: extras/forms/filtersets.py:400 extras/forms/model_forms.py:433 +#: netbox/extras/forms/filtersets.py:400 netbox/extras/forms/model_forms.py:433 msgid "Tenant groups" msgstr "" -#: extras/forms/filtersets.py:454 extras/forms/filtersets.py:492 +#: netbox/extras/forms/filtersets.py:454 netbox/extras/forms/filtersets.py:492 msgid "After" msgstr "" -#: extras/forms/filtersets.py:459 extras/forms/filtersets.py:497 +#: netbox/extras/forms/filtersets.py:459 netbox/extras/forms/filtersets.py:497 msgid "Before" msgstr "" -#: extras/forms/filtersets.py:487 extras/tables/tables.py:456 -#: extras/tables/tables.py:542 extras/tables/tables.py:567 -#: templates/extras/objectchange.html:31 +#: netbox/extras/forms/filtersets.py:487 netbox/extras/tables/tables.py:456 +#: netbox/extras/tables/tables.py:542 netbox/extras/tables/tables.py:567 +#: netbox/templates/extras/objectchange.html:31 msgid "Time" msgstr "" -#: extras/forms/filtersets.py:501 extras/forms/model_forms.py:282 -#: extras/tables/tables.py:470 templates/extras/eventrule.html:77 -#: templates/extras/objectchange.html:45 +#: netbox/extras/forms/filtersets.py:501 netbox/extras/forms/model_forms.py:282 +#: netbox/extras/tables/tables.py:470 netbox/templates/extras/eventrule.html:77 +#: netbox/templates/extras/objectchange.html:45 msgid "Action" msgstr "" -#: extras/forms/model_forms.py:50 +#: netbox/extras/forms/model_forms.py:50 msgid "Type of the related object (for object/multi-object fields only)" msgstr "" -#: extras/forms/model_forms.py:61 templates/extras/customfield.html:10 +#: netbox/extras/forms/model_forms.py:61 +#: netbox/templates/extras/customfield.html:10 msgid "Custom Field" msgstr "" -#: extras/forms/model_forms.py:64 templates/extras/customfield.html:58 +#: netbox/extras/forms/model_forms.py:64 +#: netbox/templates/extras/customfield.html:58 msgid "Behavior" msgstr "" -#: extras/forms/model_forms.py:66 +#: netbox/extras/forms/model_forms.py:66 msgid "Values" msgstr "" -#: extras/forms/model_forms.py:75 +#: netbox/extras/forms/model_forms.py:75 msgid "" "The type of data stored in this field. For object/multi-object fields, " "select the related object type below." msgstr "" -#: extras/forms/model_forms.py:78 +#: netbox/extras/forms/model_forms.py:78 msgid "" "This will be displayed as help text for the form field. Markdown is " "supported." msgstr "" -#: extras/forms/model_forms.py:95 +#: netbox/extras/forms/model_forms.py:95 msgid "" "Enter one choice per line. An optional label may be specified for each " "choice by appending it with a colon. Example:" msgstr "" -#: extras/forms/model_forms.py:138 templates/extras/customlink.html:10 +#: netbox/extras/forms/model_forms.py:138 +#: netbox/templates/extras/customlink.html:10 msgid "Custom Link" msgstr "" -#: extras/forms/model_forms.py:140 +#: netbox/extras/forms/model_forms.py:140 msgid "Templates" msgstr "" -#: extras/forms/model_forms.py:152 +#: netbox/extras/forms/model_forms.py:152 #, python-brace-format msgid "" "Jinja2 template code for the link text. Reference the object as {example}. " "Links which render as empty text will not be displayed." msgstr "" -#: extras/forms/model_forms.py:156 +#: netbox/extras/forms/model_forms.py:156 #, python-brace-format msgid "" "Jinja2 template code for the link URL. Reference the object as {example}." msgstr "" -#: extras/forms/model_forms.py:167 extras/forms/model_forms.py:500 +#: netbox/extras/forms/model_forms.py:167 +#: netbox/extras/forms/model_forms.py:500 msgid "Template code" msgstr "" -#: extras/forms/model_forms.py:173 templates/extras/exporttemplate.html:12 +#: netbox/extras/forms/model_forms.py:173 +#: netbox/templates/extras/exporttemplate.html:12 msgid "Export Template" msgstr "" -#: extras/forms/model_forms.py:175 +#: netbox/extras/forms/model_forms.py:175 msgid "Rendering" msgstr "" -#: extras/forms/model_forms.py:189 extras/forms/model_forms.py:525 +#: netbox/extras/forms/model_forms.py:189 +#: netbox/extras/forms/model_forms.py:525 msgid "Template content is populated from the remote source selected below." msgstr "" -#: extras/forms/model_forms.py:196 extras/forms/model_forms.py:532 +#: netbox/extras/forms/model_forms.py:196 +#: netbox/extras/forms/model_forms.py:532 msgid "Must specify either local content or a data file" msgstr "" -#: extras/forms/model_forms.py:210 netbox/forms/mixins.py:70 -#: templates/extras/savedfilter.html:10 +#: netbox/extras/forms/model_forms.py:210 netbox/netbox/forms/mixins.py:70 +#: netbox/templates/extras/savedfilter.html:10 msgid "Saved Filter" msgstr "" -#: extras/forms/model_forms.py:245 templates/extras/webhook.html:23 +#: netbox/extras/forms/model_forms.py:245 +#: netbox/templates/extras/webhook.html:23 msgid "HTTP Request" msgstr "" -#: extras/forms/model_forms.py:247 templates/extras/webhook.html:44 +#: netbox/extras/forms/model_forms.py:247 +#: netbox/templates/extras/webhook.html:44 msgid "SSL" msgstr "" -#: extras/forms/model_forms.py:265 +#: netbox/extras/forms/model_forms.py:265 msgid "Action choice" msgstr "" -#: extras/forms/model_forms.py:270 +#: netbox/extras/forms/model_forms.py:270 msgid "Enter conditions in JSON format." msgstr "" -#: extras/forms/model_forms.py:274 +#: netbox/extras/forms/model_forms.py:274 msgid "" "Enter parameters to pass to the action in JSON format." msgstr "" -#: extras/forms/model_forms.py:279 templates/extras/eventrule.html:10 +#: netbox/extras/forms/model_forms.py:279 +#: netbox/templates/extras/eventrule.html:10 msgid "Event Rule" msgstr "" -#: extras/forms/model_forms.py:281 templates/extras/eventrule.html:66 +#: netbox/extras/forms/model_forms.py:281 +#: netbox/templates/extras/eventrule.html:66 msgid "Conditions" msgstr "" -#: extras/forms/model_forms.py:293 +#: netbox/extras/forms/model_forms.py:293 msgid "Creations" msgstr "" -#: extras/forms/model_forms.py:294 +#: netbox/extras/forms/model_forms.py:294 msgid "Updates" msgstr "" -#: extras/forms/model_forms.py:295 +#: netbox/extras/forms/model_forms.py:295 msgid "Deletions" msgstr "" -#: extras/forms/model_forms.py:296 +#: netbox/extras/forms/model_forms.py:296 msgid "Job executions" msgstr "" -#: extras/forms/model_forms.py:438 netbox/navigation/menu.py:39 -#: tenancy/tables/tenants.py:22 +#: netbox/extras/forms/model_forms.py:438 netbox/netbox/navigation/menu.py:39 +#: netbox/tenancy/tables/tenants.py:22 msgid "Tenants" msgstr "" -#: extras/forms/model_forms.py:458 ipam/forms/filtersets.py:142 -#: ipam/forms/filtersets.py:553 ipam/forms/model_forms.py:321 -#: templates/extras/configcontext.html:60 templates/ipam/ipaddress.html:59 -#: templates/ipam/vlan_edit.html:30 tenancy/forms/filtersets.py:87 -#: users/forms/model_forms.py:311 +#: netbox/extras/forms/model_forms.py:458 netbox/ipam/forms/filtersets.py:142 +#: netbox/ipam/forms/filtersets.py:553 netbox/ipam/forms/model_forms.py:321 +#: netbox/templates/extras/configcontext.html:60 +#: netbox/templates/ipam/ipaddress.html:59 +#: netbox/templates/ipam/vlan_edit.html:30 +#: netbox/tenancy/forms/filtersets.py:87 netbox/users/forms/model_forms.py:311 msgid "Assignment" msgstr "" -#: extras/forms/model_forms.py:482 +#: netbox/extras/forms/model_forms.py:482 msgid "Data is populated from the remote source selected below." msgstr "" -#: extras/forms/model_forms.py:488 +#: netbox/extras/forms/model_forms.py:488 msgid "Must specify either local data or a data file" msgstr "" -#: extras/forms/model_forms.py:507 templates/core/datafile.html:55 +#: netbox/extras/forms/model_forms.py:507 +#: netbox/templates/core/datafile.html:55 msgid "Content" msgstr "" -#: extras/forms/reports.py:17 extras/forms/scripts.py:23 +#: netbox/extras/forms/reports.py:17 netbox/extras/forms/scripts.py:23 msgid "Schedule at" msgstr "" -#: extras/forms/reports.py:18 +#: netbox/extras/forms/reports.py:18 msgid "Schedule execution of report to a set time" msgstr "" -#: extras/forms/reports.py:23 extras/forms/scripts.py:29 +#: netbox/extras/forms/reports.py:23 netbox/extras/forms/scripts.py:29 msgid "Recurs every" msgstr "" -#: extras/forms/reports.py:27 +#: netbox/extras/forms/reports.py:27 msgid "Interval at which this report is re-run (in minutes)" msgstr "" -#: extras/forms/reports.py:35 extras/forms/scripts.py:41 +#: netbox/extras/forms/reports.py:35 netbox/extras/forms/scripts.py:41 #, python-brace-format msgid " (current time: {now})" msgstr "" -#: extras/forms/reports.py:45 extras/forms/scripts.py:51 +#: netbox/extras/forms/reports.py:45 netbox/extras/forms/scripts.py:51 msgid "Scheduled time must be in the future." msgstr "" -#: extras/forms/scripts.py:17 +#: netbox/extras/forms/scripts.py:17 msgid "Commit changes" msgstr "" -#: extras/forms/scripts.py:18 +#: netbox/extras/forms/scripts.py:18 msgid "Commit changes to the database (uncheck for a dry-run)" msgstr "" -#: extras/forms/scripts.py:24 +#: netbox/extras/forms/scripts.py:24 msgid "Schedule execution of script to a set time" msgstr "" -#: extras/forms/scripts.py:33 +#: netbox/extras/forms/scripts.py:33 msgid "Interval at which this script is re-run (in minutes)" msgstr "" -#: extras/management/commands/reindex.py:66 +#: netbox/extras/management/commands/reindex.py:66 msgid "No indexers found!" msgstr "" -#: extras/models/change_logging.py:24 +#: netbox/extras/models/change_logging.py:29 msgid "time" msgstr "" -#: extras/models/change_logging.py:37 +#: netbox/extras/models/change_logging.py:42 msgid "user name" msgstr "" -#: extras/models/change_logging.py:42 +#: netbox/extras/models/change_logging.py:47 msgid "request ID" msgstr "" -#: extras/models/change_logging.py:47 extras/models/staging.py:69 +#: netbox/extras/models/change_logging.py:52 netbox/extras/models/staging.py:69 msgid "action" msgstr "" -#: extras/models/change_logging.py:81 +#: netbox/extras/models/change_logging.py:86 msgid "pre-change data" msgstr "" -#: extras/models/change_logging.py:87 +#: netbox/extras/models/change_logging.py:92 msgid "post-change data" msgstr "" -#: extras/models/change_logging.py:101 +#: netbox/extras/models/change_logging.py:106 msgid "object change" msgstr "" -#: extras/models/change_logging.py:102 +#: netbox/extras/models/change_logging.py:107 msgid "object changes" msgstr "" -#: extras/models/change_logging.py:118 +#: netbox/extras/models/change_logging.py:123 #, python-brace-format msgid "Change logging is not supported for this object type ({type})." msgstr "" -#: extras/models/configs.py:130 +#: netbox/extras/models/configs.py:130 msgid "config context" msgstr "" -#: extras/models/configs.py:131 +#: netbox/extras/models/configs.py:131 msgid "config contexts" msgstr "" -#: extras/models/configs.py:149 extras/models/configs.py:205 +#: netbox/extras/models/configs.py:149 netbox/extras/models/configs.py:205 msgid "JSON data must be in object form. Example:" msgstr "" -#: extras/models/configs.py:169 +#: netbox/extras/models/configs.py:169 msgid "" "Local config context data takes precedence over source contexts in the final " "rendered config context" msgstr "" -#: extras/models/configs.py:224 +#: netbox/extras/models/configs.py:224 msgid "template code" msgstr "" -#: extras/models/configs.py:225 +#: netbox/extras/models/configs.py:225 msgid "Jinja2 template code." msgstr "" -#: extras/models/configs.py:228 +#: netbox/extras/models/configs.py:228 msgid "environment parameters" msgstr "" -#: extras/models/configs.py:233 +#: netbox/extras/models/configs.py:233 msgid "" "Any additional parameters to pass when constructing the Jinja2 " "environment." msgstr "" -#: extras/models/configs.py:240 +#: netbox/extras/models/configs.py:240 msgid "config template" msgstr "" -#: extras/models/configs.py:241 +#: netbox/extras/models/configs.py:241 msgid "config templates" msgstr "" -#: extras/models/customfields.py:73 +#: netbox/extras/models/customfields.py:73 msgid "The object(s) to which this field applies." msgstr "" -#: extras/models/customfields.py:80 +#: netbox/extras/models/customfields.py:80 msgid "The type of data this custom field holds" msgstr "" -#: extras/models/customfields.py:87 +#: netbox/extras/models/customfields.py:87 msgid "The type of NetBox object this field maps to (for object fields)" msgstr "" -#: extras/models/customfields.py:93 +#: netbox/extras/models/customfields.py:93 msgid "Internal field name" msgstr "" -#: extras/models/customfields.py:97 +#: netbox/extras/models/customfields.py:97 msgid "Only alphanumeric characters and underscores are allowed." msgstr "" -#: extras/models/customfields.py:102 +#: netbox/extras/models/customfields.py:102 msgid "Double underscores are not permitted in custom field names." msgstr "" -#: extras/models/customfields.py:113 +#: netbox/extras/models/customfields.py:113 msgid "" "Name of the field as displayed to users (if not provided, 'the field's name " "will be used)" msgstr "" -#: extras/models/customfields.py:117 extras/models/models.py:345 +#: netbox/extras/models/customfields.py:117 netbox/extras/models/models.py:345 msgid "group name" msgstr "" -#: extras/models/customfields.py:120 +#: netbox/extras/models/customfields.py:120 msgid "Custom fields within the same group will be displayed together" msgstr "" -#: extras/models/customfields.py:128 +#: netbox/extras/models/customfields.py:128 msgid "required" msgstr "" -#: extras/models/customfields.py:130 +#: netbox/extras/models/customfields.py:130 msgid "" "If true, this field is required when creating new objects or editing an " "existing object." msgstr "" -#: extras/models/customfields.py:133 +#: netbox/extras/models/customfields.py:133 msgid "search weight" msgstr "" -#: extras/models/customfields.py:136 +#: netbox/extras/models/customfields.py:136 msgid "" "Weighting for search. Lower values are considered more important. Fields " "with a search weight of zero will be ignored." msgstr "" -#: extras/models/customfields.py:141 +#: netbox/extras/models/customfields.py:141 msgid "filter logic" msgstr "" -#: extras/models/customfields.py:145 +#: netbox/extras/models/customfields.py:145 msgid "" "Loose matches any instance of a given string; exact matches the entire field." msgstr "" -#: extras/models/customfields.py:148 +#: netbox/extras/models/customfields.py:148 msgid "default" msgstr "" -#: extras/models/customfields.py:152 +#: netbox/extras/models/customfields.py:152 msgid "" "Default value for the field (must be a JSON value). Encapsulate strings with " "double quotes (e.g. \"Foo\")." msgstr "" -#: extras/models/customfields.py:157 +#: netbox/extras/models/customfields.py:157 msgid "display weight" msgstr "" -#: extras/models/customfields.py:158 +#: netbox/extras/models/customfields.py:158 msgid "Fields with higher weights appear lower in a form." msgstr "" -#: extras/models/customfields.py:163 +#: netbox/extras/models/customfields.py:163 msgid "minimum value" msgstr "" -#: extras/models/customfields.py:164 +#: netbox/extras/models/customfields.py:164 msgid "Minimum allowed value (for numeric fields)" msgstr "" -#: extras/models/customfields.py:169 +#: netbox/extras/models/customfields.py:169 msgid "maximum value" msgstr "" -#: extras/models/customfields.py:170 +#: netbox/extras/models/customfields.py:170 msgid "Maximum allowed value (for numeric fields)" msgstr "" -#: extras/models/customfields.py:176 +#: netbox/extras/models/customfields.py:176 msgid "validation regex" msgstr "" -#: extras/models/customfields.py:178 +#: netbox/extras/models/customfields.py:178 #, python-brace-format msgid "" "Regular expression to enforce on text field values. Use ^ and $ to force " @@ -7079,282 +7568,284 @@ msgid "" "values to exactly three uppercase letters." msgstr "" -#: extras/models/customfields.py:186 +#: netbox/extras/models/customfields.py:186 msgid "choice set" msgstr "" -#: extras/models/customfields.py:195 +#: netbox/extras/models/customfields.py:195 msgid "Specifies whether the custom field is displayed in the UI" msgstr "" -#: extras/models/customfields.py:202 +#: netbox/extras/models/customfields.py:202 msgid "Specifies whether the custom field value can be edited in the UI" msgstr "" -#: extras/models/customfields.py:206 +#: netbox/extras/models/customfields.py:206 msgid "is cloneable" msgstr "" -#: extras/models/customfields.py:207 +#: netbox/extras/models/customfields.py:207 msgid "Replicate this value when cloning objects" msgstr "" -#: extras/models/customfields.py:224 +#: netbox/extras/models/customfields.py:224 msgid "custom field" msgstr "" -#: extras/models/customfields.py:225 +#: netbox/extras/models/customfields.py:225 msgid "custom fields" msgstr "" -#: extras/models/customfields.py:314 +#: netbox/extras/models/customfields.py:314 #, python-brace-format msgid "Invalid default value \"{value}\": {error}" msgstr "" -#: extras/models/customfields.py:321 +#: netbox/extras/models/customfields.py:321 msgid "A minimum value may be set only for numeric fields" msgstr "" -#: extras/models/customfields.py:323 +#: netbox/extras/models/customfields.py:323 msgid "A maximum value may be set only for numeric fields" msgstr "" -#: extras/models/customfields.py:333 +#: netbox/extras/models/customfields.py:333 msgid "Regular expression validation is supported only for text and URL fields" msgstr "" -#: extras/models/customfields.py:343 +#: netbox/extras/models/customfields.py:343 msgid "Selection fields must specify a set of choices." msgstr "" -#: extras/models/customfields.py:347 +#: netbox/extras/models/customfields.py:347 msgid "Choices may be set only on selection fields." msgstr "" -#: extras/models/customfields.py:354 +#: netbox/extras/models/customfields.py:354 msgid "Object fields must define an object type." msgstr "" -#: extras/models/customfields.py:359 +#: netbox/extras/models/customfields.py:359 #, python-brace-format msgid "{type} fields may not define an object type." msgstr "" -#: extras/models/customfields.py:439 +#: netbox/extras/models/customfields.py:439 msgid "True" msgstr "" -#: extras/models/customfields.py:440 +#: netbox/extras/models/customfields.py:440 msgid "False" msgstr "" -#: extras/models/customfields.py:522 +#: netbox/extras/models/customfields.py:522 #, python-brace-format msgid "Values must match this regex: {regex}" msgstr "" -#: extras/models/customfields.py:616 +#: netbox/extras/models/customfields.py:616 msgid "Value must be a string." msgstr "" -#: extras/models/customfields.py:618 +#: netbox/extras/models/customfields.py:618 #, python-brace-format msgid "Value must match regex '{regex}'" msgstr "" -#: extras/models/customfields.py:623 +#: netbox/extras/models/customfields.py:623 msgid "Value must be an integer." msgstr "" -#: extras/models/customfields.py:626 extras/models/customfields.py:641 +#: netbox/extras/models/customfields.py:626 +#: netbox/extras/models/customfields.py:641 #, python-brace-format msgid "Value must be at least {minimum}" msgstr "" -#: extras/models/customfields.py:630 extras/models/customfields.py:645 +#: netbox/extras/models/customfields.py:630 +#: netbox/extras/models/customfields.py:645 #, python-brace-format msgid "Value must not exceed {maximum}" msgstr "" -#: extras/models/customfields.py:638 +#: netbox/extras/models/customfields.py:638 msgid "Value must be a decimal." msgstr "" -#: extras/models/customfields.py:650 +#: netbox/extras/models/customfields.py:650 msgid "Value must be true or false." msgstr "" -#: extras/models/customfields.py:658 +#: netbox/extras/models/customfields.py:658 msgid "Date values must be in ISO 8601 format (YYYY-MM-DD)." msgstr "" -#: extras/models/customfields.py:667 +#: netbox/extras/models/customfields.py:667 msgid "Date and time values must be in ISO 8601 format (YYYY-MM-DD HH:MM:SS)." msgstr "" -#: extras/models/customfields.py:674 +#: netbox/extras/models/customfields.py:674 #, python-brace-format msgid "Invalid choice ({value}) for choice set {choiceset}." msgstr "" -#: extras/models/customfields.py:684 +#: netbox/extras/models/customfields.py:684 #, python-brace-format msgid "Invalid choice(s) ({value}) for choice set {choiceset}." msgstr "" -#: extras/models/customfields.py:693 +#: netbox/extras/models/customfields.py:693 #, python-brace-format msgid "Value must be an object ID, not {type}" msgstr "" -#: extras/models/customfields.py:699 +#: netbox/extras/models/customfields.py:699 #, python-brace-format msgid "Value must be a list of object IDs, not {type}" msgstr "" -#: extras/models/customfields.py:703 +#: netbox/extras/models/customfields.py:703 #, python-brace-format msgid "Found invalid object ID: {id}" msgstr "" -#: extras/models/customfields.py:706 +#: netbox/extras/models/customfields.py:706 msgid "Required field cannot be empty." msgstr "" -#: extras/models/customfields.py:725 +#: netbox/extras/models/customfields.py:725 msgid "Base set of predefined choices (optional)" msgstr "" -#: extras/models/customfields.py:737 +#: netbox/extras/models/customfields.py:737 msgid "Choices are automatically ordered alphabetically" msgstr "" -#: extras/models/customfields.py:744 +#: netbox/extras/models/customfields.py:744 msgid "custom field choice set" msgstr "" -#: extras/models/customfields.py:745 +#: netbox/extras/models/customfields.py:745 msgid "custom field choice sets" msgstr "" -#: extras/models/customfields.py:781 +#: netbox/extras/models/customfields.py:781 msgid "Must define base or extra choices." msgstr "" -#: extras/models/dashboard.py:19 +#: netbox/extras/models/dashboard.py:19 msgid "layout" msgstr "" -#: extras/models/dashboard.py:23 +#: netbox/extras/models/dashboard.py:23 msgid "config" msgstr "" -#: extras/models/dashboard.py:28 +#: netbox/extras/models/dashboard.py:28 msgid "dashboard" msgstr "" -#: extras/models/dashboard.py:29 +#: netbox/extras/models/dashboard.py:29 msgid "dashboards" msgstr "" -#: extras/models/models.py:51 +#: netbox/extras/models/models.py:51 msgid "object types" msgstr "" -#: extras/models/models.py:52 +#: netbox/extras/models/models.py:52 msgid "The object(s) to which this rule applies." msgstr "" -#: extras/models/models.py:65 +#: netbox/extras/models/models.py:65 msgid "on create" msgstr "" -#: extras/models/models.py:67 +#: netbox/extras/models/models.py:67 msgid "Triggers when a matching object is created." msgstr "" -#: extras/models/models.py:70 +#: netbox/extras/models/models.py:70 msgid "on update" msgstr "" -#: extras/models/models.py:72 +#: netbox/extras/models/models.py:72 msgid "Triggers when a matching object is updated." msgstr "" -#: extras/models/models.py:75 +#: netbox/extras/models/models.py:75 msgid "on delete" msgstr "" -#: extras/models/models.py:77 +#: netbox/extras/models/models.py:77 msgid "Triggers when a matching object is deleted." msgstr "" -#: extras/models/models.py:80 +#: netbox/extras/models/models.py:80 msgid "on job start" msgstr "" -#: extras/models/models.py:82 +#: netbox/extras/models/models.py:82 msgid "Triggers when a job for a matching object is started." msgstr "" -#: extras/models/models.py:85 +#: netbox/extras/models/models.py:85 msgid "on job end" msgstr "" -#: extras/models/models.py:87 +#: netbox/extras/models/models.py:87 msgid "Triggers when a job for a matching object terminates." msgstr "" -#: extras/models/models.py:94 +#: netbox/extras/models/models.py:94 msgid "conditions" msgstr "" -#: extras/models/models.py:97 +#: netbox/extras/models/models.py:97 msgid "" "A set of conditions which determine whether the event will be generated." msgstr "" -#: extras/models/models.py:105 +#: netbox/extras/models/models.py:105 msgid "action type" msgstr "" -#: extras/models/models.py:124 +#: netbox/extras/models/models.py:124 msgid "Additional data to pass to the action object" msgstr "" -#: extras/models/models.py:136 +#: netbox/extras/models/models.py:136 msgid "event rule" msgstr "" -#: extras/models/models.py:137 +#: netbox/extras/models/models.py:137 msgid "event rules" msgstr "" -#: extras/models/models.py:153 +#: netbox/extras/models/models.py:153 msgid "" "At least one event type must be selected: create, update, delete, job start, " "and/or job end." msgstr "" -#: extras/models/models.py:194 +#: netbox/extras/models/models.py:194 msgid "" "This URL will be called using the HTTP method defined when the webhook is " "called. Jinja2 template processing is supported with the same context as the " "request body." msgstr "" -#: extras/models/models.py:209 +#: netbox/extras/models/models.py:209 msgid "" "The complete list of official content types is available here." msgstr "" -#: extras/models/models.py:214 +#: netbox/extras/models/models.py:214 msgid "additional headers" msgstr "" -#: extras/models/models.py:217 +#: netbox/extras/models/models.py:217 msgid "" "User-supplied HTTP headers to be sent with the request in addition to the " "HTTP content type. Headers should be defined in the format Name: " @@ -7362,11 +7853,11 @@ msgid "" "as the request body (below)." msgstr "" -#: extras/models/models.py:223 +#: netbox/extras/models/models.py:223 msgid "body template" msgstr "" -#: extras/models/models.py:226 +#: netbox/extras/models/models.py:226 msgid "" "Jinja2 template for a custom request body. If blank, a JSON object " "representing the change will be included. Available context data includes: " @@ -7374,4044 +7865,4166 @@ msgid "" "username, request_id, and data." msgstr "" -#: extras/models/models.py:232 +#: netbox/extras/models/models.py:232 msgid "secret" msgstr "" -#: extras/models/models.py:236 +#: netbox/extras/models/models.py:236 msgid "" "When provided, the request will include a X-Hook-Signature " "header containing a HMAC hex digest of the payload body using the secret as " "the key. The secret is not transmitted in the request." msgstr "" -#: extras/models/models.py:243 +#: netbox/extras/models/models.py:243 msgid "Enable SSL certificate verification. Disable with caution!" msgstr "" -#: extras/models/models.py:249 templates/extras/webhook.html:51 +#: netbox/extras/models/models.py:249 netbox/templates/extras/webhook.html:51 msgid "CA File Path" msgstr "" -#: extras/models/models.py:251 +#: netbox/extras/models/models.py:251 msgid "" "The specific CA certificate file to use for SSL verification. Leave blank to " "use the system defaults." msgstr "" -#: extras/models/models.py:262 +#: netbox/extras/models/models.py:262 msgid "webhook" msgstr "" -#: extras/models/models.py:263 +#: netbox/extras/models/models.py:263 msgid "webhooks" msgstr "" -#: extras/models/models.py:281 +#: netbox/extras/models/models.py:281 msgid "Do not specify a CA certificate file if SSL verification is disabled." msgstr "" -#: extras/models/models.py:321 +#: netbox/extras/models/models.py:321 msgid "The object type(s) to which this link applies." msgstr "" -#: extras/models/models.py:333 +#: netbox/extras/models/models.py:333 msgid "link text" msgstr "" -#: extras/models/models.py:334 +#: netbox/extras/models/models.py:334 msgid "Jinja2 template code for link text" msgstr "" -#: extras/models/models.py:337 +#: netbox/extras/models/models.py:337 msgid "link URL" msgstr "" -#: extras/models/models.py:338 +#: netbox/extras/models/models.py:338 msgid "Jinja2 template code for link URL" msgstr "" -#: extras/models/models.py:348 +#: netbox/extras/models/models.py:348 msgid "Links with the same group will appear as a dropdown menu" msgstr "" -#: extras/models/models.py:358 +#: netbox/extras/models/models.py:358 msgid "new window" msgstr "" -#: extras/models/models.py:360 +#: netbox/extras/models/models.py:360 msgid "Force link to open in a new window" msgstr "" -#: extras/models/models.py:369 +#: netbox/extras/models/models.py:369 msgid "custom link" msgstr "" -#: extras/models/models.py:370 +#: netbox/extras/models/models.py:370 msgid "custom links" msgstr "" -#: extras/models/models.py:417 +#: netbox/extras/models/models.py:417 msgid "The object type(s) to which this template applies." msgstr "" -#: extras/models/models.py:430 +#: netbox/extras/models/models.py:430 msgid "" "Jinja2 template code. The list of objects being exported is passed as a " "context variable named queryset." msgstr "" -#: extras/models/models.py:438 +#: netbox/extras/models/models.py:438 msgid "Defaults to text/plain; charset=utf-8" msgstr "" -#: extras/models/models.py:441 +#: netbox/extras/models/models.py:441 msgid "file extension" msgstr "" -#: extras/models/models.py:444 +#: netbox/extras/models/models.py:444 msgid "Extension to append to the rendered filename" msgstr "" -#: extras/models/models.py:447 +#: netbox/extras/models/models.py:447 msgid "as attachment" msgstr "" -#: extras/models/models.py:449 +#: netbox/extras/models/models.py:449 msgid "Download file as attachment" msgstr "" -#: extras/models/models.py:458 +#: netbox/extras/models/models.py:458 msgid "export template" msgstr "" -#: extras/models/models.py:459 +#: netbox/extras/models/models.py:459 msgid "export templates" msgstr "" -#: extras/models/models.py:476 +#: netbox/extras/models/models.py:476 #, python-brace-format msgid "\"{name}\" is a reserved name. Please choose a different name." msgstr "" -#: extras/models/models.py:526 +#: netbox/extras/models/models.py:526 msgid "The object type(s) to which this filter applies." msgstr "" -#: extras/models/models.py:558 +#: netbox/extras/models/models.py:558 msgid "shared" msgstr "" -#: extras/models/models.py:571 +#: netbox/extras/models/models.py:571 msgid "saved filter" msgstr "" -#: extras/models/models.py:572 +#: netbox/extras/models/models.py:572 msgid "saved filters" msgstr "" -#: extras/models/models.py:590 +#: netbox/extras/models/models.py:590 msgid "Filter parameters must be stored as a dictionary of keyword arguments." msgstr "" -#: extras/models/models.py:618 +#: netbox/extras/models/models.py:618 msgid "image height" msgstr "" -#: extras/models/models.py:621 +#: netbox/extras/models/models.py:621 msgid "image width" msgstr "" -#: extras/models/models.py:638 +#: netbox/extras/models/models.py:638 msgid "image attachment" msgstr "" -#: extras/models/models.py:639 +#: netbox/extras/models/models.py:639 msgid "image attachments" msgstr "" -#: extras/models/models.py:653 +#: netbox/extras/models/models.py:653 #, python-brace-format msgid "Image attachments cannot be assigned to this object type ({type})." msgstr "" -#: extras/models/models.py:716 +#: netbox/extras/models/models.py:716 msgid "kind" msgstr "" -#: extras/models/models.py:730 +#: netbox/extras/models/models.py:730 msgid "journal entry" msgstr "" -#: extras/models/models.py:731 +#: netbox/extras/models/models.py:731 msgid "journal entries" msgstr "" -#: extras/models/models.py:746 +#: netbox/extras/models/models.py:746 #, python-brace-format msgid "Journaling is not supported for this object type ({type})." msgstr "" -#: extras/models/models.py:788 +#: netbox/extras/models/models.py:788 msgid "bookmark" msgstr "" -#: extras/models/models.py:789 +#: netbox/extras/models/models.py:789 msgid "bookmarks" msgstr "" -#: extras/models/models.py:802 +#: netbox/extras/models/models.py:802 #, python-brace-format msgid "Bookmarks cannot be assigned to this object type ({type})." msgstr "" -#: extras/models/scripts.py:42 +#: netbox/extras/models/scripts.py:42 msgid "is executable" msgstr "" -#: extras/models/scripts.py:64 +#: netbox/extras/models/scripts.py:64 msgid "script" msgstr "" -#: extras/models/scripts.py:65 +#: netbox/extras/models/scripts.py:65 msgid "scripts" msgstr "" -#: extras/models/scripts.py:111 +#: netbox/extras/models/scripts.py:111 msgid "script module" msgstr "" -#: extras/models/scripts.py:112 +#: netbox/extras/models/scripts.py:112 msgid "script modules" msgstr "" -#: extras/models/search.py:22 +#: netbox/extras/models/search.py:22 msgid "timestamp" msgstr "" -#: extras/models/search.py:37 +#: netbox/extras/models/search.py:37 msgid "field" msgstr "" -#: extras/models/search.py:45 +#: netbox/extras/models/search.py:45 msgid "value" msgstr "" -#: extras/models/search.py:56 +#: netbox/extras/models/search.py:56 msgid "cached value" msgstr "" -#: extras/models/search.py:57 +#: netbox/extras/models/search.py:57 msgid "cached values" msgstr "" -#: extras/models/staging.py:44 +#: netbox/extras/models/staging.py:44 msgid "branch" msgstr "" -#: extras/models/staging.py:45 +#: netbox/extras/models/staging.py:45 msgid "branches" msgstr "" -#: extras/models/staging.py:97 +#: netbox/extras/models/staging.py:97 msgid "staged change" msgstr "" -#: extras/models/staging.py:98 +#: netbox/extras/models/staging.py:98 msgid "staged changes" msgstr "" -#: extras/models/tags.py:40 +#: netbox/extras/models/tags.py:40 msgid "The object type(s) to which this tag can be applied." msgstr "" -#: extras/models/tags.py:49 +#: netbox/extras/models/tags.py:49 msgid "tag" msgstr "" -#: extras/models/tags.py:50 +#: netbox/extras/models/tags.py:50 msgid "tags" msgstr "" -#: extras/models/tags.py:78 +#: netbox/extras/models/tags.py:78 msgid "tagged item" msgstr "" -#: extras/models/tags.py:79 +#: netbox/extras/models/tags.py:79 msgid "tagged items" msgstr "" -#: extras/scripts.py:439 +#: netbox/extras/scripts.py:439 msgid "Script Data" msgstr "" -#: extras/scripts.py:443 +#: netbox/extras/scripts.py:443 msgid "Script Execution Parameters" msgstr "" -#: extras/scripts.py:662 +#: netbox/extras/scripts.py:662 msgid "Database changes have been reverted automatically." msgstr "" -#: extras/scripts.py:675 +#: netbox/extras/scripts.py:675 msgid "Script aborted with error: " msgstr "" -#: extras/scripts.py:685 +#: netbox/extras/scripts.py:685 msgid "An exception occurred: " msgstr "" -#: extras/scripts.py:688 +#: netbox/extras/scripts.py:688 msgid "Database changes have been reverted due to error." msgstr "" -#: extras/signals.py:146 +#: netbox/extras/signals.py:146 #, python-brace-format msgid "Deletion is prevented by a protection rule: {message}" msgstr "" -#: extras/tables/tables.py:46 extras/tables/tables.py:124 -#: extras/tables/tables.py:148 extras/tables/tables.py:213 -#: extras/tables/tables.py:238 extras/tables/tables.py:290 -#: extras/tables/tables.py:336 templates/extras/customfield.html:93 -#: templates/extras/eventrule.html:27 templates/users/objectpermission.html:64 -#: users/tables.py:80 +#: netbox/extras/tables/tables.py:46 netbox/extras/tables/tables.py:124 +#: netbox/extras/tables/tables.py:148 netbox/extras/tables/tables.py:213 +#: netbox/extras/tables/tables.py:238 netbox/extras/tables/tables.py:290 +#: netbox/extras/tables/tables.py:336 +#: netbox/templates/extras/customfield.html:93 +#: netbox/templates/extras/eventrule.html:27 +#: netbox/templates/users/objectpermission.html:64 netbox/users/tables.py:80 msgid "Object Types" msgstr "" -#: extras/tables/tables.py:52 +#: netbox/extras/tables/tables.py:52 msgid "Visible" msgstr "" -#: extras/tables/tables.py:55 +#: netbox/extras/tables/tables.py:55 msgid "Editable" msgstr "" -#: extras/tables/tables.py:61 +#: netbox/extras/tables/tables.py:61 msgid "Related Object Type" msgstr "" -#: extras/tables/tables.py:65 templates/extras/customfield.html:47 +#: netbox/extras/tables/tables.py:65 +#: netbox/templates/extras/customfield.html:47 msgid "Choice Set" msgstr "" -#: extras/tables/tables.py:73 +#: netbox/extras/tables/tables.py:73 msgid "Is Cloneable" msgstr "" -#: extras/tables/tables.py:103 +#: netbox/extras/tables/tables.py:103 msgid "Count" msgstr "" -#: extras/tables/tables.py:106 +#: netbox/extras/tables/tables.py:106 msgid "Order Alphabetically" msgstr "" -#: extras/tables/tables.py:130 templates/extras/customlink.html:33 +#: netbox/extras/tables/tables.py:130 +#: netbox/templates/extras/customlink.html:33 msgid "New Window" msgstr "" -#: extras/tables/tables.py:151 +#: netbox/extras/tables/tables.py:151 msgid "As Attachment" msgstr "" -#: extras/tables/tables.py:158 extras/tables/tables.py:377 -#: extras/tables/tables.py:412 templates/core/datafile.html:24 -#: templates/dcim/device/render_config.html:22 -#: templates/extras/configcontext.html:39 -#: templates/extras/configtemplate.html:31 -#: templates/extras/exporttemplate.html:45 -#: templates/generic/bulk_import.html:35 -#: templates/virtualization/virtualmachine/render_config.html:22 +#: netbox/extras/tables/tables.py:158 netbox/extras/tables/tables.py:377 +#: netbox/extras/tables/tables.py:412 netbox/templates/core/datafile.html:24 +#: netbox/templates/dcim/device/render_config.html:22 +#: netbox/templates/extras/configcontext.html:39 +#: netbox/templates/extras/configtemplate.html:31 +#: netbox/templates/extras/exporttemplate.html:45 +#: netbox/templates/generic/bulk_import.html:35 +#: netbox/templates/virtualization/virtualmachine/render_config.html:22 msgid "Data File" msgstr "" -#: extras/tables/tables.py:163 extras/tables/tables.py:389 -#: extras/tables/tables.py:417 +#: netbox/extras/tables/tables.py:163 netbox/extras/tables/tables.py:389 +#: netbox/extras/tables/tables.py:417 msgid "Synced" msgstr "" -#: extras/tables/tables.py:190 +#: netbox/extras/tables/tables.py:190 msgid "Image" msgstr "" -#: extras/tables/tables.py:195 +#: netbox/extras/tables/tables.py:195 msgid "Size (Bytes)" msgstr "" -#: extras/tables/tables.py:260 +#: netbox/extras/tables/tables.py:260 msgid "SSL Validation" msgstr "" -#: extras/tables/tables.py:305 +#: netbox/extras/tables/tables.py:305 msgid "Job Start" msgstr "" -#: extras/tables/tables.py:308 +#: netbox/extras/tables/tables.py:308 msgid "Job End" msgstr "" -#: extras/tables/tables.py:425 netbox/navigation/menu.py:64 -#: templates/dcim/devicerole.html:8 +#: netbox/extras/tables/tables.py:425 netbox/netbox/navigation/menu.py:64 +#: netbox/templates/dcim/devicerole.html:8 msgid "Device Roles" msgstr "" -#: extras/tables/tables.py:466 templates/account/profile.html:19 -#: templates/users/user.html:21 +#: netbox/extras/tables/tables.py:466 netbox/templates/account/profile.html:19 +#: netbox/templates/users/user.html:21 msgid "Full Name" msgstr "" -#: extras/tables/tables.py:483 templates/extras/objectchange.html:67 +#: netbox/extras/tables/tables.py:483 +#: netbox/templates/extras/objectchange.html:67 msgid "Request ID" msgstr "" -#: extras/tables/tables.py:520 +#: netbox/extras/tables/tables.py:520 msgid "Comments (Short)" msgstr "" -#: extras/tables/tables.py:539 extras/tables/tables.py:561 +#: netbox/extras/tables/tables.py:539 netbox/extras/tables/tables.py:561 msgid "Line" msgstr "" -#: extras/tables/tables.py:546 extras/tables/tables.py:571 +#: netbox/extras/tables/tables.py:546 netbox/extras/tables/tables.py:571 msgid "Level" msgstr "" -#: extras/tables/tables.py:549 extras/tables/tables.py:580 +#: netbox/extras/tables/tables.py:549 netbox/extras/tables/tables.py:580 msgid "Message" msgstr "" -#: extras/tables/tables.py:564 +#: netbox/extras/tables/tables.py:564 msgid "Method" msgstr "" -#: extras/validators.py:16 +#: netbox/extras/validators.py:16 #, python-format msgid "Ensure this value is equal to %(limit_value)s." msgstr "" -#: extras/validators.py:27 +#: netbox/extras/validators.py:27 #, python-format msgid "Ensure this value does not equal %(limit_value)s." msgstr "" -#: extras/validators.py:38 +#: netbox/extras/validators.py:38 msgid "This field must be empty." msgstr "" -#: extras/validators.py:53 +#: netbox/extras/validators.py:53 msgid "This field must not be empty." msgstr "" -#: extras/validators.py:95 +#: netbox/extras/validators.py:95 msgid "Validation rules must be passed as a dictionary" msgstr "" -#: extras/validators.py:120 +#: netbox/extras/validators.py:120 #, python-brace-format msgid "Custom validation failed for {attribute}: {exception}" msgstr "" -#: extras/validators.py:140 +#: netbox/extras/validators.py:140 #, python-brace-format msgid "Invalid attribute \"{name}\" for request" msgstr "" -#: extras/validators.py:157 +#: netbox/extras/validators.py:157 #, python-brace-format msgid "Invalid attribute \"{name}\" for {model}" msgstr "" -#: extras/views.py:889 +#: netbox/extras/views.py:889 msgid "Your dashboard has been reset." msgstr "" -#: extras/views.py:935 +#: netbox/extras/views.py:935 msgid "Added widget: " msgstr "" -#: extras/views.py:976 +#: netbox/extras/views.py:976 msgid "Updated widget: " msgstr "" -#: extras/views.py:1012 +#: netbox/extras/views.py:1012 msgid "Deleted widget: " msgstr "" -#: extras/views.py:1014 +#: netbox/extras/views.py:1014 msgid "Error deleting widget: " msgstr "" -#: extras/views.py:1101 +#: netbox/extras/views.py:1101 msgid "Unable to run script: RQ worker process not running." msgstr "" -#: ipam/api/field_serializers.py:17 +#: netbox/ipam/api/field_serializers.py:17 msgid "Enter a valid IPv4 or IPv6 address with optional mask." msgstr "" -#: ipam/api/field_serializers.py:24 +#: netbox/ipam/api/field_serializers.py:24 #, python-brace-format msgid "Invalid IP address format: {data}" msgstr "" -#: ipam/api/field_serializers.py:37 +#: netbox/ipam/api/field_serializers.py:37 msgid "Enter a valid IPv4 or IPv6 prefix and mask in CIDR notation." msgstr "" -#: ipam/api/field_serializers.py:44 +#: netbox/ipam/api/field_serializers.py:44 #, python-brace-format msgid "Invalid IP prefix format: {data}" msgstr "" -#: ipam/api/views.py:358 +#: netbox/ipam/api/views.py:358 msgid "" "Insufficient space is available to accommodate the requested prefix size(s)" msgstr "" -#: ipam/choices.py:30 +#: netbox/ipam/choices.py:30 msgid "Container" msgstr "" -#: ipam/choices.py:72 +#: netbox/ipam/choices.py:72 msgid "DHCP" msgstr "" -#: ipam/choices.py:73 +#: netbox/ipam/choices.py:73 msgid "SLAAC" msgstr "" -#: ipam/choices.py:89 +#: netbox/ipam/choices.py:89 msgid "Loopback" msgstr "" -#: ipam/choices.py:90 tenancy/choices.py:18 +#: netbox/ipam/choices.py:90 netbox/tenancy/choices.py:18 msgid "Secondary" msgstr "" -#: ipam/choices.py:91 +#: netbox/ipam/choices.py:91 msgid "Anycast" msgstr "" -#: ipam/choices.py:115 +#: netbox/ipam/choices.py:115 msgid "Standard" msgstr "" -#: ipam/choices.py:120 +#: netbox/ipam/choices.py:120 msgid "CheckPoint" msgstr "" -#: ipam/choices.py:123 +#: netbox/ipam/choices.py:123 msgid "Cisco" msgstr "" -#: ipam/choices.py:137 +#: netbox/ipam/choices.py:137 msgid "Plaintext" msgstr "" -#: ipam/fields.py:36 +#: netbox/ipam/fields.py:36 #, python-brace-format msgid "Invalid IP address format: {address}" msgstr "" -#: ipam/filtersets.py:48 vpn/filtersets.py:323 +#: netbox/ipam/filtersets.py:48 netbox/vpn/filtersets.py:323 msgid "Import target" msgstr "" -#: ipam/filtersets.py:54 vpn/filtersets.py:329 +#: netbox/ipam/filtersets.py:54 netbox/vpn/filtersets.py:329 msgid "Import target (name)" msgstr "" -#: ipam/filtersets.py:59 vpn/filtersets.py:334 +#: netbox/ipam/filtersets.py:59 netbox/vpn/filtersets.py:334 msgid "Export target" msgstr "" -#: ipam/filtersets.py:65 vpn/filtersets.py:340 +#: netbox/ipam/filtersets.py:65 netbox/vpn/filtersets.py:340 msgid "Export target (name)" msgstr "" -#: ipam/filtersets.py:86 +#: netbox/ipam/filtersets.py:86 msgid "Importing VRF" msgstr "" -#: ipam/filtersets.py:92 +#: netbox/ipam/filtersets.py:92 msgid "Import VRF (RD)" msgstr "" -#: ipam/filtersets.py:97 +#: netbox/ipam/filtersets.py:97 msgid "Exporting VRF" msgstr "" -#: ipam/filtersets.py:103 +#: netbox/ipam/filtersets.py:103 msgid "Export VRF (RD)" msgstr "" -#: ipam/filtersets.py:108 +#: netbox/ipam/filtersets.py:108 msgid "Importing L2VPN" msgstr "" -#: ipam/filtersets.py:114 +#: netbox/ipam/filtersets.py:114 msgid "Importing L2VPN (identifier)" msgstr "" -#: ipam/filtersets.py:119 +#: netbox/ipam/filtersets.py:119 msgid "Exporting L2VPN" msgstr "" -#: ipam/filtersets.py:125 +#: netbox/ipam/filtersets.py:125 msgid "Exporting L2VPN (identifier)" msgstr "" -#: ipam/filtersets.py:155 ipam/filtersets.py:281 ipam/forms/model_forms.py:227 -#: ipam/tables/ip.py:211 templates/ipam/prefix.html:12 +#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:281 +#: netbox/ipam/forms/model_forms.py:227 netbox/ipam/tables/ip.py:211 +#: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "" -#: ipam/filtersets.py:159 ipam/filtersets.py:198 ipam/filtersets.py:221 +#: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 +#: netbox/ipam/filtersets.py:221 msgid "RIR (ID)" msgstr "" -#: ipam/filtersets.py:165 ipam/filtersets.py:204 ipam/filtersets.py:227 +#: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 +#: netbox/ipam/filtersets.py:227 msgid "RIR (slug)" msgstr "" -#: ipam/filtersets.py:285 +#: netbox/ipam/filtersets.py:285 msgid "Within prefix" msgstr "" -#: ipam/filtersets.py:289 +#: netbox/ipam/filtersets.py:289 msgid "Within and including prefix" msgstr "" -#: ipam/filtersets.py:293 +#: netbox/ipam/filtersets.py:293 msgid "Prefixes which contain this prefix or IP" msgstr "" -#: ipam/filtersets.py:304 ipam/filtersets.py:572 ipam/forms/bulk_edit.py:327 -#: ipam/forms/filtersets.py:196 ipam/forms/filtersets.py:331 +#: netbox/ipam/filtersets.py:304 netbox/ipam/filtersets.py:572 +#: netbox/ipam/forms/bulk_edit.py:327 netbox/ipam/forms/filtersets.py:196 +#: netbox/ipam/forms/filtersets.py:331 msgid "Mask length" msgstr "" -#: ipam/filtersets.py:373 vpn/filtersets.py:446 +#: netbox/ipam/filtersets.py:373 netbox/vpn/filtersets.py:446 msgid "VLAN (ID)" msgstr "" -#: ipam/filtersets.py:377 vpn/filtersets.py:441 +#: netbox/ipam/filtersets.py:377 netbox/vpn/filtersets.py:441 msgid "VLAN number (1-4094)" msgstr "" -#: ipam/filtersets.py:471 ipam/filtersets.py:475 ipam/filtersets.py:567 -#: ipam/forms/model_forms.py:461 templates/tenancy/contact.html:53 -#: tenancy/forms/bulk_edit.py:113 +#: netbox/ipam/filtersets.py:471 netbox/ipam/filtersets.py:475 +#: netbox/ipam/filtersets.py:567 netbox/ipam/forms/model_forms.py:461 +#: netbox/templates/tenancy/contact.html:53 +#: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "" -#: ipam/filtersets.py:479 +#: netbox/ipam/filtersets.py:479 msgid "Ranges which contain this prefix or IP" msgstr "" -#: ipam/filtersets.py:507 ipam/filtersets.py:563 +#: netbox/ipam/filtersets.py:507 netbox/ipam/filtersets.py:563 msgid "Parent prefix" msgstr "" -#: ipam/filtersets.py:616 ipam/filtersets.py:856 ipam/filtersets.py:1091 -#: vpn/filtersets.py:404 +#: netbox/ipam/filtersets.py:616 netbox/ipam/filtersets.py:856 +#: netbox/ipam/filtersets.py:1091 netbox/vpn/filtersets.py:404 msgid "Virtual machine (name)" msgstr "" -#: ipam/filtersets.py:621 ipam/filtersets.py:861 ipam/filtersets.py:1085 -#: virtualization/filtersets.py:278 virtualization/filtersets.py:317 -#: vpn/filtersets.py:409 +#: netbox/ipam/filtersets.py:621 netbox/ipam/filtersets.py:861 +#: netbox/ipam/filtersets.py:1085 netbox/virtualization/filtersets.py:278 +#: netbox/virtualization/filtersets.py:317 netbox/vpn/filtersets.py:409 msgid "Virtual machine (ID)" msgstr "" -#: ipam/filtersets.py:627 vpn/filtersets.py:97 vpn/filtersets.py:415 +#: netbox/ipam/filtersets.py:627 netbox/vpn/filtersets.py:97 +#: netbox/vpn/filtersets.py:415 msgid "Interface (name)" msgstr "" -#: ipam/filtersets.py:638 vpn/filtersets.py:108 vpn/filtersets.py:426 +#: netbox/ipam/filtersets.py:638 netbox/vpn/filtersets.py:108 +#: netbox/vpn/filtersets.py:426 msgid "VM interface (name)" msgstr "" -#: ipam/filtersets.py:643 vpn/filtersets.py:113 +#: netbox/ipam/filtersets.py:643 netbox/vpn/filtersets.py:113 msgid "VM interface (ID)" msgstr "" -#: ipam/filtersets.py:648 +#: netbox/ipam/filtersets.py:648 msgid "FHRP group (ID)" msgstr "" -#: ipam/filtersets.py:652 +#: netbox/ipam/filtersets.py:652 msgid "Is assigned to an interface" msgstr "" -#: ipam/filtersets.py:656 +#: netbox/ipam/filtersets.py:656 msgid "Is assigned" msgstr "" -#: ipam/filtersets.py:668 +#: netbox/ipam/filtersets.py:668 msgid "Service (ID)" msgstr "" -#: ipam/filtersets.py:673 +#: netbox/ipam/filtersets.py:673 msgid "NAT inside IP address (ID)" msgstr "" -#: ipam/filtersets.py:1096 +#: netbox/ipam/filtersets.py:1096 msgid "IP address (ID)" msgstr "" -#: ipam/filtersets.py:1102 ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1102 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "" -#: ipam/filtersets.py:1131 +#: netbox/ipam/filtersets.py:1131 msgid "Primary IPv4 (ID)" msgstr "" -#: ipam/filtersets.py:1136 +#: netbox/ipam/filtersets.py:1136 msgid "Primary IPv6 (ID)" msgstr "" -#: ipam/formfields.py:14 +#: netbox/ipam/formfields.py:14 msgid "Enter a valid IPv4 or IPv6 address (without a mask)." msgstr "" -#: ipam/formfields.py:32 +#: netbox/ipam/formfields.py:32 #, python-brace-format msgid "Invalid IPv4/IPv6 address format: {address}" msgstr "" -#: ipam/formfields.py:37 +#: netbox/ipam/formfields.py:37 msgid "This field requires an IP address without a mask." msgstr "" -#: ipam/formfields.py:39 ipam/formfields.py:61 +#: netbox/ipam/formfields.py:39 netbox/ipam/formfields.py:61 msgid "Please specify a valid IPv4 or IPv6 address." msgstr "" -#: ipam/formfields.py:44 +#: netbox/ipam/formfields.py:44 msgid "Enter a valid IPv4 or IPv6 address (with CIDR mask)." msgstr "" -#: ipam/formfields.py:56 +#: netbox/ipam/formfields.py:56 msgid "CIDR mask (e.g. /24) is required." msgstr "" -#: ipam/forms/bulk_create.py:13 +#: netbox/ipam/forms/bulk_create.py:13 msgid "Address pattern" msgstr "" -#: ipam/forms/bulk_edit.py:48 +#: netbox/ipam/forms/bulk_edit.py:48 msgid "Enforce unique space" msgstr "" -#: ipam/forms/bulk_edit.py:86 +#: netbox/ipam/forms/bulk_edit.py:86 msgid "Is private" msgstr "" -#: ipam/forms/bulk_edit.py:107 ipam/forms/bulk_edit.py:136 -#: ipam/forms/bulk_edit.py:161 ipam/forms/bulk_import.py:88 -#: ipam/forms/bulk_import.py:108 ipam/forms/bulk_import.py:128 -#: ipam/forms/filtersets.py:110 ipam/forms/filtersets.py:125 -#: ipam/forms/filtersets.py:148 ipam/forms/model_forms.py:94 -#: ipam/forms/model_forms.py:107 ipam/forms/model_forms.py:129 -#: ipam/forms/model_forms.py:147 ipam/models/asns.py:31 ipam/models/asns.py:103 -#: ipam/models/ip.py:71 ipam/models/ip.py:90 ipam/tables/asn.py:20 -#: ipam/tables/asn.py:45 templates/ipam/aggregate.html:18 -#: templates/ipam/asn.html:27 templates/ipam/asnrange.html:19 -#: templates/ipam/rir.html:19 +#: netbox/ipam/forms/bulk_edit.py:107 netbox/ipam/forms/bulk_edit.py:136 +#: netbox/ipam/forms/bulk_edit.py:161 netbox/ipam/forms/bulk_import.py:88 +#: netbox/ipam/forms/bulk_import.py:108 netbox/ipam/forms/bulk_import.py:128 +#: netbox/ipam/forms/filtersets.py:110 netbox/ipam/forms/filtersets.py:125 +#: netbox/ipam/forms/filtersets.py:148 netbox/ipam/forms/model_forms.py:94 +#: netbox/ipam/forms/model_forms.py:107 netbox/ipam/forms/model_forms.py:129 +#: netbox/ipam/forms/model_forms.py:147 netbox/ipam/models/asns.py:31 +#: netbox/ipam/models/asns.py:103 netbox/ipam/models/ip.py:71 +#: netbox/ipam/models/ip.py:90 netbox/ipam/tables/asn.py:20 +#: netbox/ipam/tables/asn.py:45 netbox/templates/ipam/aggregate.html:18 +#: netbox/templates/ipam/asn.html:27 netbox/templates/ipam/asnrange.html:19 +#: netbox/templates/ipam/rir.html:19 msgid "RIR" msgstr "" -#: ipam/forms/bulk_edit.py:169 +#: netbox/ipam/forms/bulk_edit.py:169 msgid "Date added" msgstr "" -#: ipam/forms/bulk_edit.py:230 +#: netbox/ipam/forms/bulk_edit.py:230 msgid "Prefix length" msgstr "" -#: ipam/forms/bulk_edit.py:253 ipam/forms/filtersets.py:241 -#: templates/ipam/prefix.html:85 +#: netbox/ipam/forms/bulk_edit.py:253 netbox/ipam/forms/filtersets.py:241 +#: netbox/templates/ipam/prefix.html:85 msgid "Is a pool" msgstr "" -#: ipam/forms/bulk_edit.py:258 ipam/forms/bulk_edit.py:302 -#: ipam/forms/filtersets.py:248 ipam/forms/filtersets.py:293 -#: ipam/models/ip.py:272 ipam/models/ip.py:539 +#: netbox/ipam/forms/bulk_edit.py:258 netbox/ipam/forms/bulk_edit.py:302 +#: netbox/ipam/forms/filtersets.py:248 netbox/ipam/forms/filtersets.py:293 +#: netbox/ipam/models/ip.py:272 netbox/ipam/models/ip.py:539 msgid "Treat as fully utilized" msgstr "" -#: ipam/forms/bulk_edit.py:350 ipam/models/ip.py:772 +#: netbox/ipam/forms/bulk_edit.py:350 netbox/ipam/models/ip.py:772 msgid "DNS name" msgstr "" -#: ipam/forms/bulk_edit.py:371 ipam/forms/bulk_edit.py:572 -#: ipam/forms/bulk_import.py:393 ipam/forms/bulk_import.py:477 -#: ipam/forms/bulk_import.py:503 ipam/forms/filtersets.py:390 -#: ipam/forms/filtersets.py:537 templates/ipam/fhrpgroup.html:22 -#: templates/ipam/inc/panels/fhrp_groups.html:24 templates/ipam/service.html:32 -#: templates/ipam/servicetemplate.html:19 +#: netbox/ipam/forms/bulk_edit.py:371 netbox/ipam/forms/bulk_edit.py:572 +#: netbox/ipam/forms/bulk_import.py:393 netbox/ipam/forms/bulk_import.py:477 +#: netbox/ipam/forms/bulk_import.py:503 netbox/ipam/forms/filtersets.py:390 +#: netbox/ipam/forms/filtersets.py:537 netbox/templates/ipam/fhrpgroup.html:22 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:24 +#: netbox/templates/ipam/service.html:32 +#: netbox/templates/ipam/servicetemplate.html:19 msgid "Protocol" msgstr "" -#: ipam/forms/bulk_edit.py:378 ipam/forms/filtersets.py:397 -#: ipam/tables/fhrp.py:22 templates/ipam/fhrpgroup.html:26 +#: netbox/ipam/forms/bulk_edit.py:378 netbox/ipam/forms/filtersets.py:397 +#: netbox/ipam/tables/fhrp.py:22 netbox/templates/ipam/fhrpgroup.html:26 msgid "Group ID" msgstr "" -#: ipam/forms/bulk_edit.py:383 ipam/forms/filtersets.py:402 -#: wireless/forms/bulk_edit.py:68 wireless/forms/bulk_edit.py:115 -#: wireless/forms/bulk_import.py:62 wireless/forms/bulk_import.py:65 -#: wireless/forms/bulk_import.py:104 wireless/forms/bulk_import.py:107 -#: wireless/forms/filtersets.py:54 wireless/forms/filtersets.py:88 +#: netbox/ipam/forms/bulk_edit.py:383 netbox/ipam/forms/filtersets.py:402 +#: netbox/wireless/forms/bulk_edit.py:68 netbox/wireless/forms/bulk_edit.py:115 +#: netbox/wireless/forms/bulk_import.py:62 +#: netbox/wireless/forms/bulk_import.py:65 +#: netbox/wireless/forms/bulk_import.py:104 +#: netbox/wireless/forms/bulk_import.py:107 +#: netbox/wireless/forms/filtersets.py:54 +#: netbox/wireless/forms/filtersets.py:88 msgid "Authentication type" msgstr "" -#: ipam/forms/bulk_edit.py:388 ipam/forms/filtersets.py:406 +#: netbox/ipam/forms/bulk_edit.py:388 netbox/ipam/forms/filtersets.py:406 msgid "Authentication key" msgstr "" -#: ipam/forms/bulk_edit.py:405 ipam/forms/filtersets.py:383 -#: ipam/forms/model_forms.py:472 netbox/navigation/menu.py:370 -#: templates/ipam/fhrpgroup.html:49 -#: templates/wireless/inc/authentication_attrs.html:5 -#: wireless/forms/bulk_edit.py:91 wireless/forms/bulk_edit.py:138 -#: wireless/forms/filtersets.py:36 wireless/forms/filtersets.py:76 -#: wireless/forms/model_forms.py:55 wireless/forms/model_forms.py:164 +#: netbox/ipam/forms/bulk_edit.py:405 netbox/ipam/forms/filtersets.py:383 +#: netbox/ipam/forms/model_forms.py:472 netbox/netbox/navigation/menu.py:370 +#: netbox/templates/ipam/fhrpgroup.html:49 +#: netbox/templates/wireless/inc/authentication_attrs.html:5 +#: netbox/wireless/forms/bulk_edit.py:91 netbox/wireless/forms/bulk_edit.py:138 +#: netbox/wireless/forms/filtersets.py:36 +#: netbox/wireless/forms/filtersets.py:76 +#: netbox/wireless/forms/model_forms.py:55 +#: netbox/wireless/forms/model_forms.py:164 msgid "Authentication" msgstr "" -#: ipam/forms/bulk_edit.py:415 +#: netbox/ipam/forms/bulk_edit.py:415 msgid "Minimum child VLAN VID" msgstr "" -#: ipam/forms/bulk_edit.py:421 +#: netbox/ipam/forms/bulk_edit.py:421 msgid "Maximum child VLAN VID" msgstr "" -#: ipam/forms/bulk_edit.py:429 ipam/forms/model_forms.py:566 +#: netbox/ipam/forms/bulk_edit.py:429 netbox/ipam/forms/model_forms.py:566 msgid "Scope type" msgstr "" -#: ipam/forms/bulk_edit.py:491 ipam/forms/model_forms.py:641 -#: ipam/tables/vlans.py:71 templates/ipam/vlangroup.html:38 +#: netbox/ipam/forms/bulk_edit.py:491 netbox/ipam/forms/model_forms.py:641 +#: netbox/ipam/tables/vlans.py:71 netbox/templates/ipam/vlangroup.html:38 msgid "Scope" msgstr "" -#: ipam/forms/bulk_edit.py:563 +#: netbox/ipam/forms/bulk_edit.py:563 msgid "Site & Group" msgstr "" -#: ipam/forms/bulk_edit.py:577 ipam/forms/model_forms.py:705 -#: ipam/forms/model_forms.py:737 ipam/tables/services.py:19 -#: ipam/tables/services.py:49 templates/ipam/service.html:36 -#: templates/ipam/servicetemplate.html:23 +#: netbox/ipam/forms/bulk_edit.py:577 netbox/ipam/forms/model_forms.py:705 +#: netbox/ipam/forms/model_forms.py:737 netbox/ipam/tables/services.py:19 +#: netbox/ipam/tables/services.py:49 netbox/templates/ipam/service.html:36 +#: netbox/templates/ipam/servicetemplate.html:23 msgid "Ports" msgstr "" -#: ipam/forms/bulk_import.py:47 +#: netbox/ipam/forms/bulk_import.py:47 msgid "Import route targets" msgstr "" -#: ipam/forms/bulk_import.py:53 +#: netbox/ipam/forms/bulk_import.py:53 msgid "Export route targets" msgstr "" -#: ipam/forms/bulk_import.py:91 ipam/forms/bulk_import.py:111 -#: ipam/forms/bulk_import.py:131 +#: netbox/ipam/forms/bulk_import.py:91 netbox/ipam/forms/bulk_import.py:111 +#: netbox/ipam/forms/bulk_import.py:131 msgid "Assigned RIR" msgstr "" -#: ipam/forms/bulk_import.py:181 +#: netbox/ipam/forms/bulk_import.py:181 msgid "VLAN's group (if any)" msgstr "" -#: ipam/forms/bulk_import.py:184 ipam/forms/filtersets.py:256 -#: ipam/forms/model_forms.py:216 ipam/models/vlans.py:214 ipam/tables/ip.py:254 -#: templates/ipam/prefix.html:60 templates/ipam/vlan.html:12 -#: templates/ipam/vlan/base.html:6 templates/ipam/vlan_edit.html:10 -#: templates/wireless/wirelesslan.html:30 vpn/forms/bulk_import.py:304 -#: vpn/forms/filtersets.py:284 vpn/forms/model_forms.py:433 -#: vpn/forms/model_forms.py:452 wireless/forms/bulk_edit.py:55 -#: wireless/forms/bulk_import.py:48 wireless/forms/model_forms.py:48 -#: wireless/models.py:101 +#: netbox/ipam/forms/bulk_import.py:184 netbox/ipam/forms/filtersets.py:256 +#: netbox/ipam/forms/model_forms.py:216 netbox/ipam/models/vlans.py:214 +#: netbox/ipam/tables/ip.py:254 netbox/templates/ipam/prefix.html:60 +#: netbox/templates/ipam/vlan.html:12 netbox/templates/ipam/vlan/base.html:6 +#: netbox/templates/ipam/vlan_edit.html:10 +#: netbox/templates/wireless/wirelesslan.html:30 +#: netbox/vpn/forms/bulk_import.py:304 netbox/vpn/forms/filtersets.py:284 +#: netbox/vpn/forms/model_forms.py:433 netbox/vpn/forms/model_forms.py:452 +#: netbox/wireless/forms/bulk_edit.py:55 +#: netbox/wireless/forms/bulk_import.py:48 +#: netbox/wireless/forms/model_forms.py:48 netbox/wireless/models.py:101 msgid "VLAN" msgstr "" -#: ipam/forms/bulk_import.py:307 +#: netbox/ipam/forms/bulk_import.py:307 msgid "Parent device of assigned interface (if any)" msgstr "" -#: ipam/forms/bulk_import.py:310 ipam/forms/bulk_import.py:496 -#: ipam/forms/model_forms.py:731 virtualization/filtersets.py:284 -#: virtualization/filtersets.py:323 virtualization/forms/bulk_edit.py:200 -#: virtualization/forms/bulk_edit.py:326 -#: virtualization/forms/bulk_import.py:146 -#: virtualization/forms/bulk_import.py:207 -#: virtualization/forms/filtersets.py:208 -#: virtualization/forms/filtersets.py:244 -#: virtualization/forms/model_forms.py:288 vpn/forms/bulk_import.py:93 -#: vpn/forms/bulk_import.py:290 +#: netbox/ipam/forms/bulk_import.py:310 netbox/ipam/forms/bulk_import.py:496 +#: netbox/ipam/forms/model_forms.py:731 netbox/virtualization/filtersets.py:284 +#: netbox/virtualization/filtersets.py:323 +#: netbox/virtualization/forms/bulk_edit.py:200 +#: netbox/virtualization/forms/bulk_edit.py:326 +#: netbox/virtualization/forms/bulk_import.py:146 +#: netbox/virtualization/forms/bulk_import.py:207 +#: netbox/virtualization/forms/filtersets.py:208 +#: netbox/virtualization/forms/filtersets.py:244 +#: netbox/virtualization/forms/model_forms.py:288 +#: netbox/vpn/forms/bulk_import.py:93 netbox/vpn/forms/bulk_import.py:290 msgid "Virtual machine" msgstr "" -#: ipam/forms/bulk_import.py:314 +#: netbox/ipam/forms/bulk_import.py:314 msgid "Parent VM of assigned interface (if any)" msgstr "" -#: ipam/forms/bulk_import.py:321 +#: netbox/ipam/forms/bulk_import.py:321 msgid "Assigned interface" msgstr "" -#: ipam/forms/bulk_import.py:324 +#: netbox/ipam/forms/bulk_import.py:324 msgid "Is primary" msgstr "" -#: ipam/forms/bulk_import.py:325 +#: netbox/ipam/forms/bulk_import.py:325 msgid "Make this the primary IP for the assigned device" msgstr "" -#: ipam/forms/bulk_import.py:364 +#: netbox/ipam/forms/bulk_import.py:364 msgid "No device or virtual machine specified; cannot set as primary IP" msgstr "" -#: ipam/forms/bulk_import.py:368 +#: netbox/ipam/forms/bulk_import.py:368 msgid "No interface specified; cannot set as primary IP" msgstr "" -#: ipam/forms/bulk_import.py:397 +#: netbox/ipam/forms/bulk_import.py:397 msgid "Auth type" msgstr "" -#: ipam/forms/bulk_import.py:412 +#: netbox/ipam/forms/bulk_import.py:412 msgid "Scope type (app & model)" msgstr "" -#: ipam/forms/bulk_import.py:418 +#: netbox/ipam/forms/bulk_import.py:418 #, python-brace-format msgid "Minimum child VLAN VID (default: {minimum})" msgstr "" -#: ipam/forms/bulk_import.py:424 +#: netbox/ipam/forms/bulk_import.py:424 #, python-brace-format msgid "Maximum child VLAN VID (default: {maximum})" msgstr "" -#: ipam/forms/bulk_import.py:448 +#: netbox/ipam/forms/bulk_import.py:448 msgid "Assigned VLAN group" msgstr "" -#: ipam/forms/bulk_import.py:479 ipam/forms/bulk_import.py:505 +#: netbox/ipam/forms/bulk_import.py:479 netbox/ipam/forms/bulk_import.py:505 msgid "IP protocol" msgstr "" -#: ipam/forms/bulk_import.py:493 +#: netbox/ipam/forms/bulk_import.py:493 msgid "Required if not assigned to a VM" msgstr "" -#: ipam/forms/bulk_import.py:500 +#: netbox/ipam/forms/bulk_import.py:500 msgid "Required if not assigned to a device" msgstr "" -#: ipam/forms/bulk_import.py:525 +#: netbox/ipam/forms/bulk_import.py:525 #, python-brace-format msgid "{ip} is not assigned to this device/VM." msgstr "" -#: ipam/forms/filtersets.py:47 ipam/forms/model_forms.py:61 -#: netbox/navigation/menu.py:176 vpn/forms/model_forms.py:410 +#: netbox/ipam/forms/filtersets.py:47 netbox/ipam/forms/model_forms.py:61 +#: netbox/netbox/navigation/menu.py:176 netbox/vpn/forms/model_forms.py:410 msgid "Route Targets" msgstr "" -#: ipam/forms/filtersets.py:53 ipam/forms/model_forms.py:48 -#: vpn/forms/filtersets.py:224 vpn/forms/model_forms.py:397 +#: netbox/ipam/forms/filtersets.py:53 netbox/ipam/forms/model_forms.py:48 +#: netbox/vpn/forms/filtersets.py:224 netbox/vpn/forms/model_forms.py:397 msgid "Import targets" msgstr "" -#: ipam/forms/filtersets.py:58 ipam/forms/model_forms.py:53 -#: vpn/forms/filtersets.py:229 vpn/forms/model_forms.py:402 +#: netbox/ipam/forms/filtersets.py:58 netbox/ipam/forms/model_forms.py:53 +#: netbox/vpn/forms/filtersets.py:229 netbox/vpn/forms/model_forms.py:402 msgid "Export targets" msgstr "" -#: ipam/forms/filtersets.py:73 +#: netbox/ipam/forms/filtersets.py:73 msgid "Imported by VRF" msgstr "" -#: ipam/forms/filtersets.py:78 +#: netbox/ipam/forms/filtersets.py:78 msgid "Exported by VRF" msgstr "" -#: ipam/forms/filtersets.py:87 ipam/tables/ip.py:89 templates/ipam/rir.html:30 +#: netbox/ipam/forms/filtersets.py:87 netbox/ipam/tables/ip.py:89 +#: netbox/templates/ipam/rir.html:30 msgid "Private" msgstr "" -#: ipam/forms/filtersets.py:105 ipam/forms/filtersets.py:191 -#: ipam/forms/filtersets.py:272 ipam/forms/filtersets.py:326 +#: netbox/ipam/forms/filtersets.py:105 netbox/ipam/forms/filtersets.py:191 +#: netbox/ipam/forms/filtersets.py:272 netbox/ipam/forms/filtersets.py:326 msgid "Address family" msgstr "" -#: ipam/forms/filtersets.py:119 templates/ipam/asnrange.html:25 +#: netbox/ipam/forms/filtersets.py:119 netbox/templates/ipam/asnrange.html:25 msgid "Range" msgstr "" -#: ipam/forms/filtersets.py:128 +#: netbox/ipam/forms/filtersets.py:128 msgid "Start" msgstr "" -#: ipam/forms/filtersets.py:132 +#: netbox/ipam/forms/filtersets.py:132 msgid "End" msgstr "" -#: ipam/forms/filtersets.py:171 +#: netbox/ipam/forms/filtersets.py:171 msgid "VLAN Assignment" msgstr "" -#: ipam/forms/filtersets.py:186 +#: netbox/ipam/forms/filtersets.py:186 msgid "Search within" msgstr "" -#: ipam/forms/filtersets.py:207 ipam/forms/filtersets.py:342 +#: netbox/ipam/forms/filtersets.py:207 netbox/ipam/forms/filtersets.py:342 msgid "Present in VRF" msgstr "" -#: ipam/forms/filtersets.py:311 +#: netbox/ipam/forms/filtersets.py:311 msgid "Device/VM" msgstr "" -#: ipam/forms/filtersets.py:321 +#: netbox/ipam/forms/filtersets.py:321 msgid "Parent Prefix" msgstr "" -#: ipam/forms/filtersets.py:347 +#: netbox/ipam/forms/filtersets.py:347 msgid "Assigned Device" msgstr "" -#: ipam/forms/filtersets.py:352 +#: netbox/ipam/forms/filtersets.py:352 msgid "Assigned VM" msgstr "" -#: ipam/forms/filtersets.py:366 +#: netbox/ipam/forms/filtersets.py:366 msgid "Assigned to an interface" msgstr "" -#: ipam/forms/filtersets.py:373 templates/ipam/ipaddress.html:51 +#: netbox/ipam/forms/filtersets.py:373 netbox/templates/ipam/ipaddress.html:51 msgid "DNS Name" msgstr "" -#: ipam/forms/filtersets.py:416 ipam/forms/filtersets.py:520 -#: ipam/models/vlans.py:156 templates/ipam/vlan.html:31 +#: netbox/ipam/forms/filtersets.py:416 netbox/ipam/forms/filtersets.py:520 +#: netbox/ipam/models/vlans.py:156 netbox/templates/ipam/vlan.html:31 msgid "VLAN ID" msgstr "" -#: ipam/forms/filtersets.py:448 +#: netbox/ipam/forms/filtersets.py:448 msgid "Minimum VID" msgstr "" -#: ipam/forms/filtersets.py:454 +#: netbox/ipam/forms/filtersets.py:454 msgid "Maximum VID" msgstr "" -#: ipam/forms/filtersets.py:563 ipam/forms/model_forms.py:318 -#: ipam/forms/model_forms.py:759 ipam/forms/model_forms.py:785 -#: ipam/tables/vlans.py:191 templates/virtualization/virtualdisk.html:21 -#: templates/virtualization/virtualmachine.html:12 -#: templates/virtualization/vminterface.html:21 -#: templates/vpn/tunneltermination.html:25 -#: virtualization/forms/filtersets.py:193 -#: virtualization/forms/filtersets.py:238 -#: virtualization/forms/model_forms.py:220 -#: virtualization/tables/virtualmachines.py:128 -#: virtualization/tables/virtualmachines.py:181 vpn/choices.py:45 -#: vpn/forms/filtersets.py:293 vpn/forms/model_forms.py:160 -#: vpn/forms/model_forms.py:171 vpn/forms/model_forms.py:273 -#: vpn/forms/model_forms.py:454 +#: netbox/ipam/forms/filtersets.py:563 netbox/ipam/forms/model_forms.py:318 +#: netbox/ipam/forms/model_forms.py:759 netbox/ipam/forms/model_forms.py:785 +#: netbox/ipam/tables/vlans.py:191 +#: netbox/templates/virtualization/virtualdisk.html:21 +#: netbox/templates/virtualization/virtualmachine.html:12 +#: netbox/templates/virtualization/vminterface.html:21 +#: netbox/templates/vpn/tunneltermination.html:25 +#: netbox/virtualization/forms/filtersets.py:193 +#: netbox/virtualization/forms/filtersets.py:238 +#: netbox/virtualization/forms/model_forms.py:220 +#: netbox/virtualization/tables/virtualmachines.py:128 +#: netbox/virtualization/tables/virtualmachines.py:181 netbox/vpn/choices.py:45 +#: netbox/vpn/forms/filtersets.py:293 netbox/vpn/forms/model_forms.py:160 +#: netbox/vpn/forms/model_forms.py:171 netbox/vpn/forms/model_forms.py:273 +#: netbox/vpn/forms/model_forms.py:454 msgid "Virtual Machine" msgstr "" -#: ipam/forms/model_forms.py:78 templates/ipam/routetarget.html:10 +#: netbox/ipam/forms/model_forms.py:78 +#: netbox/templates/ipam/routetarget.html:10 msgid "Route Target" msgstr "" -#: ipam/forms/model_forms.py:112 ipam/tables/ip.py:116 -#: templates/ipam/aggregate.html:11 templates/ipam/prefix.html:38 +#: netbox/ipam/forms/model_forms.py:112 netbox/ipam/tables/ip.py:116 +#: netbox/templates/ipam/aggregate.html:11 netbox/templates/ipam/prefix.html:38 msgid "Aggregate" msgstr "" -#: ipam/forms/model_forms.py:133 templates/ipam/asnrange.html:12 +#: netbox/ipam/forms/model_forms.py:133 netbox/templates/ipam/asnrange.html:12 msgid "ASN Range" msgstr "" -#: ipam/forms/model_forms.py:229 +#: netbox/ipam/forms/model_forms.py:229 msgid "Site/VLAN Assignment" msgstr "" -#: ipam/forms/model_forms.py:257 templates/ipam/iprange.html:10 +#: netbox/ipam/forms/model_forms.py:257 netbox/templates/ipam/iprange.html:10 msgid "IP Range" msgstr "" -#: ipam/forms/model_forms.py:293 ipam/forms/model_forms.py:319 -#: ipam/forms/model_forms.py:471 templates/ipam/fhrpgroup.html:19 +#: netbox/ipam/forms/model_forms.py:293 netbox/ipam/forms/model_forms.py:319 +#: netbox/ipam/forms/model_forms.py:471 netbox/templates/ipam/fhrpgroup.html:19 msgid "FHRP Group" msgstr "" -#: ipam/forms/model_forms.py:308 +#: netbox/ipam/forms/model_forms.py:308 msgid "Make this the primary IP for the device/VM" msgstr "" -#: ipam/forms/model_forms.py:323 +#: netbox/ipam/forms/model_forms.py:323 msgid "NAT IP (Inside)" msgstr "" -#: ipam/forms/model_forms.py:382 +#: netbox/ipam/forms/model_forms.py:382 msgid "An IP address can only be assigned to a single object." msgstr "" -#: ipam/forms/model_forms.py:388 ipam/models/ip.py:897 +#: netbox/ipam/forms/model_forms.py:388 netbox/ipam/models/ip.py:897 msgid "" "Cannot reassign IP address while it is designated as the primary IP for the " "parent object" msgstr "" -#: ipam/forms/model_forms.py:398 +#: netbox/ipam/forms/model_forms.py:398 msgid "" "Only IP addresses assigned to an interface can be designated as primary IPs." msgstr "" -#: ipam/forms/model_forms.py:473 +#: netbox/ipam/forms/model_forms.py:473 msgid "Virtual IP Address" msgstr "" -#: ipam/forms/model_forms.py:558 +#: netbox/ipam/forms/model_forms.py:558 msgid "Assignment already exists" msgstr "" -#: ipam/forms/model_forms.py:637 ipam/forms/model_forms.py:679 -#: ipam/tables/ip.py:250 templates/ipam/vlan_edit.html:37 -#: templates/ipam/vlangroup.html:27 +#: netbox/ipam/forms/model_forms.py:637 netbox/ipam/forms/model_forms.py:679 +#: netbox/ipam/tables/ip.py:250 netbox/templates/ipam/vlan_edit.html:37 +#: netbox/templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "" -#: ipam/forms/model_forms.py:638 +#: netbox/ipam/forms/model_forms.py:638 msgid "Child VLANs" msgstr "" -#: ipam/forms/model_forms.py:710 ipam/forms/model_forms.py:742 +#: netbox/ipam/forms/model_forms.py:710 netbox/ipam/forms/model_forms.py:742 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." msgstr "" -#: ipam/forms/model_forms.py:715 templates/ipam/servicetemplate.html:12 +#: netbox/ipam/forms/model_forms.py:715 +#: netbox/templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "" -#: ipam/forms/model_forms.py:762 +#: netbox/ipam/forms/model_forms.py:762 msgid "Port(s)" msgstr "" -#: ipam/forms/model_forms.py:763 ipam/forms/model_forms.py:791 -#: templates/ipam/service.html:21 +#: netbox/ipam/forms/model_forms.py:763 netbox/ipam/forms/model_forms.py:791 +#: netbox/templates/ipam/service.html:21 msgid "Service" msgstr "" -#: ipam/forms/model_forms.py:776 +#: netbox/ipam/forms/model_forms.py:776 msgid "Service template" msgstr "" -#: ipam/forms/model_forms.py:788 +#: netbox/ipam/forms/model_forms.py:788 msgid "From Template" msgstr "" -#: ipam/forms/model_forms.py:789 +#: netbox/ipam/forms/model_forms.py:789 msgid "Custom" msgstr "" -#: ipam/forms/model_forms.py:819 +#: netbox/ipam/forms/model_forms.py:819 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" -#: ipam/models/asns.py:34 +#: netbox/ipam/models/asns.py:34 msgid "start" msgstr "" -#: ipam/models/asns.py:51 +#: netbox/ipam/models/asns.py:51 msgid "ASN range" msgstr "" -#: ipam/models/asns.py:52 +#: netbox/ipam/models/asns.py:52 msgid "ASN ranges" msgstr "" -#: ipam/models/asns.py:72 +#: netbox/ipam/models/asns.py:72 #, python-brace-format msgid "Starting ASN ({start}) must be lower than ending ASN ({end})." msgstr "" -#: ipam/models/asns.py:104 +#: netbox/ipam/models/asns.py:104 msgid "Regional Internet Registry responsible for this AS number space" msgstr "" -#: ipam/models/asns.py:109 +#: netbox/ipam/models/asns.py:109 msgid "16- or 32-bit autonomous system number" msgstr "" -#: ipam/models/fhrp.py:22 +#: netbox/ipam/models/fhrp.py:22 msgid "group ID" msgstr "" -#: ipam/models/fhrp.py:30 ipam/models/services.py:21 +#: netbox/ipam/models/fhrp.py:30 netbox/ipam/models/services.py:22 msgid "protocol" msgstr "" -#: ipam/models/fhrp.py:38 wireless/models.py:27 +#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:27 msgid "authentication type" msgstr "" -#: ipam/models/fhrp.py:43 +#: netbox/ipam/models/fhrp.py:43 msgid "authentication key" msgstr "" -#: ipam/models/fhrp.py:56 +#: netbox/ipam/models/fhrp.py:56 msgid "FHRP group" msgstr "" -#: ipam/models/fhrp.py:57 +#: netbox/ipam/models/fhrp.py:57 msgid "FHRP groups" msgstr "" -#: ipam/models/fhrp.py:93 tenancy/models/contacts.py:134 +#: netbox/ipam/models/fhrp.py:93 netbox/tenancy/models/contacts.py:134 msgid "priority" msgstr "" -#: ipam/models/fhrp.py:113 +#: netbox/ipam/models/fhrp.py:113 msgid "FHRP group assignment" msgstr "" -#: ipam/models/fhrp.py:114 +#: netbox/ipam/models/fhrp.py:114 msgid "FHRP group assignments" msgstr "" -#: ipam/models/ip.py:65 +#: netbox/ipam/models/ip.py:65 msgid "private" msgstr "" -#: ipam/models/ip.py:66 +#: netbox/ipam/models/ip.py:66 msgid "IP space managed by this RIR is considered private" msgstr "" -#: ipam/models/ip.py:72 netbox/navigation/menu.py:169 +#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:169 msgid "RIRs" msgstr "" -#: ipam/models/ip.py:84 +#: netbox/ipam/models/ip.py:84 msgid "IPv4 or IPv6 network" msgstr "" -#: ipam/models/ip.py:91 +#: netbox/ipam/models/ip.py:91 msgid "Regional Internet Registry responsible for this IP space" msgstr "" -#: ipam/models/ip.py:101 +#: netbox/ipam/models/ip.py:101 msgid "date added" msgstr "" -#: ipam/models/ip.py:115 +#: netbox/ipam/models/ip.py:115 msgid "aggregate" msgstr "" -#: ipam/models/ip.py:116 +#: netbox/ipam/models/ip.py:116 msgid "aggregates" msgstr "" -#: ipam/models/ip.py:132 +#: netbox/ipam/models/ip.py:132 msgid "Cannot create aggregate with /0 mask." msgstr "" -#: ipam/models/ip.py:144 +#: netbox/ipam/models/ip.py:144 #, python-brace-format msgid "" "Aggregates cannot overlap. {prefix} is already covered by an existing " "aggregate ({aggregate})." msgstr "" -#: ipam/models/ip.py:158 +#: netbox/ipam/models/ip.py:158 #, python-brace-format msgid "" "Prefixes cannot overlap aggregates. {prefix} covers an existing aggregate " "({aggregate})." msgstr "" -#: ipam/models/ip.py:200 ipam/models/ip.py:737 vpn/models/tunnels.py:114 +#: netbox/ipam/models/ip.py:200 netbox/ipam/models/ip.py:737 +#: netbox/vpn/models/tunnels.py:114 msgid "role" msgstr "" -#: ipam/models/ip.py:201 +#: netbox/ipam/models/ip.py:201 msgid "roles" msgstr "" -#: ipam/models/ip.py:217 ipam/models/ip.py:293 +#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:293 msgid "prefix" msgstr "" -#: ipam/models/ip.py:218 +#: netbox/ipam/models/ip.py:218 msgid "IPv4 or IPv6 network with mask" msgstr "" -#: ipam/models/ip.py:254 +#: netbox/ipam/models/ip.py:254 msgid "Operational status of this prefix" msgstr "" -#: ipam/models/ip.py:262 +#: netbox/ipam/models/ip.py:262 msgid "The primary function of this prefix" msgstr "" -#: ipam/models/ip.py:265 +#: netbox/ipam/models/ip.py:265 msgid "is a pool" msgstr "" -#: ipam/models/ip.py:267 +#: netbox/ipam/models/ip.py:267 msgid "All IP addresses within this prefix are considered usable" msgstr "" -#: ipam/models/ip.py:270 ipam/models/ip.py:537 +#: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537 msgid "mark utilized" msgstr "" -#: ipam/models/ip.py:294 +#: netbox/ipam/models/ip.py:294 msgid "prefixes" msgstr "" -#: ipam/models/ip.py:317 +#: netbox/ipam/models/ip.py:317 msgid "Cannot create prefix with /0 mask." msgstr "" -#: ipam/models/ip.py:324 ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 #, python-brace-format msgid "VRF {vrf}" msgstr "" -#: ipam/models/ip.py:324 ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 msgid "global table" msgstr "" -#: ipam/models/ip.py:326 +#: netbox/ipam/models/ip.py:326 #, python-brace-format msgid "Duplicate prefix found in {table}: {prefix}" msgstr "" -#: ipam/models/ip.py:495 +#: netbox/ipam/models/ip.py:495 msgid "start address" msgstr "" -#: ipam/models/ip.py:496 ipam/models/ip.py:500 ipam/models/ip.py:712 +#: netbox/ipam/models/ip.py:496 netbox/ipam/models/ip.py:500 +#: netbox/ipam/models/ip.py:712 msgid "IPv4 or IPv6 address (with mask)" msgstr "" -#: ipam/models/ip.py:499 +#: netbox/ipam/models/ip.py:499 msgid "end address" msgstr "" -#: ipam/models/ip.py:526 +#: netbox/ipam/models/ip.py:526 msgid "Operational status of this range" msgstr "" -#: ipam/models/ip.py:534 +#: netbox/ipam/models/ip.py:534 msgid "The primary function of this range" msgstr "" -#: ipam/models/ip.py:548 +#: netbox/ipam/models/ip.py:548 msgid "IP range" msgstr "" -#: ipam/models/ip.py:549 +#: netbox/ipam/models/ip.py:549 msgid "IP ranges" msgstr "" -#: ipam/models/ip.py:565 +#: netbox/ipam/models/ip.py:565 msgid "Starting and ending IP address versions must match" msgstr "" -#: ipam/models/ip.py:571 +#: netbox/ipam/models/ip.py:571 msgid "Starting and ending IP address masks must match" msgstr "" -#: ipam/models/ip.py:578 +#: netbox/ipam/models/ip.py:578 #, python-brace-format msgid "" "Ending address must be greater than the starting address ({start_address})" msgstr "" -#: ipam/models/ip.py:590 +#: netbox/ipam/models/ip.py:590 #, python-brace-format msgid "Defined addresses overlap with range {overlapping_range} in VRF {vrf}" msgstr "" -#: ipam/models/ip.py:599 +#: netbox/ipam/models/ip.py:599 #, python-brace-format msgid "Defined range exceeds maximum supported size ({max_size})" msgstr "" -#: ipam/models/ip.py:711 tenancy/models/contacts.py:82 +#: netbox/ipam/models/ip.py:711 netbox/tenancy/models/contacts.py:82 msgid "address" msgstr "" -#: ipam/models/ip.py:734 +#: netbox/ipam/models/ip.py:734 msgid "The operational status of this IP" msgstr "" -#: ipam/models/ip.py:741 +#: netbox/ipam/models/ip.py:741 msgid "The functional role of this IP" msgstr "" -#: ipam/models/ip.py:765 templates/ipam/ipaddress.html:72 +#: netbox/ipam/models/ip.py:765 netbox/templates/ipam/ipaddress.html:72 msgid "NAT (inside)" msgstr "" -#: ipam/models/ip.py:766 +#: netbox/ipam/models/ip.py:766 msgid "The IP for which this address is the \"outside\" IP" msgstr "" -#: ipam/models/ip.py:773 +#: netbox/ipam/models/ip.py:773 msgid "Hostname or FQDN (not case-sensitive)" msgstr "" -#: ipam/models/ip.py:789 ipam/models/services.py:93 +#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:94 msgid "IP addresses" msgstr "" -#: ipam/models/ip.py:845 +#: netbox/ipam/models/ip.py:845 msgid "Cannot create IP address with /0 mask." msgstr "" -#: ipam/models/ip.py:851 +#: netbox/ipam/models/ip.py:851 #, python-brace-format msgid "{ip} is a network ID, which may not be assigned to an interface." msgstr "" -#: ipam/models/ip.py:862 +#: netbox/ipam/models/ip.py:862 #, python-brace-format msgid "{ip} is a broadcast address, which may not be assigned to an interface." msgstr "" -#: ipam/models/ip.py:876 +#: netbox/ipam/models/ip.py:876 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "" -#: ipam/models/ip.py:903 +#: netbox/ipam/models/ip.py:903 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "" -#: ipam/models/services.py:32 +#: netbox/ipam/models/services.py:33 msgid "port numbers" msgstr "" -#: ipam/models/services.py:58 +#: netbox/ipam/models/services.py:59 msgid "service template" msgstr "" -#: ipam/models/services.py:59 +#: netbox/ipam/models/services.py:60 msgid "service templates" msgstr "" -#: ipam/models/services.py:94 +#: netbox/ipam/models/services.py:95 msgid "The specific IP addresses (if any) to which this service is bound" msgstr "" -#: ipam/models/services.py:101 +#: netbox/ipam/models/services.py:102 msgid "service" msgstr "" -#: ipam/models/services.py:102 +#: netbox/ipam/models/services.py:103 msgid "services" msgstr "" -#: ipam/models/services.py:116 +#: netbox/ipam/models/services.py:117 msgid "" "A service cannot be associated with both a device and a virtual machine." msgstr "" -#: ipam/models/services.py:118 +#: netbox/ipam/models/services.py:119 msgid "A service must be associated with either a device or a virtual machine." msgstr "" -#: ipam/models/vlans.py:49 +#: netbox/ipam/models/vlans.py:49 msgid "minimum VLAN ID" msgstr "" -#: ipam/models/vlans.py:55 +#: netbox/ipam/models/vlans.py:55 msgid "Lowest permissible ID of a child VLAN" msgstr "" -#: ipam/models/vlans.py:58 +#: netbox/ipam/models/vlans.py:58 msgid "maximum VLAN ID" msgstr "" -#: ipam/models/vlans.py:64 +#: netbox/ipam/models/vlans.py:64 msgid "Highest permissible ID of a child VLAN" msgstr "" -#: ipam/models/vlans.py:85 +#: netbox/ipam/models/vlans.py:85 msgid "VLAN groups" msgstr "" -#: ipam/models/vlans.py:95 +#: netbox/ipam/models/vlans.py:95 msgid "Cannot set scope_type without scope_id." msgstr "" -#: ipam/models/vlans.py:97 +#: netbox/ipam/models/vlans.py:97 msgid "Cannot set scope_id without scope_type." msgstr "" -#: ipam/models/vlans.py:102 +#: netbox/ipam/models/vlans.py:102 msgid "Maximum child VID must be greater than or equal to minimum child VID" msgstr "" -#: ipam/models/vlans.py:145 +#: netbox/ipam/models/vlans.py:145 msgid "The specific site to which this VLAN is assigned (if any)" msgstr "" -#: ipam/models/vlans.py:153 +#: netbox/ipam/models/vlans.py:153 msgid "VLAN group (optional)" msgstr "" -#: ipam/models/vlans.py:161 +#: netbox/ipam/models/vlans.py:161 msgid "Numeric VLAN ID (1-4094)" msgstr "" -#: ipam/models/vlans.py:179 +#: netbox/ipam/models/vlans.py:179 msgid "Operational status of this VLAN" msgstr "" -#: ipam/models/vlans.py:187 +#: netbox/ipam/models/vlans.py:187 msgid "The primary function of this VLAN" msgstr "" -#: ipam/models/vlans.py:215 ipam/tables/ip.py:175 ipam/tables/vlans.py:78 -#: ipam/views.py:978 netbox/navigation/menu.py:180 -#: netbox/navigation/menu.py:182 +#: netbox/ipam/models/vlans.py:215 netbox/ipam/tables/ip.py:175 +#: netbox/ipam/tables/vlans.py:78 netbox/ipam/views.py:978 +#: netbox/netbox/navigation/menu.py:180 netbox/netbox/navigation/menu.py:182 msgid "VLANs" msgstr "" -#: ipam/models/vlans.py:230 +#: netbox/ipam/models/vlans.py:230 #, python-brace-format msgid "" "VLAN is assigned to group {group} (scope: {scope}); cannot also assign to " "site {site}." msgstr "" -#: ipam/models/vlans.py:238 +#: netbox/ipam/models/vlans.py:238 #, python-brace-format msgid "VID must be between {minimum} and {maximum} for VLANs in group {group}" msgstr "" -#: ipam/models/vrfs.py:30 +#: netbox/ipam/models/vrfs.py:30 msgid "route distinguisher" msgstr "" -#: ipam/models/vrfs.py:31 +#: netbox/ipam/models/vrfs.py:31 msgid "Unique route distinguisher (as defined in RFC 4364)" msgstr "" -#: ipam/models/vrfs.py:42 +#: netbox/ipam/models/vrfs.py:42 msgid "enforce unique space" msgstr "" -#: ipam/models/vrfs.py:43 +#: netbox/ipam/models/vrfs.py:43 msgid "Prevent duplicate prefixes/IP addresses within this VRF" msgstr "" -#: ipam/models/vrfs.py:63 netbox/navigation/menu.py:173 -#: netbox/navigation/menu.py:175 +#: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:173 +#: netbox/netbox/navigation/menu.py:175 msgid "VRFs" msgstr "" -#: ipam/models/vrfs.py:82 +#: netbox/ipam/models/vrfs.py:82 msgid "Route target value (formatted in accordance with RFC 4360)" msgstr "" -#: ipam/models/vrfs.py:94 +#: netbox/ipam/models/vrfs.py:94 msgid "route target" msgstr "" -#: ipam/models/vrfs.py:95 +#: netbox/ipam/models/vrfs.py:95 msgid "route targets" msgstr "" -#: ipam/tables/asn.py:52 +#: netbox/ipam/tables/asn.py:52 msgid "ASDOT" msgstr "" -#: ipam/tables/asn.py:57 +#: netbox/ipam/tables/asn.py:57 msgid "Site Count" msgstr "" -#: ipam/tables/asn.py:62 +#: netbox/ipam/tables/asn.py:62 msgid "Provider Count" msgstr "" -#: ipam/tables/ip.py:94 netbox/navigation/menu.py:166 -#: netbox/navigation/menu.py:168 +#: netbox/ipam/tables/ip.py:94 netbox/netbox/navigation/menu.py:166 +#: netbox/netbox/navigation/menu.py:168 msgid "Aggregates" msgstr "" -#: ipam/tables/ip.py:124 +#: netbox/ipam/tables/ip.py:124 msgid "Added" msgstr "" -#: ipam/tables/ip.py:127 ipam/tables/ip.py:165 ipam/tables/vlans.py:138 -#: ipam/views.py:349 netbox/navigation/menu.py:152 -#: netbox/navigation/menu.py:154 templates/ipam/vlan.html:84 +#: netbox/ipam/tables/ip.py:127 netbox/ipam/tables/ip.py:165 +#: netbox/ipam/tables/vlans.py:138 netbox/ipam/views.py:349 +#: netbox/netbox/navigation/menu.py:152 netbox/netbox/navigation/menu.py:154 +#: netbox/templates/ipam/vlan.html:84 msgid "Prefixes" msgstr "" -#: ipam/tables/ip.py:130 ipam/tables/ip.py:267 ipam/tables/ip.py:320 -#: ipam/tables/vlans.py:82 templates/dcim/device.html:252 -#: templates/ipam/aggregate.html:24 templates/ipam/iprange.html:29 -#: templates/ipam/prefix.html:106 +#: netbox/ipam/tables/ip.py:130 netbox/ipam/tables/ip.py:267 +#: netbox/ipam/tables/ip.py:320 netbox/ipam/tables/vlans.py:82 +#: netbox/templates/dcim/device.html:253 +#: netbox/templates/ipam/aggregate.html:24 +#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:106 msgid "Utilization" msgstr "" -#: ipam/tables/ip.py:170 netbox/navigation/menu.py:148 +#: netbox/ipam/tables/ip.py:170 netbox/netbox/navigation/menu.py:148 msgid "IP Ranges" msgstr "" -#: ipam/tables/ip.py:220 +#: netbox/ipam/tables/ip.py:220 msgid "Prefix (Flat)" msgstr "" -#: ipam/tables/ip.py:224 +#: netbox/ipam/tables/ip.py:224 msgid "Depth" msgstr "" -#: ipam/tables/ip.py:261 +#: netbox/ipam/tables/ip.py:261 msgid "Pool" msgstr "" -#: ipam/tables/ip.py:264 ipam/tables/ip.py:317 +#: netbox/ipam/tables/ip.py:264 netbox/ipam/tables/ip.py:317 msgid "Marked Utilized" msgstr "" -#: ipam/tables/ip.py:301 +#: netbox/ipam/tables/ip.py:301 msgid "Start address" msgstr "" -#: ipam/tables/ip.py:379 +#: netbox/ipam/tables/ip.py:379 msgid "NAT (Inside)" msgstr "" -#: ipam/tables/ip.py:384 +#: netbox/ipam/tables/ip.py:384 msgid "NAT (Outside)" msgstr "" -#: ipam/tables/ip.py:389 +#: netbox/ipam/tables/ip.py:389 msgid "Assigned" msgstr "" -#: ipam/tables/ip.py:424 templates/vpn/l2vpntermination.html:16 -#: vpn/forms/filtersets.py:240 +#: netbox/ipam/tables/ip.py:424 netbox/templates/vpn/l2vpntermination.html:16 +#: netbox/vpn/forms/filtersets.py:240 msgid "Assigned Object" msgstr "" -#: ipam/tables/vlans.py:68 +#: netbox/ipam/tables/vlans.py:68 msgid "Scope Type" msgstr "" -#: ipam/tables/vlans.py:107 ipam/tables/vlans.py:210 -#: templates/dcim/inc/interface_vlans_table.html:4 +#: netbox/ipam/tables/vlans.py:107 netbox/ipam/tables/vlans.py:210 +#: netbox/templates/dcim/inc/interface_vlans_table.html:4 msgid "VID" msgstr "" -#: ipam/tables/vrfs.py:30 +#: netbox/ipam/tables/vrfs.py:30 msgid "RD" msgstr "" -#: ipam/tables/vrfs.py:33 +#: netbox/ipam/tables/vrfs.py:33 msgid "Unique" msgstr "" -#: ipam/tables/vrfs.py:36 vpn/tables/l2vpn.py:27 +#: netbox/ipam/tables/vrfs.py:36 netbox/vpn/tables/l2vpn.py:27 msgid "Import Targets" msgstr "" -#: ipam/tables/vrfs.py:41 vpn/tables/l2vpn.py:32 +#: netbox/ipam/tables/vrfs.py:41 netbox/vpn/tables/l2vpn.py:32 msgid "Export Targets" msgstr "" -#: ipam/validators.py:9 +#: netbox/ipam/validators.py:9 #, python-brace-format msgid "{prefix} is not a valid prefix. Did you mean {suggested}?" msgstr "" -#: ipam/validators.py:16 +#: netbox/ipam/validators.py:16 #, python-format msgid "The prefix length must be less than or equal to %(limit_value)s." msgstr "" -#: ipam/validators.py:24 +#: netbox/ipam/validators.py:24 #, python-format msgid "The prefix length must be greater than or equal to %(limit_value)s." msgstr "" -#: ipam/validators.py:33 +#: netbox/ipam/validators.py:33 msgid "" "Only alphanumeric characters, asterisks, hyphens, periods, and underscores " "are allowed in DNS names" msgstr "" -#: ipam/views.py:541 +#: netbox/ipam/views.py:541 msgid "Child Prefixes" msgstr "" -#: ipam/views.py:576 +#: netbox/ipam/views.py:576 msgid "Child Ranges" msgstr "" -#: ipam/views.py:902 +#: netbox/ipam/views.py:902 msgid "Related IPs" msgstr "" -#: ipam/views.py:1133 +#: netbox/ipam/views.py:1133 msgid "Device Interfaces" msgstr "" -#: ipam/views.py:1150 +#: netbox/ipam/views.py:1150 msgid "VM Interfaces" msgstr "" -#: netbox/api/fields.py:63 +#: netbox/netbox/api/fields.py:63 msgid "This field may not be blank." msgstr "" -#: netbox/api/fields.py:68 +#: netbox/netbox/api/fields.py:68 msgid "" "Value must be passed directly (e.g. \"foo\": 123); do not use a dictionary " "or list." msgstr "" -#: netbox/api/fields.py:89 +#: netbox/netbox/api/fields.py:89 #, python-brace-format msgid "{value} is not a valid choice." msgstr "" -#: netbox/api/fields.py:102 +#: netbox/netbox/api/fields.py:102 #, python-brace-format msgid "Invalid content type: {content_type}" msgstr "" -#: netbox/api/fields.py:103 +#: netbox/netbox/api/fields.py:103 msgid "Invalid value. Specify a content type as '.'." msgstr "" -#: netbox/authentication/__init__.py:138 +#: netbox/netbox/authentication/__init__.py:138 #, python-brace-format msgid "Invalid permission {permission} for model {model}" msgstr "" -#: netbox/choices.py:49 +#: netbox/netbox/choices.py:49 msgid "Dark Red" msgstr "" -#: netbox/choices.py:52 +#: netbox/netbox/choices.py:52 msgid "Rose" msgstr "" -#: netbox/choices.py:53 +#: netbox/netbox/choices.py:53 msgid "Fuchsia" msgstr "" -#: netbox/choices.py:55 +#: netbox/netbox/choices.py:55 msgid "Dark Purple" msgstr "" -#: netbox/choices.py:58 +#: netbox/netbox/choices.py:58 msgid "Light Blue" msgstr "" -#: netbox/choices.py:61 +#: netbox/netbox/choices.py:61 msgid "Aqua" msgstr "" -#: netbox/choices.py:62 +#: netbox/netbox/choices.py:62 msgid "Dark Green" msgstr "" -#: netbox/choices.py:64 +#: netbox/netbox/choices.py:64 msgid "Light Green" msgstr "" -#: netbox/choices.py:65 +#: netbox/netbox/choices.py:65 msgid "Lime" msgstr "" -#: netbox/choices.py:67 +#: netbox/netbox/choices.py:67 msgid "Amber" msgstr "" -#: netbox/choices.py:69 +#: netbox/netbox/choices.py:69 msgid "Dark Orange" msgstr "" -#: netbox/choices.py:70 +#: netbox/netbox/choices.py:70 msgid "Brown" msgstr "" -#: netbox/choices.py:71 +#: netbox/netbox/choices.py:71 msgid "Light Grey" msgstr "" -#: netbox/choices.py:72 +#: netbox/netbox/choices.py:72 msgid "Grey" msgstr "" -#: netbox/choices.py:73 +#: netbox/netbox/choices.py:73 msgid "Dark Grey" msgstr "" -#: netbox/choices.py:131 +#: netbox/netbox/choices.py:131 msgid "Direct" msgstr "" -#: netbox/choices.py:132 +#: netbox/netbox/choices.py:132 msgid "Upload" msgstr "" -#: netbox/choices.py:144 netbox/choices.py:158 +#: netbox/netbox/choices.py:144 netbox/netbox/choices.py:158 msgid "Auto-detect" msgstr "" -#: netbox/choices.py:159 +#: netbox/netbox/choices.py:159 msgid "Comma" msgstr "" -#: netbox/choices.py:160 +#: netbox/netbox/choices.py:160 msgid "Semicolon" msgstr "" -#: netbox/choices.py:161 +#: netbox/netbox/choices.py:161 msgid "Tab" msgstr "" -#: netbox/config/__init__.py:67 +#: netbox/netbox/config/__init__.py:67 #, python-brace-format msgid "Invalid configuration parameter: {item}" msgstr "" -#: netbox/config/parameters.py:22 templates/core/inc/config_data.html:62 +#: netbox/netbox/config/parameters.py:22 +#: netbox/templates/core/inc/config_data.html:62 msgid "Login banner" msgstr "" -#: netbox/config/parameters.py:24 +#: netbox/netbox/config/parameters.py:24 msgid "Additional content to display on the login page" msgstr "" -#: netbox/config/parameters.py:33 templates/core/inc/config_data.html:66 +#: netbox/netbox/config/parameters.py:33 +#: netbox/templates/core/inc/config_data.html:66 msgid "Maintenance banner" msgstr "" -#: netbox/config/parameters.py:35 +#: netbox/netbox/config/parameters.py:35 msgid "Additional content to display when in maintenance mode" msgstr "" -#: netbox/config/parameters.py:44 templates/core/inc/config_data.html:70 +#: netbox/netbox/config/parameters.py:44 +#: netbox/templates/core/inc/config_data.html:70 msgid "Top banner" msgstr "" -#: netbox/config/parameters.py:46 +#: netbox/netbox/config/parameters.py:46 msgid "Additional content to display at the top of every page" msgstr "" -#: netbox/config/parameters.py:55 templates/core/inc/config_data.html:74 +#: netbox/netbox/config/parameters.py:55 +#: netbox/templates/core/inc/config_data.html:74 msgid "Bottom banner" msgstr "" -#: netbox/config/parameters.py:57 +#: netbox/netbox/config/parameters.py:57 msgid "Additional content to display at the bottom of every page" msgstr "" -#: netbox/config/parameters.py:68 +#: netbox/netbox/config/parameters.py:68 msgid "Globally unique IP space" msgstr "" -#: netbox/config/parameters.py:70 +#: netbox/netbox/config/parameters.py:70 msgid "Enforce unique IP addressing within the global table" msgstr "" -#: netbox/config/parameters.py:75 templates/core/inc/config_data.html:44 +#: netbox/netbox/config/parameters.py:75 +#: netbox/templates/core/inc/config_data.html:44 msgid "Prefer IPv4" msgstr "" -#: netbox/config/parameters.py:77 +#: netbox/netbox/config/parameters.py:77 msgid "Prefer IPv4 addresses over IPv6" msgstr "" -#: netbox/config/parameters.py:84 +#: netbox/netbox/config/parameters.py:84 msgid "Rack unit height" msgstr "" -#: netbox/config/parameters.py:86 +#: netbox/netbox/config/parameters.py:86 msgid "Default unit height for rendered rack elevations" msgstr "" -#: netbox/config/parameters.py:91 +#: netbox/netbox/config/parameters.py:91 msgid "Rack unit width" msgstr "" -#: netbox/config/parameters.py:93 +#: netbox/netbox/config/parameters.py:93 msgid "Default unit width for rendered rack elevations" msgstr "" -#: netbox/config/parameters.py:100 +#: netbox/netbox/config/parameters.py:100 msgid "Powerfeed voltage" msgstr "" -#: netbox/config/parameters.py:102 +#: netbox/netbox/config/parameters.py:102 msgid "Default voltage for powerfeeds" msgstr "" -#: netbox/config/parameters.py:107 +#: netbox/netbox/config/parameters.py:107 msgid "Powerfeed amperage" msgstr "" -#: netbox/config/parameters.py:109 +#: netbox/netbox/config/parameters.py:109 msgid "Default amperage for powerfeeds" msgstr "" -#: netbox/config/parameters.py:114 +#: netbox/netbox/config/parameters.py:114 msgid "Powerfeed max utilization" msgstr "" -#: netbox/config/parameters.py:116 +#: netbox/netbox/config/parameters.py:116 msgid "Default max utilization for powerfeeds" msgstr "" -#: netbox/config/parameters.py:123 templates/core/inc/config_data.html:53 +#: netbox/netbox/config/parameters.py:123 +#: netbox/templates/core/inc/config_data.html:53 msgid "Allowed URL schemes" msgstr "" -#: netbox/config/parameters.py:128 +#: netbox/netbox/config/parameters.py:128 msgid "Permitted schemes for URLs in user-provided content" msgstr "" -#: netbox/config/parameters.py:136 +#: netbox/netbox/config/parameters.py:136 msgid "Default page size" msgstr "" -#: netbox/config/parameters.py:142 +#: netbox/netbox/config/parameters.py:142 msgid "Maximum page size" msgstr "" -#: netbox/config/parameters.py:150 templates/core/inc/config_data.html:96 +#: netbox/netbox/config/parameters.py:150 +#: netbox/templates/core/inc/config_data.html:96 msgid "Custom validators" msgstr "" -#: netbox/config/parameters.py:152 +#: netbox/netbox/config/parameters.py:152 msgid "Custom validation rules (JSON)" msgstr "" -#: netbox/config/parameters.py:160 templates/core/inc/config_data.html:104 +#: netbox/netbox/config/parameters.py:160 +#: netbox/templates/core/inc/config_data.html:104 msgid "Protection rules" msgstr "" -#: netbox/config/parameters.py:162 +#: netbox/netbox/config/parameters.py:162 msgid "Deletion protection rules (JSON)" msgstr "" -#: netbox/config/parameters.py:172 templates/core/inc/config_data.html:117 +#: netbox/netbox/config/parameters.py:172 +#: netbox/templates/core/inc/config_data.html:117 msgid "Default preferences" msgstr "" -#: netbox/config/parameters.py:174 +#: netbox/netbox/config/parameters.py:174 msgid "Default preferences for new users" msgstr "" -#: netbox/config/parameters.py:181 templates/core/inc/config_data.html:129 +#: netbox/netbox/config/parameters.py:181 +#: netbox/templates/core/inc/config_data.html:129 msgid "Maintenance mode" msgstr "" -#: netbox/config/parameters.py:183 +#: netbox/netbox/config/parameters.py:183 msgid "Enable maintenance mode" msgstr "" -#: netbox/config/parameters.py:188 templates/core/inc/config_data.html:133 +#: netbox/netbox/config/parameters.py:188 +#: netbox/templates/core/inc/config_data.html:133 msgid "GraphQL enabled" msgstr "" -#: netbox/config/parameters.py:190 +#: netbox/netbox/config/parameters.py:190 msgid "Enable the GraphQL API" msgstr "" -#: netbox/config/parameters.py:195 templates/core/inc/config_data.html:137 +#: netbox/netbox/config/parameters.py:195 +#: netbox/templates/core/inc/config_data.html:137 msgid "Changelog retention" msgstr "" -#: netbox/config/parameters.py:197 +#: netbox/netbox/config/parameters.py:197 msgid "Days to retain changelog history (set to zero for unlimited)" msgstr "" -#: netbox/config/parameters.py:202 +#: netbox/netbox/config/parameters.py:202 msgid "Job result retention" msgstr "" -#: netbox/config/parameters.py:204 +#: netbox/netbox/config/parameters.py:204 msgid "Days to retain job result history (set to zero for unlimited)" msgstr "" -#: netbox/config/parameters.py:209 templates/core/inc/config_data.html:145 +#: netbox/netbox/config/parameters.py:209 +#: netbox/templates/core/inc/config_data.html:145 msgid "Maps URL" msgstr "" -#: netbox/config/parameters.py:211 +#: netbox/netbox/config/parameters.py:211 msgid "Base URL for mapping geographic locations" msgstr "" -#: netbox/forms/__init__.py:12 +#: netbox/netbox/forms/__init__.py:12 msgid "Partial match" msgstr "" -#: netbox/forms/__init__.py:13 +#: netbox/netbox/forms/__init__.py:13 msgid "Exact match" msgstr "" -#: netbox/forms/__init__.py:14 +#: netbox/netbox/forms/__init__.py:14 msgid "Starts with" msgstr "" -#: netbox/forms/__init__.py:15 +#: netbox/netbox/forms/__init__.py:15 msgid "Ends with" msgstr "" -#: netbox/forms/__init__.py:16 +#: netbox/netbox/forms/__init__.py:16 msgid "Regex" msgstr "" -#: netbox/forms/__init__.py:34 +#: netbox/netbox/forms/__init__.py:34 msgid "Object type(s)" msgstr "" -#: netbox/forms/base.py:88 +#: netbox/netbox/forms/base.py:88 msgid "" "Tag slugs separated by commas, encased with double quotes (e.g. \"tag1,tag2," "tag3\")" msgstr "" -#: netbox/forms/base.py:118 +#: netbox/netbox/forms/base.py:118 msgid "Add tags" msgstr "" -#: netbox/forms/base.py:123 +#: netbox/netbox/forms/base.py:123 msgid "Remove tags" msgstr "" -#: netbox/forms/mixins.py:38 +#: netbox/netbox/forms/mixins.py:38 #, python-brace-format msgid "{class_name} must specify a model class." msgstr "" -#: netbox/models/features.py:277 +#: netbox/netbox/models/features.py:277 #, python-brace-format msgid "Unknown field name '{name}' in custom field data." msgstr "" -#: netbox/models/features.py:283 +#: netbox/netbox/models/features.py:283 #, python-brace-format msgid "Invalid value for custom field '{name}': {error}" msgstr "" -#: netbox/models/features.py:290 +#: netbox/netbox/models/features.py:290 #, python-brace-format msgid "Missing required custom field '{name}'." msgstr "" -#: netbox/models/features.py:441 +#: netbox/netbox/models/features.py:441 msgid "Remote data source" msgstr "" -#: netbox/models/features.py:451 +#: netbox/netbox/models/features.py:451 msgid "data path" msgstr "" -#: netbox/models/features.py:455 +#: netbox/netbox/models/features.py:455 msgid "Path to remote file (relative to data source root)" msgstr "" -#: netbox/models/features.py:458 +#: netbox/netbox/models/features.py:458 msgid "auto sync enabled" msgstr "" -#: netbox/models/features.py:460 +#: netbox/netbox/models/features.py:460 msgid "Enable automatic synchronization of data when the data file is updated" msgstr "" -#: netbox/models/features.py:463 +#: netbox/netbox/models/features.py:463 msgid "date synced" msgstr "" -#: netbox/models/features.py:557 +#: netbox/netbox/models/features.py:557 #, python-brace-format msgid "{class_name} must implement a sync_data() method." msgstr "" -#: netbox/navigation/menu.py:11 +#: netbox/netbox/navigation/menu.py:11 msgid "Organization" msgstr "" -#: netbox/navigation/menu.py:19 +#: netbox/netbox/navigation/menu.py:19 msgid "Site Groups" msgstr "" -#: netbox/navigation/menu.py:27 +#: netbox/netbox/navigation/menu.py:27 msgid "Rack Roles" msgstr "" -#: netbox/navigation/menu.py:31 +#: netbox/netbox/navigation/menu.py:31 msgid "Elevations" msgstr "" -#: netbox/navigation/menu.py:40 +#: netbox/netbox/navigation/menu.py:40 msgid "Tenant Groups" msgstr "" -#: netbox/navigation/menu.py:47 +#: netbox/netbox/navigation/menu.py:47 msgid "Contact Groups" msgstr "" -#: netbox/navigation/menu.py:48 templates/tenancy/contactrole.html:8 +#: netbox/netbox/navigation/menu.py:48 +#: netbox/templates/tenancy/contactrole.html:8 msgid "Contact Roles" msgstr "" -#: netbox/navigation/menu.py:49 +#: netbox/netbox/navigation/menu.py:49 msgid "Contact Assignments" msgstr "" -#: netbox/navigation/menu.py:63 +#: netbox/netbox/navigation/menu.py:63 msgid "Modules" msgstr "" -#: netbox/navigation/menu.py:67 templates/dcim/device.html:157 -#: templates/dcim/virtualdevicecontext.html:8 +#: netbox/netbox/navigation/menu.py:67 netbox/templates/dcim/device.html:158 +#: netbox/templates/dcim/virtualdevicecontext.html:8 msgid "Virtual Device Contexts" msgstr "" -#: netbox/navigation/menu.py:75 +#: netbox/netbox/navigation/menu.py:75 msgid "Manufacturers" msgstr "" -#: netbox/navigation/menu.py:79 +#: netbox/netbox/navigation/menu.py:79 msgid "Device Components" msgstr "" -#: netbox/navigation/menu.py:91 templates/dcim/inventoryitemrole.html:8 +#: netbox/netbox/navigation/menu.py:91 +#: netbox/templates/dcim/inventoryitemrole.html:8 msgid "Inventory Item Roles" msgstr "" -#: netbox/navigation/menu.py:98 netbox/navigation/menu.py:102 +#: netbox/netbox/navigation/menu.py:98 netbox/netbox/navigation/menu.py:102 msgid "Connections" msgstr "" -#: netbox/navigation/menu.py:104 +#: netbox/netbox/navigation/menu.py:104 msgid "Cables" msgstr "" -#: netbox/navigation/menu.py:105 +#: netbox/netbox/navigation/menu.py:105 msgid "Wireless Links" msgstr "" -#: netbox/navigation/menu.py:108 +#: netbox/netbox/navigation/menu.py:108 msgid "Interface Connections" msgstr "" -#: netbox/navigation/menu.py:113 +#: netbox/netbox/navigation/menu.py:113 msgid "Console Connections" msgstr "" -#: netbox/navigation/menu.py:118 +#: netbox/netbox/navigation/menu.py:118 msgid "Power Connections" msgstr "" -#: netbox/navigation/menu.py:134 +#: netbox/netbox/navigation/menu.py:134 msgid "Wireless LAN Groups" msgstr "" -#: netbox/navigation/menu.py:155 +#: netbox/netbox/navigation/menu.py:155 msgid "Prefix & VLAN Roles" msgstr "" -#: netbox/navigation/menu.py:161 +#: netbox/netbox/navigation/menu.py:161 msgid "ASN Ranges" msgstr "" -#: netbox/navigation/menu.py:183 +#: netbox/netbox/navigation/menu.py:183 msgid "VLAN Groups" msgstr "" -#: netbox/navigation/menu.py:190 +#: netbox/netbox/navigation/menu.py:190 msgid "Service Templates" msgstr "" -#: netbox/navigation/menu.py:191 templates/dcim/device.html:294 -#: templates/ipam/ipaddress.html:118 -#: templates/virtualization/virtualmachine.html:150 +#: netbox/netbox/navigation/menu.py:191 netbox/templates/dcim/device.html:295 +#: netbox/templates/ipam/ipaddress.html:118 +#: netbox/templates/virtualization/virtualmachine.html:150 msgid "Services" msgstr "" -#: netbox/navigation/menu.py:198 +#: netbox/netbox/navigation/menu.py:198 msgid "VPN" msgstr "" -#: netbox/navigation/menu.py:202 netbox/navigation/menu.py:204 -#: vpn/tables/tunnels.py:24 +#: netbox/netbox/navigation/menu.py:202 netbox/netbox/navigation/menu.py:204 +#: netbox/vpn/tables/tunnels.py:24 msgid "Tunnels" msgstr "" -#: netbox/navigation/menu.py:205 templates/vpn/tunnelgroup.html:8 +#: netbox/netbox/navigation/menu.py:205 netbox/templates/vpn/tunnelgroup.html:8 msgid "Tunnel Groups" msgstr "" -#: netbox/navigation/menu.py:206 +#: netbox/netbox/navigation/menu.py:206 msgid "Tunnel Terminations" msgstr "" -#: netbox/navigation/menu.py:210 netbox/navigation/menu.py:212 -#: vpn/models/l2vpn.py:64 +#: netbox/netbox/navigation/menu.py:210 netbox/netbox/navigation/menu.py:212 +#: netbox/vpn/models/l2vpn.py:64 msgid "L2VPNs" msgstr "" -#: netbox/navigation/menu.py:213 templates/vpn/l2vpn.html:56 -#: templates/vpn/tunnel.html:72 vpn/tables/tunnels.py:58 +#: netbox/netbox/navigation/menu.py:213 netbox/templates/vpn/l2vpn.html:56 +#: netbox/templates/vpn/tunnel.html:72 netbox/vpn/tables/tunnels.py:58 msgid "Terminations" msgstr "" -#: netbox/navigation/menu.py:219 +#: netbox/netbox/navigation/menu.py:219 msgid "IKE Proposals" msgstr "" -#: netbox/navigation/menu.py:220 templates/vpn/ikeproposal.html:41 +#: netbox/netbox/navigation/menu.py:220 +#: netbox/templates/vpn/ikeproposal.html:41 msgid "IKE Policies" msgstr "" -#: netbox/navigation/menu.py:221 +#: netbox/netbox/navigation/menu.py:221 msgid "IPSec Proposals" msgstr "" -#: netbox/navigation/menu.py:222 templates/vpn/ipsecproposal.html:37 +#: netbox/netbox/navigation/menu.py:222 +#: netbox/templates/vpn/ipsecproposal.html:37 msgid "IPSec Policies" msgstr "" -#: netbox/navigation/menu.py:223 templates/vpn/ikepolicy.html:38 -#: templates/vpn/ipsecpolicy.html:25 +#: netbox/netbox/navigation/menu.py:223 netbox/templates/vpn/ikepolicy.html:38 +#: netbox/templates/vpn/ipsecpolicy.html:25 msgid "IPSec Profiles" msgstr "" -#: netbox/navigation/menu.py:230 templates/dcim/device_edit.html:78 +#: netbox/netbox/navigation/menu.py:230 +#: netbox/templates/dcim/device_edit.html:78 msgid "Virtualization" msgstr "" -#: netbox/navigation/menu.py:238 -#: templates/virtualization/virtualmachine.html:170 -#: templates/virtualization/virtualmachine/base.html:32 -#: templates/virtualization/virtualmachine_list.html:21 -#: virtualization/tables/virtualmachines.py:103 virtualization/views.py:388 +#: netbox/netbox/navigation/menu.py:238 +#: netbox/templates/virtualization/virtualmachine.html:170 +#: netbox/templates/virtualization/virtualmachine/base.html:32 +#: netbox/templates/virtualization/virtualmachine_list.html:21 +#: netbox/virtualization/tables/virtualmachines.py:103 +#: netbox/virtualization/views.py:388 msgid "Virtual Disks" msgstr "" -#: netbox/navigation/menu.py:245 +#: netbox/netbox/navigation/menu.py:245 msgid "Cluster Types" msgstr "" -#: netbox/navigation/menu.py:246 +#: netbox/netbox/navigation/menu.py:246 msgid "Cluster Groups" msgstr "" -#: netbox/navigation/menu.py:260 +#: netbox/netbox/navigation/menu.py:260 msgid "Circuit Types" msgstr "" -#: netbox/navigation/menu.py:261 +#: netbox/netbox/navigation/menu.py:261 msgid "Circuit Terminations" msgstr "" -#: netbox/navigation/menu.py:265 netbox/navigation/menu.py:267 +#: netbox/netbox/navigation/menu.py:265 netbox/netbox/navigation/menu.py:267 msgid "Providers" msgstr "" -#: netbox/navigation/menu.py:268 templates/circuits/provider.html:51 +#: netbox/netbox/navigation/menu.py:268 +#: netbox/templates/circuits/provider.html:51 msgid "Provider Accounts" msgstr "" -#: netbox/navigation/menu.py:269 +#: netbox/netbox/navigation/menu.py:269 msgid "Provider Networks" msgstr "" -#: netbox/navigation/menu.py:283 +#: netbox/netbox/navigation/menu.py:283 msgid "Power Panels" msgstr "" -#: netbox/navigation/menu.py:294 +#: netbox/netbox/navigation/menu.py:294 msgid "Configurations" msgstr "" -#: netbox/navigation/menu.py:296 +#: netbox/netbox/navigation/menu.py:296 msgid "Config Contexts" msgstr "" -#: netbox/navigation/menu.py:297 +#: netbox/netbox/navigation/menu.py:297 msgid "Config Templates" msgstr "" -#: netbox/navigation/menu.py:304 netbox/navigation/menu.py:308 +#: netbox/netbox/navigation/menu.py:304 netbox/netbox/navigation/menu.py:308 msgid "Customization" msgstr "" -#: netbox/navigation/menu.py:310 templates/dcim/device_edit.html:103 -#: templates/dcim/htmx/cable_edit.html:81 -#: templates/dcim/virtualchassis_add.html:31 -#: templates/dcim/virtualchassis_edit.html:40 -#: templates/generic/bulk_edit.html:76 templates/htmx/form.html:19 -#: templates/inc/filter_list.html:30 templates/inc/panels/custom_fields.html:7 -#: templates/ipam/ipaddress_bulk_add.html:35 templates/ipam/vlan_edit.html:63 +#: netbox/netbox/navigation/menu.py:310 +#: netbox/templates/dcim/device_edit.html:103 +#: netbox/templates/dcim/htmx/cable_edit.html:81 +#: netbox/templates/dcim/virtualchassis_add.html:31 +#: netbox/templates/dcim/virtualchassis_edit.html:40 +#: netbox/templates/generic/bulk_edit.html:76 +#: netbox/templates/htmx/form.html:19 netbox/templates/inc/filter_list.html:30 +#: netbox/templates/inc/panels/custom_fields.html:7 +#: netbox/templates/ipam/ipaddress_bulk_add.html:35 +#: netbox/templates/ipam/vlan_edit.html:63 msgid "Custom Fields" msgstr "" -#: netbox/navigation/menu.py:311 +#: netbox/netbox/navigation/menu.py:311 msgid "Custom Field Choices" msgstr "" -#: netbox/navigation/menu.py:312 +#: netbox/netbox/navigation/menu.py:312 msgid "Custom Links" msgstr "" -#: netbox/navigation/menu.py:313 +#: netbox/netbox/navigation/menu.py:313 msgid "Export Templates" msgstr "" -#: netbox/navigation/menu.py:314 +#: netbox/netbox/navigation/menu.py:314 msgid "Saved Filters" msgstr "" -#: netbox/navigation/menu.py:316 +#: netbox/netbox/navigation/menu.py:316 msgid "Image Attachments" msgstr "" -#: netbox/navigation/menu.py:334 +#: netbox/netbox/navigation/menu.py:334 msgid "Operations" msgstr "" -#: netbox/navigation/menu.py:338 +#: netbox/netbox/navigation/menu.py:338 msgid "Integrations" msgstr "" -#: netbox/navigation/menu.py:340 +#: netbox/netbox/navigation/menu.py:340 msgid "Data Sources" msgstr "" -#: netbox/navigation/menu.py:341 +#: netbox/netbox/navigation/menu.py:341 msgid "Event Rules" msgstr "" -#: netbox/navigation/menu.py:342 +#: netbox/netbox/navigation/menu.py:342 msgid "Webhooks" msgstr "" -#: netbox/navigation/menu.py:346 netbox/navigation/menu.py:350 -#: netbox/views/generic/feature_views.py:151 -#: templates/extras/report/base.html:37 templates/extras/script/base.html:36 +#: netbox/netbox/navigation/menu.py:346 netbox/netbox/navigation/menu.py:350 +#: netbox/netbox/views/generic/feature_views.py:151 +#: netbox/templates/extras/report/base.html:37 +#: netbox/templates/extras/script/base.html:36 msgid "Jobs" msgstr "" -#: netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:356 msgid "Logging" msgstr "" -#: netbox/navigation/menu.py:358 +#: netbox/netbox/navigation/menu.py:358 msgid "Journal Entries" msgstr "" -#: netbox/navigation/menu.py:359 templates/extras/objectchange.html:8 -#: templates/extras/objectchange_list.html:4 +#: netbox/netbox/navigation/menu.py:359 +#: netbox/templates/extras/objectchange.html:8 +#: netbox/templates/extras/objectchange_list.html:4 msgid "Change Log" msgstr "" -#: netbox/navigation/menu.py:366 templates/inc/user_menu.html:11 +#: netbox/netbox/navigation/menu.py:366 netbox/templates/inc/user_menu.html:11 msgid "Admin" msgstr "" -#: netbox/navigation/menu.py:374 templates/users/group.html:29 -#: users/forms/model_forms.py:233 users/forms/model_forms.py:245 -#: users/forms/model_forms.py:297 users/tables.py:102 +#: netbox/netbox/navigation/menu.py:374 netbox/templates/users/group.html:29 +#: netbox/users/forms/model_forms.py:233 netbox/users/forms/model_forms.py:245 +#: netbox/users/forms/model_forms.py:297 netbox/users/tables.py:102 msgid "Users" msgstr "" -#: netbox/navigation/menu.py:394 users/forms/model_forms.py:182 -#: users/forms/model_forms.py:194 users/forms/model_forms.py:302 -#: users/tables.py:35 users/tables.py:106 +#: netbox/netbox/navigation/menu.py:394 netbox/users/forms/model_forms.py:182 +#: netbox/users/forms/model_forms.py:194 netbox/users/forms/model_forms.py:302 +#: netbox/users/tables.py:35 netbox/users/tables.py:106 msgid "Groups" msgstr "" -#: netbox/navigation/menu.py:414 templates/account/base.html:21 -#: templates/inc/user_menu.html:36 +#: netbox/netbox/navigation/menu.py:414 netbox/templates/account/base.html:21 +#: netbox/templates/inc/user_menu.html:36 msgid "API Tokens" msgstr "" -#: netbox/navigation/menu.py:421 users/forms/model_forms.py:188 -#: users/forms/model_forms.py:196 users/forms/model_forms.py:239 -#: users/forms/model_forms.py:246 +#: netbox/netbox/navigation/menu.py:421 netbox/users/forms/model_forms.py:188 +#: netbox/users/forms/model_forms.py:196 netbox/users/forms/model_forms.py:239 +#: netbox/users/forms/model_forms.py:246 msgid "Permissions" msgstr "" -#: netbox/navigation/menu.py:429 netbox/navigation/menu.py:433 -#: templates/core/system.html:7 +#: netbox/netbox/navigation/menu.py:429 netbox/netbox/navigation/menu.py:433 +#: netbox/templates/core/system.html:7 msgid "System" msgstr "" -#: netbox/navigation/menu.py:438 +#: netbox/netbox/navigation/menu.py:438 msgid "Configuration History" msgstr "" -#: netbox/navigation/menu.py:444 templates/core/rq_task.html:8 -#: templates/core/rq_task_list.html:22 +#: netbox/netbox/navigation/menu.py:444 netbox/templates/core/rq_task.html:8 +#: netbox/templates/core/rq_task_list.html:22 msgid "Background Tasks" msgstr "" -#: netbox/navigation/menu.py:483 templates/500.html:35 -#: templates/account/preferences.html:22 templates/core/system.html:80 +#: netbox/netbox/navigation/menu.py:483 netbox/templates/500.html:35 +#: netbox/templates/account/preferences.html:22 +#: netbox/templates/core/system.html:80 msgid "Plugins" msgstr "" -#: netbox/plugins/navigation.py:47 netbox/plugins/navigation.py:69 +#: netbox/netbox/plugins/navigation.py:47 +#: netbox/netbox/plugins/navigation.py:69 msgid "Permissions must be passed as a tuple or list." msgstr "" -#: netbox/plugins/navigation.py:51 +#: netbox/netbox/plugins/navigation.py:51 msgid "Buttons must be passed as a tuple or list." msgstr "" -#: netbox/plugins/navigation.py:73 +#: netbox/netbox/plugins/navigation.py:73 msgid "Button color must be a choice within ButtonColorChoices." msgstr "" -#: netbox/plugins/registration.py:25 +#: netbox/netbox/plugins/registration.py:25 #, python-brace-format msgid "" "PluginTemplateExtension class {template_extension} was passed as an instance!" msgstr "" -#: netbox/plugins/registration.py:31 +#: netbox/netbox/plugins/registration.py:31 #, python-brace-format msgid "" "{template_extension} is not a subclass of netbox.plugins." "PluginTemplateExtension!" msgstr "" -#: netbox/plugins/registration.py:37 +#: netbox/netbox/plugins/registration.py:37 #, python-brace-format msgid "" "PluginTemplateExtension class {template_extension} does not define a valid " "model!" msgstr "" -#: netbox/plugins/registration.py:47 +#: netbox/netbox/plugins/registration.py:47 #, python-brace-format msgid "{item} must be an instance of netbox.plugins.PluginMenuItem" msgstr "" -#: netbox/plugins/registration.py:60 +#: netbox/netbox/plugins/registration.py:60 #, python-brace-format msgid "{menu_link} must be an instance of netbox.plugins.PluginMenuItem" msgstr "" -#: netbox/plugins/registration.py:65 +#: netbox/netbox/plugins/registration.py:65 #, python-brace-format msgid "{button} must be an instance of netbox.plugins.PluginMenuButton" msgstr "" -#: netbox/plugins/templates.py:35 +#: netbox/netbox/plugins/templates.py:35 msgid "extra_context must be a dictionary" msgstr "" -#: netbox/preferences.py:19 +#: netbox/netbox/preferences.py:19 msgid "HTMX Navigation" msgstr "" -#: netbox/preferences.py:24 +#: netbox/netbox/preferences.py:24 msgid "Enable dynamic UI navigation" msgstr "" -#: netbox/preferences.py:26 +#: netbox/netbox/preferences.py:26 msgid "Experimental feature" msgstr "" -#: netbox/preferences.py:29 +#: netbox/netbox/preferences.py:29 msgid "Language" msgstr "" -#: netbox/preferences.py:34 +#: netbox/netbox/preferences.py:34 msgid "Forces UI translation to the specified language" msgstr "" -#: netbox/preferences.py:36 +#: netbox/netbox/preferences.py:36 msgid "Support for translation has been disabled locally" msgstr "" -#: netbox/preferences.py:42 +#: netbox/netbox/preferences.py:42 msgid "Page length" msgstr "" -#: netbox/preferences.py:44 +#: netbox/netbox/preferences.py:44 msgid "The default number of objects to display per page" msgstr "" -#: netbox/preferences.py:48 +#: netbox/netbox/preferences.py:48 msgid "Paginator placement" msgstr "" -#: netbox/preferences.py:50 +#: netbox/netbox/preferences.py:50 msgid "Bottom" msgstr "" -#: netbox/preferences.py:51 +#: netbox/netbox/preferences.py:51 msgid "Top" msgstr "" -#: netbox/preferences.py:52 +#: netbox/netbox/preferences.py:52 msgid "Both" msgstr "" -#: netbox/preferences.py:55 +#: netbox/netbox/preferences.py:55 msgid "Where the paginator controls will be displayed relative to a table" msgstr "" -#: netbox/preferences.py:60 +#: netbox/netbox/preferences.py:60 msgid "Data format" msgstr "" -#: netbox/preferences.py:65 +#: netbox/netbox/preferences.py:65 msgid "The preferred syntax for displaying generic data within the UI" msgstr "" -#: netbox/registry.py:14 +#: netbox/netbox/registry.py:14 #, python-brace-format msgid "Invalid store: {key}" msgstr "" -#: netbox/registry.py:17 +#: netbox/netbox/registry.py:17 msgid "Cannot add stores to registry after initialization" msgstr "" -#: netbox/registry.py:20 +#: netbox/netbox/registry.py:20 msgid "Cannot delete stores from registry" msgstr "" -#: netbox/settings.py:722 +#: netbox/netbox/settings.py:722 msgid "German" msgstr "" -#: netbox/settings.py:723 +#: netbox/netbox/settings.py:723 msgid "English" msgstr "" -#: netbox/settings.py:724 +#: netbox/netbox/settings.py:724 msgid "Spanish" msgstr "" -#: netbox/settings.py:725 +#: netbox/netbox/settings.py:725 msgid "French" msgstr "" -#: netbox/settings.py:726 +#: netbox/netbox/settings.py:726 msgid "Japanese" msgstr "" -#: netbox/settings.py:727 +#: netbox/netbox/settings.py:727 msgid "Portuguese" msgstr "" -#: netbox/settings.py:728 +#: netbox/netbox/settings.py:728 msgid "Russian" msgstr "" -#: netbox/settings.py:729 +#: netbox/netbox/settings.py:729 msgid "Turkish" msgstr "" -#: netbox/settings.py:730 +#: netbox/netbox/settings.py:730 msgid "Ukrainian" msgstr "" -#: netbox/settings.py:731 +#: netbox/netbox/settings.py:731 msgid "Chinese" msgstr "" -#: netbox/tables/columns.py:185 +#: netbox/netbox/tables/columns.py:185 msgid "Toggle all" msgstr "" -#: netbox/tables/columns.py:287 +#: netbox/netbox/tables/columns.py:287 msgid "Toggle Dropdown" msgstr "" -#: netbox/tables/columns.py:552 templates/core/job.html:35 +#: netbox/netbox/tables/columns.py:552 netbox/templates/core/job.html:35 msgid "Error" msgstr "" -#: netbox/tables/tables.py:57 +#: netbox/netbox/tables/tables.py:57 #, python-brace-format msgid "No {model_name} found" msgstr "" -#: netbox/tables/tables.py:248 templates/generic/bulk_import.html:117 +#: netbox/netbox/tables/tables.py:248 +#: netbox/templates/generic/bulk_import.html:117 msgid "Field" msgstr "" -#: netbox/tables/tables.py:251 +#: netbox/netbox/tables/tables.py:251 msgid "Value" msgstr "" -#: netbox/tests/dummy_plugin/navigation.py:29 +#: netbox/netbox/tests/dummy_plugin/navigation.py:29 msgid "Dummy Plugin" msgstr "" -#: netbox/views/generic/bulk_views.py:405 +#: netbox/netbox/views/generic/bulk_views.py:405 #, python-brace-format msgid "Row {i}: Object with ID {id} does not exist" msgstr "" -#: netbox/views/generic/feature_views.py:38 +#: netbox/netbox/views/generic/feature_views.py:38 msgid "Changelog" msgstr "" -#: netbox/views/generic/feature_views.py:91 +#: netbox/netbox/views/generic/feature_views.py:91 msgid "Journal" msgstr "" -#: netbox/views/generic/object_views.py:106 +#: netbox/netbox/views/generic/object_views.py:106 #, python-brace-format msgid "{class_name} must implement get_children()" msgstr "" -#: netbox/views/misc.py:43 +#: netbox/netbox/views/misc.py:43 msgid "" "There was an error loading the dashboard configuration. A default dashboard " "is in use." msgstr "" -#: templates/403.html:4 +#: netbox/templates/403.html:4 msgid "Access Denied" msgstr "" -#: templates/403.html:9 +#: netbox/templates/403.html:9 msgid "You do not have permission to access this page" msgstr "" -#: templates/404.html:4 +#: netbox/templates/404.html:4 msgid "Page Not Found" msgstr "" -#: templates/404.html:9 +#: netbox/templates/404.html:9 msgid "The requested page does not exist" msgstr "" -#: templates/500.html:7 templates/500.html:18 +#: netbox/templates/500.html:7 netbox/templates/500.html:18 msgid "Server Error" msgstr "" -#: templates/500.html:23 +#: netbox/templates/500.html:23 msgid "There was a problem with your request. Please contact an administrator" msgstr "" -#: templates/500.html:28 +#: netbox/templates/500.html:28 msgid "The complete exception is provided below" msgstr "" -#: templates/500.html:33 templates/core/system.html:35 +#: netbox/templates/500.html:33 netbox/templates/core/system.html:35 msgid "Python version" msgstr "" -#: templates/500.html:34 templates/core/system.html:31 +#: netbox/templates/500.html:34 netbox/templates/core/system.html:31 msgid "NetBox version" msgstr "" -#: templates/500.html:36 +#: netbox/templates/500.html:36 msgid "None installed" msgstr "" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "If further assistance is required, please post to the" msgstr "" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "NetBox discussion forum" msgstr "" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "on GitHub" msgstr "" -#: templates/500.html:42 templates/base/40x.html:17 +#: netbox/templates/500.html:42 netbox/templates/base/40x.html:17 msgid "Home Page" msgstr "" -#: templates/account/base.html:7 templates/inc/user_menu.html:27 -#: vpn/forms/bulk_edit.py:255 vpn/forms/filtersets.py:189 -#: vpn/forms/model_forms.py:379 +#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:27 +#: netbox/vpn/forms/bulk_edit.py:255 netbox/vpn/forms/filtersets.py:189 +#: netbox/vpn/forms/model_forms.py:379 msgid "Profile" msgstr "" -#: templates/account/base.html:13 templates/inc/user_menu.html:33 +#: netbox/templates/account/base.html:13 netbox/templates/inc/user_menu.html:33 msgid "Preferences" msgstr "" -#: templates/account/password.html:5 +#: netbox/templates/account/password.html:5 msgid "Change Password" msgstr "" -#: templates/account/password.html:17 templates/account/preferences.html:77 -#: templates/core/configrevision_restore.html:63 -#: templates/dcim/devicebay_populate.html:34 -#: templates/dcim/virtualchassis_add_member.html:26 -#: templates/dcim/virtualchassis_edit.html:103 -#: templates/extras/object_journal.html:26 templates/extras/script.html:38 -#: templates/generic/bulk_add_component.html:67 -#: templates/generic/bulk_delete.html:65 templates/generic/bulk_edit.html:106 -#: templates/generic/bulk_import.html:56 templates/generic/bulk_import.html:78 -#: templates/generic/bulk_import.html:100 templates/generic/bulk_remove.html:62 -#: templates/generic/bulk_rename.html:63 -#: templates/generic/confirmation_form.html:19 -#: templates/generic/object_edit.html:72 templates/htmx/delete_form.html:53 -#: templates/htmx/delete_form.html:55 templates/ipam/ipaddress_assign.html:28 -#: templates/virtualization/cluster_add_devices.html:30 +#: netbox/templates/account/password.html:17 +#: netbox/templates/account/preferences.html:77 +#: netbox/templates/core/configrevision_restore.html:63 +#: netbox/templates/dcim/devicebay_populate.html:34 +#: netbox/templates/dcim/virtualchassis_add_member.html:26 +#: netbox/templates/dcim/virtualchassis_edit.html:103 +#: netbox/templates/extras/object_journal.html:26 +#: netbox/templates/extras/script.html:38 +#: netbox/templates/generic/bulk_add_component.html:67 +#: netbox/templates/generic/bulk_delete.html:65 +#: netbox/templates/generic/bulk_edit.html:106 +#: netbox/templates/generic/bulk_import.html:56 +#: netbox/templates/generic/bulk_import.html:78 +#: netbox/templates/generic/bulk_import.html:100 +#: netbox/templates/generic/bulk_remove.html:62 +#: netbox/templates/generic/bulk_rename.html:63 +#: netbox/templates/generic/confirmation_form.html:19 +#: netbox/templates/generic/object_edit.html:72 +#: netbox/templates/htmx/delete_form.html:53 +#: netbox/templates/htmx/delete_form.html:55 +#: netbox/templates/ipam/ipaddress_assign.html:28 +#: netbox/templates/virtualization/cluster_add_devices.html:30 msgid "Cancel" msgstr "" -#: templates/account/password.html:18 templates/account/preferences.html:78 -#: templates/dcim/devicebay_populate.html:35 -#: templates/dcim/virtualchassis_add_member.html:28 -#: templates/dcim/virtualchassis_edit.html:105 -#: templates/extras/dashboard/widget_add.html:26 -#: templates/extras/dashboard/widget_config.html:19 -#: templates/extras/object_journal.html:27 -#: templates/generic/object_edit.html:75 -#: utilities/templates/helpers/applied_filters.html:16 -#: utilities/templates/helpers/table_config_form.html:40 +#: netbox/templates/account/password.html:18 +#: netbox/templates/account/preferences.html:78 +#: netbox/templates/dcim/devicebay_populate.html:35 +#: netbox/templates/dcim/virtualchassis_add_member.html:28 +#: netbox/templates/dcim/virtualchassis_edit.html:105 +#: netbox/templates/extras/dashboard/widget_add.html:26 +#: netbox/templates/extras/dashboard/widget_config.html:19 +#: netbox/templates/extras/object_journal.html:27 +#: netbox/templates/generic/object_edit.html:75 +#: netbox/utilities/templates/helpers/applied_filters.html:16 +#: netbox/utilities/templates/helpers/table_config_form.html:40 msgid "Save" msgstr "" -#: templates/account/preferences.html:34 +#: netbox/templates/account/preferences.html:34 msgid "Table Configurations" msgstr "" -#: templates/account/preferences.html:39 +#: netbox/templates/account/preferences.html:39 msgid "Clear table preferences" msgstr "" -#: templates/account/preferences.html:47 +#: netbox/templates/account/preferences.html:47 msgid "Toggle All" msgstr "" -#: templates/account/preferences.html:49 +#: netbox/templates/account/preferences.html:49 msgid "Table" msgstr "" -#: templates/account/preferences.html:50 +#: netbox/templates/account/preferences.html:50 msgid "Ordering" msgstr "" -#: templates/account/preferences.html:51 +#: netbox/templates/account/preferences.html:51 msgid "Columns" msgstr "" -#: templates/account/preferences.html:71 templates/dcim/cable_trace.html:113 -#: templates/extras/object_configcontext.html:43 +#: netbox/templates/account/preferences.html:71 +#: netbox/templates/dcim/cable_trace.html:113 +#: netbox/templates/extras/object_configcontext.html:43 msgid "None found" msgstr "" -#: templates/account/profile.html:6 +#: netbox/templates/account/profile.html:6 msgid "User Profile" msgstr "" -#: templates/account/profile.html:12 +#: netbox/templates/account/profile.html:12 msgid "Account Details" msgstr "" -#: templates/account/profile.html:29 templates/tenancy/contact.html:43 -#: templates/users/user.html:25 tenancy/forms/bulk_edit.py:109 +#: netbox/templates/account/profile.html:29 +#: netbox/templates/tenancy/contact.html:43 netbox/templates/users/user.html:25 +#: netbox/tenancy/forms/bulk_edit.py:109 msgid "Email" msgstr "" -#: templates/account/profile.html:33 templates/users/user.html:29 +#: netbox/templates/account/profile.html:33 netbox/templates/users/user.html:29 msgid "Account Created" msgstr "" -#: templates/account/profile.html:37 templates/users/user.html:33 +#: netbox/templates/account/profile.html:37 netbox/templates/users/user.html:33 msgid "Last Login" msgstr "" -#: templates/account/profile.html:41 templates/users/user.html:45 +#: netbox/templates/account/profile.html:41 netbox/templates/users/user.html:45 msgid "Superuser" msgstr "" -#: templates/account/profile.html:45 templates/inc/user_menu.html:13 -#: templates/users/user.html:41 +#: netbox/templates/account/profile.html:45 +#: netbox/templates/inc/user_menu.html:13 netbox/templates/users/user.html:41 msgid "Staff" msgstr "" -#: templates/account/profile.html:53 templates/users/objectpermission.html:82 -#: templates/users/user.html:53 +#: netbox/templates/account/profile.html:53 +#: netbox/templates/users/objectpermission.html:82 +#: netbox/templates/users/user.html:53 msgid "Assigned Groups" msgstr "" -#: templates/account/profile.html:58 -#: templates/circuits/circuit_terminations_swap.html:18 -#: templates/circuits/circuit_terminations_swap.html:26 -#: templates/circuits/circuittermination.html:34 -#: templates/circuits/inc/circuit_termination.html:68 -#: templates/dcim/devicebay.html:59 -#: templates/dcim/inc/panels/inventory_items.html:45 -#: templates/dcim/interface.html:296 templates/dcim/modulebay.html:76 -#: templates/extras/configcontext.html:70 templates/extras/eventrule.html:72 -#: templates/extras/htmx/script_result.html:56 -#: templates/extras/objectchange.html:123 -#: templates/extras/objectchange.html:141 templates/extras/webhook.html:67 -#: templates/extras/webhook.html:79 templates/inc/panel_table.html:13 -#: templates/inc/panels/comments.html:12 -#: templates/ipam/inc/panels/fhrp_groups.html:56 templates/users/group.html:34 -#: templates/users/group.html:44 templates/users/objectpermission.html:77 -#: templates/users/objectpermission.html:87 templates/users/user.html:58 -#: templates/users/user.html:68 +#: netbox/templates/account/profile.html:58 +#: netbox/templates/circuits/circuit_terminations_swap.html:18 +#: netbox/templates/circuits/circuit_terminations_swap.html:26 +#: netbox/templates/circuits/circuittermination.html:34 +#: netbox/templates/circuits/inc/circuit_termination.html:68 +#: netbox/templates/dcim/devicebay.html:59 +#: netbox/templates/dcim/inc/panels/inventory_items.html:45 +#: netbox/templates/dcim/interface.html:296 +#: netbox/templates/dcim/modulebay.html:76 +#: netbox/templates/extras/configcontext.html:70 +#: netbox/templates/extras/eventrule.html:72 +#: netbox/templates/extras/htmx/script_result.html:56 +#: netbox/templates/extras/objectchange.html:123 +#: netbox/templates/extras/objectchange.html:141 +#: netbox/templates/extras/webhook.html:67 +#: netbox/templates/extras/webhook.html:79 +#: netbox/templates/inc/panel_table.html:13 +#: netbox/templates/inc/panels/comments.html:12 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:56 +#: netbox/templates/users/group.html:34 netbox/templates/users/group.html:44 +#: netbox/templates/users/objectpermission.html:77 +#: netbox/templates/users/objectpermission.html:87 +#: netbox/templates/users/user.html:58 netbox/templates/users/user.html:68 msgid "None" msgstr "" -#: templates/account/profile.html:68 templates/users/user.html:78 +#: netbox/templates/account/profile.html:68 netbox/templates/users/user.html:78 msgid "Recent Activity" msgstr "" -#: templates/account/token.html:8 templates/account/token_list.html:6 +#: netbox/templates/account/token.html:8 +#: netbox/templates/account/token_list.html:6 msgid "My API Tokens" msgstr "" -#: templates/account/token.html:11 templates/account/token.html:19 -#: templates/users/token.html:6 templates/users/token.html:14 -#: users/forms/filtersets.py:121 +#: netbox/templates/account/token.html:11 +#: netbox/templates/account/token.html:19 netbox/templates/users/token.html:6 +#: netbox/templates/users/token.html:14 netbox/users/forms/filtersets.py:121 msgid "Token" msgstr "" -#: templates/account/token.html:39 templates/users/token.html:31 -#: users/forms/bulk_edit.py:107 +#: netbox/templates/account/token.html:39 netbox/templates/users/token.html:31 +#: netbox/users/forms/bulk_edit.py:107 msgid "Write enabled" msgstr "" -#: templates/account/token.html:51 templates/users/token.html:43 +#: netbox/templates/account/token.html:51 netbox/templates/users/token.html:43 msgid "Last used" msgstr "" -#: templates/account/token_list.html:12 +#: netbox/templates/account/token_list.html:12 msgid "Add a Token" msgstr "" -#: templates/base/base.html:18 templates/home.html:27 +#: netbox/templates/base/base.html:18 netbox/templates/home.html:27 msgid "Home" msgstr "" -#: templates/base/layout.html:32 +#: netbox/templates/base/layout.html:32 msgid "NetBox Logo" msgstr "" -#: templates/base/layout.html:56 +#: netbox/templates/base/layout.html:56 msgid "Enable dark mode" msgstr "" -#: templates/base/layout.html:59 +#: netbox/templates/base/layout.html:59 msgid "Enable light mode" msgstr "" -#: templates/base/layout.html:145 +#: netbox/templates/base/layout.html:145 msgid "Docs" msgstr "" -#: templates/base/layout.html:151 templates/rest_framework/api.html:10 +#: netbox/templates/base/layout.html:151 +#: netbox/templates/rest_framework/api.html:10 msgid "REST API" msgstr "" -#: templates/base/layout.html:157 +#: netbox/templates/base/layout.html:157 msgid "REST API documentation" msgstr "" -#: templates/base/layout.html:164 +#: netbox/templates/base/layout.html:164 msgid "GraphQL API" msgstr "" -#: templates/base/layout.html:171 +#: netbox/templates/base/layout.html:171 msgid "Source Code" msgstr "" -#: templates/base/layout.html:177 +#: netbox/templates/base/layout.html:177 msgid "Community" msgstr "" -#: templates/circuits/circuit.html:47 +#: netbox/templates/circuits/circuit.html:47 msgid "Install Date" msgstr "" -#: templates/circuits/circuit.html:51 +#: netbox/templates/circuits/circuit.html:51 msgid "Termination Date" msgstr "" -#: templates/circuits/circuit_terminations_swap.html:4 +#: netbox/templates/circuits/circuit_terminations_swap.html:4 msgid "Swap Circuit Terminations" msgstr "" -#: templates/circuits/circuit_terminations_swap.html:8 +#: netbox/templates/circuits/circuit_terminations_swap.html:8 #, python-format msgid "Swap these terminations for circuit %(circuit)s?" msgstr "" -#: templates/circuits/circuit_terminations_swap.html:14 +#: netbox/templates/circuits/circuit_terminations_swap.html:14 msgid "A side" msgstr "" -#: templates/circuits/circuit_terminations_swap.html:22 +#: netbox/templates/circuits/circuit_terminations_swap.html:22 msgid "Z side" msgstr "" -#: templates/circuits/circuittype.html:10 +#: netbox/templates/circuits/circuittype.html:10 msgid "Add Circuit" msgstr "" -#: templates/circuits/circuittype.html:19 +#: netbox/templates/circuits/circuittype.html:19 msgid "Circuit Type" msgstr "" -#: templates/circuits/inc/circuit_termination.html:10 -#: templates/dcim/devicetype/component_templates.html:33 -#: templates/dcim/manufacturer.html:11 -#: templates/dcim/moduletype/component_templates.html:29 -#: templates/generic/bulk_add_component.html:22 -#: templates/users/objectpermission.html:38 -#: utilities/templates/buttons/add.html:4 -#: utilities/templates/helpers/table_config_form.html:20 +#: netbox/templates/circuits/inc/circuit_termination.html:10 +#: netbox/templates/dcim/devicetype/component_templates.html:33 +#: netbox/templates/dcim/manufacturer.html:11 +#: netbox/templates/dcim/moduletype/component_templates.html:29 +#: netbox/templates/generic/bulk_add_component.html:22 +#: netbox/templates/users/objectpermission.html:38 +#: netbox/utilities/templates/buttons/add.html:4 +#: netbox/utilities/templates/helpers/table_config_form.html:20 msgid "Add" msgstr "" -#: templates/circuits/inc/circuit_termination.html:15 -#: templates/circuits/inc/circuit_termination_fields.html:36 -#: templates/dcim/inc/panels/inventory_items.html:32 -#: templates/dcim/moduletype/component_templates.html:20 -#: templates/dcim/powerpanel.html:56 templates/extras/script_list.html:32 -#: templates/generic/object_edit.html:47 -#: templates/ipam/inc/ipaddress_edit_header.html:7 -#: templates/ipam/inc/panels/fhrp_groups.html:43 -#: utilities/templates/buttons/edit.html:3 +#: netbox/templates/circuits/inc/circuit_termination.html:15 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 +#: netbox/templates/dcim/inc/panels/inventory_items.html:32 +#: netbox/templates/dcim/moduletype/component_templates.html:20 +#: netbox/templates/dcim/powerpanel.html:56 +#: netbox/templates/extras/script_list.html:32 +#: netbox/templates/generic/object_edit.html:47 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:7 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:43 +#: netbox/utilities/templates/buttons/edit.html:3 msgid "Edit" msgstr "" -#: templates/circuits/inc/circuit_termination.html:18 +#: netbox/templates/circuits/inc/circuit_termination.html:18 msgid "Swap" msgstr "" -#: templates/circuits/inc/circuit_termination_fields.html:19 -#: templates/dcim/consoleport.html:59 templates/dcim/consoleserverport.html:60 -#: templates/dcim/powerfeed.html:114 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:19 +#: netbox/templates/dcim/consoleport.html:59 +#: netbox/templates/dcim/consoleserverport.html:60 +#: netbox/templates/dcim/powerfeed.html:114 msgid "Marked as connected" msgstr "" -#: templates/circuits/inc/circuit_termination_fields.html:21 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:21 msgid "to" msgstr "" -#: templates/circuits/inc/circuit_termination_fields.html:31 -#: templates/circuits/inc/circuit_termination_fields.html:32 -#: templates/dcim/frontport.html:80 -#: templates/dcim/inc/connection_endpoints.html:7 -#: templates/dcim/interface.html:154 templates/dcim/rearport.html:76 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:31 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:32 +#: netbox/templates/dcim/frontport.html:80 +#: netbox/templates/dcim/inc/connection_endpoints.html:7 +#: netbox/templates/dcim/interface.html:154 +#: netbox/templates/dcim/rearport.html:76 msgid "Trace" msgstr "" -#: templates/circuits/inc/circuit_termination_fields.html:35 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:35 msgid "Edit cable" msgstr "" -#: templates/circuits/inc/circuit_termination_fields.html:40 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:40 msgid "Remove cable" msgstr "" -#: templates/circuits/inc/circuit_termination_fields.html:41 -#: templates/dcim/bulk_disconnect.html:5 -#: templates/dcim/device/consoleports.html:12 -#: templates/dcim/device/consoleserverports.html:12 -#: templates/dcim/device/frontports.html:12 -#: templates/dcim/device/interfaces.html:16 -#: templates/dcim/device/poweroutlets.html:12 -#: templates/dcim/device/powerports.html:12 -#: templates/dcim/device/rearports.html:12 templates/dcim/powerpanel.html:61 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 +#: netbox/templates/dcim/bulk_disconnect.html:5 +#: netbox/templates/dcim/device/consoleports.html:12 +#: netbox/templates/dcim/device/consoleserverports.html:12 +#: netbox/templates/dcim/device/frontports.html:12 +#: netbox/templates/dcim/device/interfaces.html:16 +#: netbox/templates/dcim/device/poweroutlets.html:12 +#: netbox/templates/dcim/device/powerports.html:12 +#: netbox/templates/dcim/device/rearports.html:12 +#: netbox/templates/dcim/powerpanel.html:61 msgid "Disconnect" msgstr "" -#: templates/circuits/inc/circuit_termination_fields.html:48 -#: templates/dcim/consoleport.html:69 templates/dcim/consoleserverport.html:70 -#: templates/dcim/frontport.html:102 templates/dcim/interface.html:180 -#: templates/dcim/interface.html:200 templates/dcim/powerfeed.html:127 -#: templates/dcim/poweroutlet.html:71 templates/dcim/poweroutlet.html:72 -#: templates/dcim/powerport.html:73 templates/dcim/rearport.html:98 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:48 +#: netbox/templates/dcim/consoleport.html:69 +#: netbox/templates/dcim/consoleserverport.html:70 +#: netbox/templates/dcim/frontport.html:102 +#: netbox/templates/dcim/interface.html:180 +#: netbox/templates/dcim/interface.html:200 +#: netbox/templates/dcim/powerfeed.html:127 +#: netbox/templates/dcim/poweroutlet.html:71 +#: netbox/templates/dcim/poweroutlet.html:72 +#: netbox/templates/dcim/powerport.html:73 +#: netbox/templates/dcim/rearport.html:98 msgid "Connect" msgstr "" -#: templates/circuits/inc/circuit_termination_fields.html:70 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:70 msgid "Downstream" msgstr "" -#: templates/circuits/inc/circuit_termination_fields.html:71 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:71 msgid "Upstream" msgstr "" -#: templates/circuits/inc/circuit_termination_fields.html:80 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:80 msgid "Cross-Connect" msgstr "" -#: templates/circuits/inc/circuit_termination_fields.html:84 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:84 msgid "Patch Panel/Port" msgstr "" -#: templates/circuits/provider.html:11 +#: netbox/templates/circuits/provider.html:11 msgid "Add circuit" msgstr "" -#: templates/circuits/provideraccount.html:17 +#: netbox/templates/circuits/provideraccount.html:17 msgid "Provider Account" msgstr "" -#: templates/core/configrevision.html:35 +#: netbox/templates/core/configrevision.html:35 msgid "Configuration Data" msgstr "" -#: templates/core/configrevision.html:40 +#: netbox/templates/core/configrevision.html:40 msgid "Comment" msgstr "" -#: templates/core/configrevision_restore.html:8 -#: templates/core/configrevision_restore.html:25 -#: templates/core/configrevision_restore.html:64 +#: netbox/templates/core/configrevision_restore.html:8 +#: netbox/templates/core/configrevision_restore.html:25 +#: netbox/templates/core/configrevision_restore.html:64 msgid "Restore" msgstr "" -#: templates/core/configrevision_restore.html:36 +#: netbox/templates/core/configrevision_restore.html:36 msgid "Parameter" msgstr "" -#: templates/core/configrevision_restore.html:37 +#: netbox/templates/core/configrevision_restore.html:37 msgid "Current Value" msgstr "" -#: templates/core/configrevision_restore.html:38 +#: netbox/templates/core/configrevision_restore.html:38 msgid "New Value" msgstr "" -#: templates/core/configrevision_restore.html:50 +#: netbox/templates/core/configrevision_restore.html:50 msgid "Changed" msgstr "" -#: templates/core/datafile.html:38 +#: netbox/templates/core/datafile.html:38 msgid "Last Updated" msgstr "" -#: templates/core/datafile.html:42 templates/ipam/iprange.html:25 -#: templates/virtualization/virtualdisk.html:29 +#: netbox/templates/core/datafile.html:42 netbox/templates/ipam/iprange.html:25 +#: netbox/templates/virtualization/virtualdisk.html:29 msgid "Size" msgstr "" -#: templates/core/datafile.html:43 +#: netbox/templates/core/datafile.html:43 msgid "bytes" msgstr "" -#: templates/core/datafile.html:46 +#: netbox/templates/core/datafile.html:46 msgid "SHA256 Hash" msgstr "" -#: templates/core/datasource.html:14 templates/core/datasource.html:20 -#: utilities/templates/buttons/sync.html:5 +#: netbox/templates/core/datasource.html:14 +#: netbox/templates/core/datasource.html:20 +#: netbox/utilities/templates/buttons/sync.html:5 msgid "Sync" msgstr "" -#: templates/core/datasource.html:50 +#: netbox/templates/core/datasource.html:50 msgid "Last synced" msgstr "" -#: templates/core/datasource.html:84 +#: netbox/templates/core/datasource.html:84 msgid "Backend" msgstr "" -#: templates/core/datasource.html:99 +#: netbox/templates/core/datasource.html:99 msgid "No parameters defined" msgstr "" -#: templates/core/datasource.html:114 +#: netbox/templates/core/datasource.html:114 msgid "Files" msgstr "" -#: templates/core/inc/config_data.html:7 +#: netbox/templates/core/inc/config_data.html:7 msgid "Rack elevations" msgstr "" -#: templates/core/inc/config_data.html:10 +#: netbox/templates/core/inc/config_data.html:10 msgid "Default unit height" msgstr "" -#: templates/core/inc/config_data.html:14 +#: netbox/templates/core/inc/config_data.html:14 msgid "Default unit width" msgstr "" -#: templates/core/inc/config_data.html:20 +#: netbox/templates/core/inc/config_data.html:20 msgid "Power feeds" msgstr "" -#: templates/core/inc/config_data.html:23 +#: netbox/templates/core/inc/config_data.html:23 msgid "Default voltage" msgstr "" -#: templates/core/inc/config_data.html:27 +#: netbox/templates/core/inc/config_data.html:27 msgid "Default amperage" msgstr "" -#: templates/core/inc/config_data.html:31 +#: netbox/templates/core/inc/config_data.html:31 msgid "Default max utilization" msgstr "" -#: templates/core/inc/config_data.html:40 +#: netbox/templates/core/inc/config_data.html:40 msgid "Enforce global unique" msgstr "" -#: templates/core/inc/config_data.html:83 +#: netbox/templates/core/inc/config_data.html:83 msgid "Paginate count" msgstr "" -#: templates/core/inc/config_data.html:87 +#: netbox/templates/core/inc/config_data.html:87 msgid "Max page size" msgstr "" -#: templates/core/inc/config_data.html:114 +#: netbox/templates/core/inc/config_data.html:114 msgid "User preferences" msgstr "" -#: templates/core/inc/config_data.html:141 +#: netbox/templates/core/inc/config_data.html:141 msgid "Job retention" msgstr "" -#: templates/core/job.html:17 templates/core/rq_task.html:12 -#: templates/core/rq_task.html:49 templates/core/rq_task.html:58 +#: netbox/templates/core/job.html:17 netbox/templates/core/rq_task.html:12 +#: netbox/templates/core/rq_task.html:49 netbox/templates/core/rq_task.html:58 msgid "Job" msgstr "" -#: templates/core/job.html:40 templates/extras/journalentry.html:26 +#: netbox/templates/core/job.html:40 +#: netbox/templates/extras/journalentry.html:26 msgid "Created By" msgstr "" -#: templates/core/job.html:48 +#: netbox/templates/core/job.html:48 msgid "Scheduling" msgstr "" -#: templates/core/job.html:59 +#: netbox/templates/core/job.html:59 #, python-format msgid "every %(interval)s minutes" msgstr "" -#: templates/core/rq_queue_list.html:5 templates/core/rq_queue_list.html:13 -#: templates/core/rq_task_list.html:14 templates/core/rq_worker.html:7 +#: netbox/templates/core/rq_queue_list.html:5 +#: netbox/templates/core/rq_queue_list.html:13 +#: netbox/templates/core/rq_task_list.html:14 +#: netbox/templates/core/rq_worker.html:7 msgid "Background Queues" msgstr "" -#: templates/core/rq_queue_list.html:24 templates/core/rq_queue_list.html:25 -#: templates/core/rq_worker_list.html:44 templates/core/rq_worker_list.html:45 -#: templates/extras/script_result.html:49 -#: templates/extras/script_result.html:51 -#: templates/inc/table_controls_htmx.html:18 -#: templates/inc/table_controls_htmx.html:20 +#: netbox/templates/core/rq_queue_list.html:24 +#: netbox/templates/core/rq_queue_list.html:25 +#: netbox/templates/core/rq_worker_list.html:44 +#: netbox/templates/core/rq_worker_list.html:45 +#: netbox/templates/extras/script_result.html:49 +#: netbox/templates/extras/script_result.html:51 +#: netbox/templates/inc/table_controls_htmx.html:18 +#: netbox/templates/inc/table_controls_htmx.html:20 msgid "Configure Table" msgstr "" -#: templates/core/rq_task.html:29 +#: netbox/templates/core/rq_task.html:29 msgid "Stop" msgstr "" -#: templates/core/rq_task.html:34 +#: netbox/templates/core/rq_task.html:34 msgid "Requeue" msgstr "" -#: templates/core/rq_task.html:39 +#: netbox/templates/core/rq_task.html:39 msgid "Enqueue" msgstr "" -#: templates/core/rq_task.html:61 +#: netbox/templates/core/rq_task.html:61 msgid "Queue" msgstr "" -#: templates/core/rq_task.html:65 +#: netbox/templates/core/rq_task.html:65 msgid "Timeout" msgstr "" -#: templates/core/rq_task.html:69 +#: netbox/templates/core/rq_task.html:69 msgid "Result TTL" msgstr "" -#: templates/core/rq_task.html:89 +#: netbox/templates/core/rq_task.html:89 msgid "Meta" msgstr "" -#: templates/core/rq_task.html:93 +#: netbox/templates/core/rq_task.html:93 msgid "Arguments" msgstr "" -#: templates/core/rq_task.html:97 +#: netbox/templates/core/rq_task.html:97 msgid "Keyword Arguments" msgstr "" -#: templates/core/rq_task.html:103 +#: netbox/templates/core/rq_task.html:103 msgid "Depends on" msgstr "" -#: templates/core/rq_task.html:109 +#: netbox/templates/core/rq_task.html:109 msgid "Exception" msgstr "" -#: templates/core/rq_task_list.html:28 +#: netbox/templates/core/rq_task_list.html:28 msgid "tasks in " msgstr "" -#: templates/core/rq_task_list.html:33 +#: netbox/templates/core/rq_task_list.html:33 msgid "Queued Jobs" msgstr "" -#: templates/core/rq_task_list.html:64 templates/extras/script_result.html:68 +#: netbox/templates/core/rq_task_list.html:64 +#: netbox/templates/extras/script_result.html:68 #, python-format msgid "" "Select all %(count)s %(object_type_plural)s matching query" msgstr "" -#: templates/core/rq_worker.html:10 +#: netbox/templates/core/rq_worker.html:10 msgid "Worker Info" msgstr "" -#: templates/core/rq_worker.html:31 templates/core/rq_worker.html:40 +#: netbox/templates/core/rq_worker.html:31 +#: netbox/templates/core/rq_worker.html:40 msgid "Worker" msgstr "" -#: templates/core/rq_worker.html:55 +#: netbox/templates/core/rq_worker.html:55 msgid "Queues" msgstr "" -#: templates/core/rq_worker.html:63 +#: netbox/templates/core/rq_worker.html:63 msgid "Curent Job" msgstr "" -#: templates/core/rq_worker.html:67 +#: netbox/templates/core/rq_worker.html:67 msgid "Successful job count" msgstr "" -#: templates/core/rq_worker.html:71 +#: netbox/templates/core/rq_worker.html:71 msgid "Failed job count" msgstr "" -#: templates/core/rq_worker.html:75 +#: netbox/templates/core/rq_worker.html:75 msgid "Total working time" msgstr "" -#: templates/core/rq_worker.html:76 +#: netbox/templates/core/rq_worker.html:76 msgid "seconds" msgstr "" -#: templates/core/rq_worker_list.html:13 templates/core/rq_worker_list.html:21 +#: netbox/templates/core/rq_worker_list.html:13 +#: netbox/templates/core/rq_worker_list.html:21 msgid "Background Workers" msgstr "" -#: templates/core/rq_worker_list.html:27 +#: netbox/templates/core/rq_worker_list.html:27 msgid "Workers in " msgstr "" -#: templates/core/system.html:11 utilities/templates/buttons/export.html:4 +#: netbox/templates/core/system.html:11 +#: netbox/utilities/templates/buttons/export.html:4 msgid "Export" msgstr "" -#: templates/core/system.html:28 +#: netbox/templates/core/system.html:28 msgid "System Status" msgstr "" -#: templates/core/system.html:39 +#: netbox/templates/core/system.html:39 msgid "Django version" msgstr "" -#: templates/core/system.html:43 +#: netbox/templates/core/system.html:43 msgid "PostgreSQL version" msgstr "" -#: templates/core/system.html:47 +#: netbox/templates/core/system.html:47 msgid "Database name" msgstr "" -#: templates/core/system.html:51 +#: netbox/templates/core/system.html:51 msgid "Database size" msgstr "" -#: templates/core/system.html:56 +#: netbox/templates/core/system.html:56 msgid "Unavailable" msgstr "" -#: templates/core/system.html:61 +#: netbox/templates/core/system.html:61 msgid "RQ workers" msgstr "" -#: templates/core/system.html:64 +#: netbox/templates/core/system.html:64 msgid "default queue" msgstr "" -#: templates/core/system.html:68 +#: netbox/templates/core/system.html:68 msgid "System time" msgstr "" -#: templates/core/system.html:90 +#: netbox/templates/core/system.html:90 msgid "Current Configuration" msgstr "" -#: templates/dcim/bulk_disconnect.html:9 +#: netbox/templates/dcim/bulk_disconnect.html:9 #, python-format msgid "" "Are you sure you want to disconnect these %(count)s %(obj_type_plural)s?" msgstr "" -#: templates/dcim/cable_trace.html:10 +#: netbox/templates/dcim/cable_trace.html:10 #, python-format msgid "Cable Trace for %(object_type)s %(object)s" msgstr "" -#: templates/dcim/cable_trace.html:24 templates/dcim/inc/rack_elevation.html:7 +#: netbox/templates/dcim/cable_trace.html:24 +#: netbox/templates/dcim/inc/rack_elevation.html:7 msgid "Download SVG" msgstr "" -#: templates/dcim/cable_trace.html:30 +#: netbox/templates/dcim/cable_trace.html:30 msgid "Asymmetric Path" msgstr "" -#: templates/dcim/cable_trace.html:31 +#: netbox/templates/dcim/cable_trace.html:31 msgid "The nodes below have no links and result in an asymmetric path" msgstr "" -#: templates/dcim/cable_trace.html:38 +#: netbox/templates/dcim/cable_trace.html:38 msgid "Path split" msgstr "" -#: templates/dcim/cable_trace.html:39 +#: netbox/templates/dcim/cable_trace.html:39 msgid "Select a node below to continue" msgstr "" -#: templates/dcim/cable_trace.html:55 +#: netbox/templates/dcim/cable_trace.html:55 msgid "Trace Completed" msgstr "" -#: templates/dcim/cable_trace.html:58 +#: netbox/templates/dcim/cable_trace.html:58 msgid "Total segments" msgstr "" -#: templates/dcim/cable_trace.html:62 +#: netbox/templates/dcim/cable_trace.html:62 msgid "Total length" msgstr "" -#: templates/dcim/cable_trace.html:77 +#: netbox/templates/dcim/cable_trace.html:77 msgid "No paths found" msgstr "" -#: templates/dcim/cable_trace.html:85 +#: netbox/templates/dcim/cable_trace.html:85 msgid "Related Paths" msgstr "" -#: templates/dcim/cable_trace.html:89 +#: netbox/templates/dcim/cable_trace.html:89 msgid "Origin" msgstr "" -#: templates/dcim/cable_trace.html:90 +#: netbox/templates/dcim/cable_trace.html:90 msgid "Destination" msgstr "" -#: templates/dcim/cable_trace.html:91 +#: netbox/templates/dcim/cable_trace.html:91 msgid "Segments" msgstr "" -#: templates/dcim/cable_trace.html:104 +#: netbox/templates/dcim/cable_trace.html:104 msgid "Incomplete" msgstr "" -#: templates/dcim/component_list.html:14 +#: netbox/templates/dcim/component_list.html:14 msgid "Rename Selected" msgstr "" -#: templates/dcim/consoleport.html:65 templates/dcim/consoleserverport.html:66 -#: templates/dcim/frontport.html:98 templates/dcim/interface.html:176 -#: templates/dcim/poweroutlet.html:69 templates/dcim/powerport.html:69 +#: netbox/templates/dcim/consoleport.html:65 +#: netbox/templates/dcim/consoleserverport.html:66 +#: netbox/templates/dcim/frontport.html:98 +#: netbox/templates/dcim/interface.html:176 +#: netbox/templates/dcim/poweroutlet.html:69 +#: netbox/templates/dcim/powerport.html:69 msgid "Not Connected" msgstr "" -#: templates/dcim/device.html:33 +#: netbox/templates/dcim/device.html:34 msgid "Highlight device in rack" msgstr "" -#: templates/dcim/device.html:54 +#: netbox/templates/dcim/device.html:55 msgid "Not racked" msgstr "" -#: templates/dcim/device.html:61 templates/dcim/site.html:93 +#: netbox/templates/dcim/device.html:62 netbox/templates/dcim/site.html:94 msgid "GPS Coordinates" msgstr "" -#: templates/dcim/device.html:67 templates/dcim/site.html:99 +#: netbox/templates/dcim/device.html:68 netbox/templates/dcim/site.html:100 msgid "Map It" msgstr "" -#: templates/dcim/device.html:107 templates/dcim/inventoryitem.html:56 -#: templates/dcim/module.html:78 templates/dcim/modulebay.html:70 -#: templates/dcim/rack.html:59 +#: netbox/templates/dcim/device.html:108 +#: netbox/templates/dcim/inventoryitem.html:56 +#: netbox/templates/dcim/module.html:78 netbox/templates/dcim/modulebay.html:70 +#: netbox/templates/dcim/rack.html:59 msgid "Asset Tag" msgstr "" -#: templates/dcim/device.html:122 +#: netbox/templates/dcim/device.html:123 msgid "View Virtual Chassis" msgstr "" -#: templates/dcim/device.html:161 +#: netbox/templates/dcim/device.html:162 msgid "Create VDC" msgstr "" -#: templates/dcim/device.html:172 templates/dcim/device_edit.html:64 -#: virtualization/forms/model_forms.py:223 +#: netbox/templates/dcim/device.html:173 +#: netbox/templates/dcim/device_edit.html:64 +#: netbox/virtualization/forms/model_forms.py:223 msgid "Management" msgstr "" -#: templates/dcim/device.html:192 templates/dcim/device.html:208 -#: templates/virtualization/virtualmachine.html:53 -#: templates/virtualization/virtualmachine.html:69 +#: netbox/templates/dcim/device.html:193 netbox/templates/dcim/device.html:209 +#: netbox/templates/virtualization/virtualmachine.html:53 +#: netbox/templates/virtualization/virtualmachine.html:69 msgid "NAT for" msgstr "" -#: templates/dcim/device.html:194 templates/dcim/device.html:210 -#: templates/virtualization/virtualmachine.html:55 -#: templates/virtualization/virtualmachine.html:71 +#: netbox/templates/dcim/device.html:195 netbox/templates/dcim/device.html:211 +#: netbox/templates/virtualization/virtualmachine.html:55 +#: netbox/templates/virtualization/virtualmachine.html:71 msgid "NAT" msgstr "" -#: templates/dcim/device.html:244 templates/dcim/rack.html:67 +#: netbox/templates/dcim/device.html:245 netbox/templates/dcim/rack.html:67 msgid "Power Utilization" msgstr "" -#: templates/dcim/device.html:248 +#: netbox/templates/dcim/device.html:249 msgid "Input" msgstr "" -#: templates/dcim/device.html:249 +#: netbox/templates/dcim/device.html:250 msgid "Outlets" msgstr "" -#: templates/dcim/device.html:250 +#: netbox/templates/dcim/device.html:251 msgid "Allocated" msgstr "" -#: templates/dcim/device.html:260 templates/dcim/device.html:262 -#: templates/dcim/device.html:278 templates/dcim/powerfeed.html:67 +#: netbox/templates/dcim/device.html:261 netbox/templates/dcim/device.html:263 +#: netbox/templates/dcim/device.html:279 +#: netbox/templates/dcim/powerfeed.html:67 msgid "VA" msgstr "" -#: templates/dcim/device.html:272 +#: netbox/templates/dcim/device.html:273 msgctxt "Leg of a power feed" msgid "Leg" msgstr "" -#: templates/dcim/device.html:298 -#: templates/virtualization/virtualmachine.html:154 +#: netbox/templates/dcim/device.html:299 +#: netbox/templates/virtualization/virtualmachine.html:154 msgid "Add a service" msgstr "" -#: templates/dcim/device/base.html:21 templates/dcim/device_list.html:9 -#: templates/dcim/devicetype/base.html:18 templates/dcim/module.html:18 -#: templates/dcim/moduletype/base.html:18 -#: templates/virtualization/virtualmachine/base.html:22 -#: templates/virtualization/virtualmachine_list.html:8 +#: netbox/templates/dcim/device/base.html:21 +#: netbox/templates/dcim/device_list.html:9 +#: netbox/templates/dcim/devicetype/base.html:18 +#: netbox/templates/dcim/module.html:18 +#: netbox/templates/dcim/moduletype/base.html:18 +#: netbox/templates/virtualization/virtualmachine/base.html:22 +#: netbox/templates/virtualization/virtualmachine_list.html:8 msgid "Add Components" msgstr "" -#: templates/dcim/device/consoleports.html:24 +#: netbox/templates/dcim/device/consoleports.html:24 msgid "Add Console Ports" msgstr "" -#: templates/dcim/device/consoleserverports.html:24 +#: netbox/templates/dcim/device/consoleserverports.html:24 msgid "Add Console Server Ports" msgstr "" -#: templates/dcim/device/devicebays.html:10 +#: netbox/templates/dcim/device/devicebays.html:10 msgid "Add Device Bays" msgstr "" -#: templates/dcim/device/frontports.html:24 +#: netbox/templates/dcim/device/frontports.html:24 msgid "Add Front Ports" msgstr "" -#: templates/dcim/device/inc/interface_table_controls.html:9 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:9 msgid "Hide Enabled" msgstr "" -#: templates/dcim/device/inc/interface_table_controls.html:10 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:10 msgid "Hide Disabled" msgstr "" -#: templates/dcim/device/inc/interface_table_controls.html:11 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:11 msgid "Hide Virtual" msgstr "" -#: templates/dcim/device/inc/interface_table_controls.html:12 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:12 msgid "Hide Disconnected" msgstr "" -#: templates/dcim/device/interfaces.html:27 +#: netbox/templates/dcim/device/interfaces.html:27 msgid "Add Interfaces" msgstr "" -#: templates/dcim/device/inventory.html:10 -#: templates/dcim/inc/panels/inventory_items.html:10 +#: netbox/templates/dcim/device/inventory.html:10 +#: netbox/templates/dcim/inc/panels/inventory_items.html:10 msgid "Add Inventory Item" msgstr "" -#: templates/dcim/device/modulebays.html:10 +#: netbox/templates/dcim/device/modulebays.html:10 msgid "Add Module Bays" msgstr "" -#: templates/dcim/device/poweroutlets.html:24 +#: netbox/templates/dcim/device/poweroutlets.html:24 msgid "Add Power Outlets" msgstr "" -#: templates/dcim/device/powerports.html:24 +#: netbox/templates/dcim/device/powerports.html:24 msgid "Add Power Port" msgstr "" -#: templates/dcim/device/rearports.html:24 +#: netbox/templates/dcim/device/rearports.html:24 msgid "Add Rear Ports" msgstr "" -#: templates/dcim/device/render_config.html:5 -#: templates/virtualization/virtualmachine/render_config.html:5 +#: netbox/templates/dcim/device/render_config.html:5 +#: netbox/templates/virtualization/virtualmachine/render_config.html:5 msgid "Config" msgstr "" -#: templates/dcim/device/render_config.html:35 -#: templates/virtualization/virtualmachine/render_config.html:35 +#: netbox/templates/dcim/device/render_config.html:35 +#: netbox/templates/virtualization/virtualmachine/render_config.html:35 msgid "Context Data" msgstr "" -#: templates/dcim/device/render_config.html:53 -#: templates/virtualization/virtualmachine/render_config.html:53 +#: netbox/templates/dcim/device/render_config.html:53 +#: netbox/templates/virtualization/virtualmachine/render_config.html:53 msgid "Rendered Config" msgstr "" -#: templates/dcim/device/render_config.html:55 -#: templates/virtualization/virtualmachine/render_config.html:55 +#: netbox/templates/dcim/device/render_config.html:55 +#: netbox/templates/virtualization/virtualmachine/render_config.html:55 msgid "Download" msgstr "" -#: templates/dcim/device/render_config.html:61 -#: templates/virtualization/virtualmachine/render_config.html:61 +#: netbox/templates/dcim/device/render_config.html:61 +#: netbox/templates/virtualization/virtualmachine/render_config.html:61 msgid "No configuration template found" msgstr "" -#: templates/dcim/device_edit.html:44 +#: netbox/templates/dcim/device_edit.html:44 msgid "Parent Bay" msgstr "" -#: templates/dcim/device_edit.html:48 -#: utilities/templates/form_helpers/render_field.html:20 +#: netbox/templates/dcim/device_edit.html:48 +#: netbox/utilities/templates/form_helpers/render_field.html:20 msgid "Regenerate Slug" msgstr "" -#: templates/dcim/device_edit.html:49 templates/generic/bulk_remove.html:21 -#: utilities/templates/helpers/table_config_form.html:23 +#: netbox/templates/dcim/device_edit.html:49 +#: netbox/templates/generic/bulk_remove.html:21 +#: netbox/utilities/templates/helpers/table_config_form.html:23 msgid "Remove" msgstr "" -#: templates/dcim/device_edit.html:110 +#: netbox/templates/dcim/device_edit.html:110 msgid "Local Config Context Data" msgstr "" -#: templates/dcim/device_list.html:82 -#: templates/dcim/moduletype/component_templates.html:17 -#: templates/generic/bulk_rename.html:57 -#: templates/virtualization/virtualmachine/interfaces.html:11 -#: templates/virtualization/virtualmachine/virtual_disks.html:11 +#: netbox/templates/dcim/device_list.html:82 +#: netbox/templates/dcim/moduletype/component_templates.html:17 +#: netbox/templates/generic/bulk_rename.html:57 +#: netbox/templates/virtualization/virtualmachine/interfaces.html:11 +#: netbox/templates/virtualization/virtualmachine/virtual_disks.html:11 msgid "Rename" msgstr "" -#: templates/dcim/devicebay.html:17 +#: netbox/templates/dcim/devicebay.html:17 msgid "Device Bay" msgstr "" -#: templates/dcim/devicebay.html:43 +#: netbox/templates/dcim/devicebay.html:43 msgid "Installed Device" msgstr "" -#: templates/dcim/devicebay_depopulate.html:6 +#: netbox/templates/dcim/devicebay_depopulate.html:6 #, python-format msgid "Remove %(device)s from %(device_bay)s?" msgstr "" -#: templates/dcim/devicebay_depopulate.html:13 +#: netbox/templates/dcim/devicebay_depopulate.html:13 #, python-format msgid "" "Are you sure you want to remove %(device)s from " "%(device_bay)s?" msgstr "" -#: templates/dcim/devicebay_populate.html:13 +#: netbox/templates/dcim/devicebay_populate.html:13 msgid "Populate" msgstr "" -#: templates/dcim/devicebay_populate.html:22 +#: netbox/templates/dcim/devicebay_populate.html:22 msgid "Bay" msgstr "" -#: templates/dcim/devicerole.html:14 templates/dcim/platform.html:17 +#: netbox/templates/dcim/devicerole.html:14 +#: netbox/templates/dcim/platform.html:17 msgid "Add Device" msgstr "" -#: templates/dcim/devicerole.html:40 +#: netbox/templates/dcim/devicerole.html:40 msgid "VM Role" msgstr "" -#: templates/dcim/devicetype.html:18 templates/dcim/moduletype.html:18 +#: netbox/templates/dcim/devicetype.html:18 +#: netbox/templates/dcim/moduletype.html:18 msgid "Model Name" msgstr "" -#: templates/dcim/devicetype.html:25 templates/dcim/moduletype.html:22 +#: netbox/templates/dcim/devicetype.html:25 +#: netbox/templates/dcim/moduletype.html:22 msgid "Part Number" msgstr "" -#: templates/dcim/devicetype.html:41 +#: netbox/templates/dcim/devicetype.html:41 msgid "Exclude From Utilization" msgstr "" -#: templates/dcim/devicetype.html:59 +#: netbox/templates/dcim/devicetype.html:59 msgid "Parent/Child" msgstr "" -#: templates/dcim/devicetype.html:71 +#: netbox/templates/dcim/devicetype.html:71 msgid "Front Image" msgstr "" -#: templates/dcim/devicetype.html:83 +#: netbox/templates/dcim/devicetype.html:83 msgid "Rear Image" msgstr "" -#: templates/dcim/frontport.html:54 +#: netbox/templates/dcim/frontport.html:54 msgid "Rear Port Position" msgstr "" -#: templates/dcim/frontport.html:72 templates/dcim/interface.html:144 -#: templates/dcim/poweroutlet.html:63 templates/dcim/powerport.html:63 -#: templates/dcim/rearport.html:68 +#: netbox/templates/dcim/frontport.html:72 +#: netbox/templates/dcim/interface.html:144 +#: netbox/templates/dcim/poweroutlet.html:63 +#: netbox/templates/dcim/powerport.html:63 +#: netbox/templates/dcim/rearport.html:68 msgid "Marked as Connected" msgstr "" -#: templates/dcim/frontport.html:86 templates/dcim/rearport.html:82 +#: netbox/templates/dcim/frontport.html:86 +#: netbox/templates/dcim/rearport.html:82 msgid "Connection Status" msgstr "" -#: templates/dcim/htmx/cable_edit.html:10 +#: netbox/templates/dcim/htmx/cable_edit.html:10 msgid "A Side" msgstr "" -#: templates/dcim/htmx/cable_edit.html:30 +#: netbox/templates/dcim/htmx/cable_edit.html:30 msgid "B Side" msgstr "" -#: templates/dcim/inc/cable_termination.html:65 +#: netbox/templates/dcim/inc/cable_termination.html:65 msgid "No termination" msgstr "" -#: templates/dcim/inc/cable_toggle_buttons.html:3 +#: netbox/templates/dcim/inc/cable_toggle_buttons.html:3 msgid "Mark Planned" msgstr "" -#: templates/dcim/inc/cable_toggle_buttons.html:6 +#: netbox/templates/dcim/inc/cable_toggle_buttons.html:6 msgid "Mark Installed" msgstr "" -#: templates/dcim/inc/connection_endpoints.html:13 +#: netbox/templates/dcim/inc/connection_endpoints.html:13 msgid "Path Status" msgstr "" -#: templates/dcim/inc/connection_endpoints.html:18 +#: netbox/templates/dcim/inc/connection_endpoints.html:18 msgid "Not Reachable" msgstr "" -#: templates/dcim/inc/connection_endpoints.html:23 +#: netbox/templates/dcim/inc/connection_endpoints.html:23 msgid "Path Endpoints" msgstr "" -#: templates/dcim/inc/endpoint_connection.html:8 -#: templates/dcim/powerfeed.html:120 templates/dcim/rearport.html:94 +#: netbox/templates/dcim/inc/endpoint_connection.html:8 +#: netbox/templates/dcim/powerfeed.html:120 +#: netbox/templates/dcim/rearport.html:94 msgid "Not connected" msgstr "" -#: templates/dcim/inc/interface_vlans_table.html:6 +#: netbox/templates/dcim/inc/interface_vlans_table.html:6 msgid "Untagged" msgstr "" -#: templates/dcim/inc/interface_vlans_table.html:37 +#: netbox/templates/dcim/inc/interface_vlans_table.html:37 msgid "No VLANs Assigned" msgstr "" -#: templates/dcim/inc/interface_vlans_table.html:44 -#: templates/ipam/prefix_list.html:16 templates/ipam/prefix_list.html:33 +#: netbox/templates/dcim/inc/interface_vlans_table.html:44 +#: netbox/templates/ipam/prefix_list.html:16 +#: netbox/templates/ipam/prefix_list.html:33 msgid "Clear" msgstr "" -#: templates/dcim/inc/interface_vlans_table.html:47 +#: netbox/templates/dcim/inc/interface_vlans_table.html:47 msgid "Clear All" msgstr "" -#: templates/dcim/interface.html:17 +#: netbox/templates/dcim/interface.html:17 msgid "Add Child Interface" msgstr "" -#: templates/dcim/interface.html:50 +#: netbox/templates/dcim/interface.html:50 msgid "Speed/Duplex" msgstr "" -#: templates/dcim/interface.html:73 +#: netbox/templates/dcim/interface.html:73 msgid "PoE Mode" msgstr "" -#: templates/dcim/interface.html:77 +#: netbox/templates/dcim/interface.html:77 msgid "PoE Type" msgstr "" -#: templates/dcim/interface.html:81 -#: templates/virtualization/vminterface.html:63 +#: netbox/templates/dcim/interface.html:81 +#: netbox/templates/virtualization/vminterface.html:63 msgid "802.1Q Mode" msgstr "" -#: templates/dcim/interface.html:125 -#: templates/virtualization/vminterface.html:59 +#: netbox/templates/dcim/interface.html:125 +#: netbox/templates/virtualization/vminterface.html:59 msgid "MAC Address" msgstr "" -#: templates/dcim/interface.html:151 +#: netbox/templates/dcim/interface.html:151 msgid "Wireless Link" msgstr "" -#: templates/dcim/interface.html:218 vpn/choices.py:55 +#: netbox/templates/dcim/interface.html:218 netbox/vpn/choices.py:55 msgid "Peer" msgstr "" -#: templates/dcim/interface.html:230 -#: templates/wireless/inc/wirelesslink_interface.html:26 +#: netbox/templates/dcim/interface.html:230 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:26 msgid "Channel" msgstr "" -#: templates/dcim/interface.html:239 -#: templates/wireless/inc/wirelesslink_interface.html:32 +#: netbox/templates/dcim/interface.html:239 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:32 msgid "Channel Frequency" msgstr "" -#: templates/dcim/interface.html:242 templates/dcim/interface.html:250 -#: templates/dcim/interface.html:261 templates/dcim/interface.html:269 +#: netbox/templates/dcim/interface.html:242 +#: netbox/templates/dcim/interface.html:250 +#: netbox/templates/dcim/interface.html:261 +#: netbox/templates/dcim/interface.html:269 msgid "MHz" msgstr "" -#: templates/dcim/interface.html:258 -#: templates/wireless/inc/wirelesslink_interface.html:42 +#: netbox/templates/dcim/interface.html:258 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:42 msgid "Channel Width" msgstr "" -#: templates/dcim/interface.html:285 templates/wireless/wirelesslan.html:14 -#: templates/wireless/wirelesslink.html:21 wireless/forms/bulk_edit.py:60 -#: wireless/forms/bulk_edit.py:102 wireless/forms/filtersets.py:40 -#: wireless/forms/filtersets.py:80 wireless/models.py:81 wireless/models.py:155 -#: wireless/tables/wirelesslan.py:44 +#: netbox/templates/dcim/interface.html:285 +#: netbox/templates/wireless/wirelesslan.html:14 +#: netbox/templates/wireless/wirelesslink.html:21 +#: netbox/wireless/forms/bulk_edit.py:60 netbox/wireless/forms/bulk_edit.py:102 +#: netbox/wireless/forms/filtersets.py:40 +#: netbox/wireless/forms/filtersets.py:80 netbox/wireless/models.py:81 +#: netbox/wireless/models.py:155 netbox/wireless/tables/wirelesslan.py:44 msgid "SSID" msgstr "" -#: templates/dcim/interface.html:305 +#: netbox/templates/dcim/interface.html:305 msgid "LAG Members" msgstr "" -#: templates/dcim/interface.html:323 +#: netbox/templates/dcim/interface.html:323 msgid "No member interfaces" msgstr "" -#: templates/dcim/interface.html:343 templates/ipam/fhrpgroup.html:73 -#: templates/ipam/iprange/ip_addresses.html:7 -#: templates/ipam/prefix/ip_addresses.html:7 -#: templates/virtualization/vminterface.html:89 +#: netbox/templates/dcim/interface.html:343 +#: netbox/templates/ipam/fhrpgroup.html:73 +#: netbox/templates/ipam/iprange/ip_addresses.html:7 +#: netbox/templates/ipam/prefix/ip_addresses.html:7 +#: netbox/templates/virtualization/vminterface.html:89 msgid "Add IP Address" msgstr "" -#: templates/dcim/inventoryitem.html:24 +#: netbox/templates/dcim/inventoryitem.html:24 msgid "Parent Item" msgstr "" -#: templates/dcim/inventoryitem.html:48 +#: netbox/templates/dcim/inventoryitem.html:48 msgid "Part ID" msgstr "" -#: templates/dcim/location.html:17 +#: netbox/templates/dcim/location.html:17 msgid "Add Child Location" msgstr "" -#: templates/dcim/location.html:58 templates/dcim/site.html:55 +#: netbox/templates/dcim/location.html:58 netbox/templates/dcim/site.html:56 msgid "Facility" msgstr "" -#: templates/dcim/location.html:77 +#: netbox/templates/dcim/location.html:77 msgid "Child Locations" msgstr "" -#: templates/dcim/location.html:81 templates/dcim/site.html:130 +#: netbox/templates/dcim/location.html:81 netbox/templates/dcim/site.html:131 msgid "Add a Location" msgstr "" -#: templates/dcim/location.html:94 templates/dcim/site.html:143 +#: netbox/templates/dcim/location.html:94 netbox/templates/dcim/site.html:144 msgid "Add a Device" msgstr "" -#: templates/dcim/manufacturer.html:16 +#: netbox/templates/dcim/manufacturer.html:16 msgid "Add Device Type" msgstr "" -#: templates/dcim/manufacturer.html:21 +#: netbox/templates/dcim/manufacturer.html:21 msgid "Add Module Type" msgstr "" -#: templates/dcim/powerfeed.html:53 +#: netbox/templates/dcim/powerfeed.html:53 msgid "Connected Device" msgstr "" -#: templates/dcim/powerfeed.html:63 +#: netbox/templates/dcim/powerfeed.html:63 msgid "Utilization (Allocated" msgstr "" -#: templates/dcim/powerfeed.html:80 +#: netbox/templates/dcim/powerfeed.html:80 msgid "Electrical Characteristics" msgstr "" -#: templates/dcim/powerfeed.html:88 +#: netbox/templates/dcim/powerfeed.html:88 msgctxt "Abbreviation for volts" msgid "V" msgstr "" -#: templates/dcim/powerfeed.html:92 +#: netbox/templates/dcim/powerfeed.html:92 msgctxt "Abbreviation for amperes" msgid "A" msgstr "" -#: templates/dcim/poweroutlet.html:48 +#: netbox/templates/dcim/poweroutlet.html:48 msgid "Feed Leg" msgstr "" -#: templates/dcim/powerpanel.html:72 +#: netbox/templates/dcim/powerpanel.html:72 msgid "Add Power Feeds" msgstr "" -#: templates/dcim/powerport.html:44 +#: netbox/templates/dcim/powerport.html:44 msgid "Maximum Draw" msgstr "" -#: templates/dcim/powerport.html:48 +#: netbox/templates/dcim/powerport.html:48 msgid "Allocated Draw" msgstr "" -#: templates/dcim/rack.html:63 +#: netbox/templates/dcim/rack.html:63 msgid "Space Utilization" msgstr "" -#: templates/dcim/rack.html:91 +#: netbox/templates/dcim/rack.html:91 msgid "descending" msgstr "" -#: templates/dcim/rack.html:91 +#: netbox/templates/dcim/rack.html:91 msgid "ascending" msgstr "" -#: templates/dcim/rack.html:94 +#: netbox/templates/dcim/rack.html:94 msgid "Starting Unit" msgstr "" -#: templates/dcim/rack.html:120 +#: netbox/templates/dcim/rack.html:120 msgid "Mounting Depth" msgstr "" -#: templates/dcim/rack.html:130 +#: netbox/templates/dcim/rack.html:130 msgid "Rack Weight" msgstr "" -#: templates/dcim/rack.html:140 +#: netbox/templates/dcim/rack.html:140 msgid "Maximum Weight" msgstr "" -#: templates/dcim/rack.html:150 +#: netbox/templates/dcim/rack.html:150 msgid "Total Weight" msgstr "" -#: templates/dcim/rack.html:167 templates/dcim/rack_elevation_list.html:15 +#: netbox/templates/dcim/rack.html:167 +#: netbox/templates/dcim/rack_elevation_list.html:15 msgid "Images and Labels" msgstr "" -#: templates/dcim/rack.html:168 templates/dcim/rack_elevation_list.html:16 +#: netbox/templates/dcim/rack.html:168 +#: netbox/templates/dcim/rack_elevation_list.html:16 msgid "Images only" msgstr "" -#: templates/dcim/rack.html:169 templates/dcim/rack_elevation_list.html:17 +#: netbox/templates/dcim/rack.html:169 +#: netbox/templates/dcim/rack_elevation_list.html:17 msgid "Labels only" msgstr "" -#: templates/dcim/rack/reservations.html:8 +#: netbox/templates/dcim/rack/reservations.html:8 msgid "Add reservation" msgstr "" -#: templates/dcim/rack_elevation_list.html:12 +#: netbox/templates/dcim/rack_elevation_list.html:12 msgid "View List" msgstr "" -#: templates/dcim/rack_elevation_list.html:25 +#: netbox/templates/dcim/rack_elevation_list.html:25 msgid "Sort By" msgstr "" -#: templates/dcim/rack_elevation_list.html:74 +#: netbox/templates/dcim/rack_elevation_list.html:74 msgid "No Racks Found" msgstr "" -#: templates/dcim/rack_list.html:8 +#: netbox/templates/dcim/rack_list.html:8 msgid "View Elevations" msgstr "" -#: templates/dcim/rackreservation.html:42 +#: netbox/templates/dcim/rackreservation.html:42 msgid "Reservation Details" msgstr "" -#: templates/dcim/rackrole.html:10 +#: netbox/templates/dcim/rackrole.html:10 msgid "Add Rack" msgstr "" -#: templates/dcim/rearport.html:50 +#: netbox/templates/dcim/rearport.html:50 msgid "Positions" msgstr "" -#: templates/dcim/region.html:17 templates/dcim/sitegroup.html:17 +#: netbox/templates/dcim/region.html:17 netbox/templates/dcim/sitegroup.html:17 msgid "Add Site" msgstr "" -#: templates/dcim/region.html:55 +#: netbox/templates/dcim/region.html:55 msgid "Child Regions" msgstr "" -#: templates/dcim/region.html:59 +#: netbox/templates/dcim/region.html:59 msgid "Add Region" msgstr "" -#: templates/dcim/site.html:63 +#: netbox/templates/dcim/site.html:64 msgid "Time Zone" msgstr "" -#: templates/dcim/site.html:66 +#: netbox/templates/dcim/site.html:67 msgid "UTC" msgstr "" -#: templates/dcim/site.html:67 +#: netbox/templates/dcim/site.html:68 msgid "Site time" msgstr "" -#: templates/dcim/site.html:74 +#: netbox/templates/dcim/site.html:75 msgid "Physical Address" msgstr "" -#: templates/dcim/site.html:80 +#: netbox/templates/dcim/site.html:81 msgid "Map" msgstr "" -#: templates/dcim/site.html:89 +#: netbox/templates/dcim/site.html:90 msgid "Shipping Address" msgstr "" -#: templates/dcim/sitegroup.html:55 templates/tenancy/contactgroup.html:46 -#: templates/tenancy/tenantgroup.html:55 -#: templates/wireless/wirelesslangroup.html:55 +#: netbox/templates/dcim/sitegroup.html:55 +#: netbox/templates/tenancy/contactgroup.html:46 +#: netbox/templates/tenancy/tenantgroup.html:55 +#: netbox/templates/wireless/wirelesslangroup.html:55 msgid "Child Groups" msgstr "" -#: templates/dcim/sitegroup.html:59 +#: netbox/templates/dcim/sitegroup.html:59 msgid "Add Site Group" msgstr "" -#: templates/dcim/trace/attachment.html:5 -#: templates/extras/exporttemplate.html:31 +#: netbox/templates/dcim/trace/attachment.html:5 +#: netbox/templates/extras/exporttemplate.html:31 msgid "Attachment" msgstr "" -#: templates/dcim/virtualchassis.html:57 +#: netbox/templates/dcim/virtualchassis.html:57 msgid "Add Member" msgstr "" -#: templates/dcim/virtualchassis_add.html:18 +#: netbox/templates/dcim/virtualchassis_add.html:18 msgid "Member Devices" msgstr "" -#: templates/dcim/virtualchassis_add_member.html:10 +#: netbox/templates/dcim/virtualchassis_add_member.html:10 #, python-format msgid "Add New Member to Virtual Chassis %(virtual_chassis)s" msgstr "" -#: templates/dcim/virtualchassis_add_member.html:19 +#: netbox/templates/dcim/virtualchassis_add_member.html:19 msgid "Add New Member" msgstr "" -#: templates/dcim/virtualchassis_add_member.html:27 -#: templates/generic/object_edit.html:78 -#: templates/users/objectpermission.html:31 users/forms/filtersets.py:68 -#: users/forms/model_forms.py:309 +#: netbox/templates/dcim/virtualchassis_add_member.html:27 +#: netbox/templates/generic/object_edit.html:78 +#: netbox/templates/users/objectpermission.html:31 +#: netbox/users/forms/filtersets.py:68 netbox/users/forms/model_forms.py:309 msgid "Actions" msgstr "" -#: templates/dcim/virtualchassis_add_member.html:29 +#: netbox/templates/dcim/virtualchassis_add_member.html:29 msgid "Save & Add Another" msgstr "" -#: templates/dcim/virtualchassis_edit.html:7 +#: netbox/templates/dcim/virtualchassis_edit.html:7 #, python-format msgid "Editing Virtual Chassis %(name)s" msgstr "" -#: templates/dcim/virtualchassis_edit.html:53 +#: netbox/templates/dcim/virtualchassis_edit.html:53 msgid "Rack/Unit" msgstr "" -#: templates/dcim/virtualchassis_remove_member.html:5 +#: netbox/templates/dcim/virtualchassis_remove_member.html:5 msgid "Remove Virtual Chassis Member" msgstr "" -#: templates/dcim/virtualchassis_remove_member.html:9 +#: netbox/templates/dcim/virtualchassis_remove_member.html:9 #, python-format msgid "" "Are you sure you want to remove %(device)s from virtual " "chassis %(name)s?" msgstr "" -#: templates/dcim/virtualdevicecontext.html:26 templates/vpn/l2vpn.html:18 +#: netbox/templates/dcim/virtualdevicecontext.html:26 +#: netbox/templates/vpn/l2vpn.html:18 msgid "Identifier" msgstr "" -#: templates/exceptions/import_error.html:6 +#: netbox/templates/exceptions/import_error.html:6 msgid "" "A module import error occurred during this request. Common causes include " "the following:" msgstr "" -#: templates/exceptions/import_error.html:10 +#: netbox/templates/exceptions/import_error.html:10 msgid "Missing required packages" msgstr "" -#: templates/exceptions/import_error.html:11 +#: netbox/templates/exceptions/import_error.html:11 msgid "" "This installation of NetBox might be missing one or more required Python " "packages. These packages are listed in requirements.txt and " @@ -11421,28 +12034,28 @@ msgid "" "of required packages." msgstr "" -#: templates/exceptions/import_error.html:20 +#: netbox/templates/exceptions/import_error.html:20 msgid "WSGI service not restarted after upgrade" msgstr "" -#: templates/exceptions/import_error.html:21 +#: netbox/templates/exceptions/import_error.html:21 msgid "" "If this installation has recently been upgraded, check that the WSGI service " "(e.g. gunicorn or uWSGI) has been restarted. This ensures that the new code " "is running." msgstr "" -#: templates/exceptions/permission_error.html:6 +#: netbox/templates/exceptions/permission_error.html:6 msgid "" "A file permission error was detected while processing this request. Common " "causes include the following:" msgstr "" -#: templates/exceptions/permission_error.html:10 +#: netbox/templates/exceptions/permission_error.html:10 msgid "Insufficient write permission to the media root" msgstr "" -#: templates/exceptions/permission_error.html:11 +#: netbox/templates/exceptions/permission_error.html:11 #, python-format msgid "" "The configured media root is %(media_root)s. Ensure that the " @@ -11450,410 +12063,415 @@ msgid "" "path." msgstr "" -#: templates/exceptions/programming_error.html:6 +#: netbox/templates/exceptions/programming_error.html:6 msgid "" "A database programming error was detected while processing this request. " "Common causes include the following:" msgstr "" -#: templates/exceptions/programming_error.html:10 +#: netbox/templates/exceptions/programming_error.html:10 msgid "Database migrations missing" msgstr "" -#: templates/exceptions/programming_error.html:11 +#: netbox/templates/exceptions/programming_error.html:11 msgid "" "When upgrading to a new NetBox release, the upgrade script must be run to " "apply any new database migrations. You can run migrations manually by " "executing python3 manage.py migrate from the command line." msgstr "" -#: templates/exceptions/programming_error.html:18 +#: netbox/templates/exceptions/programming_error.html:18 msgid "Unsupported PostgreSQL version" msgstr "" -#: templates/exceptions/programming_error.html:19 +#: netbox/templates/exceptions/programming_error.html:19 msgid "" "Ensure that PostgreSQL version 12 or later is in use. You can check this by " "connecting to the database using NetBox's credentials and issuing a query " "for SELECT VERSION()." msgstr "" -#: templates/extras/configcontext.html:45 -#: templates/extras/configtemplate.html:37 -#: templates/extras/exporttemplate.html:51 +#: netbox/templates/extras/configcontext.html:45 +#: netbox/templates/extras/configtemplate.html:37 +#: netbox/templates/extras/exporttemplate.html:51 msgid "The data file associated with this object has been deleted" msgstr "" -#: templates/extras/configcontext.html:54 -#: templates/extras/configtemplate.html:46 -#: templates/extras/exporttemplate.html:60 +#: netbox/templates/extras/configcontext.html:54 +#: netbox/templates/extras/configtemplate.html:46 +#: netbox/templates/extras/exporttemplate.html:60 msgid "Data Synced" msgstr "" -#: templates/extras/configcontext_list.html:7 -#: templates/extras/configtemplate_list.html:7 -#: templates/extras/exporttemplate_list.html:7 +#: netbox/templates/extras/configcontext_list.html:7 +#: netbox/templates/extras/configtemplate_list.html:7 +#: netbox/templates/extras/exporttemplate_list.html:7 msgid "Sync Data" msgstr "" -#: templates/extras/configtemplate.html:56 +#: netbox/templates/extras/configtemplate.html:56 msgid "Environment Parameters" msgstr "" -#: templates/extras/configtemplate.html:67 -#: templates/extras/exporttemplate.html:79 +#: netbox/templates/extras/configtemplate.html:67 +#: netbox/templates/extras/exporttemplate.html:79 msgid "Template" msgstr "" -#: templates/extras/customfield.html:30 templates/extras/customlink.html:21 +#: netbox/templates/extras/customfield.html:30 +#: netbox/templates/extras/customlink.html:21 msgid "Group Name" msgstr "" -#: templates/extras/customfield.html:42 +#: netbox/templates/extras/customfield.html:42 msgid "Cloneable" msgstr "" -#: templates/extras/customfield.html:52 +#: netbox/templates/extras/customfield.html:52 msgid "Default Value" msgstr "" -#: templates/extras/customfield.html:61 +#: netbox/templates/extras/customfield.html:61 msgid "Search Weight" msgstr "" -#: templates/extras/customfield.html:71 +#: netbox/templates/extras/customfield.html:71 msgid "Filter Logic" msgstr "" -#: templates/extras/customfield.html:75 +#: netbox/templates/extras/customfield.html:75 msgid "Display Weight" msgstr "" -#: templates/extras/customfield.html:79 +#: netbox/templates/extras/customfield.html:79 msgid "UI Visible" msgstr "" -#: templates/extras/customfield.html:83 +#: netbox/templates/extras/customfield.html:83 msgid "UI Editable" msgstr "" -#: templates/extras/customfield.html:103 +#: netbox/templates/extras/customfield.html:103 msgid "Validation Rules" msgstr "" -#: templates/extras/customfield.html:106 +#: netbox/templates/extras/customfield.html:106 msgid "Minimum Value" msgstr "" -#: templates/extras/customfield.html:110 +#: netbox/templates/extras/customfield.html:110 msgid "Maximum Value" msgstr "" -#: templates/extras/customfield.html:114 +#: netbox/templates/extras/customfield.html:114 msgid "Regular Expression" msgstr "" -#: templates/extras/customlink.html:29 +#: netbox/templates/extras/customlink.html:29 msgid "Button Class" msgstr "" -#: templates/extras/customlink.html:39 templates/extras/exporttemplate.html:66 -#: templates/extras/savedfilter.html:39 +#: netbox/templates/extras/customlink.html:39 +#: netbox/templates/extras/exporttemplate.html:66 +#: netbox/templates/extras/savedfilter.html:39 msgid "Assigned Models" msgstr "" -#: templates/extras/customlink.html:53 +#: netbox/templates/extras/customlink.html:53 msgid "Link Text" msgstr "" -#: templates/extras/customlink.html:61 +#: netbox/templates/extras/customlink.html:61 msgid "Link URL" msgstr "" -#: templates/extras/dashboard/reset.html:4 templates/home.html:66 +#: netbox/templates/extras/dashboard/reset.html:4 netbox/templates/home.html:66 msgid "Reset Dashboard" msgstr "" -#: templates/extras/dashboard/reset.html:8 +#: netbox/templates/extras/dashboard/reset.html:8 msgid "" "This will remove all configured widgets and restore the " "default dashboard configuration." msgstr "" -#: templates/extras/dashboard/reset.html:13 +#: netbox/templates/extras/dashboard/reset.html:13 msgid "" "This change affects only your dashboard, and will not impact other " "users." msgstr "" -#: templates/extras/dashboard/widget_add.html:7 +#: netbox/templates/extras/dashboard/widget_add.html:7 msgid "Add a Widget" msgstr "" -#: templates/extras/dashboard/widgets/bookmarks.html:14 +#: netbox/templates/extras/dashboard/widgets/bookmarks.html:14 msgid "No bookmarks have been added yet." msgstr "" -#: templates/extras/dashboard/widgets/objectcounts.html:10 +#: netbox/templates/extras/dashboard/widgets/objectcounts.html:10 msgid "No permission" msgstr "" -#: templates/extras/dashboard/widgets/objectlist.html:6 +#: netbox/templates/extras/dashboard/widgets/objectlist.html:6 msgid "No permission to view this content" msgstr "" -#: templates/extras/dashboard/widgets/objectlist.html:10 +#: netbox/templates/extras/dashboard/widgets/objectlist.html:10 msgid "Unable to load content. Invalid view name" msgstr "" -#: templates/extras/dashboard/widgets/rssfeed.html:12 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:12 msgid "No content found" msgstr "" -#: templates/extras/dashboard/widgets/rssfeed.html:18 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:18 msgid "There was a problem fetching the RSS feed" msgstr "" -#: templates/extras/dashboard/widgets/rssfeed.html:21 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:21 msgid "HTTP" msgstr "" -#: templates/extras/eventrule.html:52 +#: netbox/templates/extras/eventrule.html:52 msgid "Job start" msgstr "" -#: templates/extras/eventrule.html:56 +#: netbox/templates/extras/eventrule.html:56 msgid "Job end" msgstr "" -#: templates/extras/exporttemplate.html:23 +#: netbox/templates/extras/exporttemplate.html:23 msgid "MIME Type" msgstr "" -#: templates/extras/exporttemplate.html:27 +#: netbox/templates/extras/exporttemplate.html:27 msgid "File Extension" msgstr "" -#: templates/extras/htmx/script_result.html:10 +#: netbox/templates/extras/htmx/script_result.html:10 msgid "Scheduled for" msgstr "" -#: templates/extras/htmx/script_result.html:15 +#: netbox/templates/extras/htmx/script_result.html:15 msgid "Duration" msgstr "" -#: templates/extras/htmx/script_result.html:23 +#: netbox/templates/extras/htmx/script_result.html:23 msgid "Test Summary" msgstr "" -#: templates/extras/htmx/script_result.html:43 +#: netbox/templates/extras/htmx/script_result.html:43 msgid "Log" msgstr "" -#: templates/extras/htmx/script_result.html:52 +#: netbox/templates/extras/htmx/script_result.html:52 msgid "Output" msgstr "" -#: templates/extras/inc/result_pending.html:4 +#: netbox/templates/extras/inc/result_pending.html:4 msgid "Loading" msgstr "" -#: templates/extras/inc/result_pending.html:6 +#: netbox/templates/extras/inc/result_pending.html:6 msgid "Results pending" msgstr "" -#: templates/extras/journalentry.html:15 +#: netbox/templates/extras/journalentry.html:15 msgid "Journal Entry" msgstr "" -#: templates/extras/object_changelog.html:15 -#: templates/extras/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 +#: netbox/templates/extras/objectchange_list.html:9 msgid "Change log retention" msgstr "" -#: templates/extras/object_changelog.html:15 -#: templates/extras/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 +#: netbox/templates/extras/objectchange_list.html:9 msgid "days" msgstr "" -#: templates/extras/object_changelog.html:15 -#: templates/extras/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 +#: netbox/templates/extras/objectchange_list.html:9 msgid "Indefinite" msgstr "" -#: templates/extras/object_configcontext.html:19 +#: netbox/templates/extras/object_configcontext.html:19 msgid "The local config context overwrites all source contexts" msgstr "" -#: templates/extras/object_configcontext.html:25 +#: netbox/templates/extras/object_configcontext.html:25 msgid "Source Contexts" msgstr "" -#: templates/extras/object_journal.html:17 +#: netbox/templates/extras/object_journal.html:17 msgid "New Journal Entry" msgstr "" -#: templates/extras/objectchange.html:28 -#: templates/users/objectpermission.html:42 +#: netbox/templates/extras/objectchange.html:28 +#: netbox/templates/users/objectpermission.html:42 msgid "Change" msgstr "" -#: templates/extras/objectchange.html:78 +#: netbox/templates/extras/objectchange.html:78 msgid "Difference" msgstr "" -#: templates/extras/objectchange.html:81 +#: netbox/templates/extras/objectchange.html:81 msgid "Previous" msgstr "" -#: templates/extras/objectchange.html:84 +#: netbox/templates/extras/objectchange.html:84 msgid "Next" msgstr "" -#: templates/extras/objectchange.html:92 +#: netbox/templates/extras/objectchange.html:92 msgid "Object Created" msgstr "" -#: templates/extras/objectchange.html:94 +#: netbox/templates/extras/objectchange.html:94 msgid "Object Deleted" msgstr "" -#: templates/extras/objectchange.html:96 +#: netbox/templates/extras/objectchange.html:96 msgid "No Changes" msgstr "" -#: templates/extras/objectchange.html:110 +#: netbox/templates/extras/objectchange.html:110 msgid "Pre-Change Data" msgstr "" -#: templates/extras/objectchange.html:121 +#: netbox/templates/extras/objectchange.html:121 msgid "Warning: Comparing non-atomic change to previous change record" msgstr "" -#: templates/extras/objectchange.html:130 +#: netbox/templates/extras/objectchange.html:130 msgid "Post-Change Data" msgstr "" -#: templates/extras/objectchange.html:153 +#: netbox/templates/extras/objectchange.html:153 #, python-format msgid "See All %(count)s Changes" msgstr "" -#: templates/extras/report/base.html:30 +#: netbox/templates/extras/report/base.html:30 msgid "Report" msgstr "" -#: templates/extras/script.html:14 +#: netbox/templates/extras/script.html:14 msgid "You do not have permission to run scripts" msgstr "" -#: templates/extras/script.html:41 templates/extras/script.html:45 -#: templates/extras/script_list.html:88 +#: netbox/templates/extras/script.html:41 +#: netbox/templates/extras/script.html:45 +#: netbox/templates/extras/script_list.html:88 msgid "Run Script" msgstr "" -#: templates/extras/script.html:51 templates/extras/script/source.html:10 +#: netbox/templates/extras/script.html:51 +#: netbox/templates/extras/script/source.html:10 msgid "Error loading script" msgstr "" -#: templates/extras/script/jobs.html:16 +#: netbox/templates/extras/script/jobs.html:16 msgid "Script no longer exists in the source file." msgstr "" -#: templates/extras/script_list.html:48 +#: netbox/templates/extras/script_list.html:48 msgid "Last Run" msgstr "" -#: templates/extras/script_list.html:63 +#: netbox/templates/extras/script_list.html:63 msgid "Script is no longer present in the source file" msgstr "" -#: templates/extras/script_list.html:76 +#: netbox/templates/extras/script_list.html:76 msgid "Never" msgstr "" -#: templates/extras/script_list.html:86 +#: netbox/templates/extras/script_list.html:86 msgid "Run Again" msgstr "" -#: templates/extras/script_list.html:140 +#: netbox/templates/extras/script_list.html:140 msgid "No Scripts Found" msgstr "" -#: templates/extras/script_list.html:143 +#: netbox/templates/extras/script_list.html:143 #, python-format msgid "" "Get started by creating a script from " "an uploaded file or data source." msgstr "" -#: templates/extras/script_result.html:35 templates/generic/object_list.html:50 -#: templates/search.html:13 +#: netbox/templates/extras/script_result.html:35 +#: netbox/templates/generic/object_list.html:50 netbox/templates/search.html:13 msgid "Results" msgstr "" -#: templates/extras/tag.html:32 +#: netbox/templates/extras/tag.html:32 msgid "Tagged Items" msgstr "" -#: templates/extras/tag.html:43 +#: netbox/templates/extras/tag.html:43 msgid "Allowed Object Types" msgstr "" -#: templates/extras/tag.html:51 +#: netbox/templates/extras/tag.html:51 msgid "Any" msgstr "" -#: templates/extras/tag.html:57 +#: netbox/templates/extras/tag.html:57 msgid "Tagged Item Types" msgstr "" -#: templates/extras/tag.html:81 +#: netbox/templates/extras/tag.html:81 msgid "Tagged Objects" msgstr "" -#: templates/extras/webhook.html:26 +#: netbox/templates/extras/webhook.html:26 msgid "HTTP Method" msgstr "" -#: templates/extras/webhook.html:34 +#: netbox/templates/extras/webhook.html:34 msgid "HTTP Content Type" msgstr "" -#: templates/extras/webhook.html:47 +#: netbox/templates/extras/webhook.html:47 msgid "SSL Verification" msgstr "" -#: templates/extras/webhook.html:61 +#: netbox/templates/extras/webhook.html:61 msgid "Additional Headers" msgstr "" -#: templates/extras/webhook.html:73 +#: netbox/templates/extras/webhook.html:73 msgid "Body Template" msgstr "" -#: templates/generic/bulk_add_component.html:29 +#: netbox/templates/generic/bulk_add_component.html:29 msgid "Bulk Creation" msgstr "" -#: templates/generic/bulk_add_component.html:34 -#: templates/generic/bulk_delete.html:32 templates/generic/bulk_edit.html:33 +#: netbox/templates/generic/bulk_add_component.html:34 +#: netbox/templates/generic/bulk_delete.html:32 +#: netbox/templates/generic/bulk_edit.html:33 msgid "Selected Objects" msgstr "" -#: templates/generic/bulk_add_component.html:58 +#: netbox/templates/generic/bulk_add_component.html:58 msgid "to Add" msgstr "" -#: templates/generic/bulk_delete.html:27 +#: netbox/templates/generic/bulk_delete.html:27 msgid "Bulk Delete" msgstr "" -#: templates/generic/bulk_delete.html:49 +#: netbox/templates/generic/bulk_delete.html:49 msgid "Confirm Bulk Deletion" msgstr "" -#: templates/generic/bulk_delete.html:50 +#: netbox/templates/generic/bulk_delete.html:50 #, python-format msgid "" "The following operation will delete %(count)s " @@ -11861,75 +12479,78 @@ msgid "" "this action." msgstr "" -#: templates/generic/bulk_edit.html:21 templates/generic/object_edit.html:22 +#: netbox/templates/generic/bulk_edit.html:21 +#: netbox/templates/generic/object_edit.html:22 msgid "Editing" msgstr "" -#: templates/generic/bulk_edit.html:28 +#: netbox/templates/generic/bulk_edit.html:28 msgid "Bulk Edit" msgstr "" -#: templates/generic/bulk_edit.html:107 templates/generic/bulk_rename.html:66 +#: netbox/templates/generic/bulk_edit.html:107 +#: netbox/templates/generic/bulk_rename.html:66 msgid "Apply" msgstr "" -#: templates/generic/bulk_import.html:19 +#: netbox/templates/generic/bulk_import.html:19 msgid "Bulk Import" msgstr "" -#: templates/generic/bulk_import.html:25 +#: netbox/templates/generic/bulk_import.html:25 msgid "Direct Import" msgstr "" -#: templates/generic/bulk_import.html:30 +#: netbox/templates/generic/bulk_import.html:30 msgid "Upload File" msgstr "" -#: templates/generic/bulk_import.html:58 templates/generic/bulk_import.html:80 -#: templates/generic/bulk_import.html:102 +#: netbox/templates/generic/bulk_import.html:58 +#: netbox/templates/generic/bulk_import.html:80 +#: netbox/templates/generic/bulk_import.html:102 msgid "Submit" msgstr "" -#: templates/generic/bulk_import.html:113 +#: netbox/templates/generic/bulk_import.html:113 msgid "Field Options" msgstr "" -#: templates/generic/bulk_import.html:119 +#: netbox/templates/generic/bulk_import.html:119 msgid "Accessor" msgstr "" -#: templates/generic/bulk_import.html:161 +#: netbox/templates/generic/bulk_import.html:161 msgid "Import Value" msgstr "" -#: templates/generic/bulk_import.html:181 +#: netbox/templates/generic/bulk_import.html:181 msgid "Format: YYYY-MM-DD" msgstr "" -#: templates/generic/bulk_import.html:183 +#: netbox/templates/generic/bulk_import.html:183 msgid "Specify true or false" msgstr "" -#: templates/generic/bulk_import.html:195 +#: netbox/templates/generic/bulk_import.html:195 msgid "Required fields must be specified for all objects." msgstr "" -#: templates/generic/bulk_import.html:201 +#: netbox/templates/generic/bulk_import.html:201 #, python-format msgid "" "Related objects may be referenced by any unique attribute. For example, " "%(example)s would identify a VRF by its route distinguisher." msgstr "" -#: templates/generic/bulk_remove.html:28 +#: netbox/templates/generic/bulk_remove.html:28 msgid "Bulk Remove" msgstr "" -#: templates/generic/bulk_remove.html:42 +#: netbox/templates/generic/bulk_remove.html:42 msgid "Confirm Bulk Removal" msgstr "" -#: templates/generic/bulk_remove.html:43 +#: netbox/templates/generic/bulk_remove.html:43 #, python-format msgid "" "The following operation will remove %(count)s %(obj_type_plural)s from " @@ -11937,416 +12558,418 @@ msgid "" "removed and confirm below." msgstr "" -#: templates/generic/bulk_remove.html:64 +#: netbox/templates/generic/bulk_remove.html:64 #, python-format msgid "Remove these %(count)s %(obj_type_plural)s" msgstr "" -#: templates/generic/bulk_rename.html:20 +#: netbox/templates/generic/bulk_rename.html:20 msgid "Renaming" msgstr "" -#: templates/generic/bulk_rename.html:27 +#: netbox/templates/generic/bulk_rename.html:27 msgid "Bulk Rename" msgstr "" -#: templates/generic/bulk_rename.html:39 +#: netbox/templates/generic/bulk_rename.html:39 msgid "Current Name" msgstr "" -#: templates/generic/bulk_rename.html:40 +#: netbox/templates/generic/bulk_rename.html:40 msgid "New Name" msgstr "" -#: templates/generic/bulk_rename.html:64 -#: utilities/templates/widgets/markdown_input.html:11 +#: netbox/templates/generic/bulk_rename.html:64 +#: netbox/utilities/templates/widgets/markdown_input.html:11 msgid "Preview" msgstr "" -#: templates/generic/confirmation_form.html:16 +#: netbox/templates/generic/confirmation_form.html:16 msgid "Are you sure" msgstr "" -#: templates/generic/confirmation_form.html:20 +#: netbox/templates/generic/confirmation_form.html:20 msgid "Confirm" msgstr "" -#: templates/generic/object_children.html:47 -#: utilities/templates/buttons/bulk_edit.html:4 +#: netbox/templates/generic/object_children.html:47 +#: netbox/utilities/templates/buttons/bulk_edit.html:4 msgid "Edit Selected" msgstr "" -#: templates/generic/object_children.html:61 -#: utilities/templates/buttons/bulk_delete.html:4 +#: netbox/templates/generic/object_children.html:61 +#: netbox/utilities/templates/buttons/bulk_delete.html:4 msgid "Delete Selected" msgstr "" -#: templates/generic/object_edit.html:24 +#: netbox/templates/generic/object_edit.html:24 #, python-format msgid "Add a new %(object_type)s" msgstr "" -#: templates/generic/object_edit.html:35 +#: netbox/templates/generic/object_edit.html:35 msgid "View model documentation" msgstr "" -#: templates/generic/object_edit.html:36 +#: netbox/templates/generic/object_edit.html:36 msgid "Help" msgstr "" -#: templates/generic/object_edit.html:83 +#: netbox/templates/generic/object_edit.html:83 msgid "Create & Add Another" msgstr "" -#: templates/generic/object_list.html:57 +#: netbox/templates/generic/object_list.html:57 msgid "Filters" msgstr "" -#: templates/generic/object_list.html:96 +#: netbox/templates/generic/object_list.html:96 #, python-format msgid "" "Select all %(count)s " "%(object_type_plural)s matching query" msgstr "" -#: templates/home.html:15 +#: netbox/templates/home.html:15 msgid "New Release Available" msgstr "" -#: templates/home.html:16 +#: netbox/templates/home.html:16 msgid "is available" msgstr "" -#: templates/home.html:18 +#: netbox/templates/home.html:18 msgctxt "Document title" msgid "Upgrade Instructions" msgstr "" -#: templates/home.html:40 +#: netbox/templates/home.html:40 msgid "Unlock Dashboard" msgstr "" -#: templates/home.html:49 +#: netbox/templates/home.html:49 msgid "Lock Dashboard" msgstr "" -#: templates/home.html:60 +#: netbox/templates/home.html:60 msgid "Add Widget" msgstr "" -#: templates/home.html:63 +#: netbox/templates/home.html:63 msgid "Save Layout" msgstr "" -#: templates/htmx/delete_form.html:7 +#: netbox/templates/htmx/delete_form.html:7 msgid "Confirm Deletion" msgstr "" -#: templates/htmx/delete_form.html:11 +#: netbox/templates/htmx/delete_form.html:11 #, python-format msgid "" "Are you sure you want to delete " "%(object_type)s %(object)s?" msgstr "" -#: templates/htmx/delete_form.html:17 +#: netbox/templates/htmx/delete_form.html:17 msgid "The following objects will be deleted as a result of this action." msgstr "" -#: templates/htmx/object_selector.html:5 +#: netbox/templates/htmx/object_selector.html:5 msgid "Select" msgstr "" -#: templates/inc/filter_list.html:42 -#: utilities/templates/helpers/table_config_form.html:39 +#: netbox/templates/inc/filter_list.html:42 +#: netbox/utilities/templates/helpers/table_config_form.html:39 msgid "Reset" msgstr "" -#: templates/inc/missing_prerequisites.html:8 +#: netbox/templates/inc/missing_prerequisites.html:8 #, python-format msgid "" "Before you can add a %(model)s you must first create a " "%(prerequisite_model)s." msgstr "" -#: templates/inc/paginator.html:15 +#: netbox/templates/inc/paginator.html:15 msgid "Page selection" msgstr "" -#: templates/inc/paginator.html:75 +#: netbox/templates/inc/paginator.html:75 #, python-format msgid "Showing %(start)s-%(end)s of %(total)s" msgstr "" -#: templates/inc/paginator.html:82 +#: netbox/templates/inc/paginator.html:82 msgid "Pagination options" msgstr "" -#: templates/inc/paginator.html:86 +#: netbox/templates/inc/paginator.html:86 msgid "Per Page" msgstr "" -#: templates/inc/panels/image_attachments.html:10 +#: netbox/templates/inc/panels/image_attachments.html:10 msgid "Attach an image" msgstr "" -#: templates/inc/panels/related_objects.html:5 +#: netbox/templates/inc/panels/related_objects.html:5 msgid "Related Objects" msgstr "" -#: templates/inc/panels/tags.html:11 +#: netbox/templates/inc/panels/tags.html:11 msgid "No tags assigned" msgstr "" -#: templates/inc/sync_warning.html:10 +#: netbox/templates/inc/sync_warning.html:10 msgid "Data is out of sync with upstream file" msgstr "" -#: templates/inc/user_menu.html:23 +#: netbox/templates/inc/user_menu.html:23 msgid "Django Admin" msgstr "" -#: templates/inc/user_menu.html:40 +#: netbox/templates/inc/user_menu.html:40 msgid "Log Out" msgstr "" -#: templates/inc/user_menu.html:47 templates/login.html:36 +#: netbox/templates/inc/user_menu.html:47 netbox/templates/login.html:36 msgid "Log In" msgstr "" -#: templates/ipam/aggregate.html:14 templates/ipam/ipaddress.html:14 -#: templates/ipam/iprange.html:13 templates/ipam/prefix.html:15 +#: netbox/templates/ipam/aggregate.html:14 +#: netbox/templates/ipam/ipaddress.html:14 +#: netbox/templates/ipam/iprange.html:13 netbox/templates/ipam/prefix.html:15 msgid "Family" msgstr "" -#: templates/ipam/aggregate.html:39 +#: netbox/templates/ipam/aggregate.html:39 msgid "Date Added" msgstr "" -#: templates/ipam/aggregate/prefixes.html:8 -#: templates/ipam/prefix/prefixes.html:8 templates/ipam/role.html:10 +#: netbox/templates/ipam/aggregate/prefixes.html:8 +#: netbox/templates/ipam/prefix/prefixes.html:8 +#: netbox/templates/ipam/role.html:10 msgid "Add Prefix" msgstr "" -#: templates/ipam/asn.html:23 +#: netbox/templates/ipam/asn.html:23 msgid "AS Number" msgstr "" -#: templates/ipam/fhrpgroup.html:52 +#: netbox/templates/ipam/fhrpgroup.html:52 msgid "Authentication Type" msgstr "" -#: templates/ipam/fhrpgroup.html:56 +#: netbox/templates/ipam/fhrpgroup.html:56 msgid "Authentication Key" msgstr "" -#: templates/ipam/fhrpgroup.html:69 +#: netbox/templates/ipam/fhrpgroup.html:69 msgid "Virtual IP Addresses" msgstr "" -#: templates/ipam/inc/ipaddress_edit_header.html:13 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:13 msgid "Assign IP" msgstr "" -#: templates/ipam/inc/ipaddress_edit_header.html:19 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:19 msgid "Bulk Create" msgstr "" -#: templates/ipam/inc/panels/fhrp_groups.html:10 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:10 msgid "Create Group" msgstr "" -#: templates/ipam/inc/panels/fhrp_groups.html:15 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:15 msgid "Assign Group" msgstr "" -#: templates/ipam/inc/panels/fhrp_groups.html:25 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:25 msgid "Virtual IPs" msgstr "" -#: templates/ipam/inc/toggle_available.html:7 +#: netbox/templates/ipam/inc/toggle_available.html:7 msgid "Show Assigned" msgstr "" -#: templates/ipam/inc/toggle_available.html:10 +#: netbox/templates/ipam/inc/toggle_available.html:10 msgid "Show Available" msgstr "" -#: templates/ipam/inc/toggle_available.html:13 +#: netbox/templates/ipam/inc/toggle_available.html:13 msgid "Show All" msgstr "" -#: templates/ipam/ipaddress.html:23 templates/ipam/iprange.html:45 -#: templates/ipam/prefix.html:24 +#: netbox/templates/ipam/ipaddress.html:23 +#: netbox/templates/ipam/iprange.html:45 netbox/templates/ipam/prefix.html:24 msgid "Global" msgstr "" -#: templates/ipam/ipaddress.html:85 +#: netbox/templates/ipam/ipaddress.html:85 msgid "NAT (outside)" msgstr "" -#: templates/ipam/ipaddress_assign.html:8 +#: netbox/templates/ipam/ipaddress_assign.html:8 msgid "Assign an IP Address" msgstr "" -#: templates/ipam/ipaddress_assign.html:22 +#: netbox/templates/ipam/ipaddress_assign.html:22 msgid "Select IP Address" msgstr "" -#: templates/ipam/ipaddress_assign.html:35 +#: netbox/templates/ipam/ipaddress_assign.html:35 msgid "Search Results" msgstr "" -#: templates/ipam/ipaddress_bulk_add.html:6 +#: netbox/templates/ipam/ipaddress_bulk_add.html:6 msgid "Bulk Add IP Addresses" msgstr "" -#: templates/ipam/iprange.html:17 +#: netbox/templates/ipam/iprange.html:17 msgid "Starting Address" msgstr "" -#: templates/ipam/iprange.html:21 +#: netbox/templates/ipam/iprange.html:21 msgid "Ending Address" msgstr "" -#: templates/ipam/iprange.html:33 templates/ipam/prefix.html:110 +#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:110 msgid "Marked fully utilized" msgstr "" -#: templates/ipam/prefix.html:99 +#: netbox/templates/ipam/prefix.html:99 msgid "Addressing Details" msgstr "" -#: templates/ipam/prefix.html:118 +#: netbox/templates/ipam/prefix.html:118 msgid "Child IPs" msgstr "" -#: templates/ipam/prefix.html:126 +#: netbox/templates/ipam/prefix.html:126 msgid "Available IPs" msgstr "" -#: templates/ipam/prefix.html:138 +#: netbox/templates/ipam/prefix.html:138 msgid "First available IP" msgstr "" -#: templates/ipam/prefix.html:179 +#: netbox/templates/ipam/prefix.html:179 msgid "Prefix Details" msgstr "" -#: templates/ipam/prefix.html:185 +#: netbox/templates/ipam/prefix.html:185 msgid "Network Address" msgstr "" -#: templates/ipam/prefix.html:189 +#: netbox/templates/ipam/prefix.html:189 msgid "Network Mask" msgstr "" -#: templates/ipam/prefix.html:193 +#: netbox/templates/ipam/prefix.html:193 msgid "Wildcard Mask" msgstr "" -#: templates/ipam/prefix.html:197 +#: netbox/templates/ipam/prefix.html:197 msgid "Broadcast Address" msgstr "" -#: templates/ipam/prefix/ip_ranges.html:7 +#: netbox/templates/ipam/prefix/ip_ranges.html:7 msgid "Add IP Range" msgstr "" -#: templates/ipam/prefix_list.html:7 +#: netbox/templates/ipam/prefix_list.html:7 msgid "Hide Depth Indicators" msgstr "" -#: templates/ipam/prefix_list.html:11 +#: netbox/templates/ipam/prefix_list.html:11 msgid "Max Depth" msgstr "" -#: templates/ipam/prefix_list.html:28 +#: netbox/templates/ipam/prefix_list.html:28 msgid "Max Length" msgstr "" -#: templates/ipam/rir.html:10 +#: netbox/templates/ipam/rir.html:10 msgid "Add Aggregate" msgstr "" -#: templates/ipam/routetarget.html:38 +#: netbox/templates/ipam/routetarget.html:38 msgid "Importing VRFs" msgstr "" -#: templates/ipam/routetarget.html:44 +#: netbox/templates/ipam/routetarget.html:44 msgid "Exporting VRFs" msgstr "" -#: templates/ipam/routetarget.html:52 +#: netbox/templates/ipam/routetarget.html:52 msgid "Importing L2VPNs" msgstr "" -#: templates/ipam/routetarget.html:58 +#: netbox/templates/ipam/routetarget.html:58 msgid "Exporting L2VPNs" msgstr "" -#: templates/ipam/vlan.html:88 +#: netbox/templates/ipam/vlan.html:88 msgid "Add a Prefix" msgstr "" -#: templates/ipam/vlangroup.html:18 +#: netbox/templates/ipam/vlangroup.html:18 msgid "Add VLAN" msgstr "" -#: templates/ipam/vlangroup.html:42 +#: netbox/templates/ipam/vlangroup.html:42 msgid "Permitted VIDs" msgstr "" -#: templates/ipam/vrf.html:16 +#: netbox/templates/ipam/vrf.html:16 msgid "Route Distinguisher" msgstr "" -#: templates/ipam/vrf.html:29 +#: netbox/templates/ipam/vrf.html:29 msgid "Unique IP Space" msgstr "" -#: templates/login.html:14 +#: netbox/templates/login.html:14 msgid "NetBox logo" msgstr "" -#: templates/login.html:27 -#: utilities/templates/form_helpers/render_errors.html:7 +#: netbox/templates/login.html:27 +#: netbox/utilities/templates/form_helpers/render_errors.html:7 msgid "Errors" msgstr "" -#: templates/login.html:67 +#: netbox/templates/login.html:67 msgid "Sign In" msgstr "" -#: templates/login.html:75 +#: netbox/templates/login.html:75 msgctxt "Denotes an alternative option" msgid "Or" msgstr "" -#: templates/media_failure.html:7 +#: netbox/templates/media_failure.html:7 msgid "Static Media Failure - NetBox" msgstr "" -#: templates/media_failure.html:21 +#: netbox/templates/media_failure.html:21 msgid "Static Media Failure" msgstr "" -#: templates/media_failure.html:23 +#: netbox/templates/media_failure.html:23 msgid "The following static media file failed to load" msgstr "" -#: templates/media_failure.html:26 +#: netbox/templates/media_failure.html:26 msgid "Check the following" msgstr "" -#: templates/media_failure.html:29 +#: netbox/templates/media_failure.html:29 msgid "" "manage.py collectstatic was run during the most recent upgrade. " "This installs the most recent iteration of each static file into the static " "root path." msgstr "" -#: templates/media_failure.html:35 +#: netbox/templates/media_failure.html:35 #, python-format msgid "" "The HTTP service (e.g. nginx or Apache) is configured to serve files from " @@ -12354,1822 +12977,1856 @@ msgid "" "installation documentation for further guidance." msgstr "" -#: templates/media_failure.html:47 +#: netbox/templates/media_failure.html:47 #, python-format msgid "" "The file %(filename)s exists in the static root directory and " "is readable by the HTTP server." msgstr "" -#: templates/media_failure.html:55 +#: netbox/templates/media_failure.html:55 #, python-format msgid "" "Click here to attempt loading NetBox again." msgstr "" -#: templates/tenancy/contact.html:18 tenancy/filtersets.py:148 -#: tenancy/forms/bulk_edit.py:137 tenancy/forms/filtersets.py:102 -#: tenancy/forms/forms.py:56 tenancy/forms/model_forms.py:106 -#: tenancy/forms/model_forms.py:130 tenancy/tables/contacts.py:98 +#: netbox/templates/tenancy/contact.html:18 netbox/tenancy/filtersets.py:148 +#: netbox/tenancy/forms/bulk_edit.py:137 netbox/tenancy/forms/filtersets.py:102 +#: netbox/tenancy/forms/forms.py:56 netbox/tenancy/forms/model_forms.py:106 +#: netbox/tenancy/forms/model_forms.py:130 netbox/tenancy/tables/contacts.py:98 msgid "Contact" msgstr "" -#: templates/tenancy/contact.html:29 tenancy/forms/bulk_edit.py:99 +#: netbox/templates/tenancy/contact.html:29 +#: netbox/tenancy/forms/bulk_edit.py:99 msgid "Title" msgstr "" -#: templates/tenancy/contact.html:33 tenancy/forms/bulk_edit.py:104 -#: tenancy/tables/contacts.py:64 +#: netbox/templates/tenancy/contact.html:33 +#: netbox/tenancy/forms/bulk_edit.py:104 netbox/tenancy/tables/contacts.py:64 msgid "Phone" msgstr "" -#: templates/tenancy/contact.html:84 tenancy/tables/contacts.py:73 +#: netbox/templates/tenancy/contact.html:84 +#: netbox/tenancy/tables/contacts.py:73 msgid "Assignments" msgstr "" -#: templates/tenancy/contactgroup.html:18 tenancy/forms/forms.py:66 -#: tenancy/forms/model_forms.py:75 +#: netbox/templates/tenancy/contactgroup.html:18 +#: netbox/tenancy/forms/forms.py:66 netbox/tenancy/forms/model_forms.py:75 msgid "Contact Group" msgstr "" -#: templates/tenancy/contactgroup.html:50 +#: netbox/templates/tenancy/contactgroup.html:50 msgid "Add Contact Group" msgstr "" -#: templates/tenancy/contactrole.html:15 tenancy/filtersets.py:153 -#: tenancy/forms/forms.py:61 tenancy/forms/model_forms.py:87 +#: netbox/templates/tenancy/contactrole.html:15 +#: netbox/tenancy/filtersets.py:153 netbox/tenancy/forms/forms.py:61 +#: netbox/tenancy/forms/model_forms.py:87 msgid "Contact Role" msgstr "" -#: templates/tenancy/object_contacts.html:9 +#: netbox/templates/tenancy/object_contacts.html:9 msgid "Add a contact" msgstr "" -#: templates/tenancy/tenantgroup.html:17 +#: netbox/templates/tenancy/tenantgroup.html:17 msgid "Add Tenant" msgstr "" -#: templates/tenancy/tenantgroup.html:26 tenancy/forms/model_forms.py:32 -#: tenancy/tables/columns.py:51 tenancy/tables/columns.py:61 +#: netbox/templates/tenancy/tenantgroup.html:26 +#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:51 +#: netbox/tenancy/tables/columns.py:61 msgid "Tenant Group" msgstr "" -#: templates/tenancy/tenantgroup.html:59 +#: netbox/templates/tenancy/tenantgroup.html:59 msgid "Add Tenant Group" msgstr "" -#: templates/users/group.html:39 templates/users/user.html:63 +#: netbox/templates/users/group.html:39 netbox/templates/users/user.html:63 msgid "Assigned Permissions" msgstr "" -#: templates/users/objectpermission.html:6 -#: templates/users/objectpermission.html:14 users/forms/filtersets.py:67 +#: netbox/templates/users/objectpermission.html:6 +#: netbox/templates/users/objectpermission.html:14 +#: netbox/users/forms/filtersets.py:67 msgid "Permission" msgstr "" -#: templates/users/objectpermission.html:34 +#: netbox/templates/users/objectpermission.html:34 msgid "View" msgstr "" -#: templates/users/objectpermission.html:52 users/forms/model_forms.py:312 +#: netbox/templates/users/objectpermission.html:52 +#: netbox/users/forms/model_forms.py:312 msgid "Constraints" msgstr "" -#: templates/users/objectpermission.html:72 +#: netbox/templates/users/objectpermission.html:72 msgid "Assigned Users" msgstr "" -#: templates/virtualization/cluster.html:52 +#: netbox/templates/virtualization/cluster.html:52 msgid "Allocated Resources" msgstr "" -#: templates/virtualization/cluster.html:55 -#: templates/virtualization/virtualmachine.html:121 +#: netbox/templates/virtualization/cluster.html:55 +#: netbox/templates/virtualization/virtualmachine.html:121 msgid "Virtual CPUs" msgstr "" -#: templates/virtualization/cluster.html:59 -#: templates/virtualization/virtualmachine.html:125 +#: netbox/templates/virtualization/cluster.html:59 +#: netbox/templates/virtualization/virtualmachine.html:125 msgid "Memory" msgstr "" -#: templates/virtualization/cluster.html:69 -#: templates/virtualization/virtualmachine.html:136 +#: netbox/templates/virtualization/cluster.html:69 +#: netbox/templates/virtualization/virtualmachine.html:136 msgid "Disk Space" msgstr "" -#: templates/virtualization/cluster.html:72 -#: templates/virtualization/virtualdisk.html:32 -#: templates/virtualization/virtualmachine.html:140 +#: netbox/templates/virtualization/cluster.html:72 +#: netbox/templates/virtualization/virtualdisk.html:32 +#: netbox/templates/virtualization/virtualmachine.html:140 msgctxt "Abbreviation for gigabyte" msgid "GB" msgstr "" -#: templates/virtualization/cluster/base.html:18 +#: netbox/templates/virtualization/cluster/base.html:18 msgid "Add Virtual Machine" msgstr "" -#: templates/virtualization/cluster/base.html:24 +#: netbox/templates/virtualization/cluster/base.html:24 msgid "Assign Device" msgstr "" -#: templates/virtualization/cluster/devices.html:10 +#: netbox/templates/virtualization/cluster/devices.html:10 msgid "Remove Selected" msgstr "" -#: templates/virtualization/cluster_add_devices.html:9 +#: netbox/templates/virtualization/cluster_add_devices.html:9 #, python-format msgid "Add Device to Cluster %(cluster)s" msgstr "" -#: templates/virtualization/cluster_add_devices.html:23 +#: netbox/templates/virtualization/cluster_add_devices.html:23 msgid "Device Selection" msgstr "" -#: templates/virtualization/cluster_add_devices.html:31 +#: netbox/templates/virtualization/cluster_add_devices.html:31 msgid "Add Devices" msgstr "" -#: templates/virtualization/clustergroup.html:10 -#: templates/virtualization/clustertype.html:10 +#: netbox/templates/virtualization/clustergroup.html:10 +#: netbox/templates/virtualization/clustertype.html:10 msgid "Add Cluster" msgstr "" -#: templates/virtualization/clustergroup.html:19 -#: virtualization/forms/model_forms.py:50 +#: netbox/templates/virtualization/clustergroup.html:19 +#: netbox/virtualization/forms/model_forms.py:50 msgid "Cluster Group" msgstr "" -#: templates/virtualization/clustertype.html:19 -#: templates/virtualization/virtualmachine.html:106 -#: virtualization/forms/model_forms.py:36 +#: netbox/templates/virtualization/clustertype.html:19 +#: netbox/templates/virtualization/virtualmachine.html:106 +#: netbox/virtualization/forms/model_forms.py:36 msgid "Cluster Type" msgstr "" -#: templates/virtualization/virtualdisk.html:18 +#: netbox/templates/virtualization/virtualdisk.html:18 msgid "Virtual Disk" msgstr "" -#: templates/virtualization/virtualmachine.html:118 -#: virtualization/forms/bulk_edit.py:190 -#: virtualization/forms/model_forms.py:224 +#: netbox/templates/virtualization/virtualmachine.html:118 +#: netbox/virtualization/forms/bulk_edit.py:190 +#: netbox/virtualization/forms/model_forms.py:224 msgid "Resources" msgstr "" -#: templates/virtualization/virtualmachine.html:174 +#: netbox/templates/virtualization/virtualmachine.html:174 msgid "Add Virtual Disk" msgstr "" -#: templates/vpn/ikepolicy.html:10 templates/vpn/ipsecprofile.html:33 -#: vpn/tables/crypto.py:166 +#: netbox/templates/vpn/ikepolicy.html:10 +#: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166 msgid "IKE Policy" msgstr "" -#: templates/vpn/ikepolicy.html:21 +#: netbox/templates/vpn/ikepolicy.html:21 msgid "IKE Version" msgstr "" -#: templates/vpn/ikepolicy.html:29 +#: netbox/templates/vpn/ikepolicy.html:29 msgid "Pre-Shared Key" msgstr "" -#: templates/vpn/ikepolicy.html:33 -#: templates/wireless/inc/authentication_attrs.html:20 +#: netbox/templates/vpn/ikepolicy.html:33 +#: netbox/templates/wireless/inc/authentication_attrs.html:20 msgid "Show Secret" msgstr "" -#: templates/vpn/ikepolicy.html:57 templates/vpn/ipsecpolicy.html:45 -#: templates/vpn/ipsecprofile.html:52 templates/vpn/ipsecprofile.html:77 -#: vpn/forms/model_forms.py:316 vpn/forms/model_forms.py:352 -#: vpn/tables/crypto.py:68 vpn/tables/crypto.py:134 +#: netbox/templates/vpn/ikepolicy.html:57 +#: netbox/templates/vpn/ipsecpolicy.html:45 +#: netbox/templates/vpn/ipsecprofile.html:52 +#: netbox/templates/vpn/ipsecprofile.html:77 +#: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352 +#: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134 msgid "Proposals" msgstr "" -#: templates/vpn/ikeproposal.html:10 +#: netbox/templates/vpn/ikeproposal.html:10 msgid "IKE Proposal" msgstr "" -#: templates/vpn/ikeproposal.html:21 vpn/forms/bulk_edit.py:97 -#: vpn/forms/bulk_import.py:145 vpn/forms/filtersets.py:101 +#: netbox/templates/vpn/ikeproposal.html:21 netbox/vpn/forms/bulk_edit.py:97 +#: netbox/vpn/forms/bulk_import.py:145 netbox/vpn/forms/filtersets.py:101 msgid "Authentication method" msgstr "" -#: templates/vpn/ikeproposal.html:25 templates/vpn/ipsecproposal.html:21 -#: vpn/forms/bulk_edit.py:102 vpn/forms/bulk_edit.py:172 -#: vpn/forms/bulk_import.py:149 vpn/forms/bulk_import.py:195 -#: vpn/forms/filtersets.py:106 vpn/forms/filtersets.py:154 +#: netbox/templates/vpn/ikeproposal.html:25 +#: netbox/templates/vpn/ipsecproposal.html:21 netbox/vpn/forms/bulk_edit.py:102 +#: netbox/vpn/forms/bulk_edit.py:172 netbox/vpn/forms/bulk_import.py:149 +#: netbox/vpn/forms/bulk_import.py:195 netbox/vpn/forms/filtersets.py:106 +#: netbox/vpn/forms/filtersets.py:154 msgid "Encryption algorithm" msgstr "" -#: templates/vpn/ikeproposal.html:29 templates/vpn/ipsecproposal.html:25 -#: vpn/forms/bulk_edit.py:107 vpn/forms/bulk_edit.py:177 -#: vpn/forms/bulk_import.py:153 vpn/forms/bulk_import.py:200 -#: vpn/forms/filtersets.py:111 vpn/forms/filtersets.py:159 +#: netbox/templates/vpn/ikeproposal.html:29 +#: netbox/templates/vpn/ipsecproposal.html:25 netbox/vpn/forms/bulk_edit.py:107 +#: netbox/vpn/forms/bulk_edit.py:177 netbox/vpn/forms/bulk_import.py:153 +#: netbox/vpn/forms/bulk_import.py:200 netbox/vpn/forms/filtersets.py:111 +#: netbox/vpn/forms/filtersets.py:159 msgid "Authentication algorithm" msgstr "" -#: templates/vpn/ikeproposal.html:33 +#: netbox/templates/vpn/ikeproposal.html:33 msgid "DH group" msgstr "" -#: templates/vpn/ikeproposal.html:37 templates/vpn/ipsecproposal.html:29 -#: vpn/forms/bulk_edit.py:182 vpn/models/crypto.py:146 +#: netbox/templates/vpn/ikeproposal.html:37 +#: netbox/templates/vpn/ipsecproposal.html:29 netbox/vpn/forms/bulk_edit.py:182 +#: netbox/vpn/models/crypto.py:146 msgid "SA lifetime (seconds)" msgstr "" -#: templates/vpn/ipsecpolicy.html:10 templates/vpn/ipsecprofile.html:66 -#: vpn/tables/crypto.py:170 +#: netbox/templates/vpn/ipsecpolicy.html:10 +#: netbox/templates/vpn/ipsecprofile.html:66 netbox/vpn/tables/crypto.py:170 msgid "IPSec Policy" msgstr "" -#: templates/vpn/ipsecpolicy.html:21 vpn/forms/bulk_edit.py:210 -#: vpn/models/crypto.py:193 +#: netbox/templates/vpn/ipsecpolicy.html:21 netbox/vpn/forms/bulk_edit.py:210 +#: netbox/vpn/models/crypto.py:193 msgid "PFS group" msgstr "" -#: templates/vpn/ipsecprofile.html:10 vpn/forms/model_forms.py:54 +#: netbox/templates/vpn/ipsecprofile.html:10 netbox/vpn/forms/model_forms.py:54 msgid "IPSec Profile" msgstr "" -#: templates/vpn/ipsecprofile.html:89 vpn/tables/crypto.py:137 +#: netbox/templates/vpn/ipsecprofile.html:89 netbox/vpn/tables/crypto.py:137 msgid "PFS Group" msgstr "" -#: templates/vpn/ipsecproposal.html:10 +#: netbox/templates/vpn/ipsecproposal.html:10 msgid "IPSec Proposal" msgstr "" -#: templates/vpn/ipsecproposal.html:33 vpn/forms/bulk_edit.py:186 -#: vpn/models/crypto.py:152 +#: netbox/templates/vpn/ipsecproposal.html:33 netbox/vpn/forms/bulk_edit.py:186 +#: netbox/vpn/models/crypto.py:152 msgid "SA lifetime (KB)" msgstr "" -#: templates/vpn/l2vpn.html:11 templates/vpn/l2vpntermination.html:9 +#: netbox/templates/vpn/l2vpn.html:11 +#: netbox/templates/vpn/l2vpntermination.html:9 msgid "L2VPN Attributes" msgstr "" -#: templates/vpn/l2vpn.html:60 templates/vpn/tunnel.html:76 +#: netbox/templates/vpn/l2vpn.html:60 netbox/templates/vpn/tunnel.html:76 msgid "Add a Termination" msgstr "" -#: templates/vpn/tunnel.html:9 +#: netbox/templates/vpn/tunnel.html:9 msgid "Add Termination" msgstr "" -#: templates/vpn/tunnel.html:37 vpn/forms/bulk_edit.py:49 -#: vpn/forms/bulk_import.py:48 vpn/forms/filtersets.py:57 +#: netbox/templates/vpn/tunnel.html:37 netbox/vpn/forms/bulk_edit.py:49 +#: netbox/vpn/forms/bulk_import.py:48 netbox/vpn/forms/filtersets.py:57 msgid "Encapsulation" msgstr "" -#: templates/vpn/tunnel.html:41 vpn/forms/bulk_edit.py:55 -#: vpn/forms/bulk_import.py:53 vpn/forms/filtersets.py:64 -#: vpn/models/crypto.py:250 vpn/tables/tunnels.py:51 +#: netbox/templates/vpn/tunnel.html:41 netbox/vpn/forms/bulk_edit.py:55 +#: netbox/vpn/forms/bulk_import.py:53 netbox/vpn/forms/filtersets.py:64 +#: netbox/vpn/models/crypto.py:250 netbox/vpn/tables/tunnels.py:51 msgid "IPSec profile" msgstr "" -#: templates/vpn/tunnel.html:45 vpn/forms/bulk_edit.py:69 -#: vpn/forms/filtersets.py:68 +#: netbox/templates/vpn/tunnel.html:45 netbox/vpn/forms/bulk_edit.py:69 +#: netbox/vpn/forms/filtersets.py:68 msgid "Tunnel ID" msgstr "" -#: templates/vpn/tunnelgroup.html:14 +#: netbox/templates/vpn/tunnelgroup.html:14 msgid "Add Tunnel" msgstr "" -#: templates/vpn/tunnelgroup.html:23 vpn/forms/model_forms.py:36 -#: vpn/forms/model_forms.py:49 +#: netbox/templates/vpn/tunnelgroup.html:23 netbox/vpn/forms/model_forms.py:36 +#: netbox/vpn/forms/model_forms.py:49 msgid "Tunnel Group" msgstr "" -#: templates/vpn/tunneltermination.html:10 +#: netbox/templates/vpn/tunneltermination.html:10 msgid "Tunnel Termination" msgstr "" -#: templates/vpn/tunneltermination.html:35 vpn/forms/bulk_import.py:107 -#: vpn/forms/model_forms.py:102 vpn/forms/model_forms.py:138 -#: vpn/forms/model_forms.py:247 vpn/tables/tunnels.py:101 +#: netbox/templates/vpn/tunneltermination.html:35 +#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:102 +#: netbox/vpn/forms/model_forms.py:138 netbox/vpn/forms/model_forms.py:247 +#: netbox/vpn/tables/tunnels.py:101 msgid "Outside IP" msgstr "" -#: templates/vpn/tunneltermination.html:51 +#: netbox/templates/vpn/tunneltermination.html:51 msgid "Peer Terminations" msgstr "" -#: templates/wireless/inc/authentication_attrs.html:12 +#: netbox/templates/wireless/inc/authentication_attrs.html:12 msgid "Cipher" msgstr "" -#: templates/wireless/inc/authentication_attrs.html:16 +#: netbox/templates/wireless/inc/authentication_attrs.html:16 msgid "PSK" msgstr "" -#: templates/wireless/inc/wirelesslink_interface.html:35 -#: templates/wireless/inc/wirelesslink_interface.html:45 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:35 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:45 msgctxt "Abbreviation for megahertz" msgid "MHz" msgstr "" -#: templates/wireless/wirelesslan.html:57 +#: netbox/templates/wireless/wirelesslan.html:57 msgid "Attached Interfaces" msgstr "" -#: templates/wireless/wirelesslangroup.html:17 +#: netbox/templates/wireless/wirelesslangroup.html:17 msgid "Add Wireless LAN" msgstr "" -#: templates/wireless/wirelesslangroup.html:26 wireless/forms/model_forms.py:28 +#: netbox/templates/wireless/wirelesslangroup.html:26 +#: netbox/wireless/forms/model_forms.py:28 msgid "Wireless LAN Group" msgstr "" -#: templates/wireless/wirelesslangroup.html:59 +#: netbox/templates/wireless/wirelesslangroup.html:59 msgid "Add Wireless LAN Group" msgstr "" -#: templates/wireless/wirelesslink.html:14 +#: netbox/templates/wireless/wirelesslink.html:14 msgid "Link Properties" msgstr "" -#: tenancy/choices.py:19 +#: netbox/tenancy/choices.py:19 msgid "Tertiary" msgstr "" -#: tenancy/choices.py:20 +#: netbox/tenancy/choices.py:20 msgid "Inactive" msgstr "" -#: tenancy/filtersets.py:29 +#: netbox/tenancy/filtersets.py:29 msgid "Parent contact group (ID)" msgstr "" -#: tenancy/filtersets.py:35 +#: netbox/tenancy/filtersets.py:35 msgid "Parent contact group (slug)" msgstr "" -#: tenancy/filtersets.py:41 tenancy/filtersets.py:68 tenancy/filtersets.py:111 +#: netbox/tenancy/filtersets.py:41 netbox/tenancy/filtersets.py:68 +#: netbox/tenancy/filtersets.py:111 msgid "Contact group (ID)" msgstr "" -#: tenancy/filtersets.py:48 tenancy/filtersets.py:75 tenancy/filtersets.py:118 +#: netbox/tenancy/filtersets.py:48 netbox/tenancy/filtersets.py:75 +#: netbox/tenancy/filtersets.py:118 msgid "Contact group (slug)" msgstr "" -#: tenancy/filtersets.py:105 +#: netbox/tenancy/filtersets.py:105 msgid "Contact (ID)" msgstr "" -#: tenancy/filtersets.py:122 +#: netbox/tenancy/filtersets.py:122 msgid "Contact role (ID)" msgstr "" -#: tenancy/filtersets.py:128 +#: netbox/tenancy/filtersets.py:128 msgid "Contact role (slug)" msgstr "" -#: tenancy/filtersets.py:159 +#: netbox/tenancy/filtersets.py:159 msgid "Contact group" msgstr "" -#: tenancy/filtersets.py:170 +#: netbox/tenancy/filtersets.py:170 msgid "Parent tenant group (ID)" msgstr "" -#: tenancy/filtersets.py:176 +#: netbox/tenancy/filtersets.py:176 msgid "Parent tenant group (slug)" msgstr "" -#: tenancy/filtersets.py:182 tenancy/filtersets.py:202 +#: netbox/tenancy/filtersets.py:182 netbox/tenancy/filtersets.py:202 msgid "Tenant group (ID)" msgstr "" -#: tenancy/filtersets.py:235 +#: netbox/tenancy/filtersets.py:235 msgid "Tenant Group (ID)" msgstr "" -#: tenancy/filtersets.py:242 +#: netbox/tenancy/filtersets.py:242 msgid "Tenant Group (slug)" msgstr "" -#: tenancy/forms/bulk_edit.py:66 +#: netbox/tenancy/forms/bulk_edit.py:66 msgid "Desciption" msgstr "" -#: tenancy/forms/bulk_import.py:101 +#: netbox/tenancy/forms/bulk_import.py:101 msgid "Assigned contact" msgstr "" -#: tenancy/models/contacts.py:32 +#: netbox/tenancy/models/contacts.py:32 msgid "contact group" msgstr "" -#: tenancy/models/contacts.py:33 +#: netbox/tenancy/models/contacts.py:33 msgid "contact groups" msgstr "" -#: tenancy/models/contacts.py:48 +#: netbox/tenancy/models/contacts.py:48 msgid "contact role" msgstr "" -#: tenancy/models/contacts.py:49 +#: netbox/tenancy/models/contacts.py:49 msgid "contact roles" msgstr "" -#: tenancy/models/contacts.py:68 +#: netbox/tenancy/models/contacts.py:68 msgid "title" msgstr "" -#: tenancy/models/contacts.py:73 +#: netbox/tenancy/models/contacts.py:73 msgid "phone" msgstr "" -#: tenancy/models/contacts.py:78 +#: netbox/tenancy/models/contacts.py:78 msgid "email" msgstr "" -#: tenancy/models/contacts.py:87 +#: netbox/tenancy/models/contacts.py:87 msgid "link" msgstr "" -#: tenancy/models/contacts.py:103 +#: netbox/tenancy/models/contacts.py:103 msgid "contact" msgstr "" -#: tenancy/models/contacts.py:104 +#: netbox/tenancy/models/contacts.py:104 msgid "contacts" msgstr "" -#: tenancy/models/contacts.py:153 +#: netbox/tenancy/models/contacts.py:153 msgid "contact assignment" msgstr "" -#: tenancy/models/contacts.py:154 +#: netbox/tenancy/models/contacts.py:154 msgid "contact assignments" msgstr "" -#: tenancy/models/contacts.py:170 +#: netbox/tenancy/models/contacts.py:170 #, python-brace-format msgid "Contacts cannot be assigned to this object type ({type})." msgstr "" -#: tenancy/models/tenants.py:32 +#: netbox/tenancy/models/tenants.py:32 msgid "tenant group" msgstr "" -#: tenancy/models/tenants.py:33 +#: netbox/tenancy/models/tenants.py:33 msgid "tenant groups" msgstr "" -#: tenancy/models/tenants.py:70 +#: netbox/tenancy/models/tenants.py:70 msgid "Tenant name must be unique per group." msgstr "" -#: tenancy/models/tenants.py:80 +#: netbox/tenancy/models/tenants.py:80 msgid "Tenant slug must be unique per group." msgstr "" -#: tenancy/models/tenants.py:88 +#: netbox/tenancy/models/tenants.py:88 msgid "tenant" msgstr "" -#: tenancy/models/tenants.py:89 +#: netbox/tenancy/models/tenants.py:89 msgid "tenants" msgstr "" -#: tenancy/tables/contacts.py:112 +#: netbox/tenancy/tables/contacts.py:112 msgid "Contact Title" msgstr "" -#: tenancy/tables/contacts.py:116 +#: netbox/tenancy/tables/contacts.py:116 msgid "Contact Phone" msgstr "" -#: tenancy/tables/contacts.py:120 +#: netbox/tenancy/tables/contacts.py:120 msgid "Contact Email" msgstr "" -#: tenancy/tables/contacts.py:124 +#: netbox/tenancy/tables/contacts.py:124 msgid "Contact Address" msgstr "" -#: tenancy/tables/contacts.py:128 +#: netbox/tenancy/tables/contacts.py:128 msgid "Contact Link" msgstr "" -#: tenancy/tables/contacts.py:132 +#: netbox/tenancy/tables/contacts.py:132 msgid "Contact Description" msgstr "" -#: users/filtersets.py:33 users/filtersets.py:68 +#: netbox/users/filtersets.py:33 netbox/users/filtersets.py:68 msgid "Permission (ID)" msgstr "" -#: users/filtersets.py:63 users/filtersets.py:181 +#: netbox/users/filtersets.py:63 netbox/users/filtersets.py:181 msgid "Group (name)" msgstr "" -#: users/forms/bulk_edit.py:26 +#: netbox/users/forms/bulk_edit.py:26 msgid "First name" msgstr "" -#: users/forms/bulk_edit.py:31 +#: netbox/users/forms/bulk_edit.py:31 msgid "Last name" msgstr "" -#: users/forms/bulk_edit.py:43 +#: netbox/users/forms/bulk_edit.py:43 msgid "Staff status" msgstr "" -#: users/forms/bulk_edit.py:48 +#: netbox/users/forms/bulk_edit.py:48 msgid "Superuser status" msgstr "" -#: users/forms/bulk_import.py:41 +#: netbox/users/forms/bulk_import.py:41 msgid "If no key is provided, one will be generated automatically." msgstr "" -#: users/forms/filtersets.py:52 users/tables.py:42 +#: netbox/users/forms/filtersets.py:52 netbox/users/tables.py:42 msgid "Is Staff" msgstr "" -#: users/forms/filtersets.py:59 users/tables.py:45 +#: netbox/users/forms/filtersets.py:59 netbox/users/tables.py:45 msgid "Is Superuser" msgstr "" -#: users/forms/filtersets.py:92 users/tables.py:86 +#: netbox/users/forms/filtersets.py:92 netbox/users/tables.py:86 msgid "Can View" msgstr "" -#: users/forms/filtersets.py:99 users/tables.py:89 +#: netbox/users/forms/filtersets.py:99 netbox/users/tables.py:89 msgid "Can Add" msgstr "" -#: users/forms/filtersets.py:106 users/tables.py:92 +#: netbox/users/forms/filtersets.py:106 netbox/users/tables.py:92 msgid "Can Change" msgstr "" -#: users/forms/filtersets.py:113 users/tables.py:95 +#: netbox/users/forms/filtersets.py:113 netbox/users/tables.py:95 msgid "Can Delete" msgstr "" -#: users/forms/model_forms.py:63 +#: netbox/users/forms/model_forms.py:63 msgid "User Interface" msgstr "" -#: users/forms/model_forms.py:115 +#: netbox/users/forms/model_forms.py:115 msgid "" "Keys must be at least 40 characters in length. Be sure to record " "your key prior to submitting this form, as it may no longer be " "accessible once the token has been created." msgstr "" -#: users/forms/model_forms.py:127 +#: netbox/users/forms/model_forms.py:127 msgid "" "Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for " "no restrictions. Example: 10.1.1.0/24,192.168.10.16/32,2001:" "db8:1::/64" msgstr "" -#: users/forms/model_forms.py:176 +#: netbox/users/forms/model_forms.py:176 msgid "Confirm password" msgstr "" -#: users/forms/model_forms.py:179 +#: netbox/users/forms/model_forms.py:179 msgid "Enter the same password as before, for verification." msgstr "" -#: users/forms/model_forms.py:228 +#: netbox/users/forms/model_forms.py:228 msgid "Passwords do not match! Please check your input and try again." msgstr "" -#: users/forms/model_forms.py:291 +#: netbox/users/forms/model_forms.py:291 msgid "Additional actions" msgstr "" -#: users/forms/model_forms.py:294 +#: netbox/users/forms/model_forms.py:294 msgid "Actions granted in addition to those listed above" msgstr "" -#: users/forms/model_forms.py:310 +#: netbox/users/forms/model_forms.py:310 msgid "Objects" msgstr "" -#: users/forms/model_forms.py:322 +#: netbox/users/forms/model_forms.py:322 msgid "" "JSON expression of a queryset filter that will return only permitted " "objects. Leave null to match all objects of this type. A list of multiple " "objects will result in a logical OR operation." msgstr "" -#: users/forms/model_forms.py:361 +#: netbox/users/forms/model_forms.py:361 msgid "At least one action must be selected." msgstr "" -#: users/forms/model_forms.py:379 +#: netbox/users/forms/model_forms.py:379 #, python-brace-format msgid "Invalid filter for {model}: {error}" msgstr "" -#: users/models/permissions.py:39 +#: netbox/users/models/permissions.py:39 msgid "The list of actions granted by this permission" msgstr "" -#: users/models/permissions.py:44 +#: netbox/users/models/permissions.py:44 msgid "constraints" msgstr "" -#: users/models/permissions.py:45 +#: netbox/users/models/permissions.py:45 msgid "Queryset filter matching the applicable objects of the selected type(s)" msgstr "" -#: users/models/permissions.py:52 +#: netbox/users/models/permissions.py:52 msgid "permission" msgstr "" -#: users/models/permissions.py:53 users/models/users.py:47 +#: netbox/users/models/permissions.py:53 netbox/users/models/users.py:47 msgid "permissions" msgstr "" -#: users/models/preferences.py:30 users/models/preferences.py:31 +#: netbox/users/models/preferences.py:30 netbox/users/models/preferences.py:31 msgid "user preferences" msgstr "" -#: users/models/preferences.py:98 +#: netbox/users/models/preferences.py:98 #, python-brace-format msgid "Key '{path}' is a leaf node; cannot assign new keys" msgstr "" -#: users/models/preferences.py:110 +#: netbox/users/models/preferences.py:110 #, python-brace-format msgid "Key '{path}' is a dictionary; cannot assign a non-dictionary value" msgstr "" -#: users/models/tokens.py:37 +#: netbox/users/models/tokens.py:37 msgid "expires" msgstr "" -#: users/models/tokens.py:42 +#: netbox/users/models/tokens.py:42 msgid "last used" msgstr "" -#: users/models/tokens.py:47 +#: netbox/users/models/tokens.py:47 msgid "key" msgstr "" -#: users/models/tokens.py:53 +#: netbox/users/models/tokens.py:53 msgid "write enabled" msgstr "" -#: users/models/tokens.py:55 +#: netbox/users/models/tokens.py:55 msgid "Permit create/update/delete operations using this key" msgstr "" -#: users/models/tokens.py:66 +#: netbox/users/models/tokens.py:66 msgid "allowed IPs" msgstr "" -#: users/models/tokens.py:68 +#: netbox/users/models/tokens.py:68 msgid "" "Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for " "no restrictions. Ex: \"10.1.1.0/24, 192.168.10.16/32, 2001:DB8:1::/64\"" msgstr "" -#: users/models/tokens.py:76 +#: netbox/users/models/tokens.py:76 msgid "token" msgstr "" -#: users/models/tokens.py:77 +#: netbox/users/models/tokens.py:77 msgid "tokens" msgstr "" -#: users/models/users.py:57 vpn/models/crypto.py:42 +#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:42 msgid "group" msgstr "" -#: users/models/users.py:58 users/models/users.py:77 +#: netbox/users/models/users.py:58 netbox/users/models/users.py:77 msgid "groups" msgstr "" -#: users/models/users.py:92 +#: netbox/users/models/users.py:92 msgid "user" msgstr "" -#: users/models/users.py:93 +#: netbox/users/models/users.py:93 msgid "users" msgstr "" -#: users/models/users.py:104 +#: netbox/users/models/users.py:104 msgid "A user with this username already exists." msgstr "" -#: users/tables.py:98 +#: netbox/users/tables.py:98 msgid "Custom Actions" msgstr "" -#: utilities/api.py:153 +#: netbox/utilities/api.py:153 #, python-brace-format msgid "Related object not found using the provided attributes: {params}" msgstr "" -#: utilities/api.py:156 +#: netbox/utilities/api.py:156 #, python-brace-format msgid "Multiple objects match the provided attributes: {params}" msgstr "" -#: utilities/api.py:168 +#: netbox/utilities/api.py:168 #, python-brace-format msgid "" "Related objects must be referenced by numeric ID or by dictionary of " "attributes. Received an unrecognized value: {value}" msgstr "" -#: utilities/api.py:177 +#: netbox/utilities/api.py:177 #, python-brace-format msgid "Related object not found using the provided numeric ID: {id}" msgstr "" -#: utilities/choices.py:19 +#: netbox/utilities/choices.py:19 #, python-brace-format msgid "{name} has a key defined but CHOICES is not a list" msgstr "" -#: utilities/conversion.py:19 +#: netbox/utilities/conversion.py:19 msgid "Weight must be a positive number" msgstr "" -#: utilities/conversion.py:21 +#: netbox/utilities/conversion.py:21 #, python-brace-format msgid "Invalid value '{weight}' for weight (must be a number)" msgstr "" -#: utilities/conversion.py:32 utilities/conversion.py:62 +#: netbox/utilities/conversion.py:32 netbox/utilities/conversion.py:62 #, python-brace-format msgid "Unknown unit {unit}. Must be one of the following: {valid_units}" msgstr "" -#: utilities/conversion.py:45 +#: netbox/utilities/conversion.py:45 msgid "Length must be a positive number" msgstr "" -#: utilities/conversion.py:47 +#: netbox/utilities/conversion.py:47 #, python-brace-format msgid "Invalid value '{length}' for length (must be a number)" msgstr "" -#: utilities/error_handlers.py:31 +#: netbox/utilities/error_handlers.py:31 #, python-brace-format msgid "" "Unable to delete {objects}. {count} dependent objects were " "found: " msgstr "" -#: utilities/error_handlers.py:33 +#: netbox/utilities/error_handlers.py:33 msgid "More than 50" msgstr "" -#: utilities/fields.py:157 +#: netbox/utilities/fields.py:157 #, python-format msgid "" "%s(%r) is invalid. to_model parameter to CounterCacheField must be a string " "in the format 'app.model'" msgstr "" -#: utilities/fields.py:167 +#: netbox/utilities/fields.py:167 #, python-format msgid "" "%s(%r) is invalid. to_field parameter to CounterCacheField must be a string " "in the format 'field'" msgstr "" -#: utilities/forms/bulk_import.py:23 +#: netbox/utilities/forms/bulk_import.py:23 msgid "Enter object data in CSV, JSON or YAML format." msgstr "" -#: utilities/forms/bulk_import.py:36 +#: netbox/utilities/forms/bulk_import.py:36 msgid "CSV delimiter" msgstr "" -#: utilities/forms/bulk_import.py:37 +#: netbox/utilities/forms/bulk_import.py:37 msgid "The character which delimits CSV fields. Applies only to CSV format." msgstr "" -#: utilities/forms/bulk_import.py:51 +#: netbox/utilities/forms/bulk_import.py:51 msgid "Form data must be empty when uploading/selecting a file." msgstr "" -#: utilities/forms/bulk_import.py:80 +#: netbox/utilities/forms/bulk_import.py:80 #, python-brace-format msgid "Unknown data format: {format}" msgstr "" -#: utilities/forms/bulk_import.py:100 +#: netbox/utilities/forms/bulk_import.py:100 msgid "Unable to detect data format. Please specify." msgstr "" -#: utilities/forms/bulk_import.py:123 +#: netbox/utilities/forms/bulk_import.py:123 msgid "Invalid CSV delimiter" msgstr "" -#: utilities/forms/bulk_import.py:167 +#: netbox/utilities/forms/bulk_import.py:167 msgid "" "Invalid YAML data. Data must be in the form of multiple documents, or a " "single document comprising a list of dictionaries." msgstr "" -#: utilities/forms/fields/array.py:17 +#: netbox/utilities/forms/fields/array.py:17 #, python-brace-format msgid "" "Invalid list ({value}). Must be numeric and ranges must be in ascending " "order." msgstr "" -#: utilities/forms/fields/csv.py:44 +#: netbox/utilities/forms/fields/csv.py:44 #, python-brace-format msgid "Invalid value for a multiple choice field: {value}" msgstr "" -#: utilities/forms/fields/csv.py:57 utilities/forms/fields/csv.py:74 +#: netbox/utilities/forms/fields/csv.py:57 +#: netbox/utilities/forms/fields/csv.py:74 #, python-format msgid "Object not found: %(value)s" msgstr "" -#: utilities/forms/fields/csv.py:65 +#: netbox/utilities/forms/fields/csv.py:65 #, python-brace-format msgid "" "\"{value}\" is not a unique value for this field; multiple objects were found" msgstr "" -#: utilities/forms/fields/csv.py:97 +#: netbox/utilities/forms/fields/csv.py:97 msgid "Object type must be specified as \".\"" msgstr "" -#: utilities/forms/fields/csv.py:101 +#: netbox/utilities/forms/fields/csv.py:101 msgid "Invalid object type" msgstr "" -#: utilities/forms/fields/expandable.py:25 +#: netbox/utilities/forms/fields/expandable.py:25 msgid "" "Alphanumeric ranges are supported for bulk creation. Mixed cases and types " "within a single range are not supported (example: [ge,xe]-0/0/[0-9])." msgstr "" -#: utilities/forms/fields/expandable.py:46 +#: netbox/utilities/forms/fields/expandable.py:46 msgid "" "Specify a numeric range to create multiple IPs.
Example: 192.0.2." "[1,5,100-254]/24" msgstr "" -#: utilities/forms/fields/fields.py:31 +#: netbox/utilities/forms/fields/fields.py:31 #, python-brace-format msgid "" " Markdown syntax is supported" msgstr "" -#: utilities/forms/fields/fields.py:48 +#: netbox/utilities/forms/fields/fields.py:48 msgid "URL-friendly unique shorthand" msgstr "" -#: utilities/forms/fields/fields.py:101 +#: netbox/utilities/forms/fields/fields.py:101 msgid "Enter context data in JSON format." msgstr "" -#: utilities/forms/fields/fields.py:124 +#: netbox/utilities/forms/fields/fields.py:124 msgid "MAC address must be in EUI-48 format" msgstr "" -#: utilities/forms/forms.py:52 +#: netbox/utilities/forms/forms.py:52 msgid "Use regular expressions" msgstr "" -#: utilities/forms/forms.py:75 +#: netbox/utilities/forms/forms.py:75 msgid "" "Numeric ID of an existing object to update (if not creating a new object)" msgstr "" -#: utilities/forms/forms.py:92 +#: netbox/utilities/forms/forms.py:92 #, python-brace-format msgid "Unrecognized header: {name}" msgstr "" -#: utilities/forms/forms.py:118 +#: netbox/utilities/forms/forms.py:118 msgid "Available Columns" msgstr "" -#: utilities/forms/forms.py:126 +#: netbox/utilities/forms/forms.py:126 msgid "Selected Columns" msgstr "" -#: utilities/forms/mixins.py:44 +#: netbox/utilities/forms/mixins.py:44 msgid "" "This object has been modified since the form was rendered. Please consult " "the object's change log for details." msgstr "" -#: utilities/forms/utils.py:42 utilities/forms/utils.py:68 -#: utilities/forms/utils.py:85 utilities/forms/utils.py:87 +#: netbox/utilities/forms/utils.py:42 netbox/utilities/forms/utils.py:68 +#: netbox/utilities/forms/utils.py:85 netbox/utilities/forms/utils.py:87 #, python-brace-format msgid "Range \"{value}\" is invalid." msgstr "" -#: utilities/forms/utils.py:74 +#: netbox/utilities/forms/utils.py:74 #, python-brace-format msgid "" "Invalid range: Ending value ({end}) must be greater than beginning value " "({begin})." msgstr "" -#: utilities/forms/utils.py:232 +#: netbox/utilities/forms/utils.py:232 #, python-brace-format msgid "Duplicate or conflicting column header for \"{field}\"" msgstr "" -#: utilities/forms/utils.py:238 +#: netbox/utilities/forms/utils.py:238 #, python-brace-format msgid "Duplicate or conflicting column header for \"{header}\"" msgstr "" -#: utilities/forms/utils.py:247 +#: netbox/utilities/forms/utils.py:247 #, python-brace-format msgid "Row {row}: Expected {count_expected} columns but found {count_found}" msgstr "" -#: utilities/forms/utils.py:270 +#: netbox/utilities/forms/utils.py:270 #, python-brace-format msgid "Unexpected column header \"{field}\" found." msgstr "" -#: utilities/forms/utils.py:272 +#: netbox/utilities/forms/utils.py:272 #, python-brace-format msgid "Column \"{field}\" is not a related object; cannot use dots" msgstr "" -#: utilities/forms/utils.py:276 +#: netbox/utilities/forms/utils.py:276 #, python-brace-format msgid "Invalid related object attribute for column \"{field}\": {to_field}" msgstr "" -#: utilities/forms/utils.py:284 +#: netbox/utilities/forms/utils.py:284 #, python-brace-format msgid "Required column header \"{header}\" not found." msgstr "" -#: utilities/forms/widgets/apiselect.py:124 +#: netbox/utilities/forms/widgets/apiselect.py:124 #, python-brace-format msgid "Missing required value for dynamic query param: '{dynamic_params}'" msgstr "" -#: utilities/forms/widgets/apiselect.py:141 +#: netbox/utilities/forms/widgets/apiselect.py:141 #, python-brace-format msgid "Missing required value for static query param: '{static_params}'" msgstr "" -#: utilities/permissions.py:39 +#: netbox/utilities/permissions.py:39 #, python-brace-format msgid "" "Invalid permission name: {name}. Must be in the format ." "_" msgstr "" -#: utilities/permissions.py:57 +#: netbox/utilities/permissions.py:57 #, python-brace-format msgid "Unknown app_label/model_name for {name}" msgstr "" -#: utilities/request.py:76 +#: netbox/utilities/request.py:76 #, python-brace-format msgid "Invalid IP address set for {header}: {ip}" msgstr "" -#: utilities/tables.py:47 +#: netbox/utilities/tables.py:47 #, python-brace-format msgid "A column named {name} is already defined for table {table_name}" msgstr "" -#: utilities/templates/builtins/customfield_value.html:30 +#: netbox/utilities/templates/builtins/customfield_value.html:30 msgid "Not defined" msgstr "" -#: utilities/templates/buttons/bookmark.html:9 +#: netbox/utilities/templates/buttons/bookmark.html:9 msgid "Unbookmark" msgstr "" -#: utilities/templates/buttons/bookmark.html:13 +#: netbox/utilities/templates/buttons/bookmark.html:13 msgid "Bookmark" msgstr "" -#: utilities/templates/buttons/clone.html:4 +#: netbox/utilities/templates/buttons/clone.html:4 msgid "Clone" msgstr "" -#: utilities/templates/buttons/export.html:7 +#: netbox/utilities/templates/buttons/export.html:7 msgid "Current View" msgstr "" -#: utilities/templates/buttons/export.html:8 +#: netbox/utilities/templates/buttons/export.html:8 msgid "All Data" msgstr "" -#: utilities/templates/buttons/export.html:28 +#: netbox/utilities/templates/buttons/export.html:28 msgid "Add export template" msgstr "" -#: utilities/templates/buttons/import.html:4 +#: netbox/utilities/templates/buttons/import.html:4 msgid "Import" msgstr "" -#: utilities/templates/form_helpers/render_field.html:39 +#: netbox/utilities/templates/form_helpers/render_field.html:39 msgid "Copy to clipboard" msgstr "" -#: utilities/templates/form_helpers/render_field.html:55 +#: netbox/utilities/templates/form_helpers/render_field.html:55 msgid "This field is required" msgstr "" -#: utilities/templates/form_helpers/render_field.html:68 +#: netbox/utilities/templates/form_helpers/render_field.html:68 msgid "Set Null" msgstr "" -#: utilities/templates/helpers/applied_filters.html:11 +#: netbox/utilities/templates/helpers/applied_filters.html:11 msgid "Clear all" msgstr "" -#: utilities/templates/helpers/table_config_form.html:8 +#: netbox/utilities/templates/helpers/table_config_form.html:8 msgid "Table Configuration" msgstr "" -#: utilities/templates/helpers/table_config_form.html:31 +#: netbox/utilities/templates/helpers/table_config_form.html:31 msgid "Move Up" msgstr "" -#: utilities/templates/helpers/table_config_form.html:34 +#: netbox/utilities/templates/helpers/table_config_form.html:34 msgid "Move Down" msgstr "" -#: utilities/templates/widgets/apiselect.html:7 +#: netbox/utilities/templates/widgets/apiselect.html:7 msgid "Open selector" msgstr "" -#: utilities/templates/widgets/clearable_file_input.html:12 +#: netbox/utilities/templates/widgets/clearable_file_input.html:12 msgid "None assigned" msgstr "" -#: utilities/templates/widgets/markdown_input.html:6 +#: netbox/utilities/templates/widgets/markdown_input.html:6 msgid "Write" msgstr "" -#: utilities/testing/views.py:633 +#: netbox/utilities/testing/views.py:633 msgid "The test must define csv_update_data." msgstr "" -#: utilities/validators.py:65 +#: netbox/utilities/validators.py:65 #, python-brace-format msgid "{value} is not a valid regular expression." msgstr "" -#: utilities/views.py:40 +#: netbox/utilities/views.py:40 #, python-brace-format msgid "{self.__class__.__name__} must implement get_required_permission()" msgstr "" -#: utilities/views.py:76 +#: netbox/utilities/views.py:76 #, python-brace-format msgid "{class_name} must implement get_required_permission()" msgstr "" -#: utilities/views.py:100 +#: netbox/utilities/views.py:100 #, python-brace-format msgid "" "{class_name} has no queryset defined. ObjectPermissionRequiredMixin may only " "be used on views which define a base queryset" msgstr "" -#: virtualization/filtersets.py:79 +#: netbox/virtualization/filtersets.py:79 msgid "Parent group (ID)" msgstr "" -#: virtualization/filtersets.py:85 +#: netbox/virtualization/filtersets.py:85 msgid "Parent group (slug)" msgstr "" -#: virtualization/filtersets.py:89 virtualization/filtersets.py:141 +#: netbox/virtualization/filtersets.py:89 +#: netbox/virtualization/filtersets.py:141 msgid "Cluster type (ID)" msgstr "" -#: virtualization/filtersets.py:130 +#: netbox/virtualization/filtersets.py:130 msgid "Cluster group (ID)" msgstr "" -#: virtualization/filtersets.py:151 virtualization/filtersets.py:267 +#: netbox/virtualization/filtersets.py:151 +#: netbox/virtualization/filtersets.py:267 msgid "Cluster (ID)" msgstr "" -#: virtualization/forms/bulk_edit.py:166 -#: virtualization/models/virtualmachines.py:115 +#: netbox/virtualization/forms/bulk_edit.py:166 +#: netbox/virtualization/models/virtualmachines.py:115 msgid "vCPUs" msgstr "" -#: virtualization/forms/bulk_edit.py:170 +#: netbox/virtualization/forms/bulk_edit.py:170 msgid "Memory (MB)" msgstr "" -#: virtualization/forms/bulk_edit.py:174 +#: netbox/virtualization/forms/bulk_edit.py:174 msgid "Disk (GB)" msgstr "" -#: virtualization/forms/bulk_edit.py:334 virtualization/forms/filtersets.py:247 +#: netbox/virtualization/forms/bulk_edit.py:334 +#: netbox/virtualization/forms/filtersets.py:247 msgid "Size (GB)" msgstr "" -#: virtualization/forms/bulk_import.py:44 +#: netbox/virtualization/forms/bulk_import.py:44 msgid "Type of cluster" msgstr "" -#: virtualization/forms/bulk_import.py:51 +#: netbox/virtualization/forms/bulk_import.py:51 msgid "Assigned cluster group" msgstr "" -#: virtualization/forms/bulk_import.py:96 +#: netbox/virtualization/forms/bulk_import.py:96 msgid "Assigned cluster" msgstr "" -#: virtualization/forms/bulk_import.py:103 +#: netbox/virtualization/forms/bulk_import.py:103 msgid "Assigned device within cluster" msgstr "" -#: virtualization/forms/model_forms.py:153 +#: netbox/virtualization/forms/model_forms.py:153 #, python-brace-format msgid "" "{device} belongs to a different site ({device_site}) than the cluster " "({cluster_site})" msgstr "" -#: virtualization/forms/model_forms.py:192 +#: netbox/virtualization/forms/model_forms.py:192 msgid "Optionally pin this VM to a specific host device within the cluster" msgstr "" -#: virtualization/forms/model_forms.py:221 +#: netbox/virtualization/forms/model_forms.py:221 msgid "Site/Cluster" msgstr "" -#: virtualization/forms/model_forms.py:244 +#: netbox/virtualization/forms/model_forms.py:244 msgid "Disk size is managed via the attachment of virtual disks." msgstr "" -#: virtualization/forms/model_forms.py:372 +#: netbox/virtualization/forms/model_forms.py:372 msgid "Disk" msgstr "" -#: virtualization/models/clusters.py:25 +#: netbox/virtualization/models/clusters.py:25 msgid "cluster type" msgstr "" -#: virtualization/models/clusters.py:26 +#: netbox/virtualization/models/clusters.py:26 msgid "cluster types" msgstr "" -#: virtualization/models/clusters.py:45 +#: netbox/virtualization/models/clusters.py:45 msgid "cluster group" msgstr "" -#: virtualization/models/clusters.py:46 +#: netbox/virtualization/models/clusters.py:46 msgid "cluster groups" msgstr "" -#: virtualization/models/clusters.py:121 +#: netbox/virtualization/models/clusters.py:121 msgid "cluster" msgstr "" -#: virtualization/models/clusters.py:122 +#: netbox/virtualization/models/clusters.py:122 msgid "clusters" msgstr "" -#: virtualization/models/clusters.py:141 +#: netbox/virtualization/models/clusters.py:141 #, python-brace-format msgid "" "{count} devices are assigned as hosts for this cluster but are not in site " "{site}" msgstr "" -#: virtualization/models/virtualmachines.py:123 +#: netbox/virtualization/models/virtualmachines.py:123 msgid "memory (MB)" msgstr "" -#: virtualization/models/virtualmachines.py:128 +#: netbox/virtualization/models/virtualmachines.py:128 msgid "disk (GB)" msgstr "" -#: virtualization/models/virtualmachines.py:161 +#: netbox/virtualization/models/virtualmachines.py:161 msgid "Virtual machine name must be unique per cluster." msgstr "" -#: virtualization/models/virtualmachines.py:164 +#: netbox/virtualization/models/virtualmachines.py:164 msgid "virtual machine" msgstr "" -#: virtualization/models/virtualmachines.py:165 +#: netbox/virtualization/models/virtualmachines.py:165 msgid "virtual machines" msgstr "" -#: virtualization/models/virtualmachines.py:179 +#: netbox/virtualization/models/virtualmachines.py:179 msgid "A virtual machine must be assigned to a site and/or cluster." msgstr "" -#: virtualization/models/virtualmachines.py:186 +#: netbox/virtualization/models/virtualmachines.py:186 #, python-brace-format msgid "The selected cluster ({cluster}) is not assigned to this site ({site})." msgstr "" -#: virtualization/models/virtualmachines.py:193 +#: netbox/virtualization/models/virtualmachines.py:193 msgid "Must specify a cluster when assigning a host device." msgstr "" -#: virtualization/models/virtualmachines.py:198 +#: netbox/virtualization/models/virtualmachines.py:198 #, python-brace-format msgid "" "The selected device ({device}) is not assigned to this cluster ({cluster})." msgstr "" -#: virtualization/models/virtualmachines.py:210 +#: netbox/virtualization/models/virtualmachines.py:210 #, python-brace-format msgid "" "The specified disk size ({size}) must match the aggregate size of assigned " "virtual disks ({total_size})." msgstr "" -#: virtualization/models/virtualmachines.py:224 +#: netbox/virtualization/models/virtualmachines.py:224 #, python-brace-format msgid "Must be an IPv{family} address. ({ip} is an IPv{version} address.)" msgstr "" -#: virtualization/models/virtualmachines.py:233 +#: netbox/virtualization/models/virtualmachines.py:233 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this VM." msgstr "" -#: virtualization/models/virtualmachines.py:391 +#: netbox/virtualization/models/virtualmachines.py:391 #, python-brace-format msgid "" "The selected parent interface ({parent}) belongs to a different virtual " "machine ({virtual_machine})." msgstr "" -#: virtualization/models/virtualmachines.py:406 +#: netbox/virtualization/models/virtualmachines.py:406 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different virtual " "machine ({virtual_machine})." msgstr "" -#: virtualization/models/virtualmachines.py:417 +#: netbox/virtualization/models/virtualmachines.py:417 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " "interface's parent virtual machine, or it must be global." msgstr "" -#: virtualization/models/virtualmachines.py:429 +#: netbox/virtualization/models/virtualmachines.py:429 msgid "size (GB)" msgstr "" -#: virtualization/models/virtualmachines.py:433 +#: netbox/virtualization/models/virtualmachines.py:433 msgid "virtual disk" msgstr "" -#: virtualization/models/virtualmachines.py:434 +#: netbox/virtualization/models/virtualmachines.py:434 msgid "virtual disks" msgstr "" -#: vpn/choices.py:31 +#: netbox/vpn/choices.py:31 msgid "IPsec - Transport" msgstr "" -#: vpn/choices.py:32 +#: netbox/vpn/choices.py:32 msgid "IPsec - Tunnel" msgstr "" -#: vpn/choices.py:33 +#: netbox/vpn/choices.py:33 msgid "IP-in-IP" msgstr "" -#: vpn/choices.py:34 +#: netbox/vpn/choices.py:34 msgid "GRE" msgstr "" -#: vpn/choices.py:56 +#: netbox/vpn/choices.py:56 msgid "Hub" msgstr "" -#: vpn/choices.py:57 +#: netbox/vpn/choices.py:57 msgid "Spoke" msgstr "" -#: vpn/choices.py:80 +#: netbox/vpn/choices.py:80 msgid "Aggressive" msgstr "" -#: vpn/choices.py:81 +#: netbox/vpn/choices.py:81 msgid "Main" msgstr "" -#: vpn/choices.py:92 +#: netbox/vpn/choices.py:92 msgid "Pre-shared keys" msgstr "" -#: vpn/choices.py:93 +#: netbox/vpn/choices.py:93 msgid "Certificates" msgstr "" -#: vpn/choices.py:94 +#: netbox/vpn/choices.py:94 msgid "RSA signatures" msgstr "" -#: vpn/choices.py:95 +#: netbox/vpn/choices.py:95 msgid "DSA signatures" msgstr "" -#: vpn/choices.py:178 vpn/choices.py:179 vpn/choices.py:180 vpn/choices.py:181 -#: vpn/choices.py:182 vpn/choices.py:183 vpn/choices.py:184 vpn/choices.py:185 -#: vpn/choices.py:186 vpn/choices.py:187 vpn/choices.py:188 vpn/choices.py:189 -#: vpn/choices.py:190 vpn/choices.py:191 vpn/choices.py:192 vpn/choices.py:193 -#: vpn/choices.py:194 vpn/choices.py:195 vpn/choices.py:196 vpn/choices.py:197 -#: vpn/choices.py:198 vpn/choices.py:199 vpn/choices.py:200 vpn/choices.py:201 +#: netbox/vpn/choices.py:178 netbox/vpn/choices.py:179 +#: netbox/vpn/choices.py:180 netbox/vpn/choices.py:181 +#: netbox/vpn/choices.py:182 netbox/vpn/choices.py:183 +#: netbox/vpn/choices.py:184 netbox/vpn/choices.py:185 +#: netbox/vpn/choices.py:186 netbox/vpn/choices.py:187 +#: netbox/vpn/choices.py:188 netbox/vpn/choices.py:189 +#: netbox/vpn/choices.py:190 netbox/vpn/choices.py:191 +#: netbox/vpn/choices.py:192 netbox/vpn/choices.py:193 +#: netbox/vpn/choices.py:194 netbox/vpn/choices.py:195 +#: netbox/vpn/choices.py:196 netbox/vpn/choices.py:197 +#: netbox/vpn/choices.py:198 netbox/vpn/choices.py:199 +#: netbox/vpn/choices.py:200 netbox/vpn/choices.py:201 #, python-brace-format msgid "Group {n}" msgstr "" -#: vpn/choices.py:241 +#: netbox/vpn/choices.py:241 msgid "Ethernet Private LAN" msgstr "" -#: vpn/choices.py:242 +#: netbox/vpn/choices.py:242 msgid "Ethernet Virtual Private LAN" msgstr "" -#: vpn/choices.py:245 +#: netbox/vpn/choices.py:245 msgid "Ethernet Private Tree" msgstr "" -#: vpn/choices.py:246 +#: netbox/vpn/choices.py:246 msgid "Ethernet Virtual Private Tree" msgstr "" -#: vpn/filtersets.py:41 +#: netbox/vpn/filtersets.py:41 msgid "Tunnel group (ID)" msgstr "" -#: vpn/filtersets.py:47 +#: netbox/vpn/filtersets.py:47 msgid "Tunnel group (slug)" msgstr "" -#: vpn/filtersets.py:54 +#: netbox/vpn/filtersets.py:54 msgid "IPSec profile (ID)" msgstr "" -#: vpn/filtersets.py:60 +#: netbox/vpn/filtersets.py:60 msgid "IPSec profile (name)" msgstr "" -#: vpn/filtersets.py:81 +#: netbox/vpn/filtersets.py:81 msgid "Tunnel (ID)" msgstr "" -#: vpn/filtersets.py:87 +#: netbox/vpn/filtersets.py:87 msgid "Tunnel (name)" msgstr "" -#: vpn/filtersets.py:118 +#: netbox/vpn/filtersets.py:118 msgid "Outside IP (ID)" msgstr "" -#: vpn/filtersets.py:130 vpn/filtersets.py:153 vpn/filtersets.py:282 +#: netbox/vpn/filtersets.py:130 netbox/vpn/filtersets.py:153 +#: netbox/vpn/filtersets.py:282 msgid "IKE policy (ID)" msgstr "" -#: vpn/filtersets.py:136 vpn/filtersets.py:159 vpn/filtersets.py:288 +#: netbox/vpn/filtersets.py:136 netbox/vpn/filtersets.py:159 +#: netbox/vpn/filtersets.py:288 msgid "IKE policy (name)" msgstr "" -#: vpn/filtersets.py:215 vpn/filtersets.py:292 +#: netbox/vpn/filtersets.py:215 netbox/vpn/filtersets.py:292 msgid "IPSec policy (ID)" msgstr "" -#: vpn/filtersets.py:221 vpn/filtersets.py:298 +#: netbox/vpn/filtersets.py:221 netbox/vpn/filtersets.py:298 msgid "IPSec policy (name)" msgstr "" -#: vpn/filtersets.py:367 +#: netbox/vpn/filtersets.py:367 msgid "L2VPN (slug)" msgstr "" -#: vpn/filtersets.py:431 +#: netbox/vpn/filtersets.py:431 msgid "VM Interface (ID)" msgstr "" -#: vpn/filtersets.py:437 +#: netbox/vpn/filtersets.py:437 msgid "VLAN (name)" msgstr "" -#: vpn/forms/bulk_edit.py:45 vpn/forms/bulk_import.py:42 -#: vpn/forms/filtersets.py:54 +#: netbox/vpn/forms/bulk_edit.py:45 netbox/vpn/forms/bulk_import.py:42 +#: netbox/vpn/forms/filtersets.py:54 msgid "Tunnel group" msgstr "" -#: vpn/forms/bulk_edit.py:117 vpn/models/crypto.py:47 +#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:47 msgid "SA lifetime" msgstr "" -#: vpn/forms/bulk_edit.py:151 wireless/forms/bulk_edit.py:79 -#: wireless/forms/bulk_edit.py:126 wireless/forms/filtersets.py:64 -#: wireless/forms/filtersets.py:98 +#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:79 +#: netbox/wireless/forms/bulk_edit.py:126 +#: netbox/wireless/forms/filtersets.py:64 +#: netbox/wireless/forms/filtersets.py:98 msgid "Pre-shared key" msgstr "" -#: vpn/forms/bulk_edit.py:237 vpn/forms/bulk_import.py:239 -#: vpn/forms/filtersets.py:199 vpn/forms/model_forms.py:370 -#: vpn/models/crypto.py:104 +#: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239 +#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370 +#: netbox/vpn/models/crypto.py:104 msgid "IKE policy" msgstr "" -#: vpn/forms/bulk_edit.py:242 vpn/forms/bulk_import.py:244 -#: vpn/forms/filtersets.py:204 vpn/forms/model_forms.py:374 -#: vpn/models/crypto.py:209 +#: netbox/vpn/forms/bulk_edit.py:242 netbox/vpn/forms/bulk_import.py:244 +#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:374 +#: netbox/vpn/models/crypto.py:209 msgid "IPSec policy" msgstr "" -#: vpn/forms/bulk_import.py:50 +#: netbox/vpn/forms/bulk_import.py:50 msgid "Tunnel encapsulation" msgstr "" -#: vpn/forms/bulk_import.py:83 +#: netbox/vpn/forms/bulk_import.py:83 msgid "Operational role" msgstr "" -#: vpn/forms/bulk_import.py:90 +#: netbox/vpn/forms/bulk_import.py:90 msgid "Parent device of assigned interface" msgstr "" -#: vpn/forms/bulk_import.py:97 +#: netbox/vpn/forms/bulk_import.py:97 msgid "Parent VM of assigned interface" msgstr "" -#: vpn/forms/bulk_import.py:104 +#: netbox/vpn/forms/bulk_import.py:104 msgid "Device or virtual machine interface" msgstr "" -#: vpn/forms/bulk_import.py:183 +#: netbox/vpn/forms/bulk_import.py:183 msgid "IKE proposal(s)" msgstr "" -#: vpn/forms/bulk_import.py:215 vpn/models/crypto.py:197 +#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:197 msgid "Diffie-Hellman group for Perfect Forward Secrecy" msgstr "" -#: vpn/forms/bulk_import.py:222 +#: netbox/vpn/forms/bulk_import.py:222 msgid "IPSec proposal(s)" msgstr "" -#: vpn/forms/bulk_import.py:236 +#: netbox/vpn/forms/bulk_import.py:236 msgid "IPSec protocol" msgstr "" -#: vpn/forms/bulk_import.py:266 +#: netbox/vpn/forms/bulk_import.py:266 msgid "L2VPN type" msgstr "" -#: vpn/forms/bulk_import.py:287 +#: netbox/vpn/forms/bulk_import.py:287 msgid "Parent device (for interface)" msgstr "" -#: vpn/forms/bulk_import.py:294 +#: netbox/vpn/forms/bulk_import.py:294 msgid "Parent virtual machine (for interface)" msgstr "" -#: vpn/forms/bulk_import.py:301 +#: netbox/vpn/forms/bulk_import.py:301 msgid "Assigned interface (device or VM)" msgstr "" -#: vpn/forms/bulk_import.py:334 +#: netbox/vpn/forms/bulk_import.py:334 msgid "Cannot import device and VM interface terminations simultaneously." msgstr "" -#: vpn/forms/bulk_import.py:336 +#: netbox/vpn/forms/bulk_import.py:336 msgid "Each termination must specify either an interface or a VLAN." msgstr "" -#: vpn/forms/bulk_import.py:338 +#: netbox/vpn/forms/bulk_import.py:338 msgid "Cannot assign both an interface and a VLAN." msgstr "" -#: vpn/forms/filtersets.py:130 +#: netbox/vpn/forms/filtersets.py:130 msgid "IKE version" msgstr "" -#: vpn/forms/filtersets.py:142 vpn/forms/filtersets.py:175 -#: vpn/forms/model_forms.py:298 vpn/forms/model_forms.py:334 +#: netbox/vpn/forms/filtersets.py:142 netbox/vpn/forms/filtersets.py:175 +#: netbox/vpn/forms/model_forms.py:298 netbox/vpn/forms/model_forms.py:334 msgid "Proposal" msgstr "" -#: vpn/forms/filtersets.py:251 +#: netbox/vpn/forms/filtersets.py:251 msgid "Assigned Object Type" msgstr "" -#: vpn/forms/model_forms.py:95 vpn/forms/model_forms.py:130 -#: vpn/forms/model_forms.py:240 vpn/tables/tunnels.py:91 +#: netbox/vpn/forms/model_forms.py:95 netbox/vpn/forms/model_forms.py:130 +#: netbox/vpn/forms/model_forms.py:240 netbox/vpn/tables/tunnels.py:91 msgid "Tunnel interface" msgstr "" -#: vpn/forms/model_forms.py:150 +#: netbox/vpn/forms/model_forms.py:150 msgid "First Termination" msgstr "" -#: vpn/forms/model_forms.py:153 +#: netbox/vpn/forms/model_forms.py:153 msgid "Second Termination" msgstr "" -#: vpn/forms/model_forms.py:197 +#: netbox/vpn/forms/model_forms.py:197 msgid "This parameter is required when defining a termination." msgstr "" -#: vpn/forms/model_forms.py:320 vpn/forms/model_forms.py:356 +#: netbox/vpn/forms/model_forms.py:320 netbox/vpn/forms/model_forms.py:356 msgid "Policy" msgstr "" -#: vpn/forms/model_forms.py:487 +#: netbox/vpn/forms/model_forms.py:487 msgid "A termination must specify an interface or VLAN." msgstr "" -#: vpn/forms/model_forms.py:489 +#: netbox/vpn/forms/model_forms.py:489 msgid "" "A termination can only have one terminating object (an interface or VLAN)." msgstr "" -#: vpn/models/crypto.py:33 +#: netbox/vpn/models/crypto.py:33 msgid "encryption algorithm" msgstr "" -#: vpn/models/crypto.py:37 +#: netbox/vpn/models/crypto.py:37 msgid "authentication algorithm" msgstr "" -#: vpn/models/crypto.py:44 +#: netbox/vpn/models/crypto.py:44 msgid "Diffie-Hellman group ID" msgstr "" -#: vpn/models/crypto.py:50 +#: netbox/vpn/models/crypto.py:50 msgid "Security association lifetime (in seconds)" msgstr "" -#: vpn/models/crypto.py:59 +#: netbox/vpn/models/crypto.py:59 msgid "IKE proposal" msgstr "" -#: vpn/models/crypto.py:60 +#: netbox/vpn/models/crypto.py:60 msgid "IKE proposals" msgstr "" -#: vpn/models/crypto.py:76 +#: netbox/vpn/models/crypto.py:76 msgid "version" msgstr "" -#: vpn/models/crypto.py:88 vpn/models/crypto.py:190 +#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:190 msgid "proposals" msgstr "" -#: vpn/models/crypto.py:91 wireless/models.py:38 +#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:38 msgid "pre-shared key" msgstr "" -#: vpn/models/crypto.py:105 +#: netbox/vpn/models/crypto.py:105 msgid "IKE policies" msgstr "" -#: vpn/models/crypto.py:118 +#: netbox/vpn/models/crypto.py:118 msgid "Mode is required for selected IKE version" msgstr "" -#: vpn/models/crypto.py:122 +#: netbox/vpn/models/crypto.py:122 msgid "Mode cannot be used for selected IKE version" msgstr "" -#: vpn/models/crypto.py:136 +#: netbox/vpn/models/crypto.py:136 msgid "encryption" msgstr "" -#: vpn/models/crypto.py:141 +#: netbox/vpn/models/crypto.py:141 msgid "authentication" msgstr "" -#: vpn/models/crypto.py:149 +#: netbox/vpn/models/crypto.py:149 msgid "Security association lifetime (seconds)" msgstr "" -#: vpn/models/crypto.py:155 +#: netbox/vpn/models/crypto.py:155 msgid "Security association lifetime (in kilobytes)" msgstr "" -#: vpn/models/crypto.py:164 +#: netbox/vpn/models/crypto.py:164 msgid "IPSec proposal" msgstr "" -#: vpn/models/crypto.py:165 +#: netbox/vpn/models/crypto.py:165 msgid "IPSec proposals" msgstr "" -#: vpn/models/crypto.py:178 +#: netbox/vpn/models/crypto.py:178 msgid "Encryption and/or authentication algorithm must be defined" msgstr "" -#: vpn/models/crypto.py:210 +#: netbox/vpn/models/crypto.py:210 msgid "IPSec policies" msgstr "" -#: vpn/models/crypto.py:251 +#: netbox/vpn/models/crypto.py:251 msgid "IPSec profiles" msgstr "" -#: vpn/models/l2vpn.py:116 +#: netbox/vpn/models/l2vpn.py:116 msgid "L2VPN termination" msgstr "" -#: vpn/models/l2vpn.py:117 +#: netbox/vpn/models/l2vpn.py:117 msgid "L2VPN terminations" msgstr "" -#: vpn/models/l2vpn.py:135 +#: netbox/vpn/models/l2vpn.py:135 #, python-brace-format msgid "L2VPN Termination already assigned ({assigned_object})" msgstr "" -#: vpn/models/l2vpn.py:147 +#: netbox/vpn/models/l2vpn.py:147 #, python-brace-format msgid "" "{l2vpn_type} L2VPNs cannot have more than two terminations; found " "{terminations_count} already defined." msgstr "" -#: vpn/models/tunnels.py:26 +#: netbox/vpn/models/tunnels.py:26 msgid "tunnel group" msgstr "" -#: vpn/models/tunnels.py:27 +#: netbox/vpn/models/tunnels.py:27 msgid "tunnel groups" msgstr "" -#: vpn/models/tunnels.py:53 +#: netbox/vpn/models/tunnels.py:53 msgid "encapsulation" msgstr "" -#: vpn/models/tunnels.py:72 +#: netbox/vpn/models/tunnels.py:72 msgid "tunnel ID" msgstr "" -#: vpn/models/tunnels.py:94 +#: netbox/vpn/models/tunnels.py:94 msgid "tunnel" msgstr "" -#: vpn/models/tunnels.py:95 +#: netbox/vpn/models/tunnels.py:95 msgid "tunnels" msgstr "" -#: vpn/models/tunnels.py:153 +#: netbox/vpn/models/tunnels.py:153 msgid "An object may be terminated to only one tunnel at a time." msgstr "" -#: vpn/models/tunnels.py:156 +#: netbox/vpn/models/tunnels.py:156 msgid "tunnel termination" msgstr "" -#: vpn/models/tunnels.py:157 +#: netbox/vpn/models/tunnels.py:157 msgid "tunnel terminations" msgstr "" -#: vpn/models/tunnels.py:174 +#: netbox/vpn/models/tunnels.py:174 #, python-brace-format msgid "{name} is already attached to a tunnel ({tunnel})." msgstr "" -#: vpn/tables/crypto.py:22 +#: netbox/vpn/tables/crypto.py:22 msgid "Authentication Method" msgstr "" -#: vpn/tables/crypto.py:25 vpn/tables/crypto.py:97 +#: netbox/vpn/tables/crypto.py:25 netbox/vpn/tables/crypto.py:97 msgid "Encryption Algorithm" msgstr "" -#: vpn/tables/crypto.py:28 vpn/tables/crypto.py:100 +#: netbox/vpn/tables/crypto.py:28 netbox/vpn/tables/crypto.py:100 msgid "Authentication Algorithm" msgstr "" -#: vpn/tables/crypto.py:34 +#: netbox/vpn/tables/crypto.py:34 msgid "SA Lifetime" msgstr "" -#: vpn/tables/crypto.py:71 +#: netbox/vpn/tables/crypto.py:71 msgid "Pre-shared Key" msgstr "" -#: vpn/tables/crypto.py:103 +#: netbox/vpn/tables/crypto.py:103 msgid "SA Lifetime (Seconds)" msgstr "" -#: vpn/tables/crypto.py:106 +#: netbox/vpn/tables/crypto.py:106 msgid "SA Lifetime (KB)" msgstr "" -#: vpn/tables/l2vpn.py:69 +#: netbox/vpn/tables/l2vpn.py:69 msgid "Object Parent" msgstr "" -#: vpn/tables/l2vpn.py:74 +#: netbox/vpn/tables/l2vpn.py:74 msgid "Object Site" msgstr "" -#: wireless/choices.py:11 +#: netbox/wireless/choices.py:11 msgid "Access point" msgstr "" -#: wireless/choices.py:12 +#: netbox/wireless/choices.py:12 msgid "Station" msgstr "" -#: wireless/choices.py:467 +#: netbox/wireless/choices.py:467 msgid "Open" msgstr "" -#: wireless/choices.py:469 +#: netbox/wireless/choices.py:469 msgid "WPA Personal (PSK)" msgstr "" -#: wireless/choices.py:470 +#: netbox/wireless/choices.py:470 msgid "WPA Enterprise" msgstr "" -#: wireless/forms/bulk_edit.py:73 wireless/forms/bulk_edit.py:120 -#: wireless/forms/bulk_import.py:68 wireless/forms/bulk_import.py:71 -#: wireless/forms/bulk_import.py:110 wireless/forms/bulk_import.py:113 -#: wireless/forms/filtersets.py:59 wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/bulk_edit.py:73 netbox/wireless/forms/bulk_edit.py:120 +#: netbox/wireless/forms/bulk_import.py:68 +#: netbox/wireless/forms/bulk_import.py:71 +#: netbox/wireless/forms/bulk_import.py:110 +#: netbox/wireless/forms/bulk_import.py:113 +#: netbox/wireless/forms/filtersets.py:59 +#: netbox/wireless/forms/filtersets.py:93 msgid "Authentication cipher" msgstr "" -#: wireless/forms/bulk_import.py:52 +#: netbox/wireless/forms/bulk_import.py:52 msgid "Bridged VLAN" msgstr "" -#: wireless/forms/bulk_import.py:89 wireless/tables/wirelesslink.py:27 +#: netbox/wireless/forms/bulk_import.py:89 +#: netbox/wireless/tables/wirelesslink.py:27 msgid "Interface A" msgstr "" -#: wireless/forms/bulk_import.py:93 wireless/tables/wirelesslink.py:36 +#: netbox/wireless/forms/bulk_import.py:93 +#: netbox/wireless/tables/wirelesslink.py:36 msgid "Interface B" msgstr "" -#: wireless/forms/model_forms.py:161 +#: netbox/wireless/forms/model_forms.py:161 msgid "Side B" msgstr "" -#: wireless/models.py:30 +#: netbox/wireless/models.py:30 msgid "authentication cipher" msgstr "" -#: wireless/models.py:68 +#: netbox/wireless/models.py:68 msgid "wireless LAN group" msgstr "" -#: wireless/models.py:69 +#: netbox/wireless/models.py:69 msgid "wireless LAN groups" msgstr "" -#: wireless/models.py:115 +#: netbox/wireless/models.py:115 msgid "wireless LAN" msgstr "" -#: wireless/models.py:143 +#: netbox/wireless/models.py:143 msgid "interface A" msgstr "" -#: wireless/models.py:150 +#: netbox/wireless/models.py:150 msgid "interface B" msgstr "" -#: wireless/models.py:198 +#: netbox/wireless/models.py:198 msgid "wireless link" msgstr "" -#: wireless/models.py:199 +#: netbox/wireless/models.py:199 msgid "wireless links" msgstr "" -#: wireless/models.py:216 wireless/models.py:222 +#: netbox/wireless/models.py:216 netbox/wireless/models.py:222 #, python-brace-format msgid "{type} is not a wireless interface." msgstr "" -#: wireless/utils.py:16 +#: netbox/wireless/utils.py:16 #, python-brace-format msgid "Invalid channel value: {channel}" msgstr "" -#: wireless/utils.py:26 +#: netbox/wireless/utils.py:26 #, python-brace-format msgid "Invalid channel attribute: {name}" msgstr "" From f86547c59c6000bdad3d1c2e7ddbe1d49e1506b6 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 30 May 2024 10:43:54 -0400 Subject: [PATCH 17/38] Enable scheduled runs --- .github/workflows/update-translation-strings.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/update-translation-strings.yml b/.github/workflows/update-translation-strings.yml index a2802ab92..5b0c09300 100644 --- a/.github/workflows/update-translation-strings.yml +++ b/.github/workflows/update-translation-strings.yml @@ -1,10 +1,16 @@ name: Update translation strings -on: workflow_dispatch +on: + schedule: + - cron: '0 5 * * *' + workflow_dispatch: permissions: contents: write +env: + LOCALE: "en" + jobs: makemessages: runs-on: ubuntu-latest @@ -29,7 +35,7 @@ jobs: pip install -r requirements.txt - name: Run makemessages - run: python netbox/manage.py makemessages -l en + run: python netbox/manage.py makemessages -l ${{ env.LOCALE }} - name: Commit changes uses: EndBug/add-and-commit@v9 From e987e96002533887bf1e59bc3b7188fe014b95cf Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Wed, 29 May 2024 11:33:09 -0400 Subject: [PATCH 18/38] Fixes #13422: Rebuild MPTT trees for applicable models when merging staged changes --- netbox/extras/models/staging.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/netbox/extras/models/staging.py b/netbox/extras/models/staging.py index 6e381ce70..7ffbde089 100644 --- a/netbox/extras/models/staging.py +++ b/netbox/extras/models/staging.py @@ -4,6 +4,7 @@ from django.contrib.auth import get_user_model from django.contrib.contenttypes.fields import GenericForeignKey from django.db import models, transaction from django.utils.translation import gettext_lazy as _ +from mptt.models import MPTTModel from extras.choices import ChangeActionChoices from netbox.models import ChangeLoggedModel @@ -124,6 +125,11 @@ class StagedChange(CustomValidationMixin, EventRulesMixin, models.Model): instance = self.model.objects.get(pk=self.object_id) logger.info(f'Deleting {self.model._meta.verbose_name} {instance}') instance.delete() + + # Rebuild the MPTT tree where applicable + if issubclass(self.model, MPTTModel): + self.model.objects.rebuild() + apply.alters_data = True def get_action_color(self): From c3ce63611738475392ca085698999fd8a7ec5b3f Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 31 May 2024 10:29:53 -0400 Subject: [PATCH 19/38] Changelog for #13422, #14810, #15489, #16202, #16286, #16290 --- docs/release-notes/version-4.0.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/release-notes/version-4.0.md b/docs/release-notes/version-4.0.md index 14fdbd1d0..d837d0cf2 100644 --- a/docs/release-notes/version-4.0.md +++ b/docs/release-notes/version-4.0.md @@ -2,6 +2,18 @@ ## v4.0.4 (FUTURE) +### Enhancements + +* [#14810](https://github.com/netbox-community/netbox/issues/14810) - Enable contact assignment for services +* [#15489](https://github.com/netbox-community/netbox/issues/15489) - Add 1000Base-TX interface type +* [#16290](https://github.com/netbox-community/netbox/issues/16290) - Capture entire object in changelog data (but continue to display only non-internal attributes) + +### Bug Fixes + +* [#13422](https://github.com/netbox-community/netbox/issues/13422) - Rebuild MPTT trees for applicable models after merging staged changes +* [#16202](https://github.com/netbox-community/netbox/issues/16202) - Fix site map button URL for certain localizations +* [#16286](https://github.com/netbox-community/netbox/issues/16286) - Fix global search support for provider accounts + --- ## v4.0.3 (2024-05-22) From ef64ff2d630c20efc499800130c01bf974db298a Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 31 May 2024 13:00:07 -0400 Subject: [PATCH 20/38] Fixes #16312: Fix object list navigation for dashboard widgets --- netbox/extras/dashboard/widgets.py | 1 + 1 file changed, 1 insertion(+) diff --git a/netbox/extras/dashboard/widgets.py b/netbox/extras/dashboard/widgets.py index a3d7f05a3..add81a318 100644 --- a/netbox/extras/dashboard/widgets.py +++ b/netbox/extras/dashboard/widgets.py @@ -265,6 +265,7 @@ class ObjectListWidget(DashboardWidget): parameters = self.config.get('url_params') or {} if page_size := self.config.get('page_size'): parameters['per_page'] = page_size + parameters['embedded'] = True if parameters: try: From fbc9ffa47b77ace995a694a04a24231dd8668a63 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 1 Jun 2024 05:02:24 +0000 Subject: [PATCH 21/38] Update source translation strings --- netbox/translations/en/LC_MESSAGES/django.po | 32 ++++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index 51072d017..bb938e9d7 100644 --- a/netbox/translations/en/LC_MESSAGES/django.po +++ b/netbox/translations/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-05-30 14:23+0000\n" +"POT-Creation-Date: 2024-06-01 05:02+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1097,7 +1097,7 @@ msgstr "" #: netbox/extras/models/configs.py:45 netbox/extras/models/configs.py:219 #: netbox/extras/models/customfields.py:123 netbox/extras/models/models.py:60 #: netbox/extras/models/models.py:186 netbox/extras/models/models.py:424 -#: netbox/extras/models/models.py:539 netbox/extras/models/staging.py:31 +#: netbox/extras/models/models.py:539 netbox/extras/models/staging.py:32 #: netbox/extras/models/tags.py:32 netbox/netbox/models/__init__.py:109 #: netbox/netbox/models/__init__.py:144 netbox/netbox/models/__init__.py:190 #: netbox/users/models/permissions.py:24 netbox/users/models/tokens.py:58 @@ -1138,7 +1138,7 @@ msgstr "" #: netbox/extras/models/models.py:181 netbox/extras/models/models.py:324 #: netbox/extras/models/models.py:420 netbox/extras/models/models.py:529 #: netbox/extras/models/models.py:624 netbox/extras/models/scripts.py:30 -#: netbox/extras/models/staging.py:26 netbox/ipam/models/asns.py:18 +#: netbox/extras/models/staging.py:27 netbox/ipam/models/asns.py:18 #: netbox/ipam/models/fhrp.py:25 netbox/ipam/models/services.py:52 #: netbox/ipam/models/services.py:88 netbox/ipam/models/vlans.py:26 #: netbox/ipam/models/vlans.py:164 netbox/ipam/models/vrfs.py:22 @@ -1918,7 +1918,7 @@ msgid "completed" msgstr "" #: netbox/core/models/jobs.py:91 netbox/extras/models/models.py:121 -#: netbox/extras/models/staging.py:87 +#: netbox/extras/models/staging.py:88 msgid "data" msgstr "" @@ -6740,33 +6740,33 @@ msgstr "" msgid "Invalid format. URL parameters must be passed as a dictionary." msgstr "" -#: netbox/extras/dashboard/widgets.py:283 +#: netbox/extras/dashboard/widgets.py:284 msgid "RSS Feed" msgstr "" -#: netbox/extras/dashboard/widgets.py:288 +#: netbox/extras/dashboard/widgets.py:289 msgid "Embed an RSS feed from an external website." msgstr "" -#: netbox/extras/dashboard/widgets.py:295 +#: netbox/extras/dashboard/widgets.py:296 msgid "Feed URL" msgstr "" -#: netbox/extras/dashboard/widgets.py:300 +#: netbox/extras/dashboard/widgets.py:301 msgid "The maximum number of objects to display" msgstr "" -#: netbox/extras/dashboard/widgets.py:305 +#: netbox/extras/dashboard/widgets.py:306 msgid "How long to stored the cached content (in seconds)" msgstr "" -#: netbox/extras/dashboard/widgets.py:357 netbox/templates/account/base.html:10 +#: netbox/extras/dashboard/widgets.py:358 netbox/templates/account/base.html:10 #: netbox/templates/account/bookmarks.html:7 #: netbox/templates/inc/user_menu.html:30 msgid "Bookmarks" msgstr "" -#: netbox/extras/dashboard/widgets.py:361 +#: netbox/extras/dashboard/widgets.py:362 msgid "Show your personal bookmarks" msgstr "" @@ -7385,7 +7385,7 @@ msgstr "" msgid "request ID" msgstr "" -#: netbox/extras/models/change_logging.py:52 netbox/extras/models/staging.py:69 +#: netbox/extras/models/change_logging.py:52 netbox/extras/models/staging.py:70 msgid "action" msgstr "" @@ -8096,19 +8096,19 @@ msgstr "" msgid "cached values" msgstr "" -#: netbox/extras/models/staging.py:44 +#: netbox/extras/models/staging.py:45 msgid "branch" msgstr "" -#: netbox/extras/models/staging.py:45 +#: netbox/extras/models/staging.py:46 msgid "branches" msgstr "" -#: netbox/extras/models/staging.py:97 +#: netbox/extras/models/staging.py:98 msgid "staged change" msgstr "" -#: netbox/extras/models/staging.py:98 +#: netbox/extras/models/staging.py:99 msgid "staged changes" msgstr "" From bd007eb297e766607c101c6de7adcf01c750c71f Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Mon, 3 Jun 2024 08:01:50 -0400 Subject: [PATCH 22/38] Update workflows to use most recent release of each action --- .github/workflows/auto-assign-issue.yml | 2 +- .github/workflows/ci.yml | 6 +++--- .github/workflows/update-translation-strings.yml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/auto-assign-issue.yml b/.github/workflows/auto-assign-issue.yml index 4e93d9f0d..309f79800 100644 --- a/.github/workflows/auto-assign-issue.yml +++ b/.github/workflows/auto-assign-issue.yml @@ -12,7 +12,7 @@ jobs: auto-assign: runs-on: ubuntu-latest steps: - - uses: pozil/auto-assign-issue@v1 + - uses: pozil/auto-assign-issue@v2 if: "contains(github.event.issue.labels.*.name, 'status: needs triage')" with: # Weighted assignments diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b32f519bc..a84359bf9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -45,12 +45,12 @@ jobs: uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} @@ -58,7 +58,7 @@ jobs: run: npm install -g yarn - name: Setup Node.js with Yarn Caching - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} cache: yarn diff --git a/.github/workflows/update-translation-strings.yml b/.github/workflows/update-translation-strings.yml index 5b0c09300..bcd68c887 100644 --- a/.github/workflows/update-translation-strings.yml +++ b/.github/workflows/update-translation-strings.yml @@ -22,7 +22,7 @@ jobs: uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: 3.11 From 055e7fa474b89d8e0ad305aa002171b01712616c Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 31 May 2024 09:35:18 -0400 Subject: [PATCH 23/38] Fixes #15194: Prevent enqueuing duplicate events for an object --- netbox/extras/context_managers.py | 7 +++--- netbox/extras/events.py | 32 +++++++++++++++---------- netbox/extras/signals.py | 29 +++++++--------------- netbox/extras/tests/test_event_rules.py | 27 +++++++++++++++++++-- netbox/netbox/context.py | 2 +- 5 files changed, 57 insertions(+), 40 deletions(-) diff --git a/netbox/extras/context_managers.py b/netbox/extras/context_managers.py index 8de47465e..e72cb8cc2 100644 --- a/netbox/extras/context_managers.py +++ b/netbox/extras/context_managers.py @@ -13,13 +13,14 @@ def event_tracking(request): :param request: WSGIRequest object with a unique `id` set """ current_request.set(request) - events_queue.set([]) + events_queue.set({}) yield # Flush queued webhooks to RQ - flush_events(events_queue.get()) + if events := list(events_queue.get().values()): + flush_events(events) # Clear context vars current_request.set(None) - events_queue.set([]) + events_queue.set({}) diff --git a/netbox/extras/events.py b/netbox/extras/events.py index 34d2ec159..22ce26ba9 100644 --- a/netbox/extras/events.py +++ b/netbox/extras/events.py @@ -58,15 +58,21 @@ def enqueue_object(queue, instance, user, request_id, action): if model_name not in registry['model_features']['event_rules'].get(app_label, []): return - queue.append({ - 'content_type': ContentType.objects.get_for_model(instance), - 'object_id': instance.pk, - 'event': action, - 'data': serialize_for_event(instance), - 'snapshots': get_snapshots(instance, action), - 'username': user.username, - 'request_id': request_id - }) + assert instance.pk is not None + key = f'{app_label}.{model_name}:{instance.pk}' + if key in queue: + queue[key]['data'] = serialize_for_event(instance) + queue[key]['snapshots']['postchange'] = get_snapshots(instance, action)['postchange'] + else: + queue[key] = { + 'content_type': ContentType.objects.get_for_model(instance), + 'object_id': instance.pk, + 'event': action, + 'data': serialize_for_event(instance), + 'snapshots': get_snapshots(instance, action), + 'username': user.username, + 'request_id': request_id + } def process_event_rules(event_rules, model_name, event, data, username=None, snapshots=None, request_id=None): @@ -163,14 +169,14 @@ def process_event_queue(events): ) -def flush_events(queue): +def flush_events(events): """ - Flush a list of object representation to RQ for webhook processing. + Flush a list of object representations to RQ for event processing. """ - if queue: + if events: for name in settings.EVENTS_PIPELINE: try: func = import_string(name) - func(queue) + func(events) except Exception as e: logger.error(_("Cannot import events pipeline {name} error: {error}").format(name=name, error=e)) diff --git a/netbox/extras/signals.py b/netbox/extras/signals.py index 2813ed7ae..9d439ace9 100644 --- a/netbox/extras/signals.py +++ b/netbox/extras/signals.py @@ -55,18 +55,6 @@ def run_validators(instance, validators): clear_events = Signal() -def is_same_object(instance, webhook_data, request_id): - """ - Compare the given instance to the most recent queued webhook object, returning True - if they match. This check is used to avoid creating duplicate webhook entries. - """ - return ( - ContentType.objects.get_for_model(instance) == webhook_data['content_type'] and - instance.pk == webhook_data['object_id'] and - request_id == webhook_data['request_id'] - ) - - @receiver((post_save, m2m_changed)) def handle_changed_object(sender, instance, **kwargs): """ @@ -112,14 +100,13 @@ def handle_changed_object(sender, instance, **kwargs): objectchange.request_id = request.id objectchange.save() - # If this is an M2M change, update the previously queued webhook (from post_save) + # Ensure that we're working with fresh M2M assignments + if m2m_changed: + instance.refresh_from_db() + + # Enqueue the object for event processing queue = events_queue.get() - if m2m_changed and queue and is_same_object(instance, queue[-1], request.id): - instance.refresh_from_db() # Ensure that we're working with fresh M2M assignments - queue[-1]['data'] = serialize_for_event(instance) - queue[-1]['snapshots']['postchange'] = get_snapshots(instance, action)['postchange'] - else: - enqueue_object(queue, instance, request.user, request.id, action) + enqueue_object(queue, instance, request.user, request.id, action) events_queue.set(queue) # Increment metric counters @@ -179,7 +166,7 @@ def handle_deleted_object(sender, instance, **kwargs): obj.snapshot() # Ensure the change record includes the "before" state getattr(obj, related_field_name).remove(instance) - # Enqueue webhooks + # Enqueue the object for event processing queue = events_queue.get() enqueue_object(queue, instance, request.user, request.id, ObjectChangeActionChoices.ACTION_DELETE) events_queue.set(queue) @@ -195,7 +182,7 @@ def clear_events_queue(sender, **kwargs): """ logger = logging.getLogger('events') logger.info(f"Clearing {len(events_queue.get())} queued events ({sender})") - events_queue.set([]) + events_queue.set({}) # diff --git a/netbox/extras/tests/test_event_rules.py b/netbox/extras/tests/test_event_rules.py index 8cea2078a..a1dd8b48e 100644 --- a/netbox/extras/tests/test_event_rules.py +++ b/netbox/extras/tests/test_event_rules.py @@ -4,6 +4,7 @@ from unittest.mock import patch import django_rq from django.http import HttpResponse +from django.test import RequestFactory from django.urls import reverse from requests import Session from rest_framework import status @@ -12,6 +13,7 @@ from core.models import ObjectType from dcim.choices import SiteStatusChoices from dcim.models import Site from extras.choices import EventRuleActionChoices, ObjectChangeActionChoices +from extras.context_managers import event_tracking from extras.events import enqueue_object, flush_events, serialize_for_event from extras.models import EventRule, Tag, Webhook from extras.webhooks import generate_signature, send_webhook @@ -360,7 +362,7 @@ class EventRuleTest(APITestCase): return HttpResponse() # Enqueue a webhook for processing - webhooks_queue = [] + webhooks_queue = {} site = Site.objects.create(name='Site 1', slug='site-1') enqueue_object( webhooks_queue, @@ -369,7 +371,7 @@ class EventRuleTest(APITestCase): request_id=request_id, action=ObjectChangeActionChoices.ACTION_CREATE ) - flush_events(webhooks_queue) + flush_events(list(webhooks_queue.values())) # Retrieve the job from queue job = self.queue.jobs[0] @@ -377,3 +379,24 @@ class EventRuleTest(APITestCase): # Patch the Session object with our dummy_send() method, then process the webhook for sending with patch.object(Session, 'send', dummy_send) as mock_send: send_webhook(**job.kwargs) + + def test_duplicate_triggers(self): + """ + Test for erroneous duplicate event triggers resulting from saving an object multiple times + within the span of a single request. + """ + url = reverse('dcim:site_add') + request = RequestFactory().get(url) + request.id = uuid.uuid4() + request.user = self.user + + self.assertEqual(self.queue.count, 0, msg="Unexpected jobs found in queue") + + with event_tracking(request): + site = Site(name='Site 1', slug='site-1') + site.save() + + # Save the site a second time + site.save() + + self.assertEqual(self.queue.count, 1, msg="Duplicate jobs found in queue") diff --git a/netbox/netbox/context.py b/netbox/netbox/context.py index 56e41cb63..744c36df4 100644 --- a/netbox/netbox/context.py +++ b/netbox/netbox/context.py @@ -7,4 +7,4 @@ __all__ = ( current_request = ContextVar('current_request', default=None) -events_queue = ContextVar('events_queue', default=[]) +events_queue = ContextVar('events_queue', default=dict()) From 24611f9e2f42991ca1c1112a02746f025d0886da Mon Sep 17 00:00:00 2001 From: Daniel Sheppard Date: Mon, 3 Jun 2024 07:47:53 -0500 Subject: [PATCH 24/38] Fixes: #16039 - Fix row highlighting on device components and VM interfaces (#16044) * Fix row highlighting * Minor fix for VMInterfaces * Move duplicated dicts into inheritable meta class * Add CableTerminationTable.Meta class for inheritance of the row_attrs to each descendant Meta class. --- netbox/dcim/tables/devices.py | 46 ++++++------------- .../virtualization/tables/virtualmachines.py | 2 + 2 files changed, 16 insertions(+), 32 deletions(-) diff --git a/netbox/dcim/tables/devices.py b/netbox/dcim/tables/devices.py index 4925fb517..7fa307bc8 100644 --- a/netbox/dcim/tables/devices.py +++ b/netbox/dcim/tables/devices.py @@ -43,14 +43,6 @@ MODULEBAY_STATUS = """ """ -def get_cabletermination_row_class(record): - if record.mark_connected: - return 'success' - elif record.cable: - return record.cable.get_status_color() - return '' - - # # Device roles # @@ -339,6 +331,14 @@ class CableTerminationTable(NetBoxTable): verbose_name=_('Mark Connected'), ) + class Meta: + row_attrs = { + 'data-name': lambda record: record.name, + 'data-mark-connected': lambda record: "true" if record.mark_connected else "false", + 'data-cable-status': lambda record: record.cable.status if record.cable else "", + 'data-type': lambda record: record.type + } + def value_link_peer(self, value): return ', '.join([ f"{termination.parent_object} > {termination}" for termination in value @@ -386,16 +386,13 @@ class DeviceConsolePortTable(ConsolePortTable): extra_buttons=CONSOLEPORT_BUTTONS ) - class Meta(DeviceComponentTable.Meta): + class Meta(CableTerminationTable.Meta, DeviceComponentTable.Meta): model = models.ConsolePort fields = ( 'pk', 'id', 'name', 'module_bay', 'module', 'label', 'type', 'speed', 'description', 'mark_connected', 'cable', 'cable_color', 'link_peer', 'connection', 'tags', 'actions' ) default_columns = ('pk', 'name', 'label', 'type', 'speed', 'description', 'cable', 'connection') - row_attrs = { - 'class': get_cabletermination_row_class - } class ConsoleServerPortTable(ModularDeviceComponentTable, PathEndpointTable): @@ -431,16 +428,13 @@ class DeviceConsoleServerPortTable(ConsoleServerPortTable): extra_buttons=CONSOLESERVERPORT_BUTTONS ) - class Meta(DeviceComponentTable.Meta): + class Meta(CableTerminationTable.Meta, DeviceComponentTable.Meta): model = models.ConsoleServerPort fields = ( 'pk', 'id', 'name', 'module_bay', 'module', 'label', 'type', 'speed', 'description', 'mark_connected', 'cable', 'cable_color', 'link_peer', 'connection', 'tags', 'actions', ) default_columns = ('pk', 'name', 'label', 'type', 'speed', 'description', 'cable', 'connection') - row_attrs = { - 'class': get_cabletermination_row_class - } class PowerPortTable(ModularDeviceComponentTable, PathEndpointTable): @@ -483,7 +477,7 @@ class DevicePowerPortTable(PowerPortTable): extra_buttons=POWERPORT_BUTTONS ) - class Meta(DeviceComponentTable.Meta): + class Meta(CableTerminationTable.Meta, DeviceComponentTable.Meta): model = models.PowerPort fields = ( 'pk', 'id', 'name', 'module_bay', 'module', 'label', 'type', 'maximum_draw', 'allocated_draw', @@ -492,9 +486,6 @@ class DevicePowerPortTable(PowerPortTable): default_columns = ( 'pk', 'name', 'label', 'type', 'maximum_draw', 'allocated_draw', 'description', 'cable', 'connection', ) - row_attrs = { - 'class': get_cabletermination_row_class - } class PowerOutletTable(ModularDeviceComponentTable, PathEndpointTable): @@ -534,7 +525,7 @@ class DevicePowerOutletTable(PowerOutletTable): extra_buttons=POWEROUTLET_BUTTONS ) - class Meta(DeviceComponentTable.Meta): + class Meta(CableTerminationTable.Meta, DeviceComponentTable.Meta): model = models.PowerOutlet fields = ( 'pk', 'id', 'name', 'module_bay', 'module', 'label', 'type', 'power_port', 'feed_leg', 'description', @@ -543,9 +534,6 @@ class DevicePowerOutletTable(PowerOutletTable): default_columns = ( 'pk', 'name', 'label', 'type', 'power_port', 'feed_leg', 'description', 'cable', 'connection', ) - row_attrs = { - 'class': get_cabletermination_row_class - } class BaseInterfaceTable(NetBoxTable): @@ -733,7 +721,7 @@ class DeviceFrontPortTable(FrontPortTable): extra_buttons=FRONTPORT_BUTTONS ) - class Meta(DeviceComponentTable.Meta): + class Meta(CableTerminationTable.Meta, DeviceComponentTable.Meta): model = models.FrontPort fields = ( 'pk', 'id', 'name', 'module_bay', 'module', 'label', 'type', 'rear_port', 'rear_port_position', @@ -742,9 +730,6 @@ class DeviceFrontPortTable(FrontPortTable): default_columns = ( 'pk', 'name', 'label', 'type', 'rear_port', 'rear_port_position', 'description', 'cable', 'link_peer', ) - row_attrs = { - 'class': get_cabletermination_row_class - } class RearPortTable(ModularDeviceComponentTable, CableTerminationTable): @@ -783,7 +768,7 @@ class DeviceRearPortTable(RearPortTable): extra_buttons=REARPORT_BUTTONS ) - class Meta(DeviceComponentTable.Meta): + class Meta(CableTerminationTable.Meta, DeviceComponentTable.Meta): model = models.RearPort fields = ( 'pk', 'id', 'name', 'module_bay', 'module', 'label', 'type', 'positions', 'description', 'mark_connected', @@ -792,9 +777,6 @@ class DeviceRearPortTable(RearPortTable): default_columns = ( 'pk', 'name', 'label', 'type', 'positions', 'description', 'cable', 'link_peer', ) - row_attrs = { - 'class': get_cabletermination_row_class - } class DeviceBayTable(DeviceComponentTable): diff --git a/netbox/virtualization/tables/virtualmachines.py b/netbox/virtualization/tables/virtualmachines.py index ba5360a62..9d194d268 100644 --- a/netbox/virtualization/tables/virtualmachines.py +++ b/netbox/virtualization/tables/virtualmachines.py @@ -173,6 +173,8 @@ class VirtualMachineVMInterfaceTable(VMInterfaceTable): default_columns = ('pk', 'name', 'enabled', 'mac_address', 'mtu', 'mode', 'description', 'ip_addresses') row_attrs = { 'data-name': lambda record: record.name, + 'data-virtual': lambda record: "true", + 'data-enabled': lambda record: "true" if record.enabled else "false", } From 47ffa08d1625965937fbf5f5dbfad2b5098437b3 Mon Sep 17 00:00:00 2001 From: Arthur Hanson Date: Mon, 3 Jun 2024 07:24:01 -0700 Subject: [PATCH 25/38] 16261 fix graphql lookup for MultiValueCharFilter fields (#16354) * 16261 fix graphql lookup for MultiValueCharFilter fields * 16261 fix graphql lookup for MultiValueCharFilter fields * 16261 fixup test * 16261 fixup test * Omit redundant assignment --------- Co-authored-by: Jeremy Stretch --- netbox/ipam/tests/test_api.py | 2 +- netbox/netbox/graphql/filter_mixins.py | 5 +++-- netbox/utilities/testing/api.py | 12 ++++++++++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/netbox/ipam/tests/test_api.py b/netbox/ipam/tests/test_api.py index 20ba35c6b..2cf7a2f1c 100644 --- a/netbox/ipam/tests/test_api.py +++ b/netbox/ipam/tests/test_api.py @@ -649,7 +649,7 @@ class IPAddressTest(APIViewTestCases.APIViewTestCase): 'description': 'New description', } graphql_filter = { - 'address': '192.168.0.1/24', + 'address': {'lookup': 'i_exact', 'value': '192.168.0.1/24'}, } @classmethod diff --git a/netbox/netbox/graphql/filter_mixins.py b/netbox/netbox/graphql/filter_mixins.py index 322435c72..5075e9aa2 100644 --- a/netbox/netbox/graphql/filter_mixins.py +++ b/netbox/netbox/graphql/filter_mixins.py @@ -23,8 +23,9 @@ def map_strawberry_type(field): elif isinstance(field, MultiValueArrayFilter): pass elif isinstance(field, MultiValueCharFilter): - should_create_function = True - attr_type = List[str] | None + # Note: Need to use the legacy FilterLookup from filters, not from + # strawberry_django.FilterLookup as we currently have USE_DEPRECATED_FILTERS + attr_type = strawberry_django.filters.FilterLookup[str] | None elif isinstance(field, MultiValueDateFilter): attr_type = auto elif isinstance(field, MultiValueDateTimeFilter): diff --git a/netbox/utilities/testing/api.py b/netbox/utilities/testing/api.py index 019d6e6ca..62ac817e2 100644 --- a/netbox/utilities/testing/api.py +++ b/netbox/utilities/testing/api.py @@ -493,10 +493,18 @@ class APIViewTestCases: def _build_filtered_query(self, name, **filters): """ - Create a filtered query: i.e. ip_address_list(filters: {address: "1.1.1.1/24"}){. + Create a filtered query: i.e. device_list(filters: {name: {i_contains: "akron"}}){. """ + # TODO: This should be extended to support AND, OR multi-lookups if filters: - filter_string = ', '.join(f'{k}: "{v}"' for k, v in filters.items()) + for field_name, params in filters.items(): + lookup = params['lookup'] + value = params['value'] + if lookup: + query = f'{{{lookup}: "{value}"}}' + filter_string = f'{field_name}: {query}' + else: + filter_string = f'{field_name}: "{value}"' filter_string = f'(filters: {{{filter_string}}})' else: filter_string = '' From f66d9d41e27208402cc50cb502a5e0bc51af7a72 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 4 Jun 2024 05:02:13 +0000 Subject: [PATCH 26/38] Update source translation strings --- netbox/translations/en/LC_MESSAGES/django.po | 198 +++++++++---------- 1 file changed, 99 insertions(+), 99 deletions(-) diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index bb938e9d7..af150e24c 100644 --- a/netbox/translations/en/LC_MESSAGES/django.po +++ b/netbox/translations/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-01 05:02+0000\n" +"POT-Creation-Date: 2024-06-04 05:02+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -172,7 +172,7 @@ msgstr "" #: netbox/dcim/forms/filtersets.py:1524 netbox/dcim/forms/model_forms.py:136 #: netbox/dcim/forms/model_forms.py:164 netbox/dcim/forms/model_forms.py:206 #: netbox/dcim/forms/model_forms.py:406 netbox/dcim/forms/model_forms.py:668 -#: netbox/dcim/forms/object_create.py:391 netbox/dcim/tables/devices.py:158 +#: netbox/dcim/forms/object_create.py:391 netbox/dcim/tables/devices.py:150 #: netbox/dcim/tables/power.py:26 netbox/dcim/tables/power.py:93 #: netbox/dcim/tables/racks.py:62 netbox/dcim/tables/racks.py:138 #: netbox/dcim/tables/sites.py:129 netbox/extras/filtersets.py:477 @@ -492,8 +492,8 @@ msgstr "" #: netbox/dcim/forms/bulk_edit.py:1071 netbox/dcim/forms/bulk_edit.py:1098 #: netbox/dcim/forms/bulk_edit.py:1571 netbox/dcim/forms/filtersets.py:983 #: netbox/dcim/forms/filtersets.py:1359 netbox/dcim/forms/filtersets.py:1380 -#: netbox/dcim/tables/devices.py:699 netbox/dcim/tables/devices.py:759 -#: netbox/dcim/tables/devices.py:986 netbox/dcim/tables/devicetypes.py:245 +#: netbox/dcim/tables/devices.py:687 netbox/dcim/tables/devices.py:744 +#: netbox/dcim/tables/devices.py:968 netbox/dcim/tables/devicetypes.py:245 #: netbox/dcim/tables/devicetypes.py:260 netbox/dcim/tables/racks.py:32 #: netbox/extras/forms/bulk_edit.py:260 netbox/extras/tables/tables.py:333 #: netbox/templates/circuits/circuittype.html:30 @@ -527,8 +527,8 @@ msgstr "" #: netbox/dcim/forms/filtersets.py:1354 netbox/dcim/forms/filtersets.py:1375 #: netbox/dcim/forms/model_forms.py:643 netbox/dcim/forms/model_forms.py:649 #: netbox/dcim/forms/object_import.py:84 netbox/dcim/forms/object_import.py:113 -#: netbox/dcim/forms/object_import.py:145 netbox/dcim/tables/devices.py:183 -#: netbox/dcim/tables/devices.py:815 netbox/dcim/tables/power.py:77 +#: netbox/dcim/forms/object_import.py:145 netbox/dcim/tables/devices.py:175 +#: netbox/dcim/tables/devices.py:797 netbox/dcim/tables/power.py:77 #: netbox/extras/forms/bulk_import.py:39 netbox/extras/tables/tables.py:283 #: netbox/extras/tables/tables.py:355 netbox/extras/tables/tables.py:473 #: netbox/netbox/tables/tables.py:239 netbox/templates/circuits/circuit.html:30 @@ -583,8 +583,8 @@ msgstr "" #: netbox/dcim/forms/filtersets.py:282 netbox/dcim/forms/filtersets.py:728 #: netbox/dcim/forms/filtersets.py:843 netbox/dcim/forms/filtersets.py:877 #: netbox/dcim/forms/filtersets.py:978 netbox/dcim/forms/filtersets.py:1089 -#: netbox/dcim/tables/devices.py:145 netbox/dcim/tables/devices.py:818 -#: netbox/dcim/tables/devices.py:1046 netbox/dcim/tables/modules.py:69 +#: netbox/dcim/tables/devices.py:137 netbox/dcim/tables/devices.py:800 +#: netbox/dcim/tables/devices.py:1028 netbox/dcim/tables/modules.py:69 #: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:66 #: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:133 #: netbox/ipam/forms/bulk_edit.py:241 netbox/ipam/forms/bulk_edit.py:290 @@ -868,7 +868,7 @@ msgstr "" #: netbox/dcim/forms/filtersets.py:1406 netbox/dcim/forms/filtersets.py:1420 #: netbox/dcim/forms/model_forms.py:179 netbox/dcim/forms/model_forms.py:211 #: netbox/dcim/forms/model_forms.py:411 netbox/dcim/forms/model_forms.py:673 -#: netbox/dcim/tables/devices.py:162 netbox/dcim/tables/power.py:30 +#: netbox/dcim/tables/devices.py:154 netbox/dcim/tables/power.py:30 #: netbox/dcim/tables/racks.py:58 netbox/dcim/tables/racks.py:143 #: netbox/extras/filtersets.py:488 netbox/extras/forms/filtersets.py:329 #: netbox/ipam/forms/bulk_edit.py:457 netbox/ipam/forms/filtersets.py:173 @@ -913,7 +913,7 @@ msgstr "" #: netbox/dcim/forms/filtersets.py:1055 netbox/dcim/forms/filtersets.py:1468 #: netbox/dcim/forms/filtersets.py:1492 netbox/dcim/forms/filtersets.py:1516 #: netbox/dcim/forms/model_forms.py:111 netbox/dcim/forms/object_create.py:375 -#: netbox/dcim/tables/devices.py:148 netbox/dcim/tables/sites.py:85 +#: netbox/dcim/tables/devices.py:140 netbox/dcim/tables/sites.py:85 #: netbox/extras/filtersets.py:455 netbox/ipam/forms/bulk_edit.py:206 #: netbox/ipam/forms/bulk_edit.py:438 netbox/ipam/forms/bulk_edit.py:512 #: netbox/ipam/forms/filtersets.py:217 netbox/ipam/forms/filtersets.py:422 @@ -1207,14 +1207,14 @@ msgstr "" #: netbox/core/tables/jobs.py:14 netbox/core/tables/plugins.py:13 #: netbox/core/tables/tasks.py:11 netbox/core/tables/tasks.py:115 #: netbox/dcim/forms/filtersets.py:61 netbox/dcim/forms/object_create.py:43 -#: netbox/dcim/tables/devices.py:60 netbox/dcim/tables/devices.py:97 -#: netbox/dcim/tables/devices.py:139 netbox/dcim/tables/devices.py:294 -#: netbox/dcim/tables/devices.py:380 netbox/dcim/tables/devices.py:424 -#: netbox/dcim/tables/devices.py:476 netbox/dcim/tables/devices.py:528 -#: netbox/dcim/tables/devices.py:644 netbox/dcim/tables/devices.py:726 -#: netbox/dcim/tables/devices.py:776 netbox/dcim/tables/devices.py:842 -#: netbox/dcim/tables/devices.py:957 netbox/dcim/tables/devices.py:977 -#: netbox/dcim/tables/devices.py:1006 netbox/dcim/tables/devices.py:1036 +#: netbox/dcim/tables/devices.py:52 netbox/dcim/tables/devices.py:89 +#: netbox/dcim/tables/devices.py:131 netbox/dcim/tables/devices.py:286 +#: netbox/dcim/tables/devices.py:380 netbox/dcim/tables/devices.py:421 +#: netbox/dcim/tables/devices.py:470 netbox/dcim/tables/devices.py:519 +#: netbox/dcim/tables/devices.py:632 netbox/dcim/tables/devices.py:714 +#: netbox/dcim/tables/devices.py:761 netbox/dcim/tables/devices.py:824 +#: netbox/dcim/tables/devices.py:939 netbox/dcim/tables/devices.py:959 +#: netbox/dcim/tables/devices.py:988 netbox/dcim/tables/devices.py:1018 #: netbox/dcim/tables/devicetypes.py:32 netbox/dcim/tables/power.py:22 #: netbox/dcim/tables/power.py:62 netbox/dcim/tables/racks.py:23 #: netbox/dcim/tables/racks.py:53 netbox/dcim/tables/sites.py:24 @@ -1304,7 +1304,7 @@ msgstr "" #: netbox/virtualization/tables/clusters.py:62 #: netbox/virtualization/tables/virtualmachines.py:54 #: netbox/virtualization/tables/virtualmachines.py:132 -#: netbox/virtualization/tables/virtualmachines.py:185 +#: netbox/virtualization/tables/virtualmachines.py:187 #: netbox/vpn/tables/crypto.py:18 netbox/vpn/tables/crypto.py:57 #: netbox/vpn/tables/crypto.py:93 netbox/vpn/tables/crypto.py:129 #: netbox/vpn/tables/crypto.py:158 netbox/vpn/tables/l2vpn.py:23 @@ -1344,7 +1344,7 @@ msgstr "" #: netbox/circuits/tables/circuits.py:76 netbox/circuits/tables/providers.py:48 #: netbox/circuits/tables/providers.py:82 -#: netbox/circuits/tables/providers.py:107 netbox/dcim/tables/devices.py:1019 +#: netbox/circuits/tables/providers.py:107 netbox/dcim/tables/devices.py:1001 #: netbox/dcim/tables/devicetypes.py:92 netbox/dcim/tables/modules.py:29 #: netbox/dcim/tables/modules.py:72 netbox/dcim/tables/power.py:39 #: netbox/dcim/tables/power.py:96 netbox/dcim/tables/racks.py:76 @@ -1515,7 +1515,7 @@ msgstr "" #: netbox/core/forms/bulk_edit.py:25 netbox/core/forms/filtersets.py:40 #: netbox/core/tables/data.py:26 netbox/dcim/forms/bulk_edit.py:1020 #: netbox/dcim/forms/bulk_edit.py:1293 netbox/dcim/forms/filtersets.py:1276 -#: netbox/dcim/tables/devices.py:553 netbox/dcim/tables/devicetypes.py:221 +#: netbox/dcim/tables/devices.py:541 netbox/dcim/tables/devicetypes.py:221 #: netbox/extras/forms/bulk_edit.py:98 netbox/extras/forms/bulk_edit.py:162 #: netbox/extras/forms/bulk_edit.py:221 netbox/extras/forms/filtersets.py:120 #: netbox/extras/forms/filtersets.py:207 netbox/extras/forms/filtersets.py:268 @@ -2163,7 +2163,7 @@ msgstr "" #: netbox/dcim/forms/model_forms.py:73 netbox/dcim/forms/model_forms.py:92 #: netbox/dcim/forms/model_forms.py:169 netbox/dcim/forms/model_forms.py:1007 #: netbox/dcim/forms/model_forms.py:1446 netbox/dcim/forms/object_import.py:176 -#: netbox/dcim/tables/devices.py:652 netbox/dcim/tables/devices.py:937 +#: netbox/dcim/tables/devices.py:640 netbox/dcim/tables/devices.py:919 #: netbox/extras/tables/tables.py:186 netbox/ipam/tables/fhrp.py:59 #: netbox/ipam/tables/ip.py:374 netbox/ipam/tables/services.py:44 #: netbox/templates/dcim/interface.html:102 @@ -2297,7 +2297,7 @@ msgstr "" #: netbox/dcim/choices.py:979 netbox/dcim/forms/bulk_edit.py:1303 #: netbox/dcim/forms/bulk_import.py:785 netbox/dcim/forms/model_forms.py:919 -#: netbox/dcim/tables/devices.py:656 netbox/templates/dcim/interface.html:106 +#: netbox/dcim/tables/devices.py:644 netbox/templates/dcim/interface.html:106 #: netbox/templates/virtualization/vminterface.html:43 #: netbox/virtualization/forms/bulk_edit.py:212 #: netbox/virtualization/forms/bulk_import.py:158 @@ -2781,7 +2781,7 @@ msgid "Virtual Chassis (ID)" msgstr "" #: netbox/dcim/filtersets.py:1401 netbox/dcim/forms/filtersets.py:107 -#: netbox/dcim/tables/devices.py:211 netbox/netbox/navigation/menu.py:66 +#: netbox/dcim/tables/devices.py:203 netbox/netbox/navigation/menu.py:66 #: netbox/templates/dcim/device.html:120 #: netbox/templates/dcim/device_edit.html:93 #: netbox/templates/dcim/virtualchassis.html:20 @@ -2811,7 +2811,7 @@ msgstr "" #: netbox/dcim/forms/bulk_import.py:836 netbox/dcim/forms/filtersets.py:1334 #: netbox/dcim/forms/model_forms.py:1322 #: netbox/dcim/models/device_components.py:712 -#: netbox/dcim/tables/devices.py:622 netbox/ipam/filtersets.py:316 +#: netbox/dcim/tables/devices.py:610 netbox/ipam/filtersets.py:316 #: netbox/ipam/filtersets.py:327 netbox/ipam/filtersets.py:483 #: netbox/ipam/filtersets.py:584 netbox/ipam/filtersets.py:595 #: netbox/ipam/forms/bulk_edit.py:227 netbox/ipam/forms/bulk_edit.py:282 @@ -2852,7 +2852,7 @@ msgid "L2VPN (ID)" msgstr "" #: netbox/dcim/filtersets.py:1563 netbox/dcim/forms/filtersets.py:1339 -#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1022 +#: netbox/dcim/tables/devices.py:558 netbox/ipam/filtersets.py:1022 #: netbox/ipam/forms/filtersets.py:525 netbox/ipam/tables/vlans.py:133 #: netbox/templates/dcim/interface.html:93 netbox/templates/ipam/vlan.html:66 #: netbox/templates/vpn/l2vpntermination.html:12 @@ -2902,7 +2902,7 @@ msgstr "" msgid "Wireless LAN" msgstr "" -#: netbox/dcim/filtersets.py:1667 netbox/dcim/tables/devices.py:609 +#: netbox/dcim/filtersets.py:1667 netbox/dcim/tables/devices.py:597 msgid "Wireless link" msgstr "" @@ -2957,8 +2957,8 @@ msgstr "" #: netbox/dcim/forms/bulk_create.py:112 netbox/dcim/forms/filtersets.py:1396 #: netbox/dcim/forms/model_forms.py:431 netbox/dcim/forms/model_forms.py:486 #: netbox/dcim/forms/object_create.py:197 -#: netbox/dcim/forms/object_create.py:353 netbox/dcim/tables/devices.py:170 -#: netbox/dcim/tables/devices.py:702 netbox/dcim/tables/devicetypes.py:242 +#: netbox/dcim/forms/object_create.py:353 netbox/dcim/tables/devices.py:162 +#: netbox/dcim/tables/devices.py:690 netbox/dcim/tables/devicetypes.py:242 #: netbox/templates/dcim/device.html:43 netbox/templates/dcim/device.html:130 #: netbox/templates/dcim/modulebay.html:34 #: netbox/templates/dcim/virtualchassis.html:66 @@ -3035,8 +3035,8 @@ msgstr "" #: netbox/dcim/forms/filtersets.py:706 netbox/dcim/forms/filtersets.py:1426 #: netbox/dcim/forms/model_forms.py:219 netbox/dcim/forms/model_forms.py:1015 #: netbox/dcim/forms/model_forms.py:1454 netbox/dcim/forms/object_import.py:181 -#: netbox/dcim/tables/devices.py:174 netbox/dcim/tables/devices.py:810 -#: netbox/dcim/tables/devices.py:921 netbox/dcim/tables/devicetypes.py:300 +#: netbox/dcim/tables/devices.py:166 netbox/dcim/tables/devices.py:792 +#: netbox/dcim/tables/devices.py:903 netbox/dcim/tables/devicetypes.py:300 #: netbox/dcim/tables/racks.py:69 netbox/extras/filtersets.py:504 #: netbox/ipam/forms/bulk_edit.py:246 netbox/ipam/forms/bulk_edit.py:295 #: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/bulk_edit.py:549 @@ -3159,7 +3159,7 @@ msgstr "" #: netbox/dcim/forms/filtersets.py:954 netbox/dcim/forms/filtersets.py:1086 #: netbox/dcim/forms/model_forms.py:226 netbox/dcim/forms/model_forms.py:248 #: netbox/dcim/forms/model_forms.py:422 netbox/dcim/forms/model_forms.py:700 -#: netbox/dcim/forms/object_create.py:400 netbox/dcim/tables/devices.py:166 +#: netbox/dcim/forms/object_create.py:400 netbox/dcim/tables/devices.py:158 #: netbox/dcim/tables/power.py:70 netbox/dcim/tables/racks.py:148 #: netbox/ipam/forms/bulk_edit.py:465 netbox/ipam/forms/filtersets.py:442 #: netbox/ipam/forms/model_forms.py:610 netbox/templates/dcim/device.html:30 @@ -3193,8 +3193,8 @@ msgstr "" #: netbox/dcim/forms/model_forms.py:281 netbox/dcim/forms/model_forms.py:293 #: netbox/dcim/forms/model_forms.py:339 netbox/dcim/forms/model_forms.py:379 #: netbox/dcim/forms/model_forms.py:1020 netbox/dcim/forms/model_forms.py:1459 -#: netbox/dcim/forms/object_import.py:187 netbox/dcim/tables/devices.py:101 -#: netbox/dcim/tables/devices.py:177 netbox/dcim/tables/devices.py:924 +#: netbox/dcim/forms/object_import.py:187 netbox/dcim/tables/devices.py:93 +#: netbox/dcim/tables/devices.py:169 netbox/dcim/tables/devices.py:906 #: netbox/dcim/tables/devicetypes.py:81 netbox/dcim/tables/devicetypes.py:304 #: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:60 #: netbox/templates/dcim/devicetype.html:14 @@ -3277,7 +3277,7 @@ msgstr "" #: netbox/dcim/forms/bulk_edit.py:593 netbox/dcim/forms/bulk_import.py:443 #: netbox/dcim/forms/filtersets.py:725 netbox/dcim/forms/model_forms.py:394 -#: netbox/dcim/forms/model_forms.py:456 netbox/dcim/tables/devices.py:187 +#: netbox/dcim/forms/model_forms.py:456 netbox/dcim/tables/devices.py:179 #: netbox/extras/filtersets.py:515 netbox/templates/dcim/device.html:184 #: netbox/templates/dcim/platform.html:26 #: netbox/templates/virtualization/virtualmachine.html:27 @@ -3309,13 +3309,13 @@ msgstr "" #: netbox/dcim/forms/model_forms.py:794 netbox/dcim/forms/model_forms.py:1153 #: netbox/dcim/forms/model_forms.py:1608 netbox/dcim/forms/object_create.py:257 #: netbox/dcim/tables/connections.py:22 netbox/dcim/tables/connections.py:41 -#: netbox/dcim/tables/connections.py:60 netbox/dcim/tables/devices.py:290 -#: netbox/dcim/tables/devices.py:359 netbox/dcim/tables/devices.py:403 -#: netbox/dcim/tables/devices.py:448 netbox/dcim/tables/devices.py:502 -#: netbox/dcim/tables/devices.py:594 netbox/dcim/tables/devices.py:692 -#: netbox/dcim/tables/devices.py:752 netbox/dcim/tables/devices.py:802 -#: netbox/dcim/tables/devices.py:862 netbox/dcim/tables/devices.py:914 -#: netbox/dcim/tables/devices.py:1040 netbox/dcim/tables/modules.py:52 +#: netbox/dcim/tables/connections.py:60 netbox/dcim/tables/devices.py:282 +#: netbox/dcim/tables/devices.py:359 netbox/dcim/tables/devices.py:400 +#: netbox/dcim/tables/devices.py:442 netbox/dcim/tables/devices.py:493 +#: netbox/dcim/tables/devices.py:582 netbox/dcim/tables/devices.py:680 +#: netbox/dcim/tables/devices.py:737 netbox/dcim/tables/devices.py:784 +#: netbox/dcim/tables/devices.py:844 netbox/dcim/tables/devices.py:896 +#: netbox/dcim/tables/devices.py:1022 netbox/dcim/tables/modules.py:52 #: netbox/extras/forms/filtersets.py:330 netbox/ipam/forms/bulk_import.py:303 #: netbox/ipam/forms/bulk_import.py:489 netbox/ipam/forms/filtersets.py:558 #: netbox/ipam/forms/model_forms.py:317 netbox/ipam/forms/model_forms.py:725 @@ -3489,7 +3489,7 @@ msgid "Wireless role" msgstr "" #: netbox/dcim/forms/bulk_edit.py:1186 netbox/dcim/forms/model_forms.py:609 -#: netbox/dcim/forms/model_forms.py:1168 netbox/dcim/tables/devices.py:313 +#: netbox/dcim/forms/model_forms.py:1168 netbox/dcim/tables/devices.py:305 #: netbox/templates/dcim/consoleport.html:24 #: netbox/templates/dcim/consoleserverport.html:24 #: netbox/templates/dcim/frontport.html:24 @@ -3501,7 +3501,7 @@ msgstr "" msgid "Module" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1313 netbox/dcim/tables/devices.py:661 +#: netbox/dcim/forms/bulk_edit.py:1313 netbox/dcim/tables/devices.py:649 #: netbox/templates/dcim/interface.html:110 msgid "LAG" msgstr "" @@ -3513,7 +3513,7 @@ msgstr "" #: netbox/dcim/forms/bulk_edit.py:1324 netbox/dcim/forms/bulk_import.py:659 #: netbox/dcim/forms/bulk_import.py:685 netbox/dcim/forms/filtersets.py:1169 #: netbox/dcim/forms/filtersets.py:1191 netbox/dcim/forms/filtersets.py:1264 -#: netbox/dcim/tables/devices.py:606 +#: netbox/dcim/tables/devices.py:594 #: netbox/templates/circuits/inc/circuit_termination_fields.html:67 #: netbox/templates/dcim/consoleport.html:40 #: netbox/templates/dcim/consoleserverport.html:40 @@ -3542,14 +3542,14 @@ msgid "VLAN group" msgstr "" #: netbox/dcim/forms/bulk_edit.py:1369 netbox/dcim/forms/model_forms.py:1304 -#: netbox/dcim/tables/devices.py:579 +#: netbox/dcim/tables/devices.py:567 #: netbox/virtualization/forms/bulk_edit.py:248 #: netbox/virtualization/forms/model_forms.py:326 msgid "Untagged VLAN" msgstr "" #: netbox/dcim/forms/bulk_edit.py:1377 netbox/dcim/forms/model_forms.py:1313 -#: netbox/dcim/tables/devices.py:585 +#: netbox/dcim/tables/devices.py:573 #: netbox/virtualization/forms/bulk_edit.py:256 #: netbox/virtualization/forms/model_forms.py:335 msgid "Tagged VLANs" @@ -3560,7 +3560,7 @@ msgid "Wireless LAN group" msgstr "" #: netbox/dcim/forms/bulk_edit.py:1392 netbox/dcim/forms/model_forms.py:1291 -#: netbox/dcim/tables/devices.py:615 netbox/netbox/navigation/menu.py:133 +#: netbox/dcim/tables/devices.py:603 netbox/netbox/navigation/menu.py:133 #: netbox/templates/dcim/interface.html:280 #: netbox/wireless/tables/wirelesslan.py:24 msgid "Wireless LANs" @@ -3740,7 +3740,7 @@ msgid "Virtual chassis" msgstr "" #: netbox/dcim/forms/bulk_import.py:462 netbox/dcim/forms/model_forms.py:465 -#: netbox/dcim/tables/devices.py:207 netbox/extras/filtersets.py:548 +#: netbox/dcim/tables/devices.py:199 netbox/extras/filtersets.py:548 #: netbox/extras/forms/filtersets.py:331 netbox/ipam/forms/bulk_edit.py:479 #: netbox/ipam/forms/filtersets.py:415 netbox/ipam/forms/filtersets.py:459 #: netbox/ipam/forms/model_forms.py:627 netbox/templates/dcim/device.html:232 @@ -3935,7 +3935,7 @@ msgstr "" msgid "Physical medium classification" msgstr "" -#: netbox/dcim/forms/bulk_import.py:973 netbox/dcim/tables/devices.py:823 +#: netbox/dcim/forms/bulk_import.py:973 netbox/dcim/tables/devices.py:805 msgid "Installed device" msgstr "" @@ -4024,7 +4024,7 @@ msgid "{side_upper} side termination not found: {device} {name}" msgstr "" #: netbox/dcim/forms/bulk_import.py:1244 netbox/dcim/forms/model_forms.py:730 -#: netbox/dcim/tables/devices.py:1010 netbox/templates/dcim/device.html:131 +#: netbox/dcim/tables/devices.py:992 netbox/templates/dcim/device.html:131 #: netbox/templates/dcim/virtualchassis.html:27 #: netbox/templates/dcim/virtualchassis.html:67 msgid "Master" @@ -4205,7 +4205,7 @@ msgid "Transmit power (dBm)" msgstr "" #: netbox/dcim/forms/filtersets.py:1350 netbox/dcim/forms/filtersets.py:1372 -#: netbox/dcim/tables/devices.py:324 netbox/templates/dcim/cable.html:12 +#: netbox/dcim/tables/devices.py:316 netbox/templates/dcim/cable.html:12 #: netbox/templates/dcim/cable_trace.html:46 #: netbox/templates/dcim/frontport.html:77 #: netbox/templates/dcim/htmx/cable_edit.html:50 @@ -4215,7 +4215,7 @@ msgstr "" msgid "Cable" msgstr "" -#: netbox/dcim/forms/filtersets.py:1442 netbox/dcim/tables/devices.py:933 +#: netbox/dcim/forms/filtersets.py:1442 netbox/dcim/tables/devices.py:915 msgid "Discovered" msgstr "" @@ -4381,7 +4381,7 @@ msgid "Front Port" msgstr "" #: netbox/dcim/forms/model_forms.py:1093 netbox/dcim/forms/model_forms.py:1531 -#: netbox/dcim/tables/devices.py:705 +#: netbox/dcim/tables/devices.py:693 #: netbox/templates/circuits/inc/circuit_termination_fields.html:53 #: netbox/templates/dcim/consoleport.html:79 #: netbox/templates/dcim/consoleserverport.html:80 @@ -4394,7 +4394,7 @@ msgid "Rear Port" msgstr "" #: netbox/dcim/forms/model_forms.py:1094 netbox/dcim/forms/model_forms.py:1532 -#: netbox/dcim/tables/connections.py:46 netbox/dcim/tables/devices.py:509 +#: netbox/dcim/tables/connections.py:46 netbox/dcim/tables/devices.py:500 #: netbox/templates/dcim/poweroutlet.html:44 #: netbox/templates/dcim/powerport.html:17 msgid "Power Port" @@ -4481,7 +4481,7 @@ msgid "" msgstr "" #: netbox/dcim/forms/object_create.py:110 -#: netbox/dcim/forms/object_create.py:271 netbox/dcim/tables/devices.py:257 +#: netbox/dcim/forms/object_create.py:271 netbox/dcim/tables/devices.py:249 msgid "Rear ports" msgstr "" @@ -4511,7 +4511,7 @@ msgid "" "selected number of rear port positions ({rearport_count})." msgstr "" -#: netbox/dcim/forms/object_create.py:409 netbox/dcim/tables/devices.py:1016 +#: netbox/dcim/forms/object_create.py:409 netbox/dcim/tables/devices.py:998 #: netbox/ipam/tables/fhrp.py:31 netbox/templates/dcim/virtualchassis.html:53 #: netbox/templates/dcim/virtualchassis_edit.html:47 #: netbox/templates/ipam/fhrpgroup.html:38 @@ -5968,7 +5968,7 @@ msgstr "" msgid "Reachable" msgstr "" -#: netbox/dcim/tables/devices.py:66 netbox/dcim/tables/devices.py:111 +#: netbox/dcim/tables/devices.py:58 netbox/dcim/tables/devices.py:103 #: netbox/dcim/tables/racks.py:81 netbox/dcim/tables/sites.py:143 #: netbox/extras/tables/tables.py:435 netbox/netbox/navigation/menu.py:56 #: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 @@ -5978,12 +5978,12 @@ msgstr "" msgid "Devices" msgstr "" -#: netbox/dcim/tables/devices.py:71 netbox/dcim/tables/devices.py:116 +#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:108 #: netbox/virtualization/tables/clusters.py:88 msgid "VMs" msgstr "" -#: netbox/dcim/tables/devices.py:105 netbox/dcim/tables/devices.py:221 +#: netbox/dcim/tables/devices.py:97 netbox/dcim/tables/devices.py:213 #: netbox/extras/forms/model_forms.py:506 netbox/templates/dcim/device.html:112 #: netbox/templates/dcim/device/render_config.html:11 #: netbox/templates/dcim/device/render_config.html:14 @@ -5997,11 +5997,11 @@ msgstr "" msgid "Config Template" msgstr "" -#: netbox/dcim/tables/devices.py:155 netbox/templates/dcim/sitegroup.html:26 +#: netbox/dcim/tables/devices.py:147 netbox/templates/dcim/sitegroup.html:26 msgid "Site Group" msgstr "" -#: netbox/dcim/tables/devices.py:192 netbox/dcim/tables/devices.py:1051 +#: netbox/dcim/tables/devices.py:184 netbox/dcim/tables/devices.py:1033 #: netbox/ipam/forms/bulk_import.py:511 netbox/ipam/forms/model_forms.py:304 #: netbox/ipam/forms/model_forms.py:313 netbox/ipam/tables/ip.py:352 #: netbox/ipam/tables/ip.py:418 netbox/ipam/tables/ip.py:441 @@ -6010,50 +6010,50 @@ msgstr "" msgid "IP Address" msgstr "" -#: netbox/dcim/tables/devices.py:196 netbox/dcim/tables/devices.py:1055 +#: netbox/dcim/tables/devices.py:188 netbox/dcim/tables/devices.py:1037 #: netbox/virtualization/tables/virtualmachines.py:85 msgid "IPv4 Address" msgstr "" -#: netbox/dcim/tables/devices.py:200 netbox/dcim/tables/devices.py:1059 +#: netbox/dcim/tables/devices.py:192 netbox/dcim/tables/devices.py:1041 #: netbox/virtualization/tables/virtualmachines.py:89 msgid "IPv6 Address" msgstr "" -#: netbox/dcim/tables/devices.py:215 +#: netbox/dcim/tables/devices.py:207 msgid "VC Position" msgstr "" -#: netbox/dcim/tables/devices.py:218 +#: netbox/dcim/tables/devices.py:210 msgid "VC Priority" msgstr "" -#: netbox/dcim/tables/devices.py:225 netbox/templates/dcim/device_edit.html:38 +#: netbox/dcim/tables/devices.py:217 netbox/templates/dcim/device_edit.html:38 #: netbox/templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "" -#: netbox/dcim/tables/devices.py:230 +#: netbox/dcim/tables/devices.py:222 msgid "Position (Device Bay)" msgstr "" -#: netbox/dcim/tables/devices.py:239 +#: netbox/dcim/tables/devices.py:231 msgid "Console ports" msgstr "" -#: netbox/dcim/tables/devices.py:242 +#: netbox/dcim/tables/devices.py:234 msgid "Console server ports" msgstr "" -#: netbox/dcim/tables/devices.py:245 +#: netbox/dcim/tables/devices.py:237 msgid "Power ports" msgstr "" -#: netbox/dcim/tables/devices.py:248 +#: netbox/dcim/tables/devices.py:240 msgid "Power outlets" msgstr "" -#: netbox/dcim/tables/devices.py:251 netbox/dcim/tables/devices.py:1064 +#: netbox/dcim/tables/devices.py:243 netbox/dcim/tables/devices.py:1046 #: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1006 #: netbox/dcim/views.py:1245 netbox/dcim/views.py:1931 #: netbox/netbox/navigation/menu.py:81 netbox/netbox/navigation/menu.py:237 @@ -6071,28 +6071,28 @@ msgstr "" msgid "Interfaces" msgstr "" -#: netbox/dcim/tables/devices.py:254 +#: netbox/dcim/tables/devices.py:246 msgid "Front ports" msgstr "" -#: netbox/dcim/tables/devices.py:260 +#: netbox/dcim/tables/devices.py:252 msgid "Device bays" msgstr "" -#: netbox/dcim/tables/devices.py:263 +#: netbox/dcim/tables/devices.py:255 msgid "Module bays" msgstr "" -#: netbox/dcim/tables/devices.py:266 +#: netbox/dcim/tables/devices.py:258 msgid "Inventory items" msgstr "" -#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:56 +#: netbox/dcim/tables/devices.py:297 netbox/dcim/tables/modules.py:56 #: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "" -#: netbox/dcim/tables/devices.py:318 netbox/dcim/tables/devicetypes.py:48 +#: netbox/dcim/tables/devices.py:310 netbox/dcim/tables/devicetypes.py:48 #: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1081 #: netbox/dcim/views.py:2024 netbox/netbox/navigation/menu.py:90 #: netbox/templates/dcim/device/base.html:52 @@ -6103,27 +6103,27 @@ msgstr "" msgid "Inventory Items" msgstr "" -#: netbox/dcim/tables/devices.py:330 +#: netbox/dcim/tables/devices.py:322 msgid "Cable Color" msgstr "" -#: netbox/dcim/tables/devices.py:336 +#: netbox/dcim/tables/devices.py:328 msgid "Link Peers" msgstr "" -#: netbox/dcim/tables/devices.py:339 +#: netbox/dcim/tables/devices.py:331 msgid "Mark Connected" msgstr "" -#: netbox/dcim/tables/devices.py:455 +#: netbox/dcim/tables/devices.py:449 msgid "Maximum draw (W)" msgstr "" -#: netbox/dcim/tables/devices.py:458 +#: netbox/dcim/tables/devices.py:452 msgid "Allocated draw (W)" msgstr "" -#: netbox/dcim/tables/devices.py:558 netbox/ipam/forms/model_forms.py:747 +#: netbox/dcim/tables/devices.py:546 netbox/ipam/forms/model_forms.py:747 #: netbox/ipam/tables/fhrp.py:28 netbox/ipam/views.py:602 #: netbox/ipam/views.py:701 netbox/netbox/navigation/menu.py:145 #: netbox/netbox/navigation/menu.py:147 @@ -6135,12 +6135,12 @@ msgstr "" msgid "IP Addresses" msgstr "" -#: netbox/dcim/tables/devices.py:564 netbox/netbox/navigation/menu.py:189 +#: netbox/dcim/tables/devices.py:552 netbox/netbox/navigation/menu.py:189 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:6 msgid "FHRP Groups" msgstr "" -#: netbox/dcim/tables/devices.py:576 netbox/templates/dcim/interface.html:89 +#: netbox/dcim/tables/devices.py:564 netbox/templates/dcim/interface.html:89 #: netbox/templates/virtualization/vminterface.html:67 #: netbox/templates/vpn/tunnel.html:18 #: netbox/templates/vpn/tunneltermination.html:13 @@ -6151,37 +6151,37 @@ msgstr "" msgid "Tunnel" msgstr "" -#: netbox/dcim/tables/devices.py:601 netbox/dcim/tables/devicetypes.py:224 +#: netbox/dcim/tables/devices.py:589 netbox/dcim/tables/devicetypes.py:224 #: netbox/templates/dcim/interface.html:65 msgid "Management Only" msgstr "" -#: netbox/dcim/tables/devices.py:619 +#: netbox/dcim/tables/devices.py:607 msgid "VDCs" msgstr "" -#: netbox/dcim/tables/devices.py:870 netbox/templates/dcim/modulebay.html:49 +#: netbox/dcim/tables/devices.py:852 netbox/templates/dcim/modulebay.html:49 msgid "Installed Module" msgstr "" -#: netbox/dcim/tables/devices.py:873 +#: netbox/dcim/tables/devices.py:855 msgid "Module Serial" msgstr "" -#: netbox/dcim/tables/devices.py:877 +#: netbox/dcim/tables/devices.py:859 msgid "Module Asset Tag" msgstr "" -#: netbox/dcim/tables/devices.py:886 +#: netbox/dcim/tables/devices.py:868 msgid "Module Status" msgstr "" -#: netbox/dcim/tables/devices.py:928 netbox/dcim/tables/devicetypes.py:308 +#: netbox/dcim/tables/devices.py:910 netbox/dcim/tables/devicetypes.py:308 #: netbox/templates/dcim/inventoryitem.html:40 msgid "Component" msgstr "" -#: netbox/dcim/tables/devices.py:983 +#: netbox/dcim/tables/devices.py:965 msgid "Items" msgstr "" @@ -6770,12 +6770,12 @@ msgstr "" msgid "Show your personal bookmarks" msgstr "" -#: netbox/extras/events.py:128 +#: netbox/extras/events.py:134 #, python-brace-format msgid "Unknown action type for an event rule: {action_type}" msgstr "" -#: netbox/extras/events.py:176 +#: netbox/extras/events.py:182 #, python-brace-format msgid "Cannot import events pipeline {name} error: {error}" msgstr "" @@ -8156,7 +8156,7 @@ msgstr "" msgid "Database changes have been reverted due to error." msgstr "" -#: netbox/extras/signals.py:146 +#: netbox/extras/signals.py:133 #, python-brace-format msgid "Deletion is prevented by a protection rule: {message}" msgstr "" @@ -8937,7 +8937,7 @@ msgstr "" #: netbox/virtualization/forms/filtersets.py:238 #: netbox/virtualization/forms/model_forms.py:220 #: netbox/virtualization/tables/virtualmachines.py:128 -#: netbox/virtualization/tables/virtualmachines.py:181 netbox/vpn/choices.py:45 +#: netbox/virtualization/tables/virtualmachines.py:183 netbox/vpn/choices.py:45 #: netbox/vpn/forms/filtersets.py:293 netbox/vpn/forms/model_forms.py:160 #: netbox/vpn/forms/model_forms.py:171 netbox/vpn/forms/model_forms.py:273 #: netbox/vpn/forms/model_forms.py:454 From 497270fcc8baa456c90d70d55792d9c5dca0b26f Mon Sep 17 00:00:00 2001 From: "Jamie (Bear) Murphy" <1613241+ITJamie@users.noreply.github.com> Date: Tue, 4 Jun 2024 13:49:08 +0100 Subject: [PATCH 27/38] Allow plugins to extend objectchange view (#16371) * allow plugins to extend objectchangeview with panels * replace tabs with spaces * Update netbox/templates/extras/objectchange.html Co-authored-by: Jeremy Stretch * Eliminate excessive vertical margin --------- Co-authored-by: Jeremy Stretch --- netbox/templates/extras/objectchange.html | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/netbox/templates/extras/objectchange.html b/netbox/templates/extras/objectchange.html index 368a71821..ffd6e77fa 100644 --- a/netbox/templates/extras/objectchange.html +++ b/netbox/templates/extras/objectchange.html @@ -1,5 +1,6 @@ {% extends 'generic/object.html' %} {% load helpers %} +{% load plugins %} {% load i18n %} {% block title %}{{ object }}{% endblock %} @@ -22,7 +23,7 @@ {% block subtitle %}{% endblock %} {% block content %} -
+
{% trans "Change" %}
@@ -104,7 +105,7 @@
-
+
{% trans "Pre-Change Data" %}
@@ -144,7 +145,15 @@
-
+
+
+ {% plugin_left_page object %} +
+
+ {% plugin_right_page object %} +
+
+
{% include 'inc/panel_table.html' with table=related_changes_table heading='Related Changes' panel_class='default' %} {% if related_changes_count > related_changes_table.rows|length %} @@ -158,4 +167,9 @@ {% endif %}
+
+
+ {% plugin_full_width_page object %} +
+
{% endblock %} From 67ac0b91e50bde53ca491133f09f5ba93d504f7e Mon Sep 17 00:00:00 2001 From: Daniel Sheppard Date: Tue, 4 Jun 2024 08:02:38 -0500 Subject: [PATCH 28/38] =?UTF-8?q?Fixes:=20#16083=20-=20Add=20font-variant-?= =?UTF-8?q?ligatures=20setting=20to=20disable=20ligatur=E2=80=A6=20(#16383?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fixes: #16083 - Add font-variant-ligatures setting to disable ligatures on chromium * Fix comment * Disable ligatures on input fields * Condense rules & apply to all elements --------- Co-authored-by: Jeremy Stretch --- netbox/project-static/dist/netbox.css | Bin 551631 -> 551692 bytes .../styles/overrides/_tabler.scss | 7 +++++++ 2 files changed, 7 insertions(+) diff --git a/netbox/project-static/dist/netbox.css b/netbox/project-static/dist/netbox.css index 082a5b64d2374a533a0cd977972c5efb72012a24..0ec53a6d27390befa166d8e074df6917b0c345ef 100644 GIT binary patch delta 80 zcmX?qRk7!qVnYjK3sVbo3rh=Y3tJ2O7LMi!Cavn}2QIM4%cbS#mFSiw7G)*^>72~; j#FEmY)MBf={JhlKf}-h#dzgi%7ffX3*}f!#Lt6*{#ycIs delta 31 mcmeCVrg;9UVnYjK3sVbo3rh=Y3tJ2O7LMkK?FS+_e1rhSaSKfV diff --git a/netbox/project-static/styles/overrides/_tabler.scss b/netbox/project-static/styles/overrides/_tabler.scss index b31fdac6b..5ea63be76 100644 --- a/netbox/project-static/styles/overrides/_tabler.scss +++ b/netbox/project-static/styles/overrides/_tabler.scss @@ -1,3 +1,10 @@ +// Disable font-ligatures for Chromium based browsers +// Chromium requires `font-variant-ligatures: none` in addition to `font-feature-settings "liga" 0` +* { + font-feature-settings: "liga" 0; + font-variant-ligatures: none; +} + // Restore default foreground & background colors for
 blocks
 pre {
   background-color: transparent;

From 8f509533d88fd135bf531ab467fe0ebad53a2ef2 Mon Sep 17 00:00:00 2001
From: Julio Oliveira at Encora
 <149191228+Julio-Oliveira-Encora@users.noreply.github.com>
Date: Tue, 4 Jun 2024 10:37:08 -0300
Subject: [PATCH 29/38] 16315 - Cant filter changelog by object type (no
 results found) (#16324)

* Replaced "api=/api/extras/content-types/" with "/api/extras/object-types/" for JournalEntryFilterForm and ObjectChangeFilterForm.

* Addressed PR comment.

* Correct feature classifications

---------

Co-authored-by: Jeremy Stretch 
---
 netbox/extras/forms/filtersets.py | 14 ++++----------
 1 file changed, 4 insertions(+), 10 deletions(-)

diff --git a/netbox/extras/forms/filtersets.py b/netbox/extras/forms/filtersets.py
index d4235c465..e6b001f2c 100644
--- a/netbox/extras/forms/filtersets.py
+++ b/netbox/extras/forms/filtersets.py
@@ -464,13 +464,10 @@ class JournalEntryFilterForm(NetBoxModelFilterSetForm):
         required=False,
         label=_('User')
     )
-    assigned_object_type_id = DynamicModelMultipleChoiceField(
-        queryset=ObjectType.objects.all(),
+    assigned_object_type_id = ContentTypeMultipleChoiceField(
+        queryset=ObjectType.objects.with_feature('journaling'),
         required=False,
         label=_('Object Type'),
-        widget=APISelectMultiple(
-            api_url='/api/extras/content-types/',
-        )
     )
     kind = forms.ChoiceField(
         label=_('Kind'),
@@ -507,11 +504,8 @@ class ObjectChangeFilterForm(SavedFiltersMixin, FilterForm):
         required=False,
         label=_('User')
     )
-    changed_object_type_id = DynamicModelMultipleChoiceField(
-        queryset=ObjectType.objects.all(),
+    changed_object_type_id = ContentTypeMultipleChoiceField(
+        queryset=ObjectType.objects.with_feature('change_logging'),
         required=False,
         label=_('Object Type'),
-        widget=APISelectMultiple(
-            api_url='/api/extras/content-types/',
-        )
     )

From 99f8917b0826df8b5509466c637fd49b5033cd55 Mon Sep 17 00:00:00 2001
From: Jeremy Stretch 
Date: Tue, 4 Jun 2024 13:51:40 -0400
Subject: [PATCH 30/38] Fixes #16376: Log changes on terminating objects when
 attaching a cable

---
 netbox/dcim/models/cables.py | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/netbox/dcim/models/cables.py b/netbox/dcim/models/cables.py
index 64f0b8560..7afead829 100644
--- a/netbox/dcim/models/cables.py
+++ b/netbox/dcim/models/cables.py
@@ -355,11 +355,11 @@ class CableTermination(ChangeLoggedModel):
         super().save(*args, **kwargs)
 
         # Set the cable on the terminating object
-        termination_model = self.termination._meta.model
-        termination_model.objects.filter(pk=self.termination_id).update(
-            cable=self.cable,
-            cable_end=self.cable_end
-        )
+        termination = self.termination._meta.model.objects.get(pk=self.termination_id)
+        termination.snapshot()
+        termination.cable = self.cable
+        termination.cable_end = self.cable_end
+        termination.save()
 
     def delete(self, *args, **kwargs):
 

From 02d2979da01494413436262dd76555e773a5e28d Mon Sep 17 00:00:00 2001
From: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Date: Wed, 5 Jun 2024 05:02:18 +0000
Subject: [PATCH 31/38] Update source translation strings

---
 netbox/translations/en/LC_MESSAGES/django.po | 58 ++++++++++----------
 1 file changed, 29 insertions(+), 29 deletions(-)

diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po
index af150e24c..2c459a302 100644
--- a/netbox/translations/en/LC_MESSAGES/django.po
+++ b/netbox/translations/en/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-06-04 05:02+0000\n"
+"POT-Creation-Date: 2024-06-05 05:02+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME \n"
 "Language-Team: LANGUAGE \n"
@@ -965,7 +965,7 @@ msgstr ""
 #: netbox/extras/forms/filtersets.py:143 netbox/extras/forms/filtersets.py:183
 #: netbox/extras/forms/filtersets.py:199 netbox/extras/forms/filtersets.py:230
 #: netbox/extras/forms/filtersets.py:254 netbox/extras/forms/filtersets.py:450
-#: netbox/extras/forms/filtersets.py:488 netbox/ipam/forms/filtersets.py:99
+#: netbox/extras/forms/filtersets.py:485 netbox/ipam/forms/filtersets.py:99
 #: netbox/ipam/forms/filtersets.py:266 netbox/ipam/forms/filtersets.py:307
 #: netbox/ipam/forms/filtersets.py:382 netbox/ipam/forms/filtersets.py:475
 #: netbox/ipam/forms/filtersets.py:534 netbox/ipam/forms/filtersets.py:552
@@ -1577,9 +1577,9 @@ msgid "Creation"
 msgstr ""
 
 #: netbox/core/forms/filtersets.py:71 netbox/extras/forms/filtersets.py:470
-#: netbox/extras/forms/filtersets.py:513 netbox/extras/tables/tables.py:183
+#: netbox/extras/forms/filtersets.py:510 netbox/extras/tables/tables.py:183
 #: netbox/extras/tables/tables.py:504 netbox/templates/core/job.html:20
-#: netbox/templates/extras/objectchange.html:51
+#: netbox/templates/extras/objectchange.html:52
 #: netbox/tenancy/tables/contacts.py:90 netbox/vpn/tables/l2vpn.py:59
 msgid "Object Type"
 msgstr ""
@@ -1619,9 +1619,9 @@ msgstr ""
 #: netbox/core/forms/filtersets.py:123 netbox/dcim/forms/bulk_edit.py:361
 #: netbox/dcim/forms/filtersets.py:353 netbox/dcim/forms/filtersets.py:397
 #: netbox/dcim/forms/model_forms.py:258 netbox/extras/forms/filtersets.py:465
-#: netbox/extras/forms/filtersets.py:508
+#: netbox/extras/forms/filtersets.py:505
 #: netbox/templates/dcim/rackreservation.html:58
-#: netbox/templates/extras/objectchange.html:35
+#: netbox/templates/extras/objectchange.html:36
 #: netbox/templates/extras/savedfilter.html:21
 #: netbox/templates/inc/user_menu.html:15 netbox/templates/users/token.html:21
 #: netbox/templates/users/user.html:6 netbox/templates/users/user.html:14
@@ -1976,7 +1976,7 @@ msgstr ""
 #: netbox/extras/tables/tables.py:509 netbox/extras/tables/tables.py:574
 #: netbox/netbox/tables/tables.py:243 netbox/templates/extras/eventrule.html:84
 #: netbox/templates/extras/journalentry.html:18
-#: netbox/templates/extras/objectchange.html:57
+#: netbox/templates/extras/objectchange.html:58
 #: netbox/tenancy/tables/contacts.py:93 netbox/vpn/tables/l2vpn.py:64
 msgid "Object"
 msgstr ""
@@ -4172,7 +4172,7 @@ msgid "Connection"
 msgstr ""
 
 #: netbox/dcim/forms/filtersets.py:1254 netbox/extras/forms/bulk_edit.py:316
-#: netbox/extras/forms/bulk_import.py:242 netbox/extras/forms/filtersets.py:476
+#: netbox/extras/forms/bulk_import.py:242 netbox/extras/forms/filtersets.py:473
 #: netbox/extras/forms/model_forms.py:551 netbox/extras/tables/tables.py:512
 #: netbox/templates/extras/journalentry.html:30
 msgid "Kind"
@@ -7144,23 +7144,23 @@ msgstr ""
 msgid "Tenant groups"
 msgstr ""
 
-#: netbox/extras/forms/filtersets.py:454 netbox/extras/forms/filtersets.py:492
+#: netbox/extras/forms/filtersets.py:454 netbox/extras/forms/filtersets.py:489
 msgid "After"
 msgstr ""
 
-#: netbox/extras/forms/filtersets.py:459 netbox/extras/forms/filtersets.py:497
+#: netbox/extras/forms/filtersets.py:459 netbox/extras/forms/filtersets.py:494
 msgid "Before"
 msgstr ""
 
-#: netbox/extras/forms/filtersets.py:487 netbox/extras/tables/tables.py:456
+#: netbox/extras/forms/filtersets.py:484 netbox/extras/tables/tables.py:456
 #: netbox/extras/tables/tables.py:542 netbox/extras/tables/tables.py:567
-#: netbox/templates/extras/objectchange.html:31
+#: netbox/templates/extras/objectchange.html:32
 msgid "Time"
 msgstr ""
 
-#: netbox/extras/forms/filtersets.py:501 netbox/extras/forms/model_forms.py:282
+#: netbox/extras/forms/filtersets.py:498 netbox/extras/forms/model_forms.py:282
 #: netbox/extras/tables/tables.py:470 netbox/templates/extras/eventrule.html:77
-#: netbox/templates/extras/objectchange.html:45
+#: netbox/templates/extras/objectchange.html:46
 msgid "Action"
 msgstr ""
 
@@ -8256,7 +8256,7 @@ msgid "Full Name"
 msgstr ""
 
 #: netbox/extras/tables/tables.py:483
-#: netbox/templates/extras/objectchange.html:67
+#: netbox/templates/extras/objectchange.html:68
 msgid "Request ID"
 msgstr ""
 
@@ -10275,7 +10275,7 @@ msgid "Journal Entries"
 msgstr ""
 
 #: netbox/netbox/navigation/menu.py:359
-#: netbox/templates/extras/objectchange.html:8
+#: netbox/templates/extras/objectchange.html:9
 #: netbox/templates/extras/objectchange_list.html:4
 msgid "Change Log"
 msgstr ""
@@ -10734,8 +10734,8 @@ msgstr ""
 #: netbox/templates/extras/configcontext.html:70
 #: netbox/templates/extras/eventrule.html:72
 #: netbox/templates/extras/htmx/script_result.html:56
-#: netbox/templates/extras/objectchange.html:123
-#: netbox/templates/extras/objectchange.html:141
+#: netbox/templates/extras/objectchange.html:124
+#: netbox/templates/extras/objectchange.html:142
 #: netbox/templates/extras/webhook.html:67
 #: netbox/templates/extras/webhook.html:79
 #: netbox/templates/inc/panel_table.html:13
@@ -12308,48 +12308,48 @@ msgstr ""
 msgid "New Journal Entry"
 msgstr ""
 
-#: netbox/templates/extras/objectchange.html:28
+#: netbox/templates/extras/objectchange.html:29
 #: netbox/templates/users/objectpermission.html:42
 msgid "Change"
 msgstr ""
 
-#: netbox/templates/extras/objectchange.html:78
+#: netbox/templates/extras/objectchange.html:79
 msgid "Difference"
 msgstr ""
 
-#: netbox/templates/extras/objectchange.html:81
+#: netbox/templates/extras/objectchange.html:82
 msgid "Previous"
 msgstr ""
 
-#: netbox/templates/extras/objectchange.html:84
+#: netbox/templates/extras/objectchange.html:85
 msgid "Next"
 msgstr ""
 
-#: netbox/templates/extras/objectchange.html:92
+#: netbox/templates/extras/objectchange.html:93
 msgid "Object Created"
 msgstr ""
 
-#: netbox/templates/extras/objectchange.html:94
+#: netbox/templates/extras/objectchange.html:95
 msgid "Object Deleted"
 msgstr ""
 
-#: netbox/templates/extras/objectchange.html:96
+#: netbox/templates/extras/objectchange.html:97
 msgid "No Changes"
 msgstr ""
 
-#: netbox/templates/extras/objectchange.html:110
+#: netbox/templates/extras/objectchange.html:111
 msgid "Pre-Change Data"
 msgstr ""
 
-#: netbox/templates/extras/objectchange.html:121
+#: netbox/templates/extras/objectchange.html:122
 msgid "Warning: Comparing non-atomic change to previous change record"
 msgstr ""
 
-#: netbox/templates/extras/objectchange.html:130
+#: netbox/templates/extras/objectchange.html:131
 msgid "Post-Change Data"
 msgstr ""
 
-#: netbox/templates/extras/objectchange.html:153
+#: netbox/templates/extras/objectchange.html:162
 #, python-format
 msgid "See All %(count)s Changes"
 msgstr ""

From 95e1f21324c797a586ead0819e2675938e77f38c Mon Sep 17 00:00:00 2001
From: Jeremy Stretch 
Date: Wed, 5 Jun 2024 09:02:05 -0400
Subject: [PATCH 32/38] Fix styling of object jobs table

---
 netbox/templates/core/object_jobs.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/netbox/templates/core/object_jobs.html b/netbox/templates/core/object_jobs.html
index 7d8c0a3b7..14e31e5be 100644
--- a/netbox/templates/core/object_jobs.html
+++ b/netbox/templates/core/object_jobs.html
@@ -5,7 +5,7 @@
   
-
+
{% render_table table 'inc/table.html' %} {% include 'inc/paginator.html' with paginator=table.paginator page=table.page %}
From 6affd88bcb9a828e5e6f298acbb84f02c224fc7f Mon Sep 17 00:00:00 2001 From: Julio Oliveira at Encora <149191228+Julio-Oliveira-Encora@users.noreply.github.com> Date: Wed, 5 Jun 2024 16:23:36 -0300 Subject: [PATCH 33/38] Fixed error when the active Config is deleted and rest only one to restore. (#16408) --- netbox/core/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netbox/core/views.py b/netbox/core/views.py index 5a65c5755..ded49c0b8 100644 --- a/netbox/core/views.py +++ b/netbox/core/views.py @@ -224,7 +224,7 @@ class ConfigRevisionRestoreView(ContentTypePermissionRequiredMixin, View): for param in PARAMS: params.append(( param.name, - current_config.data.get(param.name, None), + current_config.data.get(param.name, None) if current_config else None, candidate_config.data.get(param.name, None) )) From 49811ed1942f443741eae422c46ac0f8ac74bec8 Mon Sep 17 00:00:00 2001 From: Louis Jarasius Date: Thu, 6 Jun 2024 22:44:32 +1000 Subject: [PATCH 34/38] Fixes #16274: Dark mode highlight color (#16355) * Increase ::selection background-color aplha * Improve comment for override * Add compiled CSS * Only override on dark theme --- netbox/project-static/dist/netbox.css | Bin 551692 -> 551835 bytes .../styles/overrides/_tabler.scss | 5 +++++ 2 files changed, 5 insertions(+) diff --git a/netbox/project-static/dist/netbox.css b/netbox/project-static/dist/netbox.css index 0ec53a6d27390befa166d8e074df6917b0c345ef..0696d2e827f51ae3142a610e546459a4bba62033 100644 GIT binary patch delta 59 zcmeCVra1e$VnYjK3sVbo3rh=Y3tJ2O7LLBi>4uY;L^-Xjic@n^lS?wE>%}k{P3PFo PZp~z3vArjfqd^b=Xx9^2 delta 31 mcmbPzU9snyVnYjK3sVbo3rh=Y3tJ2O7LLBi?XpoEb%FrB!V0$l diff --git a/netbox/project-static/styles/overrides/_tabler.scss b/netbox/project-static/styles/overrides/_tabler.scss index 5ea63be76..97f1298df 100644 --- a/netbox/project-static/styles/overrides/_tabler.scss +++ b/netbox/project-static/styles/overrides/_tabler.scss @@ -39,3 +39,8 @@ table a { // Adjust table anchor link contrast as not enough contrast in dark mode filter: brightness(110%); } + +// Override background color alpha value +[data-bs-theme=dark] ::selection { + background-color: rgba(var(--tblr-primary-rgb),.48) +} From 7eac32001a30bca9f35d25f094db1fc5f509c756 Mon Sep 17 00:00:00 2001 From: Arthur Hanson Date: Thu, 6 Jun 2024 06:05:59 -0700 Subject: [PATCH 35/38] 16050 Show script python_class name and description (#16185) * 16050 Show script python_class name and description * 16050 change to use Meta.description * 16050 change to use Meta.description * 16050 remove module name customization from docs --- docs/customization/custom-scripts.md | 6 ------ netbox/templates/extras/script/base.html | 4 ++-- netbox/templates/extras/script_list.html | 6 +++--- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/docs/customization/custom-scripts.md b/docs/customization/custom-scripts.md index 21ae20f05..2a8f252aa 100644 --- a/docs/customization/custom-scripts.md +++ b/docs/customization/custom-scripts.md @@ -65,12 +65,6 @@ class AnotherCustomScript(Script): script_order = (MyCustomScript, AnotherCustomScript) ``` -## Module Attributes - -### `name` - -You can define `name` within a script module (the Python file which contains one or more scripts) to set the module name. If `name` is not defined, the module's file name will be used. - ## Script Attributes Script attributes are defined under a class named `Meta` within the script. These are optional, but encouraged. diff --git a/netbox/templates/extras/script/base.html b/netbox/templates/extras/script/base.html index 7220b329d..725e4737c 100644 --- a/netbox/templates/extras/script/base.html +++ b/netbox/templates/extras/script/base.html @@ -4,7 +4,7 @@ {% load log_levels %} {% load i18n %} -{% block title %}{{ script }}{% endblock %} +{% block title %}{{ script.python_class.name }}{% endblock %} {% block object_identifier %} {{ script.full_name }} @@ -17,7 +17,7 @@ {% block subtitle %}
- {{ script.Meta.description|markdown }} + {{ script.python_class.Meta.description|markdown }}
{% endblock subtitle %} diff --git a/netbox/templates/extras/script_list.html b/netbox/templates/extras/script_list.html index 7ce5ca6eb..27b6115a7 100644 --- a/netbox/templates/extras/script_list.html +++ b/netbox/templates/extras/script_list.html @@ -56,15 +56,15 @@ {% if script.is_executable %} - {{ script.name }} + {{ script.python_class.name }} {% else %} - {{ script.name }} + {{ script.python_class.name }} {% endif %} - {{ script.description|markdown|placeholder }} + {{ script.python_class.Meta.description|markdown|placeholder }} {% if last_job %} {{ last_job.created|isodatetime }} From 6b2c35c506a8a737529d493b35edb0f6b84a7483 Mon Sep 17 00:00:00 2001 From: Julio Oliveira at Encora <149191228+Julio-Oliveira-Encora@users.noreply.github.com> Date: Thu, 6 Jun 2024 10:35:27 -0300 Subject: [PATCH 36/38] Fixes: #14567 - Export current view of IP Addresses (#15659) * Added javascript and htmx to change the url. * Added javascript and htmx to change the url * Addressed PR comments * Added Netbox.js and netbox.js.map * Addressed PR comments * Addressed PR comments * Addressed PR comments * Addressed PR comments * Addressed PR comments * Addressed PR comments * Addressed PR comments * Addressed PR comments * Linter Issues * Fix assets issue * Fix assets issue * Addressed PR comment. It was added clearLinkParams to clear button. * Added passive:true to search.ts --------- Co-authored-by: Jeremy Stretch --- netbox/project-static/dist/netbox.js | Bin 387735 -> 388117 bytes netbox/project-static/dist/netbox.js.map | Bin 352915 -> 353214 bytes netbox/project-static/src/search.ts | 76 +++++++++++++----- .../utilities/templates/buttons/export.html | 2 +- 4 files changed, 57 insertions(+), 21 deletions(-) diff --git a/netbox/project-static/dist/netbox.js b/netbox/project-static/dist/netbox.js index 58c419b3d4e979c8b658b9af989305a238748219..d8c7c36c5ac619e183f96c8b911e1a5046e6e7e7 100644 GIT binary patch delta 8800 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 delta 104 zcmdmYTy*kL(S{br7N#xCA+n5B)5GMLXKDoKxH~!q>v%glM?hGaPL7V5PC9`gQBOz5 wNS#V2M`v^A={EArk)pni&Q(r2&W_G55Cy)@CC*vx>*bk&m}UEVc~*WG0DK-ErvLx| diff --git a/netbox/project-static/src/search.ts b/netbox/project-static/src/search.ts index 4be740196..1295527cf 100644 --- a/netbox/project-static/src/search.ts +++ b/netbox/project-static/src/search.ts @@ -7,38 +7,74 @@ import { isTruthy } from './util'; */ function quickSearchEventHandler(event: Event): void { const quicksearch = event.currentTarget as HTMLInputElement; - const clearbtn = document.getElementById("quicksearch_clear") as HTMLAnchorElement; + const clearbtn = document.getElementById('quicksearch_clear') as HTMLAnchorElement; if (isTruthy(clearbtn)) { - if (quicksearch.value === "") { - clearbtn.classList.add("invisible"); + if (quicksearch.value === '') { + clearbtn.classList.add('invisible'); } else { - clearbtn.classList.remove("invisible"); + clearbtn.classList.remove('invisible'); } } } +/** + * Clear the existing search parameters in the link to export Current View. + */ +function clearLinkParams(): void { + const link = document.getElementById('export_current_view') as HTMLLinkElement; + const linkUpdated = link?.href.split('&')[0]; + link.setAttribute('href', linkUpdated); +} + +/** + * Update the Export View link to add the Quick Search parameters. + * @param event + */ +function handleQuickSearchParams(event: Event): void { + const quickSearchParameters = event.currentTarget as HTMLInputElement; + + // Clear the existing search parameters + clearLinkParams(); + + if (quickSearchParameters != null) { + const link = document.getElementById('export_current_view') as HTMLLinkElement; + const search_parameter = `q=${quickSearchParameters.value}`; + const linkUpdated = link?.href + '&' + search_parameter; + link.setAttribute('href', linkUpdated); + } +} + /** * Initialize Quicksearch Event listener/handlers. */ export function initQuickSearch(): void { - const quicksearch = document.getElementById("quicksearch") as HTMLInputElement; - const clearbtn = document.getElementById("quicksearch_clear") as HTMLAnchorElement; + const quicksearch = document.getElementById('quicksearch') as HTMLInputElement; + const clearbtn = document.getElementById('quicksearch_clear') as HTMLAnchorElement; if (isTruthy(quicksearch)) { - quicksearch.addEventListener("keyup", quickSearchEventHandler, { - passive: true - }) - quicksearch.addEventListener("search", quickSearchEventHandler, { - passive: true - }) + quicksearch.addEventListener('keyup', quickSearchEventHandler, { + passive: true, + }); + quicksearch.addEventListener('search', quickSearchEventHandler, { + passive: true, + }); + quicksearch.addEventListener('change', handleQuickSearchParams, { + passive: true, + }); + if (isTruthy(clearbtn)) { - clearbtn.addEventListener("click", async () => { - const search = new Event('search'); - quicksearch.value = ''; - await new Promise(f => setTimeout(f, 100)); - quicksearch.dispatchEvent(search); - }, { - passive: true - }) + clearbtn.addEventListener( + 'click', + async () => { + const search = new Event('search'); + quicksearch.value = ''; + await new Promise(f => setTimeout(f, 100)); + quicksearch.dispatchEvent(search); + clearLinkParams(); + }, + { + passive: true, + }, + ); } } } diff --git a/netbox/utilities/templates/buttons/export.html b/netbox/utilities/templates/buttons/export.html index 2085356fa..279757236 100644 --- a/netbox/utilities/templates/buttons/export.html +++ b/netbox/utilities/templates/buttons/export.html @@ -4,7 +4,7 @@ {% trans "Export" %}

H=B}5E1>r7@2{skYXAyS_mo$`^ysA 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
6aoLG-N)GfeyboCf< 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
V8E(+8H zus{~3e!@s@5Kym1N-s=-bo@-hQ0OTdc~<{`dSecFxNRP24nW?U?$00sA# z(;X*hf&-dZmy>EAQi)z#rg=54>CDlwVrB@%jI`~)L{u9a93)9n7aa|%sh;Y#dI}S4 zyab_L{o^qRpBp5w?Rast89)VuTW<$lEP-SGb)?u?t_#r!U=y|ym7FId9Y!Gt^FD@# zi4z^I91{!3s!QUtQ8 zRAm3k0{jgBwf~x2pu4*Ey3TXJh-WbW`{)Mvqb*@)7dm75YM(-_H;)4kdN-*K%N{Ae z>N?5Df6{cO@zL}2k#3I?xpi}gI^W+q;4@vp%0DrakGN$!vtq59-%@LfQqLpL%@S$r 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