From 567524b7b8cbde5c3b1d1d7ca3401a9d3c299e1d Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Tue, 28 Jul 2026 17:25:52 -0400 Subject: [PATCH 01/35] Update claude-code-action; change model to Opus 5 (#22788) --- .github/workflows/claude.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/claude.yml b/.github/workflows/claude.yml index 6feaa0dce..3059d70ed 100644 --- a/.github/workflows/claude.yml +++ b/.github/workflows/claude.yml @@ -33,7 +33,8 @@ jobs: fetch-depth: 1 - name: Run Claude Code id: claude - uses: anthropics/claude-code-action@11a9dadd198803a0cea6bd53da3e0e8a762fc6ea # v1.0.108 + uses: anthropics/claude-code-action@be7b93b1907a4abad570368f3c74b6fe3807510b # v1.0.183 with: anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} github_token: ${{ secrets.GITHUB_TOKEN }} + claude_args: --model claude-opus-5 From 10ac9ffe8d0520059307a4b1bf32a6faabc615be Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 29 Jul 2026 05:58:26 +0000 Subject: [PATCH 02/35] Update source translation strings --- netbox/translations/en/LC_MESSAGES/django.po | 524 ++++++++++--------- 1 file changed, 271 insertions(+), 253 deletions(-) diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index 863d57e56..438a6d8dc 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: 2026-07-24 05:56+0000\n" +"POT-Creation-Date: 2026-07-29 05:58+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -171,10 +171,10 @@ msgstr "" #: netbox/circuits/forms/filtersets.py:249 #: netbox/circuits/tables/circuits.py:125 netbox/dcim/forms/bulk_edit.py:176 #: netbox/dcim/forms/bulk_edit.py:339 netbox/dcim/forms/bulk_edit.py:696 -#: netbox/dcim/forms/bulk_edit.py:906 netbox/dcim/forms/bulk_import.py:148 -#: netbox/dcim/forms/bulk_import.py:256 netbox/dcim/forms/bulk_import.py:365 -#: netbox/dcim/forms/bulk_import.py:656 netbox/dcim/forms/bulk_import.py:1701 -#: netbox/dcim/forms/bulk_import.py:1729 netbox/dcim/forms/filtersets.py:108 +#: netbox/dcim/forms/bulk_edit.py:906 netbox/dcim/forms/bulk_import.py:149 +#: netbox/dcim/forms/bulk_import.py:257 netbox/dcim/forms/bulk_import.py:366 +#: netbox/dcim/forms/bulk_import.py:657 netbox/dcim/forms/bulk_import.py:1789 +#: netbox/dcim/forms/bulk_import.py:1817 netbox/dcim/forms/filtersets.py:108 #: netbox/dcim/forms/filtersets.py:258 netbox/dcim/forms/filtersets.py:390 #: netbox/dcim/forms/filtersets.py:500 netbox/dcim/forms/filtersets.py:895 #: netbox/dcim/forms/filtersets.py:1117 netbox/dcim/forms/filtersets.py:1198 @@ -301,7 +301,7 @@ msgstr "" #: netbox/extras/filtersets.py:503 netbox/extras/filtersets.py:562 #: netbox/extras/filtersets.py:623 netbox/extras/filtersets.py:662 #: netbox/extras/filtersets.py:695 netbox/extras/filtersets.py:869 -#: netbox/ipam/forms/model_forms.py:523 netbox/netbox/filtersets.py:319 +#: netbox/ipam/forms/model_forms.py:523 netbox/netbox/filtersets.py:324 #: netbox/netbox/forms/filtersets.py:32 netbox/netbox/forms/search.py:20 #: netbox/templates/htmx/object_selector.html:28 #: netbox/templates/inc/filter_list.html:43 @@ -448,7 +448,7 @@ msgstr "" #: netbox/dcim/forms/bulk_edit.py:628 netbox/dcim/forms/bulk_edit.py:849 #: netbox/dcim/forms/bulk_edit.py:1103 netbox/dcim/forms/bulk_edit.py:1202 #: netbox/dcim/forms/bulk_edit.py:1229 netbox/dcim/forms/bulk_edit.py:1773 -#: netbox/dcim/forms/bulk_import.py:1541 netbox/dcim/forms/filtersets.py:1283 +#: netbox/dcim/forms/bulk_import.py:1629 netbox/dcim/forms/filtersets.py:1283 #: netbox/dcim/forms/filtersets.py:1613 netbox/dcim/forms/filtersets.py:1829 #: netbox/dcim/forms/filtersets.py:1848 netbox/dcim/forms/filtersets.py:1872 #: netbox/dcim/forms/filtersets.py:1891 netbox/dcim/tables/devices.py:804 @@ -476,12 +476,12 @@ msgstr "" #: netbox/dcim/forms/bulk_edit.py:1033 netbox/dcim/forms/bulk_edit.py:1056 #: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_edit.py:1146 #: netbox/dcim/forms/bulk_edit.py:1197 netbox/dcim/forms/bulk_edit.py:1224 -#: netbox/dcim/forms/bulk_import.py:214 netbox/dcim/forms/bulk_import.py:300 -#: netbox/dcim/forms/bulk_import.py:829 netbox/dcim/forms/bulk_import.py:855 -#: netbox/dcim/forms/bulk_import.py:881 netbox/dcim/forms/bulk_import.py:902 -#: netbox/dcim/forms/bulk_import.py:988 netbox/dcim/forms/bulk_import.py:1117 -#: netbox/dcim/forms/bulk_import.py:1136 netbox/dcim/forms/bulk_import.py:1515 -#: netbox/dcim/forms/bulk_import.py:1766 netbox/dcim/forms/filtersets.py:1155 +#: netbox/dcim/forms/bulk_import.py:215 netbox/dcim/forms/bulk_import.py:301 +#: netbox/dcim/forms/bulk_import.py:830 netbox/dcim/forms/bulk_import.py:856 +#: netbox/dcim/forms/bulk_import.py:882 netbox/dcim/forms/bulk_import.py:903 +#: netbox/dcim/forms/bulk_import.py:989 netbox/dcim/forms/bulk_import.py:1118 +#: netbox/dcim/forms/bulk_import.py:1224 netbox/dcim/forms/bulk_import.py:1603 +#: netbox/dcim/forms/bulk_import.py:1854 netbox/dcim/forms/filtersets.py:1155 #: netbox/dcim/forms/filtersets.py:1268 netbox/dcim/forms/filtersets.py:1401 #: netbox/dcim/forms/filtersets.py:1492 netbox/dcim/forms/filtersets.py:1512 #: netbox/dcim/forms/filtersets.py:1532 netbox/dcim/forms/filtersets.py:1552 @@ -539,11 +539,11 @@ msgstr "" #: netbox/dcim/forms/bulk_edit.py:719 netbox/dcim/forms/bulk_edit.py:778 #: netbox/dcim/forms/bulk_edit.py:822 netbox/dcim/forms/bulk_edit.py:942 #: netbox/dcim/forms/bulk_edit.py:1747 netbox/dcim/forms/bulk_edit.py:1791 -#: netbox/dcim/forms/bulk_import.py:105 netbox/dcim/forms/bulk_import.py:164 -#: netbox/dcim/forms/bulk_import.py:281 netbox/dcim/forms/bulk_import.py:390 -#: netbox/dcim/forms/bulk_import.py:621 netbox/dcim/forms/bulk_import.py:781 -#: netbox/dcim/forms/bulk_import.py:1258 netbox/dcim/forms/bulk_import.py:1503 -#: netbox/dcim/forms/bulk_import.py:1761 netbox/dcim/forms/bulk_import.py:1824 +#: netbox/dcim/forms/bulk_import.py:106 netbox/dcim/forms/bulk_import.py:165 +#: netbox/dcim/forms/bulk_import.py:282 netbox/dcim/forms/bulk_import.py:391 +#: netbox/dcim/forms/bulk_import.py:622 netbox/dcim/forms/bulk_import.py:782 +#: netbox/dcim/forms/bulk_import.py:1346 netbox/dcim/forms/bulk_import.py:1591 +#: netbox/dcim/forms/bulk_import.py:1849 netbox/dcim/forms/bulk_import.py:1912 #: netbox/dcim/forms/filtersets.py:210 netbox/dcim/forms/filtersets.py:270 #: netbox/dcim/forms/filtersets.py:413 netbox/dcim/forms/filtersets.py:528 #: netbox/dcim/forms/filtersets.py:941 netbox/dcim/forms/filtersets.py:1064 @@ -602,10 +602,10 @@ msgstr "" #: netbox/dcim/forms/bulk_edit.py:195 netbox/dcim/forms/bulk_edit.py:361 #: netbox/dcim/forms/bulk_edit.py:486 netbox/dcim/forms/bulk_edit.py:709 #: netbox/dcim/forms/bulk_edit.py:834 netbox/dcim/forms/bulk_edit.py:1796 -#: netbox/dcim/forms/bulk_import.py:124 netbox/dcim/forms/bulk_import.py:169 -#: netbox/dcim/forms/bulk_import.py:267 netbox/dcim/forms/bulk_import.py:395 -#: netbox/dcim/forms/bulk_import.py:595 netbox/dcim/forms/bulk_import.py:1521 -#: netbox/dcim/forms/bulk_import.py:1817 netbox/dcim/forms/filtersets.py:145 +#: netbox/dcim/forms/bulk_import.py:125 netbox/dcim/forms/bulk_import.py:170 +#: netbox/dcim/forms/bulk_import.py:268 netbox/dcim/forms/bulk_import.py:396 +#: netbox/dcim/forms/bulk_import.py:596 netbox/dcim/forms/bulk_import.py:1609 +#: netbox/dcim/forms/bulk_import.py:1905 netbox/dcim/forms/filtersets.py:145 #: netbox/dcim/forms/filtersets.py:204 netbox/dcim/forms/filtersets.py:237 #: netbox/dcim/forms/filtersets.py:374 netbox/dcim/forms/filtersets.py:459 #: netbox/dcim/forms/filtersets.py:480 netbox/dcim/forms/filtersets.py:863 @@ -696,7 +696,7 @@ msgstr "" #: netbox/circuits/forms/filtersets.py:325 #: netbox/circuits/forms/filtersets.py:341 netbox/core/forms/filtersets.py:78 #: netbox/core/forms/filtersets.py:150 netbox/dcim/forms/bulk_edit.py:867 -#: netbox/dcim/forms/bulk_import.py:504 netbox/dcim/forms/filtersets.py:203 +#: netbox/dcim/forms/bulk_import.py:505 netbox/dcim/forms/filtersets.py:203 #: netbox/dcim/forms/filtersets.py:236 netbox/dcim/forms/filtersets.py:1054 #: netbox/dcim/forms/filtersets.py:1207 netbox/dcim/forms/filtersets.py:1219 #: netbox/dcim/forms/filtersets.py:1355 netbox/dcim/forms/filtersets.py:1482 @@ -792,7 +792,7 @@ msgstr "" #: netbox/circuits/forms/bulk_edit.py:192 #: netbox/circuits/forms/model_forms.py:198 -#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/bulk_import.py:1494 +#: netbox/dcim/forms/bulk_import.py:1549 netbox/dcim/forms/bulk_import.py:1582 msgid "Termination type" msgstr "" @@ -865,7 +865,7 @@ msgstr "" #: netbox/circuits/forms/filtersets.py:393 #: netbox/circuits/forms/model_forms.py:399 netbox/dcim/forms/bulk_edit.py:372 #: netbox/dcim/forms/bulk_edit.py:1301 netbox/dcim/forms/bulk_edit.py:1737 -#: netbox/dcim/forms/bulk_import.py:286 netbox/dcim/forms/bulk_import.py:1227 +#: netbox/dcim/forms/bulk_import.py:287 netbox/dcim/forms/bulk_import.py:1315 #: netbox/dcim/forms/filtersets.py:421 netbox/dcim/forms/filtersets.py:919 #: netbox/dcim/forms/filtersets.py:1990 netbox/dcim/forms/filtersets.py:2030 #: netbox/dcim/forms/model_forms.py:312 netbox/dcim/forms/model_forms.py:1298 @@ -919,10 +919,10 @@ msgstr "" #: netbox/circuits/forms/bulk_import.py:102 #: netbox/circuits/forms/bulk_import.py:228 -#: netbox/dcim/forms/bulk_import.py:107 netbox/dcim/forms/bulk_import.py:166 -#: netbox/dcim/forms/bulk_import.py:283 netbox/dcim/forms/bulk_import.py:392 -#: netbox/dcim/forms/bulk_import.py:623 netbox/dcim/forms/bulk_import.py:783 -#: netbox/dcim/forms/bulk_import.py:1260 netbox/dcim/forms/bulk_import.py:1763 +#: netbox/dcim/forms/bulk_import.py:108 netbox/dcim/forms/bulk_import.py:167 +#: netbox/dcim/forms/bulk_import.py:284 netbox/dcim/forms/bulk_import.py:393 +#: netbox/dcim/forms/bulk_import.py:624 netbox/dcim/forms/bulk_import.py:784 +#: netbox/dcim/forms/bulk_import.py:1348 netbox/dcim/forms/bulk_import.py:1851 #: netbox/ipam/forms/bulk_import.py:207 netbox/ipam/forms/bulk_import.py:271 #: netbox/ipam/forms/bulk_import.py:307 netbox/ipam/forms/bulk_import.py:538 #: netbox/ipam/forms/bulk_import.py:551 @@ -936,10 +936,10 @@ msgstr "" #: netbox/circuits/forms/bulk_import.py:115 #: netbox/circuits/forms/bulk_import.py:174 #: netbox/circuits/forms/bulk_import.py:235 -#: netbox/dcim/forms/bulk_import.py:128 netbox/dcim/forms/bulk_import.py:173 -#: netbox/dcim/forms/bulk_import.py:399 netbox/dcim/forms/bulk_import.py:599 -#: netbox/dcim/forms/bulk_import.py:1525 netbox/dcim/forms/bulk_import.py:1758 -#: netbox/dcim/forms/bulk_import.py:1821 netbox/ipam/forms/bulk_import.py:49 +#: netbox/dcim/forms/bulk_import.py:129 netbox/dcim/forms/bulk_import.py:174 +#: netbox/dcim/forms/bulk_import.py:400 netbox/dcim/forms/bulk_import.py:600 +#: netbox/dcim/forms/bulk_import.py:1613 netbox/dcim/forms/bulk_import.py:1846 +#: netbox/dcim/forms/bulk_import.py:1909 netbox/ipam/forms/bulk_import.py:49 #: netbox/ipam/forms/bulk_import.py:78 netbox/ipam/forms/bulk_import.py:106 #: netbox/ipam/forms/bulk_import.py:126 netbox/ipam/forms/bulk_import.py:153 #: netbox/ipam/forms/bulk_import.py:181 netbox/ipam/forms/bulk_import.py:266 @@ -984,7 +984,7 @@ msgstr "" #: netbox/circuits/forms/bulk_import.py:258 #: netbox/circuits/forms/model_forms.py:402 #: netbox/circuits/tables/virtual_circuits.py:109 -#: netbox/circuits/ui/panels.py:179 netbox/dcim/forms/bulk_import.py:1358 +#: netbox/circuits/ui/panels.py:179 netbox/dcim/forms/bulk_import.py:1446 #: netbox/dcim/forms/model_forms.py:1372 netbox/dcim/forms/model_forms.py:1641 #: netbox/dcim/forms/model_forms.py:1822 netbox/dcim/forms/model_forms.py:1857 #: netbox/dcim/forms/model_forms.py:1982 netbox/dcim/tables/connections.py:66 @@ -1012,9 +1012,9 @@ msgstr "" #: netbox/circuits/tables/circuits.py:140 netbox/dcim/forms/bulk_edit.py:348 #: netbox/dcim/forms/bulk_edit.py:462 netbox/dcim/forms/bulk_edit.py:701 #: netbox/dcim/forms/bulk_edit.py:750 netbox/dcim/forms/bulk_edit.py:915 -#: netbox/dcim/forms/bulk_import.py:261 netbox/dcim/forms/bulk_import.py:371 -#: netbox/dcim/forms/bulk_import.py:662 netbox/dcim/forms/bulk_import.py:1707 -#: netbox/dcim/forms/bulk_import.py:1741 netbox/dcim/forms/filtersets.py:116 +#: netbox/dcim/forms/bulk_import.py:262 netbox/dcim/forms/bulk_import.py:372 +#: netbox/dcim/forms/bulk_import.py:663 netbox/dcim/forms/bulk_import.py:1795 +#: netbox/dcim/forms/bulk_import.py:1829 netbox/dcim/forms/filtersets.py:116 #: netbox/dcim/forms/filtersets.py:369 netbox/dcim/forms/filtersets.py:404 #: netbox/dcim/forms/filtersets.py:455 netbox/dcim/forms/filtersets.py:508 #: netbox/dcim/forms/filtersets.py:860 netbox/dcim/forms/filtersets.py:904 @@ -1136,7 +1136,7 @@ msgstr "" #: netbox/circuits/forms/filtersets.py:239 #: netbox/circuits/tables/circuits.py:135 netbox/dcim/forms/bulk_edit.py:121 #: netbox/dcim/forms/bulk_edit.py:323 netbox/dcim/forms/bulk_edit.py:890 -#: netbox/dcim/forms/bulk_import.py:110 netbox/dcim/forms/filtersets.py:94 +#: netbox/dcim/forms/bulk_import.py:111 netbox/dcim/forms/filtersets.py:94 #: netbox/dcim/forms/filtersets.py:171 netbox/dcim/forms/filtersets.py:217 #: netbox/dcim/forms/filtersets.py:244 netbox/dcim/forms/filtersets.py:382 #: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:881 @@ -1199,7 +1199,7 @@ msgstr "" #: netbox/circuits/forms/filtersets.py:311 #: netbox/circuits/forms/model_forms.py:289 #: netbox/circuits/tables/circuits.py:187 netbox/dcim/forms/bulk_edit.py:126 -#: netbox/dcim/forms/bulk_edit.py:356 netbox/dcim/forms/bulk_import.py:117 +#: netbox/dcim/forms/bulk_edit.py:356 netbox/dcim/forms/bulk_import.py:118 #: netbox/dcim/forms/model_forms.py:137 netbox/dcim/tables/racks.py:139 #: netbox/dcim/tables/racks.py:232 netbox/dcim/tables/sites.py:69 #: netbox/extras/forms/filtersets.py:612 netbox/ipam/filtersets.py:1049 @@ -1685,13 +1685,13 @@ msgstr "" #: netbox/circuits/tables/virtual_circuits.py:106 #: netbox/dcim/forms/bulk_edit.py:749 netbox/dcim/forms/bulk_edit.py:1320 #: netbox/dcim/forms/bulk_edit.py:1732 netbox/dcim/forms/bulk_edit.py:1786 -#: netbox/dcim/forms/bulk_import.py:763 netbox/dcim/forms/bulk_import.py:824 -#: netbox/dcim/forms/bulk_import.py:850 netbox/dcim/forms/bulk_import.py:876 -#: netbox/dcim/forms/bulk_import.py:897 netbox/dcim/forms/bulk_import.py:953 -#: netbox/dcim/forms/bulk_import.py:1112 netbox/dcim/forms/bulk_import.py:1131 -#: netbox/dcim/forms/bulk_import.py:1150 netbox/dcim/forms/bulk_import.py:1168 -#: netbox/dcim/forms/bulk_import.py:1222 netbox/dcim/forms/bulk_import.py:1344 -#: netbox/dcim/forms/bulk_import.py:1811 netbox/dcim/forms/connections.py:34 +#: netbox/dcim/forms/bulk_import.py:764 netbox/dcim/forms/bulk_import.py:825 +#: netbox/dcim/forms/bulk_import.py:851 netbox/dcim/forms/bulk_import.py:877 +#: netbox/dcim/forms/bulk_import.py:898 netbox/dcim/forms/bulk_import.py:954 +#: netbox/dcim/forms/bulk_import.py:1113 netbox/dcim/forms/bulk_import.py:1219 +#: netbox/dcim/forms/bulk_import.py:1238 netbox/dcim/forms/bulk_import.py:1256 +#: netbox/dcim/forms/bulk_import.py:1310 netbox/dcim/forms/bulk_import.py:1432 +#: netbox/dcim/forms/bulk_import.py:1899 netbox/dcim/forms/connections.py:34 #: netbox/dcim/forms/filtersets.py:158 netbox/dcim/forms/filtersets.py:1061 #: netbox/dcim/forms/filtersets.py:1098 netbox/dcim/forms/filtersets.py:1265 #: netbox/dcim/forms/filtersets.py:1486 netbox/dcim/forms/filtersets.py:1509 @@ -1764,7 +1764,7 @@ msgid "Connection" msgstr "" #: netbox/circuits/ui/panels.py:99 netbox/dcim/forms/bulk_edit.py:1480 -#: netbox/dcim/forms/bulk_import.py:835 netbox/dcim/forms/bulk_import.py:861 +#: netbox/dcim/forms/bulk_import.py:836 netbox/dcim/forms/bulk_import.py:862 #: netbox/dcim/forms/filtersets.py:1497 netbox/dcim/forms/filtersets.py:1537 #: netbox/dcim/forms/filtersets.py:1675 netbox/dcim/tables/devices.py:662 #: netbox/dcim/ui/panels.py:488 @@ -1965,7 +1965,7 @@ msgstr "" msgid "Warning" msgstr "" -#: netbox/core/constants.py:33 netbox/netbox/tables/columns.py:597 +#: netbox/core/constants.py:33 netbox/netbox/tables/columns.py:625 msgid "Error" msgstr "" @@ -2932,7 +2932,7 @@ msgid "Position (U)" msgstr "" #: netbox/dcim/api/serializers_/devices.py:193 -#: netbox/dcim/forms/bulk_import.py:786 netbox/dcim/forms/model_forms.py:819 +#: netbox/dcim/forms/bulk_import.py:787 netbox/dcim/forms/model_forms.py:819 msgid "Replicate components" msgstr "" @@ -2943,12 +2943,12 @@ msgid "" msgstr "" #: netbox/dcim/api/serializers_/devices.py:200 -#: netbox/dcim/forms/bulk_import.py:791 netbox/dcim/forms/model_forms.py:825 +#: netbox/dcim/forms/bulk_import.py:792 netbox/dcim/forms/model_forms.py:825 msgid "Adopt components" msgstr "" #: netbox/dcim/api/serializers_/devices.py:201 -#: netbox/dcim/forms/bulk_import.py:793 netbox/dcim/forms/model_forms.py:828 +#: netbox/dcim/forms/bulk_import.py:794 netbox/dcim/forms/model_forms.py:828 msgid "Adopt already existing components" msgstr "" @@ -3079,11 +3079,11 @@ msgstr "" #: netbox/dcim/choices.py:170 netbox/dcim/forms/bulk_edit.py:87 #: netbox/dcim/forms/bulk_edit.py:101 netbox/dcim/forms/bulk_edit.py:181 #: netbox/dcim/forms/bulk_edit.py:623 netbox/dcim/forms/bulk_edit.py:651 -#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/bulk_import.py:77 -#: netbox/dcim/forms/bulk_import.py:91 netbox/dcim/forms/bulk_import.py:154 -#: netbox/dcim/forms/bulk_import.py:530 netbox/dcim/forms/bulk_import.py:556 -#: netbox/dcim/forms/bulk_import.py:682 netbox/dcim/forms/bulk_import.py:958 -#: netbox/dcim/forms/bulk_import.py:1239 netbox/dcim/forms/filtersets.py:267 +#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/bulk_import.py:78 +#: netbox/dcim/forms/bulk_import.py:92 netbox/dcim/forms/bulk_import.py:155 +#: netbox/dcim/forms/bulk_import.py:531 netbox/dcim/forms/bulk_import.py:557 +#: netbox/dcim/forms/bulk_import.py:683 netbox/dcim/forms/bulk_import.py:959 +#: netbox/dcim/forms/bulk_import.py:1327 netbox/dcim/forms/filtersets.py:267 #: netbox/dcim/forms/filtersets.py:820 netbox/dcim/forms/filtersets.py:836 #: netbox/dcim/forms/model_forms.py:95 netbox/dcim/forms/model_forms.py:113 #: netbox/dcim/forms/model_forms.py:216 netbox/dcim/forms/model_forms.py:559 @@ -3223,7 +3223,7 @@ msgid "Virtual interfaces" msgstr "" #: netbox/dcim/choices.py:1164 netbox/dcim/forms/bulk_edit.py:1455 -#: netbox/dcim/forms/bulk_import.py:965 netbox/dcim/forms/model_forms.py:1171 +#: netbox/dcim/forms/bulk_import.py:966 netbox/dcim/forms/model_forms.py:1171 #: netbox/dcim/tables/devices.py:761 #: netbox/virtualization/forms/bulk_edit.py:231 #: netbox/virtualization/forms/bulk_import.py:198 @@ -3997,7 +3997,7 @@ msgstr "" msgid "Is assigned" msgstr "" -#: netbox/dcim/filtersets.py:2080 netbox/dcim/forms/bulk_import.py:1365 +#: netbox/dcim/filtersets.py:2080 netbox/dcim/forms/bulk_import.py:1453 #: netbox/ipam/forms/bulk_import.py:344 msgid "Is primary" msgstr "" @@ -4018,7 +4018,7 @@ msgid "Assigned VID" msgstr "" #: netbox/dcim/filtersets.py:2158 netbox/dcim/forms/bulk_edit.py:1568 -#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/forms/filtersets.py:1755 +#: netbox/dcim/forms/bulk_import.py:1051 netbox/dcim/forms/filtersets.py:1755 #: netbox/dcim/forms/model_forms.py:1619 #: netbox/dcim/models/device_components.py:958 #: netbox/dcim/tables/devices.py:678 netbox/dcim/ui/panels.py:521 @@ -4241,7 +4241,7 @@ msgstr "" msgid "Contact E-mail" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:160 netbox/dcim/forms/bulk_import.py:140 +#: netbox/dcim/forms/bulk_edit.py:160 netbox/dcim/forms/bulk_import.py:141 #: netbox/dcim/forms/model_forms.py:159 msgid "Time zone" msgstr "" @@ -4250,9 +4250,9 @@ msgstr "" #: netbox/dcim/forms/bulk_edit.py:584 netbox/dcim/forms/bulk_edit.py:656 #: netbox/dcim/forms/bulk_edit.py:675 netbox/dcim/forms/bulk_edit.py:762 #: netbox/dcim/forms/bulk_edit.py:1306 netbox/dcim/forms/bulk_edit.py:1742 -#: netbox/dcim/forms/bulk_import.py:208 netbox/dcim/forms/bulk_import.py:432 -#: netbox/dcim/forms/bulk_import.py:482 netbox/dcim/forms/bulk_import.py:566 -#: netbox/dcim/forms/bulk_import.py:602 netbox/dcim/forms/bulk_import.py:1233 +#: netbox/dcim/forms/bulk_import.py:209 netbox/dcim/forms/bulk_import.py:433 +#: netbox/dcim/forms/bulk_import.py:483 netbox/dcim/forms/bulk_import.py:567 +#: netbox/dcim/forms/bulk_import.py:603 netbox/dcim/forms/bulk_import.py:1321 #: netbox/dcim/forms/filtersets.py:355 netbox/dcim/forms/filtersets.py:426 #: netbox/dcim/forms/filtersets.py:578 netbox/dcim/forms/filtersets.py:728 #: netbox/dcim/forms/filtersets.py:841 netbox/dcim/forms/filtersets.py:924 @@ -4271,21 +4271,21 @@ msgid "Manufacturer" msgstr "" #: netbox/dcim/forms/bulk_edit.py:240 netbox/dcim/forms/bulk_edit.py:392 -#: netbox/dcim/forms/bulk_import.py:217 netbox/dcim/forms/bulk_import.py:303 +#: netbox/dcim/forms/bulk_import.py:218 netbox/dcim/forms/bulk_import.py:304 #: netbox/dcim/forms/filtersets.py:301 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "" #: netbox/dcim/forms/bulk_edit.py:245 netbox/dcim/forms/bulk_edit.py:397 -#: netbox/dcim/forms/bulk_import.py:225 netbox/dcim/forms/bulk_import.py:306 +#: netbox/dcim/forms/bulk_import.py:226 netbox/dcim/forms/bulk_import.py:307 #: netbox/dcim/forms/filtersets.py:306 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "" #: netbox/dcim/forms/bulk_edit.py:251 netbox/dcim/forms/bulk_edit.py:403 -#: netbox/dcim/forms/bulk_import.py:313 +#: netbox/dcim/forms/bulk_import.py:314 msgid "Height (U)" msgstr "" @@ -4307,7 +4307,7 @@ msgid "Outer depth" msgstr "" #: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:426 -#: netbox/dcim/forms/bulk_import.py:230 netbox/dcim/forms/bulk_import.py:316 +#: netbox/dcim/forms/bulk_import.py:231 netbox/dcim/forms/bulk_import.py:317 msgid "Outer unit" msgstr "" @@ -4319,7 +4319,7 @@ msgstr "" #: netbox/dcim/forms/bulk_edit.py:441 netbox/dcim/forms/bulk_edit.py:465 #: netbox/dcim/forms/bulk_edit.py:542 netbox/dcim/forms/bulk_edit.py:559 #: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/bulk_edit.py:614 -#: netbox/dcim/forms/bulk_import.py:445 netbox/dcim/forms/bulk_import.py:493 +#: netbox/dcim/forms/bulk_import.py:446 netbox/dcim/forms/bulk_import.py:494 #: netbox/dcim/forms/filtersets.py:326 netbox/dcim/forms/filtersets.py:348 #: netbox/dcim/forms/filtersets.py:373 netbox/dcim/forms/filtersets.py:458 #: netbox/dcim/forms/filtersets.py:571 netbox/dcim/forms/filtersets.py:683 @@ -4344,8 +4344,8 @@ msgstr "" #: netbox/dcim/forms/bulk_edit.py:298 netbox/dcim/forms/bulk_edit.py:451 #: netbox/dcim/forms/bulk_edit.py:547 netbox/dcim/forms/bulk_edit.py:603 -#: netbox/dcim/forms/bulk_import.py:236 netbox/dcim/forms/bulk_import.py:328 -#: netbox/dcim/forms/bulk_import.py:450 netbox/dcim/forms/bulk_import.py:498 +#: netbox/dcim/forms/bulk_import.py:237 netbox/dcim/forms/bulk_import.py:329 +#: netbox/dcim/forms/bulk_import.py:451 netbox/dcim/forms/bulk_import.py:499 #: netbox/dcim/forms/filtersets.py:336 netbox/dcim/forms/filtersets.py:687 #: netbox/dcim/forms/filtersets.py:799 msgid "Weight unit" @@ -4377,7 +4377,7 @@ msgstr "" msgid "Numbering" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:377 netbox/dcim/forms/bulk_import.py:293 +#: netbox/dcim/forms/bulk_edit.py:377 netbox/dcim/forms/bulk_import.py:294 #: netbox/dcim/forms/filtersets.py:434 msgid "Rack type" msgstr "" @@ -4395,17 +4395,17 @@ msgstr "" #: netbox/dcim/forms/bulk_edit.py:436 netbox/dcim/forms/bulk_edit.py:537 #: netbox/dcim/forms/bulk_edit.py:593 netbox/dcim/forms/bulk_edit.py:724 -#: netbox/dcim/forms/bulk_import.py:322 netbox/dcim/forms/bulk_import.py:487 -#: netbox/dcim/forms/bulk_import.py:696 netbox/dcim/forms/filtersets.py:437 +#: netbox/dcim/forms/bulk_import.py:323 netbox/dcim/forms/bulk_import.py:488 +#: netbox/dcim/forms/bulk_import.py:697 netbox/dcim/forms/filtersets.py:437 #: netbox/dcim/forms/filtersets.py:600 netbox/dcim/forms/filtersets.py:790 #: netbox/dcim/forms/filtersets.py:946 msgid "Airflow" msgstr "" #: netbox/dcim/forms/bulk_edit.py:460 netbox/dcim/forms/bulk_edit.py:937 -#: netbox/dcim/forms/bulk_import.py:378 netbox/dcim/forms/bulk_import.py:381 -#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/bulk_import.py:1748 -#: netbox/dcim/forms/bulk_import.py:1752 netbox/dcim/forms/filtersets.py:125 +#: netbox/dcim/forms/bulk_import.py:379 netbox/dcim/forms/bulk_import.py:382 +#: netbox/dcim/forms/bulk_import.py:670 netbox/dcim/forms/bulk_import.py:1836 +#: netbox/dcim/forms/bulk_import.py:1840 netbox/dcim/forms/filtersets.py:125 #: netbox/dcim/forms/filtersets.py:370 netbox/dcim/forms/filtersets.py:465 #: netbox/dcim/forms/filtersets.py:479 netbox/dcim/forms/filtersets.py:525 #: netbox/dcim/forms/filtersets.py:914 netbox/dcim/forms/filtersets.py:1130 @@ -4431,7 +4431,7 @@ msgstr "" msgid "Hardware" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:513 netbox/dcim/forms/bulk_import.py:438 +#: netbox/dcim/forms/bulk_edit.py:513 netbox/dcim/forms/bulk_import.py:439 #: netbox/dcim/forms/filtersets.py:583 netbox/dcim/forms/model_forms.py:416 #: netbox/virtualization/forms/bulk_edit.py:85 #: netbox/virtualization/forms/bulk_import.py:89 @@ -4469,8 +4469,8 @@ msgid "Schema" msgstr "" #: netbox/dcim/forms/bulk_edit.py:572 netbox/dcim/forms/bulk_edit.py:579 -#: netbox/dcim/forms/bulk_edit.py:828 netbox/dcim/forms/bulk_import.py:476 -#: netbox/dcim/forms/bulk_import.py:1509 netbox/dcim/forms/filtersets.py:723 +#: netbox/dcim/forms/bulk_edit.py:828 netbox/dcim/forms/bulk_import.py:477 +#: netbox/dcim/forms/bulk_import.py:1597 netbox/dcim/forms/filtersets.py:723 #: netbox/dcim/forms/filtersets.py:1146 netbox/dcim/forms/filtersets.py:1278 #: netbox/dcim/forms/model_forms.py:463 netbox/dcim/forms/model_forms.py:476 #: netbox/dcim/tables/modules.py:43 netbox/dcim/tables/modules.py:97 @@ -4502,10 +4502,10 @@ msgid "VM role" msgstr "" #: netbox/dcim/forms/bulk_edit.py:637 netbox/dcim/forms/bulk_edit.py:661 -#: netbox/dcim/forms/bulk_edit.py:734 netbox/dcim/forms/bulk_import.py:540 -#: netbox/dcim/forms/bulk_import.py:544 netbox/dcim/forms/bulk_import.py:573 -#: netbox/dcim/forms/bulk_import.py:577 netbox/dcim/forms/bulk_import.py:702 -#: netbox/dcim/forms/bulk_import.py:706 netbox/dcim/forms/filtersets.py:815 +#: netbox/dcim/forms/bulk_edit.py:734 netbox/dcim/forms/bulk_import.py:541 +#: netbox/dcim/forms/bulk_import.py:545 netbox/dcim/forms/bulk_import.py:574 +#: netbox/dcim/forms/bulk_import.py:578 netbox/dcim/forms/bulk_import.py:703 +#: netbox/dcim/forms/bulk_import.py:707 netbox/dcim/forms/filtersets.py:815 #: netbox/dcim/forms/filtersets.py:846 netbox/dcim/forms/filtersets.py:965 #: netbox/dcim/forms/model_forms.py:554 netbox/dcim/forms/model_forms.py:591 #: netbox/dcim/forms/model_forms.py:716 @@ -4517,19 +4517,19 @@ msgid "Config template" msgstr "" #: netbox/dcim/forms/bulk_edit.py:680 netbox/dcim/forms/bulk_edit.py:1086 -#: netbox/dcim/forms/bulk_import.py:608 netbox/dcim/forms/filtersets.py:135 +#: netbox/dcim/forms/bulk_import.py:609 netbox/dcim/forms/filtersets.py:135 #: netbox/dcim/forms/filtersets.py:1438 netbox/dcim/forms/model_forms.py:661 #: netbox/dcim/forms/model_forms.py:1048 netbox/dcim/forms/model_forms.py:1065 #: netbox/extras/filtersets.py:756 msgid "Device type" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:691 netbox/dcim/forms/bulk_import.py:589 +#: netbox/dcim/forms/bulk_edit.py:691 netbox/dcim/forms/bulk_import.py:590 #: netbox/dcim/forms/filtersets.py:140 netbox/dcim/forms/model_forms.py:669 msgid "Device role" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:714 netbox/dcim/forms/bulk_import.py:614 +#: netbox/dcim/forms/bulk_edit.py:714 netbox/dcim/forms/bulk_import.py:615 #: netbox/dcim/forms/filtersets.py:829 netbox/dcim/forms/filtersets.py:938 #: netbox/dcim/forms/model_forms.py:602 netbox/dcim/forms/model_forms.py:674 #: netbox/dcim/tables/devices.py:191 netbox/extras/filtersets.py:772 @@ -4541,7 +4541,7 @@ msgstr "" msgid "Platform" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:739 netbox/dcim/forms/bulk_import.py:633 +#: netbox/dcim/forms/bulk_edit.py:739 netbox/dcim/forms/bulk_import.py:634 #: netbox/dcim/forms/filtersets.py:870 netbox/dcim/forms/filtersets.py:1040 #: netbox/dcim/forms/model_forms.py:683 netbox/dcim/tables/devices.py:211 #: netbox/extras/filtersets.py:805 netbox/extras/forms/filtersets.py:411 @@ -4570,12 +4570,12 @@ msgstr "" msgid "Virtualization" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:767 netbox/dcim/forms/bulk_import.py:775 +#: netbox/dcim/forms/bulk_edit.py:767 netbox/dcim/forms/bulk_import.py:776 #: netbox/dcim/forms/model_forms.py:811 netbox/dcim/forms/model_forms.py:1073 msgid "Module type" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:839 netbox/dcim/forms/bulk_import.py:1528 +#: netbox/dcim/forms/bulk_edit.py:839 netbox/dcim/forms/bulk_import.py:1616 #: netbox/dcim/forms/filtersets.py:1305 netbox/dcim/forms/model_forms.py:888 #: netbox/dcim/tables/cables.py:124 msgid "Bundle" @@ -4599,8 +4599,8 @@ msgstr "" msgid "Length" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:858 netbox/dcim/forms/bulk_import.py:1535 -#: netbox/dcim/forms/bulk_import.py:1538 netbox/dcim/forms/filtersets.py:1291 +#: netbox/dcim/forms/bulk_edit.py:858 netbox/dcim/forms/bulk_import.py:1623 +#: netbox/dcim/forms/bulk_import.py:1626 netbox/dcim/forms/filtersets.py:1291 msgid "Length unit" msgstr "" @@ -4608,17 +4608,17 @@ msgstr "" msgid "Domain" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:932 netbox/dcim/forms/bulk_import.py:1735 +#: netbox/dcim/forms/bulk_edit.py:932 netbox/dcim/forms/bulk_import.py:1823 #: netbox/dcim/forms/filtersets.py:1384 netbox/dcim/forms/model_forms.py:927 msgid "Power panel" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/bulk_import.py:1771 +#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/bulk_import.py:1859 #: netbox/dcim/forms/filtersets.py:1406 msgid "Supply" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:960 netbox/dcim/forms/bulk_import.py:1776 +#: netbox/dcim/forms/bulk_edit.py:960 netbox/dcim/forms/bulk_import.py:1864 #: netbox/dcim/forms/filtersets.py:1411 msgid "Phase" msgstr "" @@ -4655,13 +4655,13 @@ msgstr "" msgid "Allocated power draw (watts)" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1107 netbox/dcim/forms/bulk_import.py:908 +#: netbox/dcim/forms/bulk_edit.py:1107 netbox/dcim/forms/bulk_import.py:909 #: netbox/dcim/forms/model_forms.py:1144 netbox/dcim/forms/model_forms.py:1509 #: netbox/dcim/forms/model_forms.py:1838 netbox/dcim/forms/object_import.py:56 msgid "Power port" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1112 netbox/dcim/forms/bulk_import.py:915 +#: netbox/dcim/forms/bulk_edit.py:1112 netbox/dcim/forms/bulk_import.py:916 msgid "Feed leg" msgstr "" @@ -4671,7 +4671,7 @@ msgid "Management only" msgstr "" #: netbox/dcim/forms/bulk_edit.py:1168 netbox/dcim/forms/bulk_edit.py:1495 -#: netbox/dcim/forms/bulk_import.py:1001 netbox/dcim/forms/filtersets.py:1711 +#: netbox/dcim/forms/bulk_import.py:1002 netbox/dcim/forms/filtersets.py:1711 #: netbox/dcim/forms/filtersets.py:1796 netbox/dcim/forms/object_import.py:91 #: netbox/dcim/models/device_component_templates.py:473 #: netbox/dcim/models/device_components.py:930 netbox/dcim/ui/panels.py:494 @@ -4679,7 +4679,7 @@ msgid "PoE mode" msgstr "" #: netbox/dcim/forms/bulk_edit.py:1174 netbox/dcim/forms/bulk_edit.py:1501 -#: netbox/dcim/forms/bulk_import.py:1007 netbox/dcim/forms/filtersets.py:1716 +#: netbox/dcim/forms/bulk_import.py:1008 netbox/dcim/forms/filtersets.py:1716 #: netbox/dcim/forms/filtersets.py:1801 netbox/dcim/forms/object_import.py:96 #: netbox/dcim/models/device_component_templates.py:480 #: netbox/dcim/models/device_components.py:937 netbox/dcim/ui/panels.py:495 @@ -4705,7 +4705,7 @@ msgstr "" msgid "Virtual device contexts" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1509 netbox/dcim/forms/bulk_import.py:1010 +#: netbox/dcim/forms/bulk_edit.py:1509 netbox/dcim/forms/bulk_import.py:1011 #: netbox/virtualization/forms/bulk_edit.py:252 #: netbox/virtualization/forms/bulk_import.py:205 #: netbox/vpn/forms/bulk_edit.py:128 netbox/vpn/forms/bulk_edit.py:196 @@ -4716,7 +4716,7 @@ msgstr "" msgid "Mode" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1517 netbox/dcim/forms/bulk_import.py:1016 +#: netbox/dcim/forms/bulk_edit.py:1517 netbox/dcim/forms/bulk_import.py:1017 #: netbox/dcim/forms/model_forms.py:1585 netbox/ipam/forms/bulk_import.py:184 #: netbox/ipam/forms/filtersets.py:603 netbox/ipam/models/vlans.py:99 #: netbox/virtualization/forms/bulk_edit.py:259 @@ -4725,7 +4725,7 @@ msgstr "" msgid "VLAN group" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1526 netbox/dcim/forms/bulk_import.py:1023 +#: netbox/dcim/forms/bulk_edit.py:1526 netbox/dcim/forms/bulk_import.py:1024 #: netbox/dcim/forms/model_forms.py:1591 netbox/dcim/tables/devices.py:627 #: netbox/dcim/ui/panels.py:498 netbox/virtualization/forms/bulk_edit.py:267 #: netbox/virtualization/forms/bulk_import.py:218 @@ -4733,7 +4733,7 @@ msgstr "" msgid "Untagged VLAN" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1535 netbox/dcim/forms/bulk_import.py:1030 +#: netbox/dcim/forms/bulk_edit.py:1535 netbox/dcim/forms/bulk_import.py:1031 #: netbox/dcim/forms/model_forms.py:1600 netbox/dcim/tables/devices.py:633 #: netbox/virtualization/forms/bulk_edit.py:275 #: netbox/virtualization/forms/bulk_import.py:225 @@ -4749,7 +4749,7 @@ msgstr "" msgid "Remove tagged VLANs" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1558 netbox/dcim/forms/bulk_import.py:1043 +#: netbox/dcim/forms/bulk_edit.py:1558 netbox/dcim/forms/bulk_import.py:1044 #: netbox/dcim/forms/model_forms.py:1609 #: netbox/virtualization/forms/bulk_import.py:238 #: netbox/virtualization/forms/model_forms.py:439 @@ -4817,335 +4817,335 @@ msgstr "" msgid "An access interface cannot have tagged VLANs assigned." msgstr "" -#: netbox/dcim/forms/bulk_import.py:81 +#: netbox/dcim/forms/bulk_import.py:82 msgid "Name of parent region" msgstr "" -#: netbox/dcim/forms/bulk_import.py:95 +#: netbox/dcim/forms/bulk_import.py:96 msgid "Name of parent site group" msgstr "" -#: netbox/dcim/forms/bulk_import.py:114 +#: netbox/dcim/forms/bulk_import.py:115 msgid "Assigned region" msgstr "" -#: netbox/dcim/forms/bulk_import.py:121 netbox/tenancy/forms/bulk_import.py:50 +#: netbox/dcim/forms/bulk_import.py:122 netbox/tenancy/forms/bulk_import.py:50 #: netbox/wireless/forms/bulk_import.py:41 msgid "Assigned group" msgstr "" -#: netbox/dcim/forms/bulk_import.py:140 +#: netbox/dcim/forms/bulk_import.py:141 msgid "available options" msgstr "" -#: netbox/dcim/forms/bulk_import.py:151 netbox/dcim/forms/bulk_import.py:659 -#: netbox/dcim/forms/bulk_import.py:1732 netbox/ipam/forms/bulk_import.py:519 +#: netbox/dcim/forms/bulk_import.py:152 netbox/dcim/forms/bulk_import.py:660 +#: netbox/dcim/forms/bulk_import.py:1820 netbox/ipam/forms/bulk_import.py:519 #: netbox/virtualization/forms/bulk_import.py:66 msgid "Assigned site" msgstr "" -#: netbox/dcim/forms/bulk_import.py:158 +#: netbox/dcim/forms/bulk_import.py:159 msgid "Parent location" msgstr "" -#: netbox/dcim/forms/bulk_import.py:160 +#: netbox/dcim/forms/bulk_import.py:161 msgid "Location not found." msgstr "" -#: netbox/dcim/forms/bulk_import.py:211 +#: netbox/dcim/forms/bulk_import.py:212 msgid "The manufacturer of this rack type" msgstr "" -#: netbox/dcim/forms/bulk_import.py:222 +#: netbox/dcim/forms/bulk_import.py:223 msgid "The lowest-numbered position in the rack" msgstr "" -#: netbox/dcim/forms/bulk_import.py:227 netbox/dcim/forms/bulk_import.py:309 +#: netbox/dcim/forms/bulk_import.py:228 netbox/dcim/forms/bulk_import.py:310 msgid "Rail-to-rail width (in inches)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:233 netbox/dcim/forms/bulk_import.py:319 +#: netbox/dcim/forms/bulk_import.py:234 netbox/dcim/forms/bulk_import.py:320 msgid "Unit for outer dimensions" msgstr "" -#: netbox/dcim/forms/bulk_import.py:239 netbox/dcim/forms/bulk_import.py:331 +#: netbox/dcim/forms/bulk_import.py:240 netbox/dcim/forms/bulk_import.py:332 msgid "Unit for rack weights" msgstr "" -#: netbox/dcim/forms/bulk_import.py:271 +#: netbox/dcim/forms/bulk_import.py:272 msgid "Name of assigned tenant" msgstr "" -#: netbox/dcim/forms/bulk_import.py:274 netbox/dcim/forms/filtersets.py:410 +#: netbox/dcim/forms/bulk_import.py:275 netbox/dcim/forms/filtersets.py:410 #: netbox/dcim/forms/filtersets.py:515 netbox/dcim/ui/panels.py:47 #: netbox/ipam/forms/filtersets.py:497 msgid "Rack group" msgstr "" -#: netbox/dcim/forms/bulk_import.py:278 +#: netbox/dcim/forms/bulk_import.py:279 msgid "Name of assigned group" msgstr "" -#: netbox/dcim/forms/bulk_import.py:290 +#: netbox/dcim/forms/bulk_import.py:291 msgid "Name of assigned role" msgstr "" -#: netbox/dcim/forms/bulk_import.py:297 +#: netbox/dcim/forms/bulk_import.py:298 msgid "Rack type model" msgstr "" -#: netbox/dcim/forms/bulk_import.py:325 netbox/dcim/forms/bulk_import.py:490 -#: netbox/dcim/forms/bulk_import.py:699 +#: netbox/dcim/forms/bulk_import.py:326 netbox/dcim/forms/bulk_import.py:491 +#: netbox/dcim/forms/bulk_import.py:700 msgid "Airflow direction" msgstr "" -#: netbox/dcim/forms/bulk_import.py:358 +#: netbox/dcim/forms/bulk_import.py:359 msgid "Width must be set if not specifying a rack type." msgstr "" -#: netbox/dcim/forms/bulk_import.py:360 +#: netbox/dcim/forms/bulk_import.py:361 msgid "U height must be set if not specifying a rack type." msgstr "" -#: netbox/dcim/forms/bulk_import.py:368 +#: netbox/dcim/forms/bulk_import.py:369 msgid "Parent site" msgstr "" -#: netbox/dcim/forms/bulk_import.py:375 netbox/dcim/forms/bulk_import.py:1745 +#: netbox/dcim/forms/bulk_import.py:376 netbox/dcim/forms/bulk_import.py:1833 msgid "Rack's location (if any)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:384 netbox/dcim/forms/model_forms.py:376 +#: netbox/dcim/forms/bulk_import.py:385 netbox/dcim/forms/model_forms.py:376 #: netbox/dcim/tables/racks.py:242 netbox/templates/dcim/rackreservation.html:7 msgid "Units" msgstr "" -#: netbox/dcim/forms/bulk_import.py:387 +#: netbox/dcim/forms/bulk_import.py:388 msgid "Comma-separated list of individual unit numbers" msgstr "" -#: netbox/dcim/forms/bulk_import.py:435 +#: netbox/dcim/forms/bulk_import.py:436 msgid "The manufacturer which produces this device type" msgstr "" -#: netbox/dcim/forms/bulk_import.py:442 +#: netbox/dcim/forms/bulk_import.py:443 msgid "The default platform for devices of this type (optional)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:447 +#: netbox/dcim/forms/bulk_import.py:448 msgid "Device weight" msgstr "" -#: netbox/dcim/forms/bulk_import.py:453 +#: netbox/dcim/forms/bulk_import.py:454 msgid "Unit for device weight" msgstr "" -#: netbox/dcim/forms/bulk_import.py:495 +#: netbox/dcim/forms/bulk_import.py:496 msgid "Module weight" msgstr "" -#: netbox/dcim/forms/bulk_import.py:501 +#: netbox/dcim/forms/bulk_import.py:502 msgid "Unit for module weight" msgstr "" -#: netbox/dcim/forms/bulk_import.py:506 +#: netbox/dcim/forms/bulk_import.py:507 msgid "Attribute values for the assigned profile, passed as a dictionary" msgstr "" -#: netbox/dcim/forms/bulk_import.py:521 +#: netbox/dcim/forms/bulk_import.py:522 msgid "Profile must be specified if attribute data is provided." msgstr "" -#: netbox/dcim/forms/bulk_import.py:534 +#: netbox/dcim/forms/bulk_import.py:535 msgid "Parent Device Role" msgstr "" -#: netbox/dcim/forms/bulk_import.py:536 +#: netbox/dcim/forms/bulk_import.py:537 msgid "Device role not found." msgstr "" -#: netbox/dcim/forms/bulk_import.py:560 +#: netbox/dcim/forms/bulk_import.py:561 msgid "Parent platform" msgstr "" -#: netbox/dcim/forms/bulk_import.py:562 +#: netbox/dcim/forms/bulk_import.py:563 msgid "Platform not found." msgstr "" -#: netbox/dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:571 msgid "Limit platform assignments to this manufacturer" msgstr "" -#: netbox/dcim/forms/bulk_import.py:592 netbox/dcim/forms/bulk_import.py:1814 +#: netbox/dcim/forms/bulk_import.py:593 netbox/dcim/forms/bulk_import.py:1902 #: netbox/tenancy/forms/bulk_import.py:116 msgid "Assigned role" msgstr "" -#: netbox/dcim/forms/bulk_import.py:605 +#: netbox/dcim/forms/bulk_import.py:606 msgid "Device type manufacturer" msgstr "" -#: netbox/dcim/forms/bulk_import.py:611 +#: netbox/dcim/forms/bulk_import.py:612 msgid "Device type model" msgstr "" -#: netbox/dcim/forms/bulk_import.py:618 +#: netbox/dcim/forms/bulk_import.py:619 #: netbox/virtualization/forms/bulk_import.py:165 msgid "Assigned platform" msgstr "" -#: netbox/dcim/forms/bulk_import.py:626 netbox/dcim/forms/bulk_import.py:630 +#: netbox/dcim/forms/bulk_import.py:627 netbox/dcim/forms/bulk_import.py:631 #: netbox/dcim/forms/model_forms.py:697 msgid "Virtual chassis" msgstr "" -#: netbox/dcim/forms/bulk_import.py:637 +#: netbox/dcim/forms/bulk_import.py:638 msgid "Virtualization cluster" msgstr "" -#: netbox/dcim/forms/bulk_import.py:666 +#: netbox/dcim/forms/bulk_import.py:667 msgid "Assigned location (if any)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:673 +#: netbox/dcim/forms/bulk_import.py:674 msgid "Assigned rack (if any)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:676 netbox/dcim/forms/model_forms.py:653 +#: netbox/dcim/forms/bulk_import.py:677 netbox/dcim/forms/model_forms.py:653 msgid "Face" msgstr "" -#: netbox/dcim/forms/bulk_import.py:679 +#: netbox/dcim/forms/bulk_import.py:680 msgid "Mounted rack face" msgstr "" -#: netbox/dcim/forms/bulk_import.py:686 +#: netbox/dcim/forms/bulk_import.py:687 msgid "Parent device (for child devices)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:689 +#: netbox/dcim/forms/bulk_import.py:690 msgid "Device bay" msgstr "" -#: netbox/dcim/forms/bulk_import.py:693 +#: netbox/dcim/forms/bulk_import.py:694 msgid "Device bay in which this device is installed (for child devices)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:766 +#: netbox/dcim/forms/bulk_import.py:767 msgid "The device in which this module is installed" msgstr "" -#: netbox/dcim/forms/bulk_import.py:769 netbox/dcim/forms/model_forms.py:801 +#: netbox/dcim/forms/bulk_import.py:770 netbox/dcim/forms/model_forms.py:801 msgid "Module bay" msgstr "" -#: netbox/dcim/forms/bulk_import.py:772 +#: netbox/dcim/forms/bulk_import.py:773 msgid "The module bay in which this module is installed" msgstr "" -#: netbox/dcim/forms/bulk_import.py:778 +#: netbox/dcim/forms/bulk_import.py:779 msgid "The type of module" msgstr "" -#: netbox/dcim/forms/bulk_import.py:788 +#: netbox/dcim/forms/bulk_import.py:789 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:832 netbox/dcim/forms/bulk_import.py:858 -#: netbox/dcim/forms/bulk_import.py:884 +#: netbox/dcim/forms/bulk_import.py:833 netbox/dcim/forms/bulk_import.py:859 +#: netbox/dcim/forms/bulk_import.py:885 msgid "Port type" msgstr "" -#: netbox/dcim/forms/bulk_import.py:840 netbox/dcim/forms/bulk_import.py:866 +#: netbox/dcim/forms/bulk_import.py:841 netbox/dcim/forms/bulk_import.py:867 msgid "Port speed in bps" msgstr "" -#: netbox/dcim/forms/bulk_import.py:905 +#: netbox/dcim/forms/bulk_import.py:906 msgid "Outlet type" msgstr "" -#: netbox/dcim/forms/bulk_import.py:912 +#: netbox/dcim/forms/bulk_import.py:913 msgid "Local power port which feeds this outlet" msgstr "" -#: netbox/dcim/forms/bulk_import.py:918 +#: netbox/dcim/forms/bulk_import.py:919 msgid "Electrical phase (for three-phase circuits)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:962 netbox/dcim/forms/model_forms.py:1547 +#: netbox/dcim/forms/bulk_import.py:963 netbox/dcim/forms/model_forms.py:1547 #: netbox/virtualization/forms/bulk_import.py:195 #: netbox/virtualization/forms/model_forms.py:400 msgid "Parent interface" msgstr "" -#: netbox/dcim/forms/bulk_import.py:969 netbox/dcim/forms/model_forms.py:1555 +#: netbox/dcim/forms/bulk_import.py:970 netbox/dcim/forms/model_forms.py:1555 #: netbox/virtualization/forms/bulk_import.py:202 #: netbox/virtualization/forms/model_forms.py:408 msgid "Bridged interface" msgstr "" -#: netbox/dcim/forms/bulk_import.py:972 +#: netbox/dcim/forms/bulk_import.py:973 msgid "Lag" msgstr "" -#: netbox/dcim/forms/bulk_import.py:976 +#: netbox/dcim/forms/bulk_import.py:977 msgid "Parent LAG interface" msgstr "" -#: netbox/dcim/forms/bulk_import.py:979 +#: netbox/dcim/forms/bulk_import.py:980 msgid "Vdcs" msgstr "" -#: netbox/dcim/forms/bulk_import.py:984 +#: netbox/dcim/forms/bulk_import.py:985 msgid "VDC names separated by commas, encased with double quotes. Example:" msgstr "" -#: netbox/dcim/forms/bulk_import.py:990 +#: netbox/dcim/forms/bulk_import.py:991 msgid "Physical medium" msgstr "" -#: netbox/dcim/forms/bulk_import.py:993 netbox/dcim/forms/filtersets.py:1682 +#: netbox/dcim/forms/bulk_import.py:994 netbox/dcim/forms/filtersets.py:1682 msgid "Duplex" msgstr "" -#: netbox/dcim/forms/bulk_import.py:998 +#: netbox/dcim/forms/bulk_import.py:999 msgid "Poe mode" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1004 +#: netbox/dcim/forms/bulk_import.py:1005 msgid "Poe type" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1013 +#: netbox/dcim/forms/bulk_import.py:1014 #: netbox/virtualization/forms/bulk_import.py:208 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1020 +#: netbox/dcim/forms/bulk_import.py:1021 #: netbox/virtualization/forms/bulk_import.py:215 msgid "Filter VLANs available for assignment by group" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1027 +#: netbox/dcim/forms/bulk_import.py:1028 #: netbox/virtualization/forms/bulk_import.py:222 msgid "Assigned untagged VLAN ID (filtered by VLAN group)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1036 +#: netbox/dcim/forms/bulk_import.py:1037 #: netbox/virtualization/forms/bulk_import.py:231 msgid "" "Assigned tagged VLAN IDs separated by commas, encased with double quotes " "(filtered by VLAN group). Example:" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1047 +#: netbox/dcim/forms/bulk_import.py:1048 #: netbox/virtualization/forms/bulk_import.py:242 msgid "Assigned Q-in-Q Service VLAN ID (filtered by VLAN group)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1054 netbox/ipam/forms/bulk_import.py:174 +#: netbox/dcim/forms/bulk_import.py:1055 netbox/ipam/forms/bulk_import.py:174 #: netbox/ipam/forms/bulk_import.py:259 netbox/ipam/forms/bulk_import.py:295 #: netbox/ipam/forms/filtersets.py:230 netbox/ipam/forms/filtersets.py:314 #: netbox/ipam/forms/filtersets.py:383 @@ -5153,74 +5153,103 @@ msgstr "" msgid "Assigned VRF" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1057 +#: netbox/dcim/forms/bulk_import.py:1058 msgid "Rf role" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1060 +#: netbox/dcim/forms/bulk_import.py:1061 msgid "Wireless role (AP/station)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1103 +#: netbox/dcim/forms/bulk_import.py:1104 #, python-brace-format msgid "VDC {vdc} is not assigned to device {device}" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1119 netbox/dcim/forms/bulk_import.py:1137 -#: netbox/dcim/forms/bulk_import.py:1518 +#: netbox/dcim/forms/bulk_import.py:1120 netbox/dcim/forms/bulk_import.py:1225 +#: netbox/dcim/forms/bulk_import.py:1606 msgid "Physical medium classification" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1173 +#: netbox/dcim/forms/bulk_import.py:1123 netbox/dcim/forms/model_forms.py:1846 +#: netbox/dcim/forms/object_import.py:145 +msgid "Rear port" +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:1126 +msgid "Corresponding rear port (mapped to the front port's first position)" +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:1129 +msgid "Rear port position" +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:1131 +msgid "Mapped position on the corresponding rear port (defaults to 1)" +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:1175 netbox/dcim/models/base.py:59 +#, python-brace-format +msgid "" +"Invalid rear port position ({rear_port_position}): Rear port {name} has only " +"{positions} positions." +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:1193 +#, python-brace-format +msgid "Rear port {name} position {rear_port_position} is already occupied." +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:1261 msgid "Installed device" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1177 +#: netbox/dcim/forms/bulk_import.py:1265 msgid "Child device installed within this bay" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1179 +#: netbox/dcim/forms/bulk_import.py:1267 msgid "Child device not found." msgstr "" -#: netbox/dcim/forms/bulk_import.py:1243 +#: netbox/dcim/forms/bulk_import.py:1331 msgid "Parent inventory item" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1246 +#: netbox/dcim/forms/bulk_import.py:1334 msgid "Component type" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1250 +#: netbox/dcim/forms/bulk_import.py:1338 msgid "Component Type" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1253 +#: netbox/dcim/forms/bulk_import.py:1341 msgid "Component name" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1255 +#: netbox/dcim/forms/bulk_import.py:1343 msgid "Component Name" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1298 netbox/dcim/forms/bulk_import.py:1316 +#: netbox/dcim/forms/bulk_import.py:1386 netbox/dcim/forms/bulk_import.py:1404 msgid "Component name must be specified when component type is specified" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1308 +#: netbox/dcim/forms/bulk_import.py:1396 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1321 +#: netbox/dcim/forms/bulk_import.py:1409 msgid "Component type must be specified when component name is specified" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1348 netbox/ipam/forms/bulk_import.py:320 +#: netbox/dcim/forms/bulk_import.py:1436 netbox/ipam/forms/bulk_import.py:320 msgid "Parent device of assigned interface (if any)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1351 netbox/ipam/forms/bulk_import.py:323 +#: netbox/dcim/forms/bulk_import.py:1439 netbox/ipam/forms/bulk_import.py:323 #: netbox/virtualization/filtersets.py:354 #: netbox/virtualization/filtersets.py:412 #: netbox/virtualization/forms/bulk_edit.py:219 @@ -5234,183 +5263,183 @@ msgstr "" msgid "Virtual machine" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1355 netbox/ipam/forms/bulk_import.py:327 +#: netbox/dcim/forms/bulk_import.py:1443 netbox/ipam/forms/bulk_import.py:327 msgid "Parent VM of assigned interface (if any)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1362 netbox/ipam/filtersets.py:1111 +#: netbox/dcim/forms/bulk_import.py:1450 netbox/ipam/filtersets.py:1111 #: netbox/ipam/forms/bulk_import.py:334 msgid "Assigned interface" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1366 +#: netbox/dcim/forms/bulk_import.py:1454 msgid "Make this the primary MAC address for the assigned interface" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1404 +#: netbox/dcim/forms/bulk_import.py:1492 msgid "Must specify the parent device or VM when assigning an interface" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1437 +#: netbox/dcim/forms/bulk_import.py:1525 msgid "Side A site" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1441 +#: netbox/dcim/forms/bulk_import.py:1529 #: netbox/wireless/forms/bulk_import.py:93 msgid "Site of parent device A (if any)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1444 +#: netbox/dcim/forms/bulk_import.py:1532 msgid "Side A device" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1448 netbox/dcim/forms/bulk_import.py:1481 +#: netbox/dcim/forms/bulk_import.py:1536 netbox/dcim/forms/bulk_import.py:1569 msgid "Device name (for device component terminations)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1451 +#: netbox/dcim/forms/bulk_import.py:1539 msgid "Side A power panel" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1455 netbox/dcim/forms/bulk_import.py:1488 +#: netbox/dcim/forms/bulk_import.py:1543 netbox/dcim/forms/bulk_import.py:1576 msgid "Power panel name (for power feed terminations)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1458 +#: netbox/dcim/forms/bulk_import.py:1546 msgid "Side A type" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1464 +#: netbox/dcim/forms/bulk_import.py:1552 msgid "Side A name" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1465 netbox/dcim/forms/bulk_import.py:1498 +#: netbox/dcim/forms/bulk_import.py:1553 netbox/dcim/forms/bulk_import.py:1586 msgid "Termination name" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1470 +#: netbox/dcim/forms/bulk_import.py:1558 msgid "Side B site" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1474 +#: netbox/dcim/forms/bulk_import.py:1562 #: netbox/wireless/forms/bulk_import.py:114 msgid "Site of parent device B (if any)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1477 +#: netbox/dcim/forms/bulk_import.py:1565 msgid "Side B device" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1484 +#: netbox/dcim/forms/bulk_import.py:1572 msgid "Side B power panel" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1491 +#: netbox/dcim/forms/bulk_import.py:1579 msgid "Side B type" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1497 +#: netbox/dcim/forms/bulk_import.py:1585 msgid "Side B name" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1506 +#: netbox/dcim/forms/bulk_import.py:1594 #: netbox/templates/dcim/panels/connection.html:60 #: netbox/wireless/forms/bulk_import.py:133 msgid "Connection status" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1512 +#: netbox/dcim/forms/bulk_import.py:1600 msgid "Cable connection profile" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1532 +#: netbox/dcim/forms/bulk_import.py:1620 msgid "Cable bundle name" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1544 +#: netbox/dcim/forms/bulk_import.py:1632 msgid "Color name (e.g. \"Red\") or hex code (e.g. \"f44336\")" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1587 +#: netbox/dcim/forms/bulk_import.py:1675 #, python-brace-format msgid "Invalid side designation: {side}" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1606 +#: netbox/dcim/forms/bulk_import.py:1694 #, python-brace-format msgid "" "Side {side_upper}: {power_panel} {termination_object} is already connected" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1612 +#: netbox/dcim/forms/bulk_import.py:1700 #, python-brace-format msgid "{side_upper} side termination not found: {power_panel} {name}" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1630 +#: netbox/dcim/forms/bulk_import.py:1718 #, python-brace-format msgid "Side {side_upper}: {device} {termination_object} is already connected" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1636 +#: netbox/dcim/forms/bulk_import.py:1724 #, python-brace-format msgid "{side_upper} side termination not found: {device} {name}" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1658 +#: netbox/dcim/forms/bulk_import.py:1746 #, python-brace-format msgid "" "{color} did not match any used color name and was longer than six " "characters: invalid hex." msgstr "" -#: netbox/dcim/forms/bulk_import.py:1683 netbox/dcim/forms/model_forms.py:962 +#: netbox/dcim/forms/bulk_import.py:1771 netbox/dcim/forms/model_forms.py:962 #: netbox/dcim/tables/devices.py:1154 #: netbox/templates/dcim/panels/virtual_chassis_members.html:10 msgid "Master" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1687 +#: netbox/dcim/forms/bulk_import.py:1775 msgid "Master device" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1704 +#: netbox/dcim/forms/bulk_import.py:1792 msgid "Name of parent site" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1738 +#: netbox/dcim/forms/bulk_import.py:1826 msgid "Upstream power panel" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1768 +#: netbox/dcim/forms/bulk_import.py:1856 msgid "Primary or redundant" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1773 +#: netbox/dcim/forms/bulk_import.py:1861 msgid "Supply type (AC/DC)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1778 +#: netbox/dcim/forms/bulk_import.py:1866 msgid "Single or three-phase" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1828 netbox/dcim/forms/model_forms.py:1939 +#: netbox/dcim/forms/bulk_import.py:1916 netbox/dcim/forms/model_forms.py:1939 #: netbox/dcim/ui/panels.py:111 netbox/dcim/ui/panels.py:371 #: netbox/virtualization/ui/panels.py:55 msgid "Primary IPv4" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1832 +#: netbox/dcim/forms/bulk_import.py:1920 msgid "IPv4 address with mask, e.g. 1.2.3.4/24" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1835 netbox/dcim/forms/model_forms.py:1948 +#: netbox/dcim/forms/bulk_import.py:1923 netbox/dcim/forms/model_forms.py:1948 #: netbox/dcim/ui/panels.py:116 netbox/dcim/ui/panels.py:376 #: netbox/virtualization/ui/panels.py:60 msgid "Primary IPv6" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1839 +#: netbox/dcim/forms/bulk_import.py:1927 msgid "IPv6 address with prefix length, e.g. 2001:db8::1/64" msgstr "" @@ -5874,10 +5903,6 @@ msgstr "" msgid "Power outlet" msgstr "" -#: netbox/dcim/forms/model_forms.py:1846 netbox/dcim/forms/object_import.py:145 -msgid "Rear port" -msgstr "" - #: netbox/dcim/forms/model_forms.py:1852 msgid "Inventory Item" msgstr "" @@ -5947,13 +5972,6 @@ msgstr "" msgid "A position must be specified for the first VC member." msgstr "" -#: netbox/dcim/models/base.py:59 -#, python-brace-format -msgid "" -"Invalid rear port position ({rear_port_position}): Rear port {name} has only " -"{positions} positions." -msgstr "" - #: netbox/dcim/models/cables.py:62 msgid "cable bundle" msgstr "" @@ -15377,7 +15395,7 @@ msgstr "" msgid "Data is out of sync with upstream file" msgstr "" -#: netbox/templates/inc/table_controls_htmx.html:11 +#: netbox/templates/inc/table_controls_htmx.html:10 #: netbox/templates/inc/table_controls_htmx.html:12 msgid "Quick search" msgstr "" From 29860aaf764531df7d7d3a1b6438e77a26c08a83 Mon Sep 17 00:00:00 2001 From: Martin Hauser Date: Wed, 29 Jul 2026 15:07:42 +0200 Subject: [PATCH 03/35] fix(circuits): Add member_type_id filter to CircuitGroupAssignment Adds `member_type_id` filter field to support filtering by ContentType ID alongside existing `member_type` filter. Includes test coverage verifying correct filtering when member IDs overlap across different Content Types. Fixes #22800 --- netbox/circuits/filtersets.py | 7 ++++++- netbox/circuits/tests/test_filtersets.py | 25 ++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/netbox/circuits/filtersets.py b/netbox/circuits/filtersets.py index 3ed9145be..51cb1687b 100644 --- a/netbox/circuits/filtersets.py +++ b/netbox/circuits/filtersets.py @@ -405,6 +405,11 @@ class CircuitGroupAssignmentFilterSet(NetBoxModelFilterSet): label=_('Search'), ) member_type = MultiValueContentTypeFilter() + member_type_id = django_filters.ModelMultipleChoiceFilter( + field_name='member_type', + queryset=ContentType.objects.all(), + distinct=False, + ) circuit = MultiValueCharFilter( method='filter_circuit', field_name='cid', @@ -450,7 +455,7 @@ class CircuitGroupAssignmentFilterSet(NetBoxModelFilterSet): class Meta: model = CircuitGroupAssignment - fields = ('id', 'member_id', 'priority') + fields = ('id', 'member_type_id', 'member_id', 'priority') def search(self, queryset, name, value): if not value.strip(): diff --git a/netbox/circuits/tests/test_filtersets.py b/netbox/circuits/tests/test_filtersets.py index 92111d4c4..b0e46324a 100644 --- a/netbox/circuits/tests/test_filtersets.py +++ b/netbox/circuits/tests/test_filtersets.py @@ -1,3 +1,4 @@ +from django.contrib.contenttypes.models import ContentType from django.test import TestCase from circuits.choices import * @@ -779,6 +780,30 @@ class CircuitGroupAssignmentTestCase(TestCase, ChangeLoggedFilterSetTests): params = {'virtual_circuit': [virtual_circuits[0].cid, virtual_circuits[1].cid]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + def test_member_type(self): + params = {'member_type': ['circuits.circuit']} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) + params = {'member_type_id': [ContentType.objects.get_for_model(Circuit).pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) + params = {'member_type_id': [ContentType.objects.get_for_model(VirtualCircuit).pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) + + def test_member(self): + """The member type and ID are matched together, so a matching ID of another type is excluded.""" + circuit = Circuit.objects.first() + circuit_type = ContentType.objects.get_for_model(Circuit) + virtual_circuit_type = ContentType.objects.get_for_model(VirtualCircuit) + expected = self.queryset.get(member_type=circuit_type, member_id=circuit.pk) + + # A virtual circuit assignment sharing the circuit's object ID must not match + group = CircuitGroup.objects.create(name='Circuit Group 4', slug='circuit-group-4') + CircuitGroupAssignment.objects.create( + group=group, member_type=virtual_circuit_type, member_id=circuit.pk + ) + + params = {'member_type_id': [circuit_type.pk], 'member_id': [circuit.pk]} + self.assertEqual(list(self.filterset(params, self.queryset).qs), [expected]) + def test_provider(self): providers = Provider.objects.all()[:2] params = {'provider_id': [providers[0].pk, providers[1].pk]} From 052506fe9c00c7da9673d2ed89d5e9d6e861de8d Mon Sep 17 00:00:00 2001 From: Martin Hauser Date: Wed, 29 Jul 2026 23:27:09 +0200 Subject: [PATCH 04/35] Fixes #22738: Correct IPAM availability under constrained object permissions (#22785) --- netbox/ipam/tests/test_views.py | 744 +++++++++++++++++++- netbox/ipam/utils.py | 18 +- netbox/ipam/views.py | 109 +-- netbox/netbox/views/generic/object_views.py | 7 +- 4 files changed, 798 insertions(+), 80 deletions(-) diff --git a/netbox/ipam/tests/test_views.py b/netbox/ipam/tests/test_views.py index 9bf73038f..90b863d32 100644 --- a/netbox/ipam/tests/test_views.py +++ b/netbox/ipam/tests/test_views.py @@ -1,4 +1,5 @@ import datetime +from unittest.mock import patch from django.contrib.contenttypes.models import ContentType from django.db.backends.postgresql.psycopg_any import NumericRange @@ -10,13 +11,16 @@ from core.choices import ObjectChangeActionChoices from core.models import ObjectChange, ObjectType from dcim.constants import InterfaceTypeChoices from dcim.models import Device, DeviceRole, DeviceType, Interface, Manufacturer, Site -from extras.models import SavedFilter +from extras.choices import CustomFieldTypeChoices +from extras.models import CustomField, SavedFilter +from ipam import filtersets from ipam.choices import * from ipam.models import * -from ipam.views import AggregatePrefixesView +from ipam.utils import AvailableIPSpace +from ipam.views import AggregatePrefixesView, PrefixPrefixesView from netbox.choices import CSVDelimiterChoices, ImportFormatChoices from tenancy.models import Tenant -from users.models import ObjectPermission +from users.models import Group, ObjectPermission from utilities.testing import ViewTestCases, create_tags @@ -420,37 +424,175 @@ class AggregateTestCase(ViewTestCases.PrimaryObjectViewTestCase): self.assertContains(response, '203.0.114.0/26') self.assertNotContains(response, '203.0.114.64/26') - def test_children_are_filtered_fallback(self): - """_children_are_filtered() rebuilds the queryset when prep_table_data() has not cached a result.""" + def test_aggregate_prefixes_custom_field_constraint_shows_available(self): + """A tenant custom-field permission constraint does not suppress available-prefix rows.""" + cf = CustomField.objects.create(name='integerCustomField', type=CustomFieldTypeChoices.TYPE_INTEGER) + cf.object_types.set([ObjectType.objects.get_for_model(Tenant)]) + tenant = Tenant.objects.create( + name='Agg CF Tenant', slug='agg-cf-tenant', custom_field_data={'integerCustomField': 1} + ) + + aggregate = Aggregate.objects.create(prefix=IPNetwork('198.51.100.0/24'), rir=RIR.objects.first()) + child = Prefix.objects.create(prefix=IPNetwork('198.51.100.0/26'), tenant=tenant) + + self.add_permissions('ipam.view_aggregate') + obj_perm = ObjectPermission( + name='View prefixes', actions=['view'], constraints={'tenant__custom_field_data__integerCustomField': 1} + ) + obj_perm.save() + obj_perm.users.add(self.user) + obj_perm.object_types.add(ObjectType.objects.get_for_model(Prefix)) + + self.assertIn(child, Prefix.objects.restrict(self.user, 'view')) + + url = reverse('ipam:aggregate_prefixes', kwargs={'pk': aggregate.pk}) + response = self.client.get(url) + + self.assertHttpStatus(response, 200) + self.assertTrue(response.context['show_available']) + self.assertGreater(len(response.context['table'].data), 1) + + def has_active_child_filters(self, **params): + """Run the child filter detector on a fresh view for the given query parameters.""" + view = AggregatePrefixesView() + request = RequestFactory().get('/', params) + request.user = self.user + return view._has_active_child_filters(request) + + def test_has_active_child_filters_declared_filters(self): + """A declared filter with a real value counts as active filtering.""" + self.add_permissions('ipam.view_aggregate', 'ipam.view_prefix') + tenant = Tenant.objects.create(name='Declared Tenant', slug='declared-tenant') + + self.assertTrue(self.has_active_child_filters(tenant_id=tenant.pk)) + self.assertTrue(self.has_active_child_filters(q='test')) + # A boolean false is a value, not an absent filter. + self.assertTrue(self.has_active_child_filters(is_pool='false')) + + def test_has_active_child_filters_lookup_variants(self): + """Lookup variants generated by get_filters() count as active filtering.""" self.add_permissions('ipam.view_aggregate', 'ipam.view_prefix') - aggregate = Aggregate.objects.create( - prefix=IPNetwork('203.0.115.0/24'), - rir=RIR.objects.first() + self.assertTrue(self.has_active_child_filters(status__n=PrefixStatusChoices.STATUS_ACTIVE)) + self.assertTrue(self.has_active_child_filters(description__empty='true')) + + def test_has_active_child_filters_custom_field_filters(self): + """Custom field filters registered on the filterset instance count as active filtering.""" + self.add_permissions('ipam.view_aggregate', 'ipam.view_prefix') + cf = CustomField.objects.create(name='edge_cf', type=CustomFieldTypeChoices.TYPE_INTEGER) + cf.object_types.set([ObjectType.objects.get_for_model(Prefix)]) + + self.assertTrue(self.has_active_child_filters(cf_edge_cf='1')) + self.assertTrue(self.has_active_child_filters(cf_edge_cf__gte='1')) + + def test_has_active_child_filters_saved_filter(self): + """A populated saved filter counts as active filtering by slug or by id.""" + self.add_permissions('ipam.view_aggregate', 'ipam.view_prefix') + tenant = Tenant.objects.create(name='Saved Ref Tenant', slug='saved-ref-tenant') + saved_filter = SavedFilter.objects.create( + name='Saved ref', slug='saved-ref', parameters={'tenant_id': [str(tenant.pk)]} ) - tenant = Tenant.objects.create(name='Aggregate Fallback Tenant', slug='aggregate-fallback-tenant') - Prefix.objects.create(prefix=IPNetwork('203.0.115.0/26'), tenant=tenant) - Prefix.objects.create(prefix=IPNetwork('203.0.115.64/26')) + saved_filter.object_types.add(ObjectType.objects.get_for_model(Prefix)) - # No cached value: the fallback path rebuilds the filtered queryset and detects the filter. + self.assertTrue(self.has_active_child_filters(filter=saved_filter.slug)) + self.assertTrue(self.has_active_child_filters(filter_id=saved_filter.pk)) + + def test_has_active_child_filters_unresolved_saved_filter(self): + """A saved filter reference that expands to nothing is not active filtering.""" + self.add_permissions('ipam.view_aggregate', 'ipam.view_prefix') + saved_filter = SavedFilter.objects.create(name='Empty', slug='empty-saved-filter', parameters={}) + saved_filter.object_types.add(ObjectType.objects.get_for_model(Prefix)) + + self.assertFalse(self.has_active_child_filters(filter_id=saved_filter.pk)) + self.assertFalse(self.has_active_child_filters(filter_id='99999999')) + + def test_has_active_child_filters_without_values(self): + """A request with no parameters or only empty ones is not active filtering.""" + self.add_permissions('ipam.view_aggregate', 'ipam.view_prefix') + + self.assertFalse(self.has_active_child_filters()) + self.assertFalse(self.has_active_child_filters(tenant_id='')) + self.assertFalse(self.has_active_child_filters(q='')) + + def test_has_active_child_filters_invalid_value(self): + """A filter value that fails validation is not applied, so it is not active filtering.""" + self.add_permissions('ipam.view_aggregate', 'ipam.view_prefix') + + self.assertFalse(self.has_active_child_filters(tenant_id='99999999')) + + def test_has_active_child_filters_valid_beside_invalid_value(self): + """A valid filter is still active when another submitted value is invalid.""" + self.add_permissions('ipam.view_aggregate', 'ipam.view_prefix') + tenant = Tenant.objects.create(name='Mixed Tenant', slug='mixed-tenant') + + self.assertTrue(self.has_active_child_filters(tenant_id=tenant.pk, status='not-a-valid-status')) + + def test_has_active_child_filters_non_filter_params(self): + """Unknown parameters, display toggles, and table controls are not filters.""" + self.add_permissions('ipam.view_aggregate', 'ipam.view_prefix') + + self.assertFalse(self.has_active_child_filters(not_a_filter='x')) + self.assertFalse(self.has_active_child_filters(show_available='false')) + self.assertFalse(self.has_active_child_filters(show_assigned='true')) + self.assertFalse(self.has_active_child_filters(page='2', per_page='100', sort='prefix', tableconfig_id='1')) + + def test_has_active_child_filters_control_beside_filter(self): + """A table control submitted alongside a filter does not mask the filter.""" + self.add_permissions('ipam.view_aggregate', 'ipam.view_prefix') + tenant = Tenant.objects.create(name='Control Tenant', slug='control-tenant') + + self.assertTrue(self.has_active_child_filters(page='2', tenant_id=tenant.pk)) + + def test_has_active_child_filters_without_filterset(self): + """A view without a filterset reports no active filters.""" view = AggregatePrefixesView() - request = RequestFactory().get('/', {'tenant_id': tenant.pk}) + view.filterset = None + request = RequestFactory().get('/', {'tenant_id': '1'}) request.user = self.user - self.assertFalse(hasattr(view, '_child_queryset_is_filtered')) - self.assertTrue(view._children_are_filtered(request, aggregate)) + self.assertFalse(view._has_active_child_filters(request)) + + def test_has_active_child_filters_reuses_view_filterset(self): + """The detector evaluates the FilterSet already bound by the view, not a fresh one.""" + aggregate = Aggregate.objects.create(prefix=IPNetwork('203.0.115.0/24'), rir=RIR.objects.first()) + tenant = Tenant.objects.create(name='Reuse Tenant', slug='reuse-tenant') - # No cached value and no filter: the fallback path reports no filtering. view = AggregatePrefixesView() request = RequestFactory().get('/') request.user = self.user - self.assertFalse(view._children_are_filtered(request, aggregate)) - # A cached value takes precedence over the actual request state. - view = AggregatePrefixesView() - view._set_children_filtered(False) - request = RequestFactory().get('/', {'tenant_id': tenant.pk}) + # The bound FilterSet is authoritative: it reports a filter the request itself does not carry. + view.filterset_instance = AggregatePrefixesView.filterset( + {'tenant_id': [str(tenant.pk)]}, view.get_children(request, aggregate), request=request + ) + + request = RequestFactory().get('/', {'page': '2'}) request.user = self.user - self.assertFalse(view._children_are_filtered(request, aggregate)) + self.assertTrue(view._has_active_child_filters(request)) + + def test_child_tab_binds_filterset_once(self): + """A filtered child tab binds the FilterSet once; the detector reuses it instead of rebuilding.""" + self.add_permissions('ipam.view_aggregate', 'ipam.view_prefix') + aggregate = Aggregate.objects.create(prefix=IPNetwork('203.0.116.0/24'), rir=RIR.objects.first()) + tenant = Tenant.objects.create(name='Bind Once Tenant', slug='bind-once-tenant') + Prefix.objects.create(prefix=IPNetwork('203.0.116.0/26'), tenant=tenant) + + # Count only data-bound instantiations: the filter form separately builds an unbound + # FilterSet to resolve field modifiers, which is unrelated to filter detection. + bound = [] + original_init = filtersets.PrefixFilterSet.__init__ + + def counting_init(fs, *args, **kwargs): + if args or 'data' in kwargs: + bound.append(fs) + original_init(fs, *args, **kwargs) + + url = reverse('ipam:aggregate_prefixes', kwargs={'pk': aggregate.pk}) + with patch.object(filtersets.PrefixFilterSet, '__init__', counting_init): + response = self.client.get(url, {'tenant_id': tenant.pk}) + + self.assertHttpStatus(response, 200) + self.assertEqual(len(bound), 1) + self.assertFalse(response.context['show_available']) class RoleTestCase(ViewTestCases.OrganizationalObjectViewTestCase): @@ -829,18 +971,437 @@ class PrefixTestCase(ViewTestCases.PrimaryObjectViewTestCase): self.assertContains(response, '192.0.2.1/24') self.assertNotContains(response, '192.0.2.2/24') + def assertIPAvailabilityShown(self, response, visible_ip): + """The permitted IP renders as a real row and synthetic available-space rows are present.""" + records = list(response.context['table'].data) + rendered_ip_pks = {r.pk for r in records if isinstance(r, IPAddress)} + self.assertIn(visible_ip.pk, rendered_ip_pks) + self.assertTrue(any(isinstance(r, AvailableIPSpace) for r in records)) + def test_prefix_ipaddresses_unfiltered_shows_available_space(self): """An unfiltered IP Addresses tab injects synthetic available-space rows.""" self.add_permissions('ipam.view_prefix', 'ipam.view_ipaddress', 'ipam.view_iprange') prefix = Prefix.objects.create(prefix=IPNetwork('192.0.2.0/29')) - IPAddress.objects.create(address=IPNetwork('192.0.2.1/29')) + ip = IPAddress.objects.create(address=IPNetwork('192.0.2.1/29')) url = reverse('ipam:prefix_ipaddresses', kwargs={'pk': prefix.pk}) response = self.client.get(url) self.assertHttpStatus(response, 200) - self.assertGreater(len(response.context['table'].data), 1) + self.assertIPAvailabilityShown(response, ip) + + def test_prefix_ipaddresses_custom_field_constraint_shows_available(self): + """A permission constraint on a related object's custom field data does not suppress the available-IP rows.""" + cf = CustomField.objects.create(name='integerCustomField', type=CustomFieldTypeChoices.TYPE_INTEGER) + cf.object_types.set([ObjectType.objects.get_for_model(Tenant)]) + + tenant = Tenant.objects.create(name='CF Tenant', slug='cf-tenant', custom_field_data={'integerCustomField': 1}) + prefix = Prefix.objects.create(prefix=IPNetwork('192.0.2.0/29'), tenant=tenant) + ip = IPAddress.objects.create(address=IPNetwork('192.0.2.1/29'), tenant=tenant) + + # The issue reports the JSON string "1", but an integer custom field stores an int, so a + # string constraint would not match and would hide the parent. Use 1 and prove access below. + constraint = {'tenant__custom_field_data__integerCustomField': 1} + for model in (Prefix, IPAddress): + obj_perm = ObjectPermission( + name=f'View {model._meta.verbose_name}', actions=['view'], constraints=constraint + ) + obj_perm.save() + obj_perm.users.add(self.user) + obj_perm.object_types.add(ObjectType.objects.get_for_model(model)) + + # Self-verifying: the constraint must actually grant access to both objects, or the + # availability assertion could pass through an unrestricted re-query instead of the fix. + self.assertIn(prefix, Prefix.objects.restrict(self.user, 'view')) + self.assertIn(ip, IPAddress.objects.restrict(self.user, 'view')) + + url = reverse('ipam:prefix_ipaddresses', kwargs={'pk': prefix.pk}) + response = self.client.get(url) + + self.assertHttpStatus(response, 200) + self.assertIPAvailabilityShown(response, ip) + + def test_prefix_ipaddresses_related_field_constraint_shows_available(self): + """A permission constraint on a related object field does not suppress the available-IP rows.""" + tenant = Tenant.objects.create(name='Plain Constraint Tenant', slug='plain-constraint-tenant') + prefix = Prefix.objects.create(prefix=IPNetwork('192.0.2.0/29'), tenant=tenant) + ip = IPAddress.objects.create(address=IPNetwork('192.0.2.1/29'), tenant=tenant) + + constraint = {'tenant__slug': 'plain-constraint-tenant'} + for model in (Prefix, IPAddress): + obj_perm = ObjectPermission( + name=f'View {model._meta.verbose_name}', actions=['view'], constraints=constraint + ) + obj_perm.save() + obj_perm.users.add(self.user) + obj_perm.object_types.add(ObjectType.objects.get_for_model(model)) + + self.assertIn(ip, IPAddress.objects.restrict(self.user, 'view')) + + url = reverse('ipam:prefix_ipaddresses', kwargs={'pk': prefix.pk}) + response = self.client.get(url) + + self.assertHttpStatus(response, 200) + self.assertIPAvailabilityShown(response, ip) + + def test_prefix_ipaddresses_constraint_with_direct_filter_suppresses(self): + """A direct filter still suppresses available-IP rows for a constrained user.""" + tenants = ( + Tenant(name='Constraint Direct 1', slug='constraint-direct-1'), + Tenant(name='Constraint Direct 2', slug='constraint-direct-2'), + ) + Tenant.objects.bulk_create(tenants) + prefix = Prefix.objects.create(prefix=IPNetwork('192.0.2.0/24')) + ip1 = IPAddress.objects.create(address=IPNetwork('192.0.2.1/24'), tenant=tenants[0]) + ip2 = IPAddress.objects.create(address=IPNetwork('192.0.2.2/24'), tenant=tenants[1]) + + self.add_permissions('ipam.view_prefix') + obj_perm = ObjectPermission( + name='View IPs', actions=['view'], constraints={'tenant__slug__startswith': 'constraint-direct'} + ) + obj_perm.save() + obj_perm.users.add(self.user) + obj_perm.object_types.add(ObjectType.objects.get_for_model(IPAddress)) + + # Both IPs are visible under the constraint, so suppression below is due to the filter, not permissions. + self.assertIn(ip1, IPAddress.objects.restrict(self.user, 'view')) + self.assertIn(ip2, IPAddress.objects.restrict(self.user, 'view')) + + url = reverse('ipam:prefix_ipaddresses', kwargs={'pk': prefix.pk}) + response = self.client.get(url, {'tenant_id': tenants[0].pk}) + + self.assertHttpStatus(response, 200) + self.assertEqual(len(response.context['table'].data), 1) + self.assertContains(response, '192.0.2.1/24') + self.assertNotContains(response, '192.0.2.2/24') + + def test_prefix_ipaddresses_constraint_with_saved_filter_suppresses(self): + """A saved filter still suppresses available-IP rows for a constrained user.""" + tenants = ( + Tenant(name='Constraint Saved 1', slug='constraint-saved-1'), + Tenant(name='Constraint Saved 2', slug='constraint-saved-2'), + ) + Tenant.objects.bulk_create(tenants) + prefix = Prefix.objects.create(prefix=IPNetwork('192.0.2.0/24')) + ip1 = IPAddress.objects.create(address=IPNetwork('192.0.2.1/24'), tenant=tenants[0]) + ip2 = IPAddress.objects.create(address=IPNetwork('192.0.2.2/24'), tenant=tenants[1]) + + self.add_permissions('ipam.view_prefix') + obj_perm = ObjectPermission( + name='View IPs', actions=['view'], constraints={'tenant__slug__startswith': 'constraint-saved'} + ) + obj_perm.save() + obj_perm.users.add(self.user) + obj_perm.object_types.add(ObjectType.objects.get_for_model(IPAddress)) + + # Both IPs are visible under the constraint, so suppression below is due to the filter, not permissions. + self.assertIn(ip1, IPAddress.objects.restrict(self.user, 'view')) + self.assertIn(ip2, IPAddress.objects.restrict(self.user, 'view')) + + saved_filter = SavedFilter.objects.create( + name='Constraint saved tenant 1', slug='constraint-saved-tenant-1', + parameters={'tenant_id': [str(tenants[0].pk)]}, + ) + saved_filter.object_types.add(ObjectType.objects.get_for_model(IPAddress)) + + url = reverse('ipam:prefix_ipaddresses', kwargs={'pk': prefix.pk}) + response = self.client.get(url, {'filter_id': saved_filter.pk}) + + self.assertHttpStatus(response, 200) + self.assertEqual(len(response.context['table'].data), 1) + self.assertContains(response, '192.0.2.1/24') + self.assertNotContains(response, '192.0.2.2/24') + + def test_prefix_ipaddresses_direct_field_constraint_shows_available(self): + """A permission constraint on the IP Address status field does not suppress the available-IP rows.""" + prefix = Prefix.objects.create(prefix=IPNetwork('192.0.2.0/29')) + ip = IPAddress.objects.create(address=IPNetwork('192.0.2.1/29'), status=IPAddressStatusChoices.STATUS_ACTIVE) + + self.add_permissions('ipam.view_prefix') + obj_perm = ObjectPermission( + name='View IPs', actions=['view'], constraints={'status': IPAddressStatusChoices.STATUS_ACTIVE} + ) + obj_perm.save() + obj_perm.users.add(self.user) + obj_perm.object_types.add(ObjectType.objects.get_for_model(IPAddress)) + + self.assertIn(ip, IPAddress.objects.restrict(self.user, 'view')) + + url = reverse('ipam:prefix_ipaddresses', kwargs={'pk': prefix.pk}) + response = self.client.get(url) + + self.assertHttpStatus(response, 200) + self.assertIPAvailabilityShown(response, ip) + + def test_prefix_ipaddresses_own_custom_field_constraint_shows_available(self): + """A permission constraint on the IP Address custom field data does not suppress the available-IP rows.""" + cf = CustomField.objects.create(name='ip_cf', type=CustomFieldTypeChoices.TYPE_INTEGER) + cf.object_types.set([ObjectType.objects.get_for_model(IPAddress)]) + + prefix = Prefix.objects.create(prefix=IPNetwork('192.0.2.0/29')) + ip = IPAddress.objects.create(address=IPNetwork('192.0.2.1/29'), custom_field_data={'ip_cf': 1}) + + self.add_permissions('ipam.view_prefix') + obj_perm = ObjectPermission(name='View IPs', actions=['view'], constraints={'custom_field_data__ip_cf': 1}) + obj_perm.save() + obj_perm.users.add(self.user) + obj_perm.object_types.add(ObjectType.objects.get_for_model(IPAddress)) + + self.assertIn(ip, IPAddress.objects.restrict(self.user, 'view')) + + url = reverse('ipam:prefix_ipaddresses', kwargs={'pk': prefix.pk}) + response = self.client.get(url) + + self.assertHttpStatus(response, 200) + self.assertIPAvailabilityShown(response, ip) + + def test_prefix_ipaddresses_multikey_constraint_shows_available(self): + """A permission constraint combining a direct and a related field does not suppress the available-IP rows.""" + tenant = Tenant.objects.create(name='Multi Key Tenant', slug='multi-key-tenant') + prefix = Prefix.objects.create(prefix=IPNetwork('192.0.2.0/29')) + ip = IPAddress.objects.create( + address=IPNetwork('192.0.2.1/29'), status=IPAddressStatusChoices.STATUS_ACTIVE, tenant=tenant + ) + + self.add_permissions('ipam.view_prefix') + obj_perm = ObjectPermission( + name='View IPs', + actions=['view'], + constraints={'status': IPAddressStatusChoices.STATUS_ACTIVE, 'tenant__slug': 'multi-key-tenant'}, + ) + obj_perm.save() + obj_perm.users.add(self.user) + obj_perm.object_types.add(ObjectType.objects.get_for_model(IPAddress)) + + self.assertIn(ip, IPAddress.objects.restrict(self.user, 'view')) + + url = reverse('ipam:prefix_ipaddresses', kwargs={'pk': prefix.pk}) + response = self.client.get(url) + + self.assertHttpStatus(response, 200) + self.assertIPAvailabilityShown(response, ip) + + def test_prefix_ipaddresses_or_constraint_shows_available(self): + """A permission granting access through either of two constraints does not suppress the available-IP rows.""" + prefix = Prefix.objects.create(prefix=IPNetwork('192.0.2.0/29')) + ip = IPAddress.objects.create(address=IPNetwork('192.0.2.1/29'), status=IPAddressStatusChoices.STATUS_ACTIVE) + + self.add_permissions('ipam.view_prefix') + obj_perm = ObjectPermission( + name='View IPs', + actions=['view'], + constraints=[ + {'status': IPAddressStatusChoices.STATUS_ACTIVE}, + {'status': IPAddressStatusChoices.STATUS_RESERVED}, + ], + ) + obj_perm.save() + obj_perm.users.add(self.user) + obj_perm.object_types.add(ObjectType.objects.get_for_model(IPAddress)) + + self.assertIn(ip, IPAddress.objects.restrict(self.user, 'view')) + + url = reverse('ipam:prefix_ipaddresses', kwargs={'pk': prefix.pk}) + response = self.client.get(url) + + self.assertHttpStatus(response, 200) + self.assertIPAvailabilityShown(response, ip) + + def test_prefix_ipaddresses_address_startswith_constraint_shows_available(self): + """The #22539 address__startswith constraint does not suppress the available-IP rows.""" + prefix = Prefix.objects.create(prefix=IPNetwork('192.168.0.0/24')) + ip = IPAddress.objects.create(address=IPNetwork('192.168.0.1/24')) + + self.add_permissions('ipam.view_prefix') + obj_perm = ObjectPermission( + name='View IPs', actions=['view'], constraints={'address__startswith': '192.168.0.'} + ) + obj_perm.save() + obj_perm.users.add(self.user) + obj_perm.object_types.add(ObjectType.objects.get_for_model(IPAddress)) + + self.assertIn(ip, IPAddress.objects.restrict(self.user, 'view')) + + url = reverse('ipam:prefix_ipaddresses', kwargs={'pk': prefix.pk}) + response = self.client.get(url) + + self.assertHttpStatus(response, 200) + self.assertIPAvailabilityShown(response, ip) + + def test_prefix_prefixes_show_available_false_skips_filter_detection(self): + """With availability already off, the filter detector never runs.""" + self.add_permissions('ipam.view_prefix') + parent = Prefix.objects.create(prefix=IPNetwork('198.51.104.0/24')) + Prefix.objects.create(prefix=IPNetwork('198.51.104.0/26')) + + view = PrefixPrefixesView() + request = RequestFactory().get('/', {'show_available': 'false'}) + request.user = self.user + view.prep_table_data(request, view.get_children(request, parent), parent) + + self.assertFalse(hasattr(view, '_active_child_filters')) + + def test_prefix_ipaddresses_valid_plus_invalid_filter_suppresses(self): + """A valid filter is applied and suppresses synthetic rows even when another filter value is invalid.""" + self.add_permissions('ipam.view_prefix', 'ipam.view_ipaddress') + tenant = Tenant.objects.create(name='VPI Tenant', slug='vpi-tenant') + prefix = Prefix.objects.create(prefix=IPNetwork('192.0.2.0/24')) + matching = IPAddress.objects.create(address=IPNetwork('192.0.2.1/24'), tenant=tenant) + IPAddress.objects.create(address=IPNetwork('192.0.2.2/24')) + + url = reverse('ipam:prefix_ipaddresses', kwargs={'pk': prefix.pk}) + response = self.client.get(url, {'tenant_id': tenant.pk, 'status': 'not-a-valid-status'}) + + self.assertHttpStatus(response, 200) + records = list(response.context['table'].data) + self.assertFalse(any(isinstance(r, AvailableIPSpace) for r in records)) + self.assertEqual({r.pk for r in records if isinstance(r, IPAddress)}, {matching.pk}) + + def test_prefix_ipaddresses_htmx_direct_filter_suppresses(self): + """An HTMX table refresh with a direct filter suppresses available-IP rows.""" + self.add_permissions('ipam.view_prefix', 'ipam.view_ipaddress') + tenants = ( + Tenant(name='HTMX Tenant 1', slug='htmx-tenant-1'), + Tenant(name='HTMX Tenant 2', slug='htmx-tenant-2'), + ) + Tenant.objects.bulk_create(tenants) + prefix = Prefix.objects.create(prefix=IPNetwork('192.0.2.0/24')) + IPAddress.objects.create(address=IPNetwork('192.0.2.1/24'), tenant=tenants[0]) + IPAddress.objects.create(address=IPNetwork('192.0.2.2/24'), tenant=tenants[1]) + + url = reverse('ipam:prefix_ipaddresses', kwargs={'pk': prefix.pk}) + response = self.client.get(url, {'tenant_id': tenants[0].pk}, HTTP_HX_REQUEST='true') + + self.assertHttpStatus(response, 200) + self.assertEqual(len(response.context['table'].data), 1) + + def test_prefix_ipaddresses_htmx_unfiltered_shows_available(self): + """An HTMX table refresh with no filter still injects available-IP rows.""" + self.add_permissions('ipam.view_prefix', 'ipam.view_ipaddress') + prefix = Prefix.objects.create(prefix=IPNetwork('192.0.2.0/29')) + ip = IPAddress.objects.create(address=IPNetwork('192.0.2.1/29')) + + url = reverse('ipam:prefix_ipaddresses', kwargs={'pk': prefix.pk}) + response = self.client.get(url, HTTP_HX_REQUEST='true') + + self.assertHttpStatus(response, 200) + self.assertIPAvailabilityShown(response, ip) + + def test_prefix_ipaddresses_group_constraint_shows_available(self): + """A constraint granted through a group does not suppress the available-IP rows.""" + self.add_permissions('ipam.view_prefix') + tenant = Tenant.objects.create(name='Group Grant', slug='group-grant') + prefix = Prefix.objects.create(prefix=IPNetwork('192.0.2.0/29')) + ip = IPAddress.objects.create(address=IPNetwork('192.0.2.1/29'), tenant=tenant) + + group = Group.objects.create(name='IP Viewers') + self.user.groups.add(group) + obj_perm = ObjectPermission(name='View IPs', actions=['view'], constraints={'tenant__slug': 'group-grant'}) + obj_perm.save() + obj_perm.groups.add(group) + obj_perm.object_types.add(ObjectType.objects.get_for_model(IPAddress)) + + # The group grant must resolve, or the assertion below would be vacuous. + self.assertIn(ip, IPAddress.objects.restrict(self.user, 'view')) + + url = reverse('ipam:prefix_ipaddresses', kwargs={'pk': prefix.pk}) + response = self.client.get(url) + + self.assertHttpStatus(response, 200) + self.assertIPAvailabilityShown(response, ip) + + def test_prefix_ipaddresses_partial_visibility_shows_available(self): + """A constraint that hides one child IP keeps availability rows and omits the hidden IP.""" + self.add_permissions('ipam.view_prefix') + visible_tenant = Tenant.objects.create(name='Partial Vis', slug='partial-vis') + + prefix = Prefix.objects.create(prefix=IPNetwork('192.0.2.0/29')) + visible_ip = IPAddress.objects.create(address=IPNetwork('192.0.2.1/29'), tenant=visible_tenant) + hidden_ip = IPAddress.objects.create(address=IPNetwork('192.0.2.6/29')) + + obj_perm = ObjectPermission(name='View IPs', actions=['view'], constraints={'tenant__slug': 'partial-vis'}) + obj_perm.save() + obj_perm.users.add(self.user) + obj_perm.object_types.add(ObjectType.objects.get_for_model(IPAddress)) + + # Exactly one child IP is visible, so the constraint is doing real work. + self.assertIn(visible_ip, IPAddress.objects.restrict(self.user, 'view')) + self.assertNotIn(hidden_ip, IPAddress.objects.restrict(self.user, 'view')) + + url = reverse('ipam:prefix_ipaddresses', kwargs={'pk': prefix.pk}) + response = self.client.get(url) + + # The hidden IP is omitted and its slot is counted as available space. + self.assertHttpStatus(response, 200) + self.assertIPAvailabilityShown(response, visible_ip) + records = list(response.context['table'].data) + self.assertNotIn(hidden_ip.pk, {r.pk for r in records if isinstance(r, IPAddress)}) + self.assertEqual(sum(r.size for r in records if isinstance(r, AvailableIPSpace)), 5) + + def test_prefix_ipaddresses_partial_visibility_omits_hidden_range(self): + """A constraint on child ranges keeps the permitted range and omits the hidden one.""" + self.add_permissions('ipam.view_prefix', 'ipam.view_ipaddress') + + prefix = Prefix.objects.create(prefix=IPNetwork('192.0.2.0/29')) + ip = IPAddress.objects.create(address=IPNetwork('192.0.2.1/29')) + visible_range = IPRange.objects.create( + start_address=IPNetwork('192.0.2.2/29'), + end_address=IPNetwork('192.0.2.3/29'), + size=2, + mark_populated=True, + description='visible', + ) + hidden_range = IPRange.objects.create( + start_address=IPNetwork('192.0.2.4/29'), + end_address=IPNetwork('192.0.2.5/29'), + size=2, + mark_populated=True, + ) + + obj_perm = ObjectPermission(name='View ranges', actions=['view'], constraints={'description': 'visible'}) + obj_perm.save() + obj_perm.users.add(self.user) + obj_perm.object_types.add(ObjectType.objects.get_for_model(IPRange)) + + # Exactly one child range is visible, so the constraint is doing real work. + self.assertIn(visible_range, IPRange.objects.restrict(self.user, 'view')) + self.assertNotIn(hidden_range, IPRange.objects.restrict(self.user, 'view')) + + url = reverse('ipam:prefix_ipaddresses', kwargs={'pk': prefix.pk}) + response = self.client.get(url) + + self.assertHttpStatus(response, 200) + self.assertIPAvailabilityShown(response, ip) + records = list(response.context['table'].data) + self.assertEqual({r.pk for r in records if isinstance(r, IPRange)}, {visible_range.pk}) + self.assertEqual(sum(r.size for r in records if isinstance(r, AvailableIPSpace)), 3) + + def test_prefix_ipaddresses_sorted_suppresses_available(self): + """A sorted IP Addresses tab drops synthetic rows so ordering stays in SQL.""" + self.add_permissions('ipam.view_prefix', 'ipam.view_ipaddress', 'ipam.view_iprange') + prefix = Prefix.objects.create(prefix=IPNetwork('192.0.2.0/29')) + ip = IPAddress.objects.create(address=IPNetwork('192.0.2.1/29')) + + url = reverse('ipam:prefix_ipaddresses', kwargs={'pk': prefix.pk}) + response = self.client.get(url, {'sort': 'address'}) + + self.assertHttpStatus(response, 200) + records = list(response.context['table'].data) + self.assertEqual({r.pk for r in records if isinstance(r, IPAddress)}, {ip.pk}) + self.assertFalse(any(isinstance(r, AvailableIPSpace) for r in records)) + + def test_prefix_ipaddresses_empty_sort_shows_available(self): + """An empty sort value is not an ordering, so synthetic rows survive.""" + self.add_permissions('ipam.view_prefix', 'ipam.view_ipaddress', 'ipam.view_iprange') + prefix = Prefix.objects.create(prefix=IPNetwork('192.0.2.0/29')) + ip = IPAddress.objects.create(address=IPNetwork('192.0.2.1/29')) + + url = reverse('ipam:prefix_ipaddresses', kwargs={'pk': prefix.pk}) + response = self.client.get(url, {'sort': ''}) + + self.assertHttpStatus(response, 200) + self.assertIPAvailabilityShown(response, ip) def test_prefix_prefixes_unfiltered_shows_available_prefixes(self): """An unfiltered Child Prefixes tab injects synthetic available-prefix rows.""" @@ -855,6 +1416,74 @@ class PrefixTestCase(ViewTestCases.PrimaryObjectViewTestCase): self.assertHttpStatus(response, 200) self.assertGreater(len(response.context['table'].data), 1) + def test_prefix_prefixes_custom_field_constraint_shows_available(self): + """A tenant custom-field permission constraint does not suppress available child-prefix rows.""" + cf = CustomField.objects.create(name='integerCustomField', type=CustomFieldTypeChoices.TYPE_INTEGER) + cf.object_types.set([ObjectType.objects.get_for_model(Tenant)]) + tenant = Tenant.objects.create( + name='Child CF Tenant', slug='child-cf-tenant', custom_field_data={'integerCustomField': 1} + ) + + parent = Prefix.objects.create(prefix=IPNetwork('198.51.100.0/24'), tenant=tenant) + child = Prefix.objects.create(prefix=IPNetwork('198.51.100.0/26'), tenant=tenant) + + obj_perm = ObjectPermission( + name='View prefixes', actions=['view'], constraints={'tenant__custom_field_data__integerCustomField': 1} + ) + obj_perm.save() + obj_perm.users.add(self.user) + obj_perm.object_types.add(ObjectType.objects.get_for_model(Prefix)) + + self.assertIn(child, Prefix.objects.restrict(self.user, 'view')) + + url = reverse('ipam:prefix_prefixes', kwargs={'pk': parent.pk}) + response = self.client.get(url) + + self.assertHttpStatus(response, 200) + self.assertTrue(response.context['show_available']) + self.assertGreater(len(response.context['table'].data), 1) + + def test_prefix_prefixes_available_only_shows_available(self): + """The Available button's parameters render synthetic rows and no assigned rows.""" + self.add_permissions('ipam.view_prefix') + parent = Prefix.objects.create(prefix=IPNetwork('198.51.104.0/24')) + Prefix.objects.create(prefix=IPNetwork('198.51.104.0/26')) + + url = reverse('ipam:prefix_prefixes', kwargs={'pk': parent.pk}) + response = self.client.get(url, {'show_assigned': 'false', 'show_available': 'true'}) + + self.assertHttpStatus(response, 200) + rendered = list(response.context['table'].data) + self.assertTrue([p for p in rendered if p.pk is None]) + self.assertFalse([p for p in rendered if p.pk is not None]) + + def test_prefix_prefixes_partial_visibility_shows_available(self): + """A constraint that hides one child prefix does not suppress the available-prefix rows.""" + visible_tenant = Tenant.objects.create(name='PP Partial', slug='pp-partial') + + # The parent carries the visible tenant, so the single constrained grant covers the tab itself. + parent = Prefix.objects.create(prefix=IPNetwork('198.51.100.0/24'), tenant=visible_tenant) + visible_child = Prefix.objects.create(prefix=IPNetwork('198.51.100.0/26'), tenant=visible_tenant) + hidden_child = Prefix.objects.create(prefix=IPNetwork('198.51.100.64/26')) + + obj_perm = ObjectPermission( + name='View prefixes', actions=['view'], constraints={'tenant__slug': 'pp-partial'} + ) + obj_perm.save() + obj_perm.users.add(self.user) + obj_perm.object_types.add(ObjectType.objects.get_for_model(Prefix)) + + self.assertIn(visible_child, Prefix.objects.restrict(self.user, 'view')) + self.assertNotIn(hidden_child, Prefix.objects.restrict(self.user, 'view')) + + url = reverse('ipam:prefix_prefixes', kwargs={'pk': parent.pk}) + response = self.client.get(url) + + # Pins that a constraint does not suppress availability, not how the hidden child is handled. + self.assertHttpStatus(response, 200) + self.assertTrue(response.context['show_available']) + self.assertTrue([p for p in response.context['table'].data if p.pk is None]) + def test_prefix_ipaddresses_with_single_address_range(self): self.add_permissions('ipam.view_prefix', 'ipam.view_ipaddress', 'ipam.view_iprange') # The IP Addresses tab annotates child IP addresses alongside any @@ -1433,6 +2062,73 @@ class VLANGroupTestCase(ViewTestCases.OrganizationalObjectViewTestCase): self.assertHttpStatus(response, 200) self.assertGreater(len(response.context['table'].data), 1) + def test_vlans_custom_field_constraint_shows_available(self): + """A tenant custom-field permission constraint does not suppress available-VLAN rows.""" + cf = CustomField.objects.create(name='integerCustomField', type=CustomFieldTypeChoices.TYPE_INTEGER) + cf.object_types.set([ObjectType.objects.get_for_model(Tenant)]) + tenant = Tenant.objects.create( + name='VLAN CF Tenant', slug='vlan-cf-tenant', custom_field_data={'integerCustomField': 1} + ) + + group = VLANGroup.objects.create(name='CF VLAN Group', slug='cf-vlan-group') + vlan = VLAN.objects.create(group=group, vid=10, name='VLAN0010', tenant=tenant) + + self.add_permissions('ipam.view_vlangroup') + obj_perm = ObjectPermission( + name='View VLANs', actions=['view'], constraints={'tenant__custom_field_data__integerCustomField': 1} + ) + obj_perm.save() + obj_perm.users.add(self.user) + obj_perm.object_types.add(ObjectType.objects.get_for_model(VLAN)) + + self.assertIn(vlan, VLAN.objects.restrict(self.user, 'view')) + + url = reverse('ipam:vlangroup_vlans', kwargs={'pk': group.pk}) + response = self.client.get(url) + + self.assertHttpStatus(response, 200) + self.assertGreater(len(response.context['table'].data), 1) + + def test_vlans_partial_visibility_shows_available(self): + """A constraint that hides one VLAN does not suppress the available-VLAN rows.""" + self.add_permissions('ipam.view_vlangroup') + visible_tenant = Tenant.objects.create(name='VLAN Partial', slug='vlan-partial') + + group = VLANGroup.objects.create(name='Partial VLAN Group', slug='partial-vlan-group') + visible_vlan = VLAN.objects.create(group=group, vid=10, name='VLAN0010', tenant=visible_tenant) + hidden_vlan = VLAN.objects.create(group=group, vid=20, name='VLAN0020') + + obj_perm = ObjectPermission(name='View VLANs', actions=['view'], constraints={'tenant__slug': 'vlan-partial'}) + obj_perm.save() + obj_perm.users.add(self.user) + obj_perm.object_types.add(ObjectType.objects.get_for_model(VLAN)) + + self.assertIn(visible_vlan, VLAN.objects.restrict(self.user, 'view')) + self.assertNotIn(hidden_vlan, VLAN.objects.restrict(self.user, 'view')) + + url = reverse('ipam:vlangroup_vlans', kwargs={'pk': group.pk}) + response = self.client.get(url) + + # Pins that a constraint does not suppress availability, not how the hidden child is handled. + self.assertHttpStatus(response, 200) + rendered = list(response.context['table'].data) + self.assertIn(visible_vlan.vid, {r.vid for r in rendered if isinstance(r, VLAN)}) + self.assertTrue([r for r in rendered if isinstance(r, dict)]) # synthetic available VLANs present + + def test_vlans_sorted_suppresses_available(self): + """A sorted VLANs tab drops synthetic available-VLAN rows.""" + self.add_permissions('ipam.view_vlangroup', 'ipam.view_vlan') + group = VLANGroup.objects.create(name='Sorted VLAN Group', slug='sorted-vlan-group') + vlan = VLAN.objects.create(group=group, vid=10, name='VLAN0010') + + url = reverse('ipam:vlangroup_vlans', kwargs={'pk': group.pk}) + response = self.client.get(url, {'sort': 'vid'}) + + self.assertHttpStatus(response, 200) + rendered = list(response.context['table'].data) + self.assertEqual({r.vid for r in rendered if isinstance(r, VLAN)}, {vlan.vid}) + self.assertFalse([r for r in rendered if isinstance(r, dict)]) # no synthetic available VLANs + class VLANTestCase(ViewTestCases.PrimaryObjectViewTestCase): model = VLAN diff --git a/netbox/ipam/utils.py b/netbox/ipam/utils.py index 5b29688fd..4cb5d458d 100644 --- a/netbox/ipam/utils.py +++ b/netbox/ipam/utils.py @@ -67,14 +67,26 @@ def add_requested_prefixes(parent, prefix_list, show_available=True, show_assign return child_prefixes -def annotate_ip_space(prefix): +def annotate_ip_space(prefix, *, ip_addresses=None, ip_ranges=None): + """ + Return a prefix's child ranges and IPs interleaved with available space records. + + :param prefix: Parent Prefix instance + :param ip_addresses: Child IP addresses queryset (defaults to all child IPs) + :param ip_ranges: Child IP ranges queryset (defaults to all populated child ranges) + """ + if ip_addresses is None: + ip_addresses = prefix.get_child_ips() + if ip_ranges is None: + ip_ranges = prefix.get_child_ranges(mark_populated=True) + # Compile child objects records = [] records.extend([ - (iprange.start_address.ip, iprange) for iprange in prefix.get_child_ranges(mark_populated=True) + (iprange.start_address.ip, iprange) for iprange in ip_ranges ]) records.extend([ - (ip.address.ip, ip) for ip in prefix.get_child_ips() + (ip.address.ip, ip) for ip in ip_addresses ]) records = sorted(records, key=lambda x: x[0]) diff --git a/netbox/ipam/views.py b/netbox/ipam/views.py index 03d121820..66b5f910b 100644 --- a/netbox/ipam/views.py +++ b/netbox/ipam/views.py @@ -1,10 +1,11 @@ +import django_filters from django.contrib.contenttypes.models import ContentType -from django.core.exceptions import EmptyResultSet from django.db.models import Prefetch from django.db.models.expressions import RawSQL from django.shortcuts import get_object_or_404, redirect, render from django.urls import reverse from django.utils.translation import gettext_lazy as _ +from django_filters.constants import EMPTY_VALUES from circuits.models import Provider from dcim.filtersets import InterfaceFilterSet @@ -551,62 +552,63 @@ class AggregateView(generic.ObjectView): class ChildAvailabilityMixin: """ Mixin for ObjectChildrenView subclasses that render synthetic "available" rows - (available IP space, prefixes, or VLANs) and must suppress them when the child - queryset has been narrowed by a direct or saved filter. + (available IP space, prefixes, or VLANs) and must suppress them when the request + activates a child object filter, so objects excluded by the filter are not + misrepresented as available space. """ - @staticmethod - def _where_signature(queryset): - # Compare compiled SQL rather than str(query.where): the WHERE tree embeds default - # object reprs (memory addresses) for permission-constraint subqueries, so two - # otherwise identical querysets built via restrict() never match (#22539). - try: - return queryset.query.get_compiler(using=queryset.db).as_sql() - except EmptyResultSet: + def _get_detection_filterset(self, request): + """ + Return the bound FilterSet used to evaluate the request, or None if the view declares no + filterset. ObjectChildrenView.get() has already built one and validated its form while + resolving the child queryset, so reuse it rather than paying for a second FilterSet: + get_filters() regenerates every dynamic lookup variant and NetBoxModelFilterSet.__init__ + queries the custom fields for the model. Build one only for direct calls where get() has + not run. + """ + if self.filterset_instance is not None: + return self.filterset_instance + if self.filterset is None: return None - def _set_children_filtered(self, is_filtered): - self._child_queryset_is_filtered = is_filtered - return is_filtered + return self.filterset(request.GET, request=request) - def _queryset_is_filtered(self, request, queryset, parent): + def _has_active_child_filters(self, request): """ - Return True if the filtered child queryset differs from the unfiltered one. - - Compares WHERE clauses rather than testing queryset.query.where for truthiness, - because child querysets are already scoped to their parent object and carry WHERE - clauses before any user filter is applied. The result is cached on the view instance - so get_extra_context() can reuse it without rebuilding the queryset. + Return True if the request supplies a valid, non-empty value for any filter declared by + the view's filterset. Saved filters are expanded during filterset instantiation and + dynamic custom field filters are registered on the instance, so both are detected. + Permission constraints and parent scoping never appear in the request, so they cannot + affect the result. The result is memoized because a single request evaluates it from + both prep_table_data and get_extra_context. """ - if self.filterset is None: - return self._set_children_filtered(False) + if hasattr(self, '_active_child_filters'): + return self._active_child_filters - unfiltered = self.get_children(request, parent) + self._active_child_filters = False - return self._set_children_filtered( - self._where_signature(queryset) != self._where_signature(unfiltered) - ) + # An empty request cannot activate a filter, so skip validating a form for nothing. + if not request.GET: + return False - def _children_are_filtered(self, request, parent): - """ - Return whether child objects are filtered. + filterset = self._get_detection_filterset(request) + if filterset is None: + return False - In the normal ObjectChildrenView flow prep_table_data() runs first and caches the - result, so this returns the cached value. Fall back to rebuilding the queryset for - direct calls where prep_table_data() has not run. - """ - if hasattr(self, '_child_queryset_is_filtered'): - return self._child_queryset_is_filtered + # A non-empty cleaned value means the request activated a declared filter. Emptiness + # follows each filter's own semantics, so absent multi-value fields stay inactive. + # This is a no-op for a reused FilterSet: .qs validated the form to build the queryset. + filterset.form.is_valid() + for name, value in filterset.form.cleaned_data.items(): + if isinstance(filterset.filters[name], django_filters.MultipleChoiceFilter): + if value: # mirrors MultipleChoiceFilter.filter() + self._active_child_filters = True + break + elif value not in EMPTY_VALUES: # mirrors Filter.filter() + self._active_child_filters = True + break - if self.filterset is None: - return self._set_children_filtered(False) - - unfiltered = self.get_children(request, parent) - filtered = self.filterset(request.GET, unfiltered, request=request).qs - - return self._set_children_filtered( - self._where_signature(filtered) != self._where_signature(unfiltered) - ) + return self._active_child_filters @register_model_view(Aggregate, 'prefixes') @@ -634,7 +636,7 @@ class AggregatePrefixesView(ChildAvailabilityMixin, generic.ObjectChildrenView): show_available = bool(request.GET.get('show_available', 'true') == 'true') show_assigned = bool(request.GET.get('show_assigned', 'true') == 'true') - if self._queryset_is_filtered(request, queryset, parent): + if show_available and self._has_active_child_filters(request): show_available = False return add_requested_prefixes(parent.prefix, queryset, show_available, show_assigned) @@ -642,7 +644,7 @@ class AggregatePrefixesView(ChildAvailabilityMixin, generic.ObjectChildrenView): def get_extra_context(self, request, instance): show_available = ( bool(request.GET.get('show_available', 'true') == 'true') and - not self._children_are_filtered(request, instance) + not self._has_active_child_filters(request) ) return { @@ -864,7 +866,7 @@ class PrefixPrefixesView(ChildAvailabilityMixin, generic.ObjectChildrenView): show_available = bool(request.GET.get('show_available', 'true') == 'true') show_assigned = bool(request.GET.get('show_assigned', 'true') == 'true') - if self._queryset_is_filtered(request, queryset, parent): + if show_available and self._has_active_child_filters(request): show_available = False return add_requested_prefixes(parent.prefix, queryset, show_available, show_assigned) @@ -872,7 +874,7 @@ class PrefixPrefixesView(ChildAvailabilityMixin, generic.ObjectChildrenView): def get_extra_context(self, request, instance): show_available = ( bool(request.GET.get('show_available', 'true') == 'true') and - not self._children_are_filtered(request, instance) + not self._has_active_child_filters(request) ) return { @@ -929,8 +931,11 @@ class PrefixIPAddressesView(ChildAvailabilityMixin, generic.ObjectChildrenView): return parent.get_child_ips().restrict(request.user, 'view').prefetch_related('vrf', 'tenant', 'tenant__group') def prep_table_data(self, request, queryset, parent): - if not self._queryset_is_filtered(request, queryset, parent) and not get_table_ordering(request, self.table): - return annotate_ip_space(parent) + # Ordering is checked first: it reads request.GET directly, so a sorted request never + # builds the detection filterset. + if not get_table_ordering(request, self.table) and not self._has_active_child_filters(request): + ip_ranges = parent.get_child_ranges(mark_populated=True).restrict(request.user, 'view') + return annotate_ip_space(parent, ip_addresses=queryset, ip_ranges=ip_ranges) return super().prep_table_data(request, queryset, parent) @@ -1392,7 +1397,7 @@ class VLANGroupVLANsView(ChildAvailabilityMixin, generic.ObjectChildrenView): def prep_table_data(self, request, queryset, parent): # Skip synthetic available rows under active filters: filtered-out VLANs would otherwise look available. - if not self._queryset_is_filtered(request, queryset, parent) and not get_table_ordering(request, self.table): + if not get_table_ordering(request, self.table) and not self._has_active_child_filters(request): return add_available_vlans(queryset, parent) return super().prep_table_data(request, queryset, parent) diff --git a/netbox/netbox/views/generic/object_views.py b/netbox/netbox/views/generic/object_views.py index 9fb920c10..3e9690030 100644 --- a/netbox/netbox/views/generic/object_views.py +++ b/netbox/netbox/views/generic/object_views.py @@ -98,12 +98,14 @@ class ObjectChildrenView(ObjectView, ActionsMixin, TableMixin): table: The django-tables2 Table class used to render the child objects list filterset: A django-filter FilterSet that is applied to the queryset filterset_form: The form class used to render filter options + filterset_instance: The bound FilterSet built for the current request (set during get()) actions: An iterable of ObjectAction subclasses (see ActionsMixin) """ child_model = None table = None filterset = None filterset_form = None + filterset_instance = None actions = (CloneObject, EditObject, DeleteObject, BulkEdit, BulkDelete) template_name = 'generic/object_children.html' @@ -142,7 +144,10 @@ class ObjectChildrenView(ObjectView, ActionsMixin, TableMixin): child_objects = self.get_children(request, instance) if self.filterset: - child_objects = self.filterset(request.GET, child_objects, request=request).qs + # Retain the bound FilterSet so that prep_table_data() and get_extra_context() can + # inspect the request's validated filter data without rebuilding it. + self.filterset_instance = self.filterset(request.GET, child_objects, request=request) + child_objects = self.filterset_instance.qs # Determine the available actions actions = self.get_permitted_actions(request.user, model=self.child_model) From 6a1b4afc4382bae1864526c4926555ffd11a86fa Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 30 Jul 2026 05:53:04 +0000 Subject: [PATCH 05/35] 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 438a6d8dc..121300393 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: 2026-07-29 05:58+0000\n" +"POT-Creation-Date: 2026-07-30 05:52+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -401,7 +401,7 @@ msgstr "" #: netbox/dcim/forms/bulk_edit.py:142 netbox/dcim/forms/filtersets.py:227 #: netbox/dcim/forms/model_forms.py:144 netbox/dcim/tables/sites.py:74 #: netbox/ipam/models/asns.py:164 netbox/ipam/tables/asn.py:37 -#: netbox/ipam/tables/ip.py:126 netbox/ipam/views.py:383 +#: netbox/ipam/tables/ip.py:126 netbox/ipam/views.py:384 #: netbox/netbox/navigation/menu.py:189 netbox/netbox/navigation/menu.py:192 msgid "ASNs" msgstr "" @@ -5949,7 +5949,7 @@ msgstr "" #: netbox/dcim/forms/object_create.py:312 netbox/dcim/tables/devices.py:1160 #: netbox/ipam/tables/fhrp.py:31 netbox/ipam/ui/panels.py:185 -#: netbox/ipam/views.py:1589 netbox/templates/dcim/virtualchassis_edit.html:59 +#: netbox/ipam/views.py:1594 netbox/templates/dcim/virtualchassis_edit.html:59 #: netbox/users/views.py:375 msgid "Members" msgstr "" @@ -7782,8 +7782,8 @@ msgstr "" #: netbox/dcim/tables/devices.py:597 netbox/dcim/views.py:3402 #: netbox/ipam/forms/model_forms.py:834 netbox/ipam/tables/fhrp.py:28 -#: netbox/ipam/ui/panels.py:252 netbox/ipam/views.py:922 -#: netbox/ipam/views.py:1047 netbox/netbox/navigation/menu.py:175 +#: netbox/ipam/ui/panels.py:252 netbox/ipam/views.py:924 +#: netbox/ipam/views.py:1052 netbox/netbox/navigation/menu.py:175 #: netbox/netbox/navigation/menu.py:177 netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "" @@ -8210,7 +8210,7 @@ msgstr "" #: netbox/dcim/views.py:3414 netbox/ipam/forms/filtersets.py:469 #: netbox/ipam/models/vlans.py:308 netbox/ipam/tables/ip.py:121 -#: netbox/ipam/tables/vlans.py:52 netbox/ipam/views.py:1381 +#: netbox/ipam/tables/vlans.py:52 netbox/ipam/views.py:1386 #: netbox/netbox/navigation/menu.py:210 netbox/netbox/navigation/menu.py:212 msgid "VLANs" msgstr "" @@ -11037,11 +11037,11 @@ msgstr "" msgid "Ports" msgstr "" -#: netbox/ipam/forms/bulk_import.py:55 netbox/ipam/views.py:72 +#: netbox/ipam/forms/bulk_import.py:55 netbox/ipam/views.py:73 msgid "Import route targets" msgstr "" -#: netbox/ipam/forms/bulk_import.py:61 netbox/ipam/views.py:75 +#: netbox/ipam/forms/bulk_import.py:61 netbox/ipam/views.py:76 msgid "Export route targets" msgstr "" @@ -11852,8 +11852,8 @@ msgid "Added" msgstr "" #: netbox/ipam/tables/ip.py:76 netbox/ipam/tables/ip.py:111 -#: netbox/ipam/tables/vlans.py:125 netbox/ipam/views.py:621 -#: netbox/ipam/views.py:1731 netbox/netbox/navigation/menu.py:182 +#: netbox/ipam/tables/vlans.py:125 netbox/ipam/views.py:623 +#: netbox/ipam/views.py:1736 netbox/netbox/navigation/menu.py:182 #: netbox/netbox/navigation/menu.py:184 msgid "Prefixes" msgstr "" @@ -12054,76 +12054,76 @@ msgid "" "are allowed in DNS names" msgstr "" -#: netbox/ipam/views.py:106 netbox/ipam/views.py:1761 +#: netbox/ipam/views.py:107 netbox/ipam/views.py:1766 msgid "Device Interfaces" msgstr "" -#: netbox/ipam/views.py:111 netbox/ipam/views.py:1779 +#: netbox/ipam/views.py:112 netbox/ipam/views.py:1784 msgid "VM Interfaces" msgstr "" -#: netbox/ipam/views.py:196 +#: netbox/ipam/views.py:197 msgid "Importing VRFs" msgstr "" -#: netbox/ipam/views.py:203 +#: netbox/ipam/views.py:204 msgid "Exporting VRFs" msgstr "" -#: netbox/ipam/views.py:212 +#: netbox/ipam/views.py:213 msgid "Importing L2VPNs" msgstr "" -#: netbox/ipam/views.py:219 +#: netbox/ipam/views.py:220 msgid "Exporting L2VPNs" msgstr "" -#: netbox/ipam/views.py:798 +#: netbox/ipam/views.py:800 msgid "Duplicate prefixes" msgstr "" -#: netbox/ipam/views.py:799 netbox/ipam/views.py:1012 netbox/ipam/views.py:1120 +#: netbox/ipam/views.py:801 netbox/ipam/views.py:1017 netbox/ipam/views.py:1125 msgid "Parent prefixes" msgstr "" -#: netbox/ipam/views.py:851 +#: netbox/ipam/views.py:853 msgid "Child Prefixes" msgstr "" -#: netbox/ipam/views.py:895 +#: netbox/ipam/views.py:897 msgid "Child Ranges" msgstr "" -#: netbox/ipam/views.py:1121 +#: netbox/ipam/views.py:1126 msgid "Duplicate IPs" msgstr "" -#: netbox/ipam/views.py:1125 +#: netbox/ipam/views.py:1130 msgid "Application services" msgstr "" -#: netbox/ipam/views.py:1291 +#: netbox/ipam/views.py:1296 msgid "Related IPs" msgstr "" -#: netbox/ipam/views.py:1432 +#: netbox/ipam/views.py:1437 msgid "VLAN translation rules" msgstr "" -#: netbox/ipam/views.py:1438 +#: netbox/ipam/views.py:1443 msgid "Add Rule" msgstr "" -#: netbox/ipam/views.py:1580 +#: netbox/ipam/views.py:1585 msgid "Virtual IP addresses" msgstr "" -#: netbox/ipam/views.py:1585 netbox/templates/ipam/iprange/ip_addresses.html:8 +#: netbox/ipam/views.py:1590 netbox/templates/ipam/iprange/ip_addresses.html:8 #: netbox/templates/ipam/prefix/ip_addresses.html:7 msgid "Add IP Address" msgstr "" -#: netbox/ipam/views.py:1744 +#: netbox/ipam/views.py:1749 msgid "Add a Prefix" msgstr "" @@ -13496,7 +13496,7 @@ msgstr "" msgid "Synced {count} {object_type}" msgstr "" -#: netbox/netbox/views/generic/object_views.py:118 +#: netbox/netbox/views/generic/object_views.py:120 #, python-brace-format msgid "{class_name} must implement get_children()" msgstr "" From a1df1b99b0ce2dc40e076b9f03a059b44d426c15 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 30 Jul 2026 10:47:57 -0400 Subject: [PATCH 06/35] Fixes #22813: Fix extraneous database queries when fetching custom field data via GraphQL API --- netbox/extras/graphql/mixins.py | 2 +- netbox/netbox/tests/test_graphql.py | 105 +++++++++++++++++++++++++++- 2 files changed, 105 insertions(+), 2 deletions(-) diff --git a/netbox/extras/graphql/mixins.py b/netbox/extras/graphql/mixins.py index 60890709c..7a9f81ff9 100644 --- a/netbox/extras/graphql/mixins.py +++ b/netbox/extras/graphql/mixins.py @@ -45,7 +45,7 @@ class ConfigContextMixin: @strawberry.type class CustomFieldsMixin: - @strawberry_django.field + @strawberry_django.field(only=['custom_field_data']) def custom_fields(self) -> strawberry.scalars.JSON: return self.custom_field_data diff --git a/netbox/netbox/tests/test_graphql.py b/netbox/netbox/tests/test_graphql.py index 472ac43cf..7f7e1d070 100644 --- a/netbox/netbox/tests/test_graphql.py +++ b/netbox/netbox/tests/test_graphql.py @@ -7,10 +7,12 @@ from django.db import connection from django.test import override_settings from django.test.utils import CaptureQueriesContext from django.urls import reverse +from django.utils import timezone from rest_framework import status from strawberry.extensions import QueryDepthLimiter from strawberry.schema.config import StrawberryConfig +from core.models import ObjectType from dcim.choices import LocationStatusChoices from dcim.models import ( Device, @@ -23,9 +25,11 @@ from dcim.models import ( Site, VirtualChassis, ) -from extras.models import TableConfig, Tag +from extras.choices import CustomFieldTypeChoices +from extras.models import CustomField, TableConfig, Tag from netbox.graphql.scalars import BigInt, BigIntScalar from netbox.graphql.schema import Query, get_schema_extensions, schema +from users.models import Token from utilities.tables import get_table_for_model from utilities.testing import APITestCase, APIViewTestCases, TestCase, disable_warnings @@ -638,6 +642,105 @@ class GraphQLAPITestCase(APITestCase): self.assertEqual(data['errors'][0]['message'], 'Cannot specify both `start` and `offset` in pagination.') +class GraphQLDeferredColumnTestCase(APITestCase): + """ + A GraphQL field backed by a custom resolver is opaque to the query optimizer, which narrows column + selection with .only() based on the fields named in the GraphQL document. Any column such a resolver + reads must therefore be declared via an `only` hint; otherwise the column is deferred and reading it + reloads the row from the database once per object returned (see #22813). + + Each test below asserts both that no single-row reload occurs and that the total query count does not + grow with the number of objects returned. + """ + OBJECT_COUNT = 10 + + @classmethod + def setUpTestData(cls): + site = Site.objects.create(name='Site 1', slug='site-1') + + # Devices, for CustomFieldsMixin.custom_fields + manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1') + device_type = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1') + device_role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') + custom_field = CustomField.objects.create(name='cf1', type=CustomFieldTypeChoices.TYPE_TEXT) + custom_field.object_types.set([ObjectType.objects.get_for_model(Device)]) + Device.objects.bulk_create([ + Device( + name=f'Device {i}', + device_type=device_type, + role=device_role, + site=site, + custom_field_data={'cf1': f'value {i}'}, + ) + for i in range(cls.OBJECT_COUNT) + ]) + + def _execute(self, query): + url = reverse('graphql') + with CaptureQueriesContext(connection) as context: + response = self.client.post(url, data={'query': query}, format='json', **self.header) + self.assertHttpStatus(response, status.HTTP_200_OK) + data = json.loads(response.content) + self.assertNotIn('errors', data) + return data['data'], context.captured_queries + + def assertNoDeferredColumnReloads(self, query_template, list_field, table, validate): + """ + Execute `query_template` (which must accept a `limit` interpolation) for a single object and for + OBJECT_COUNT objects, asserting that no row of `table` is re-fetched by primary key and that the + total query count is identical for both. `validate` is called with the returned objects. + """ + # Token authentication updates Token.last_used at most once per minute, so the first API request + # made by a test issues an additional UPDATE (see netbox/api/authentication.py). Stamp the token + # up front to keep that one-off write out of the counts compared below. + Token.objects.filter(pk=self.token.pk).update(last_used=timezone.now()) + + query_counts = [] + for limit in (1, self.OBJECT_COUNT): + data, queries = self._execute(query_template % {'limit': limit}) + objects = data[list_field] + self.assertEqual(len(objects), limit) + validate(objects) + + reloads = [q['sql'] for q in queries if f'FROM "{table}" WHERE "{table}"."id" = ' in q['sql']] + self.assertEqual( + reloads, [], msg=f'{len(reloads)} deferred-column reload(s) for {limit} object(s): {reloads[:1]}' + ) + query_counts.append(len(queries)) + + self.assertEqual( + query_counts[0], + query_counts[1], + msg=( + f'Query count grew from {query_counts[0]} to {query_counts[1]} when the number of objects ' + f'returned grew from 1 to {self.OBJECT_COUNT}' + ) + ) + + def test_custom_fields(self): + """ + Regression test for #22813: CustomFieldsMixin.custom_fields must not defer `custom_field_data`. + """ + self.add_permissions('dcim.view_device') + query = """ + { + device_list(pagination: {limit: %(limit)s}) { + id + custom_fields + } + } + """ + + expected_values = {f'value {i}' for i in range(self.OBJECT_COUNT)} + + def validate(devices): + for device in devices: + self.assertEqual(list(device['custom_fields']), ['cf1']) + self.assertIn(device['custom_fields']['cf1'], expected_values) + + self.assertNoDeferredColumnReloads(query, 'device_list', 'dcim_device', validate) + + class GraphQLSchemaCoverageTestCase(APIViewTestCases.GraphQLSchemaCoverageTestCase): pass From d3735f2db509cd807c262df34b496d621f267212 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 30 Jul 2026 11:30:07 -0400 Subject: [PATCH 07/35] Closes #22822: Avoid extra DB query when fetching rack reservation units via GraphQL API --- netbox/dcim/graphql/types.py | 6 +++- netbox/netbox/tests/test_graphql.py | 44 ++++++++++++++++++++++++++++- 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/netbox/dcim/graphql/types.py b/netbox/dcim/graphql/types.py index 50aa4cb22..7f3d01bcc 100644 --- a/netbox/dcim/graphql/types.py +++ b/netbox/dcim/graphql/types.py @@ -828,11 +828,15 @@ class RackReservationType(PrimaryObjectType): @classmethod def get_queryset(cls, queryset, info, **kwargs): queryset = super().get_queryset(queryset, info, **kwargs) + # Annotate unit_count here so RackReservationFilter.unit_count can reference it. The field below + # is resolved from `units` rather than from this annotation, which is not applied on every path + # by which a RackReservation may be resolved. return queryset.annotate( unit_count=Func('units', function='CARDINALITY', output_field=IntegerField()) ) - @strawberry.field + # Ensure `units` is fetched when `unit_count` is requested + @strawberry_django.field(only=['units']) def unit_count(self) -> int: return len(self.units) diff --git a/netbox/netbox/tests/test_graphql.py b/netbox/netbox/tests/test_graphql.py index 7f7e1d070..a0641798d 100644 --- a/netbox/netbox/tests/test_graphql.py +++ b/netbox/netbox/tests/test_graphql.py @@ -29,7 +29,7 @@ from extras.choices import CustomFieldTypeChoices from extras.models import CustomField, TableConfig, Tag from netbox.graphql.scalars import BigInt, BigIntScalar from netbox.graphql.schema import Query, get_schema_extensions, schema -from users.models import Token +from users.models import Token, User from utilities.tables import get_table_for_model from utilities.testing import APITestCase, APIViewTestCases, TestCase, disable_warnings @@ -675,6 +675,26 @@ class GraphQLDeferredColumnTestCase(APITestCase): for i in range(cls.OBJECT_COUNT) ]) + # Rack reservations, for RackReservationType.unit_count. Reservations within a rack may not claim + # overlapping units, so each is allocated a distinct run of them. The length of each run varies so + # that unit_count is asserted per object rather than against a single expected value. + rack = Rack.objects.create(name='Rack 1', site=site) + user = User.objects.create(username='Reservation user') + reservations, next_unit = [], 1 + for i in range(cls.OBJECT_COUNT): + unit_count = i % 3 + 1 + reservations.append(RackReservation( + rack=rack, + units=list(range(next_unit, next_unit + unit_count)), + user=user, + description=f'Reservation {i}', + )) + next_unit += unit_count + cls.expected_unit_counts = { + reservation.pk: len(reservation.units) + for reservation in RackReservation.objects.bulk_create(reservations) + } + def _execute(self, query): url = reverse('graphql') with CaptureQueriesContext(connection) as context: @@ -740,6 +760,28 @@ class GraphQLDeferredColumnTestCase(APITestCase): self.assertNoDeferredColumnReloads(query, 'device_list', 'dcim_device', validate) + def test_rack_reservation_unit_count(self): + """ + Regression test for #22822: RackReservationType.unit_count must not defer `units`. + """ + self.add_permissions('dcim.view_rackreservation') + query = """ + { + rack_reservation_list(pagination: {limit: %(limit)s}) { + id + unit_count + } + } + """ + + def validate(reservations): + for reservation in reservations: + self.assertEqual( + reservation['unit_count'], self.expected_unit_counts[int(reservation['id'])] + ) + + self.assertNoDeferredColumnReloads(query, 'rack_reservation_list', 'dcim_rackreservation', validate) + class GraphQLSchemaCoverageTestCase(APIViewTestCases.GraphQLSchemaCoverageTestCase): pass From aefe938c63d4d9f874be6065f92f886210840d04 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 30 Jul 2026 11:42:49 -0400 Subject: [PATCH 08/35] Closes #22823: Avoid extraneous DB queries when fetching IP/prefix family via GraphQL API --- netbox/ipam/graphql/types.py | 41 +++++++++++-------- netbox/netbox/tests/test_graphql.py | 63 +++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 17 deletions(-) diff --git a/netbox/ipam/graphql/types.py b/netbox/ipam/graphql/types.py index f17c9c72e..b684022da 100644 --- a/netbox/ipam/graphql/types.py +++ b/netbox/ipam/graphql/types.py @@ -51,23 +51,16 @@ __all__ = ( @strawberry.type class IPAddressFamilyType: + """ + The address family (4 or 6) of a model's IP address or prefix column. Each type exposing this + declares its own `family` resolver, hinted with the column backing it so that the query optimizer + does not defer that column. `value` is non-null because those columns are: the models' `family` + properties return None only for an unsaved instance with no address assigned. + """ value: int label: str -@strawberry.type -class BaseIPAddressFamilyType: - """ - Base type for models that need to expose their IPAddress family type. - """ - - @strawberry.field - def family(self) -> IPAddressFamilyType: - # Note that self, is an instance of models.IPAddress - # thus resolves to the address family value. - return IPAddressFamilyType(value=self.family, label=f'IPv{self.family}') - - @strawberry_django.type( models.ASN, fields='__all__', @@ -103,11 +96,16 @@ class ASNRangeType(OrganizationalObjectType): filters=AggregateFilter, pagination=True ) -class AggregateType(ContactsMixin, BaseIPAddressFamilyType, PrimaryObjectType): +class AggregateType(ContactsMixin, PrimaryObjectType): prefix: str rir: Annotated["RIRType", strawberry.lazy('ipam.graphql.types')] | None tenant: Annotated["TenantType", strawberry.lazy('tenancy.graphql.types')] | None + # Note that self is the Django model instance, so self.family resolves to the model's family property + @strawberry_django.field(only=['prefix']) + def family(self) -> IPAddressFamilyType: + return IPAddressFamilyType(value=self.family, label=f'IPv{self.family}') + @strawberry_django.type( models.FHRPGroup, @@ -143,16 +141,20 @@ class FHRPGroupAssignmentType(BaseObjectType): filters=IPAddressFilter, pagination=True ) -class IPAddressType(ContactsMixin, BaseIPAddressFamilyType, PrimaryObjectType): +class IPAddressType(ContactsMixin, PrimaryObjectType): address: str vrf: Annotated['VRFType', strawberry.lazy('ipam.graphql.types')] | None tenant: Annotated['TenantType', strawberry.lazy('tenancy.graphql.types')] | None nat_inside: Annotated['IPAddressType', strawberry.lazy('ipam.graphql.types')] | None - nat_outside: list[Annotated['IPAddressType', strawberry.lazy('ipam.graphql.types')]] tunnel_terminations: list[Annotated['TunnelTerminationType', strawberry.lazy('vpn.graphql.types')]] services: list[Annotated['ServiceType', strawberry.lazy('ipam.graphql.types')]] + # Note that self is the Django model instance, so self.family resolves to the model's family property + @strawberry_django.field(only=['address']) + def family(self) -> IPAddressFamilyType: + return IPAddressFamilyType(value=self.family, label=f'IPv{self.family}') + @strawberry_django.field(prefetch_related='assigned_object') def assigned_object(self) -> Annotated[ Annotated['InterfaceType', strawberry.lazy('dcim.graphql.types')] @@ -183,13 +185,18 @@ class IPRangeType(ContactsMixin, PrimaryObjectType): filters=PrefixFilter, pagination=True ) -class PrefixType(ContactsMixin, BaseIPAddressFamilyType, PrimaryObjectType): +class PrefixType(ContactsMixin, PrimaryObjectType): prefix: str vrf: Annotated['VRFType', strawberry.lazy('ipam.graphql.types')] | None tenant: Annotated['TenantType', strawberry.lazy('tenancy.graphql.types')] | None vlan: Annotated['VLANType', strawberry.lazy('ipam.graphql.types')] | None role: Annotated['RoleType', strawberry.lazy('ipam.graphql.types')] | None + # Note that self is the Django model instance, so self.family resolves to the model's family property + @strawberry_django.field(only=['prefix']) + def family(self) -> IPAddressFamilyType: + return IPAddressFamilyType(value=self.family, label=f'IPv{self.family}') + @strawberry_django.field(prefetch_related='scope') def scope(self) -> Annotated[ Annotated['LocationType', strawberry.lazy('dcim.graphql.types')] diff --git a/netbox/netbox/tests/test_graphql.py b/netbox/netbox/tests/test_graphql.py index a0641798d..5fe5b8468 100644 --- a/netbox/netbox/tests/test_graphql.py +++ b/netbox/netbox/tests/test_graphql.py @@ -27,6 +27,7 @@ from dcim.models import ( ) from extras.choices import CustomFieldTypeChoices from extras.models import CustomField, TableConfig, Tag +from ipam.models import RIR, Aggregate, IPAddress, Prefix from netbox.graphql.scalars import BigInt, BigIntScalar from netbox.graphql.schema import Query, get_schema_extensions, schema from users.models import Token, User @@ -694,6 +695,17 @@ class GraphQLDeferredColumnTestCase(APITestCase): reservation.pk: len(reservation.units) for reservation in RackReservation.objects.bulk_create(reservations) } + # IPAM objects, for the `family` field of each type which exposes one + IPAddress.objects.bulk_create([ + IPAddress(address=f'10.0.0.{i + 1}/24') for i in range(cls.OBJECT_COUNT) + ]) + Prefix.objects.bulk_create([ + Prefix(prefix=f'10.{i}.0.0/16') for i in range(cls.OBJECT_COUNT) + ]) + rir = RIR.objects.create(name='RIR 1', slug='rir-1') + Aggregate.objects.bulk_create([ + Aggregate(prefix=f'{i + 20}.0.0.0/8', rir=rir) for i in range(cls.OBJECT_COUNT) + ]) def _execute(self, query): url = reverse('graphql') @@ -782,6 +794,57 @@ class GraphQLDeferredColumnTestCase(APITestCase): self.assertNoDeferredColumnReloads(query, 'rack_reservation_list', 'dcim_rackreservation', validate) + def test_ip_address_family(self): + """ + Regression test for #22823: IPAddressType.family must not defer `address`. + """ + self.add_permissions('ipam.view_ipaddress') + query = """ + { + ip_address_list(pagination: {limit: %(limit)s}) { + id + family { value label } + } + } + """ + self.assertNoDeferredColumnReloads( + query, 'ip_address_list', 'ipam_ipaddress', self._validate_ipv4_family + ) + + def test_prefix_family(self): + """ + Regression test for #22823: PrefixType.family must not defer `prefix`. + """ + self.add_permissions('ipam.view_prefix') + query = """ + { + prefix_list(pagination: {limit: %(limit)s}) { + id + family { value label } + } + } + """ + self.assertNoDeferredColumnReloads(query, 'prefix_list', 'ipam_prefix', self._validate_ipv4_family) + + def test_aggregate_family(self): + """ + Regression test for #22823: AggregateType.family must not defer `prefix`. + """ + self.add_permissions('ipam.view_aggregate') + query = """ + { + aggregate_list(pagination: {limit: %(limit)s}) { + id + family { value label } + } + } + """ + self.assertNoDeferredColumnReloads(query, 'aggregate_list', 'ipam_aggregate', self._validate_ipv4_family) + + def _validate_ipv4_family(self, objects): + for obj in objects: + self.assertEqual(obj['family'], {'value': 4, 'label': 'IPv4'}) + class GraphQLSchemaCoverageTestCase(APIViewTestCases.GraphQLSchemaCoverageTestCase): pass From 1f3aac25db3dd314075b1243e549e6158ad6c56c Mon Sep 17 00:00:00 2001 From: Jason Novinger Date: Thu, 30 Jul 2026 15:22:11 -0500 Subject: [PATCH 09/35] Closes #22810: Skip cached scope rebuild when scope fields are unchanged (#22811) --- netbox/dcim/signals.py | 140 +++++++++--- netbox/dcim/tests/test_signals.py | 347 +++++++++++++++++++++++++++++- 2 files changed, 461 insertions(+), 26 deletions(-) diff --git a/netbox/dcim/signals.py b/netbox/dcim/signals.py index ca0f12512..132bb0e84 100644 --- a/netbox/dcim/signals.py +++ b/netbox/dcim/signals.py @@ -1,7 +1,9 @@ import logging -from django.db.models import Q -from django.db.models.signals import post_delete, post_save +from django.contrib.contenttypes.models import ContentType +from django.db import transaction +from django.db.models import F, Q +from django.db.models.signals import post_delete, post_save, pre_save from django.dispatch import receiver from dcim.choices import CableEndChoices, LinkStatusChoices @@ -55,15 +57,51 @@ COMPONENT_MODELS = ( # Location/rack/device assignment # +@receiver(pre_save, sender=Location) +@receiver(pre_save, sender=Site) +def cache_presave_scope_fields(instance, raw=False, using=None, **kwargs): + """ + Stash the scope-relevant field values currently in the database so that the post_save + handlers below can determine whether this save actually changed any of them. The read + locks the row, so overlapping saves of the same object serialize here and the + comparison always runs against the final committed state. + + Outside of a transaction no stash is taken (and any stash left by a previous + transactional save of the same instance is cleared): in autocommit, this read and the + subsequent UPDATE would run in separate transactions, so the comparison could race a + concurrent save. The post_save handlers treat a missing stash as "the values may have + changed" and rebuild or repair unconditionally. + """ + if raw or instance.pk is None: + return + if not transaction.get_connection(using).in_atomic_block: + instance._presave_scope_fields = None + return + fields = ('region_id', 'group_id') if isinstance(instance, Site) else ('site_id',) + instance._presave_scope_fields = ( + instance.__class__.objects.using(using) + .filter(pk=instance.pk) + # no_key: serializes overlapping saves of this object without blocking foreign + # key inserts that reference it + .select_for_update(no_key=True) + .values(*fields) + .first() + ) + + @receiver(post_save, sender=Location) def handle_location_site_change(instance, created, **kwargs): """ - Update child objects if Site assignment has changed. We intentionally recurse through each child - object instead of calling update() on the QuerySet to ensure the proper change records get created for each. + Update child objects when a Location is saved. All updates are queryset update() calls, + which fire no signals and generate no change records for the affected objects. """ - if not created: + if created: + return + with transaction.atomic(savepoint=False): instance.get_descendants().update(site=instance.site) - locations = instance.get_descendants(include_self=True).values_list('pk', flat=True) + # Materialized once so every statement below sees the same membership, even if a + # concurrent commit renumbers the tree mid-handler. + locations = list(instance.get_descendants(include_self=True).values_list('pk', flat=True)) Rack.objects.filter(location__in=locations).update(site=instance.site) Device.objects.filter(location__in=locations).update(site=instance.site) PowerPanel.objects.filter(location__in=locations).update(site=instance.site) @@ -72,6 +110,36 @@ def handle_location_site_change(instance, created, **kwargs): for model in COMPONENT_MODELS: model.objects.filter(device__location__in=locations).update(_site=instance.site) + # Objects scoped to descendant Locations receive no post_save of their own from the + # queryset updates above, so their cached scope fields are updated here whenever the + # Site assignment has actually changed. (Objects scoped to this Location itself are + # recomputed by sync_cached_scope_fields on this same save.) Values are read fresh + # from the database rather than taken from the saved instance, whose cached site + # relation may be stale. + prev = getattr(instance, '_presave_scope_fields', None) + if prev is None or prev['site_id'] != instance.site_id: + # Lock the destination Site (without blocking FK inserts that reference it) so + # a concurrent scope change on that Site serializes against this move; an + # unlocked read could stamp region/group values from before that change. + site = ( + Site.objects.filter(pk=instance.site_id) + .select_for_update(no_key=True) + .values('region_id', 'group_id') + .first() + ) + if site is not None: + # Select rows through the authoritative scope rather than the cached + # _location, which may itself be stale; scope_id doubles as the correct + # _location value for Location-scoped rows. + location_ct = ContentType.objects.get_for_model(Location) + for model in (Prefix, Cluster, WirelessLAN): + model.objects.filter(scope_type=location_ct, scope_id__in=locations).update( + _location_id=F('scope_id'), + _site_id=instance.site_id, + _region_id=site['region_id'], + _site_group_id=site['group_id'], + ) + @receiver(post_save, sender=Rack) def handle_rack_site_change(instance, created, **kwargs): @@ -242,11 +310,13 @@ def update_mac_address_interface(instance, created, raw, **kwargs): def sync_cached_scope_fields(instance, created, **kwargs): """ Rebuild cached scope fields for all CachedScopeMixin-based models - affected by a change in a Region, SiteGroup, Site, or Location. + affected by a change to a Site or Location. - This method is safe to run for objects created in the past and does - not rely on incremental updates. Cached fields are recomputed from - authoritative relationships. + When the values read from the database immediately before this save + show that no scope-relevant field has changed, the rebuild is + skipped. Otherwise, cached fields are recomputed from each object's + authoritative scope relationships — never copied from the saved + instance — so rows holding stale cached values are also repaired. """ if created: return @@ -258,21 +328,41 @@ def sync_cached_scope_fields(instance, created, **kwargs): else: return + # Skip the rebuild when this save changed no scope-relevant field. The pre-save values + # are read from the database by cache_presave_scope_fields() immediately before the + # write, with the row locked, so the comparison holds even when overlapping saves race + # on the same object. The stash exists only for saves made inside a transaction; when + # it's absent (autocommit saves), rebuild unconditionally. + prev = getattr(instance, '_presave_scope_fields', None) + if prev is not None: + if isinstance(instance, Site): + if prev['region_id'] == instance.region_id and prev['group_id'] == instance.group_id: + return + # The dispatch above ensures the instance can only be a Location here + elif prev['site_id'] == instance.site_id: + return + # These models are explicitly listed because they all subclass CachedScopeMixin # and therefore require their cached scope fields to be recomputed. - for model in (Prefix, Cluster, WirelessLAN): - qs = model.objects.filter(**filters) + with transaction.atomic(savepoint=False): + for model in (Prefix, Cluster, WirelessLAN): + qs = model.objects.filter(**filters) - # Bulk update cached fields to avoid O(N) performance issues with large datasets. - # This does not trigger post_save signals, avoiding spurious change log entries. - objects_to_update = [] - for obj in qs: - # Recompute cache using the same logic as save() - obj.cache_related_objects() - objects_to_update.append(obj) - - if objects_to_update: - model.objects.bulk_update( - objects_to_update, - ['_location', '_site', '_site_group', '_region'] - ) + # Recompute the cached fields once per distinct scope, then apply each result with a + # single UPDATE. This avoids loading every object into memory as well as the per-row + # CASE WHEN statement generated by bulk_update(), and does not trigger post_save + # signals, avoiding spurious change log entries. Ordering explicitly by the selected + # columns orders the scope groups and keeps the models' default ordering out of the + # DISTINCT (which would defeat the grouping); within each UPDATE, row lock order is + # plan-dependent, as it was with bulk_update(). The atomic block keeps the rebuild + # all-or-nothing outside a request transaction. + scopes = qs.values_list('scope_type_id', 'scope_id').order_by('scope_type_id', 'scope_id').distinct() + for scope_type_id, scope_id in scopes: + ref = model(scope_type_id=scope_type_id, scope_id=scope_id) + ref.cache_related_objects() + qs.filter(scope_type_id=scope_type_id, scope_id=scope_id).update( + _location=ref._location, + _site=ref._site, + _site_group=ref._site_group, + _region=ref._region, + ) diff --git a/netbox/dcim/tests/test_signals.py b/netbox/dcim/tests/test_signals.py index 119b23ecf..586511752 100644 --- a/netbox/dcim/tests/test_signals.py +++ b/netbox/dcim/tests/test_signals.py @@ -2,7 +2,9 @@ from types import SimpleNamespace from unittest.mock import MagicMock, patch from django.contrib.contenttypes.models import ContentType -from django.test import SimpleTestCase, TestCase +from django.db import connection, transaction +from django.test import SimpleTestCase, TestCase, TransactionTestCase +from django.test.utils import CaptureQueriesContext from dcim import signals from dcim.choices import CableEndChoices, CableProfileChoices, LinkStatusChoices @@ -21,6 +23,7 @@ from dcim.models import ( PowerPanel, Rack, RearPort, + Region, Site, SiteGroup, VirtualChassis, @@ -485,6 +488,348 @@ class SyncCachedScopeFieldsSignalTestCase(TestCase): # Should not raise — newly-created sites have nothing to sync. Site.objects.create(name='New Site', slug='new-site') + def test_save_with_unchanged_scope_fields_skips_resync(self): + group = SiteGroup.objects.create(name='Group', slug='group') + site = Site.objects.create(name='Site', slug='site', group=group) + location = Location.objects.create(name='Loc', slug='loc', site=site) + prefix = Prefix.objects.create(prefix='10.0.0.0/24', scope=site) + self.assertIsNone(prefix._location) + + # Poison a cached column via a signal-less update; a skipped resync must leave it as-is. + # _location is poisoned (rather than _region/_site_group) because the denormalized-field + # registry (netbox.denormalized) unconditionally rewrites those two on every Site save, + # which would mask whether this signal ran. + Prefix.objects.filter(pk=prefix.pk).update(_location=location) + + site.description = 'updated' + site.save() + + prefix.refresh_from_db() + self.assertEqual(prefix._location, location) + + def test_location_save_with_unchanged_site_skips_resync(self): + region = Region.objects.create(name='Region', slug='region') + site = Site.objects.create(name='Site', slug='site') + location = Location.objects.create(name='Loc', slug='loc', site=site) + prefix = Prefix.objects.create(prefix='10.0.0.0/24', scope=location) + self.assertIsNone(prefix._region) + + # Poison a cached column via a signal-less update; a skipped resync must leave it as-is. + # _region is poisoned because the denormalized-field registry unconditionally rewrites + # _site on every Location save, which would mask whether this signal ran. + Prefix.objects.filter(pk=prefix.pk).update(_region=region) + + location.description = 'updated' + location.save() + + prefix.refresh_from_db() + self.assertEqual(prefix._region, region) + + def test_save_with_changed_site_group_resyncs(self): + group_a = SiteGroup.objects.create(name='Group A', slug='group-a') + group_b = SiteGroup.objects.create(name='Group B', slug='group-b') + site = Site.objects.create(name='Site', slug='site', group=group_a) + prefix = Prefix.objects.create(prefix='10.0.0.0/24', scope=site) + self.assertEqual(prefix._site_group, group_a) + + site.group = group_b + site.save() + + prefix.refresh_from_db() + self.assertEqual(prefix._site, site) + self.assertEqual(prefix._site_group, group_b) + self.assertIsNone(prefix._region) + self.assertIsNone(prefix._location) + + def test_save_with_changed_region_resyncs(self): + region_a = Region.objects.create(name='Region A', slug='region-a') + region_b = Region.objects.create(name='Region B', slug='region-b') + site = Site.objects.create(name='Site', slug='site', region=region_a) + prefix = Prefix.objects.create(prefix='10.0.0.0/24', scope=site) + self.assertEqual(prefix._region, region_a) + + site.region = region_b + site.save() + + prefix.refresh_from_db() + self.assertEqual(prefix._region, region_b) + self.assertEqual(prefix._site, site) + + # A region-to-None transition must also resync. + site.region = None + site.save() + + prefix.refresh_from_db() + self.assertIsNone(prefix._region) + self.assertEqual(prefix._site, site) + + def test_location_save_with_changed_site_resyncs(self): + site_a = Site.objects.create(name='Site A', slug='site-a') + site_b = Site.objects.create(name='Site B', slug='site-b') + location = Location.objects.create(name='Loc', slug='loc', site=site_a) + prefix = Prefix.objects.create(prefix='10.0.0.0/24', scope=location) + self.assertEqual(prefix._site, site_a) + + location.site = site_b + location.save() + + prefix.refresh_from_db() + self.assertEqual(prefix._site, site_b) + self.assertEqual(prefix._location, location) + + def test_noop_save_skips_resync(self): + site = Site.objects.create(name='Site', slug='site') + location = Location.objects.create(name='Loc', slug='loc', site=site) + prefix = Prefix.objects.create(prefix='10.0.0.0/24', scope=site) + + # Poison a cached column, then save the Site with no field changes. The resync is + # skipped: the pre-save values read from the database match what is being written. + # Stale cached values are prevented at their source (handle_location_site_change + # repairs descendant-scoped objects), so a no-op save no longer doubles as a + # repair mechanism. _location is poisoned because only this signal (not the + # denormalized-field registry) could repair it on a Site save. + Prefix.objects.filter(pk=prefix.pk).update(_location=location) + + site.save() + + prefix.refresh_from_db() + self.assertEqual(prefix._location, location) + + def test_location_site_change_updates_descendant_scoped_caches(self): + group_a = SiteGroup.objects.create(name='Group A', slug='group-a') + group_b = SiteGroup.objects.create(name='Group B', slug='group-b') + site_a = Site.objects.create(name='Site A', slug='site-a', group=group_a) + site_b = Site.objects.create(name='Site B', slug='site-b', group=group_b) + parent = Location.objects.create(name='Parent', slug='parent', site=site_a) + child = Location.objects.create(name='Child', slug='child', site=site_a, parent=parent) + prefix = Prefix.objects.create(prefix='10.0.0.0/24', scope=child) + cluster_type = ClusterType.objects.create(name='CT', slug='ct') + cluster = Cluster.objects.create(name='Cluster', type=cluster_type, scope=child) + self.assertEqual(prefix._site, site_a) + self.assertEqual(cluster._site, site_a) + + # Moving the parent Location drags the child along via a signal-less queryset + # update, so no post_save fires for the child. The cached scope fields of objects + # scoped to descendant locations must be updated in the same handler. + parent.site = site_b + parent.save() + + child.refresh_from_db() + self.assertEqual(child.site, site_b) + prefix.refresh_from_db() + self.assertEqual(prefix._site, site_b) + self.assertEqual(prefix._site_group, group_b) + self.assertEqual(prefix._location, child) + cluster.refresh_from_db() + self.assertEqual(cluster._site, site_b) + self.assertEqual(cluster._site_group, group_b) + + def test_location_site_change_repairs_descendant_row_with_poisoned_location_cache(self): + site_a = Site.objects.create(name='Site A', slug='site-a') + site_b = Site.objects.create(name='Site B', slug='site-b') + parent = Location.objects.create(name='Parent', slug='parent', site=site_a) + child = Location.objects.create(name='Child', slug='child', site=site_a, parent=parent) + other = Location.objects.create(name='Other', slug='other', site=site_a) + prefix = Prefix.objects.create(prefix='10.0.0.0/24', scope=child) + + # Poison the cached _location to point outside the subtree. The repair must select + # rows through the authoritative scope (scope_type/scope_id), not the cached + # column, or this descendant-scoped row is missed — and it must repair _location + # itself, or the row stays invisible to future saves of its real location. + Prefix.objects.filter(pk=prefix.pk).update(_location=other) + + # Re-fetch: creating further Locations renumbers the MPTT tree, and the in-memory + # instance's stale bounds would otherwise select the wrong subtree (a pre-existing + # handler hazard, tracked separately). + parent = Location.objects.get(pk=parent.pk) + parent.site = site_b + parent.save() + + prefix.refresh_from_db() + self.assertEqual(prefix._site, site_b) + self.assertEqual(prefix._location, child) + + def test_location_site_change_ignores_foreign_row_with_poisoned_location_cache(self): + site_a = Site.objects.create(name='Site A', slug='site-a') + site_b = Site.objects.create(name='Site B', slug='site-b') + site_c = Site.objects.create(name='Site C', slug='site-c') + parent = Location.objects.create(name='Parent', slug='parent', site=site_a) + child = Location.objects.create(name='Child', slug='child', site=site_a, parent=parent) + elsewhere = Location.objects.create(name='Elsewhere', slug='elsewhere', site=site_c) + prefix = Prefix.objects.create(prefix='10.0.0.0/24', scope=elsewhere) + + # Poison the cached _location to point INTO the subtree being moved. A repair that + # selects rows through the cached column would wrongly stamp this unrelated object + # with the destination site. + Prefix.objects.filter(pk=prefix.pk).update(_location=child) + + # Re-fetch to avoid stale in-memory MPTT bounds (see the sibling test). + parent = Location.objects.get(pk=parent.pk) + parent.site = site_b + parent.save() + + prefix.refresh_from_db() + self.assertEqual(prefix._site, site_c) + # The poisoned _location is intentional residue: this row is not scoped to the + # moved subtree, so only a save touching its own scope chain repairs it. + self.assertEqual(prefix._location, child) + + def test_resync_recomputes_from_scope_not_from_saved_instance(self): + group_a = SiteGroup.objects.create(name='Group A', slug='group-a') + group_b = SiteGroup.objects.create(name='Group B', slug='group-b') + group_c = SiteGroup.objects.create(name='Group C', slug='group-c') + site_a = Site.objects.create(name='Site A', slug='site-a', group=group_a) + site_b = Site.objects.create(name='Site B', slug='site-b', group=group_b) + location = Location.objects.create(name='Loc', slug='loc', site=site_b) + prefix = Prefix.objects.create(prefix='10.0.0.0/24', scope=location) + self.assertEqual(prefix._site, site_b) + + # Fabricate a stale row pointing at the wrong site, then trigger site_a's resync + # with a real scope change. The row matches site_a's rebuild filter (_site=site_a) + # but its actual scope lives under site_b: recomputed values must derive from the + # row's scope, never be stamped from the saved instance. + Prefix.objects.filter(pk=prefix.pk).update(_site=site_a, _site_group=group_a) + + site_a.group = group_c + site_a.save() + + prefix.refresh_from_db() + self.assertEqual(prefix._site, site_b) + self.assertEqual(prefix._site_group, group_b) + self.assertEqual(prefix._location, location) + + def test_stale_save_after_concurrent_update_resyncs(self): + """ + A stale full save can write an old scope value back over a concurrent update + (when the client sends no If-Match header). The resync must run so the caches follow + whatever was actually written. A Cluster is used because it has no + denormalized-field registration to mask a skipped resync (unlike Prefix). The + lock-wait variant of this race (the concurrent update not yet committed) cannot + be exercised in a single-connection TestCase. + """ + region_a = Region.objects.create(name='Region A', slug='region-a') + region_b = Region.objects.create(name='Region B', slug='region-b') + site = Site.objects.create(name='Site', slug='site', region=region_a) + cluster_type = ClusterType.objects.create(name='CT', slug='ct') + cluster = Cluster.objects.create(name='Cluster', type=cluster_type, scope=site) + + # Client 1 loads the site (and, like every request-driven save, snapshots it). + s1 = Site.objects.get(pk=site.pk) + s1.snapshot() + + # Client 2 changes the region and saves; caches follow. + s2 = Site.objects.get(pk=site.pk) + s2.region = region_b + s2.save() + cluster.refresh_from_db() + self.assertEqual(cluster._region, region_b) + + # Client 1's stale save writes region_a back. From client 1's point of view + # nothing changed, but the database value did: the resync must run. + s1.save() + + cluster.refresh_from_db() + self.assertEqual(cluster._region, region_a) + + def test_resync_groups_updates_by_distinct_scope(self): + group_a = SiteGroup.objects.create(name='Group A', slug='group-a') + group_b = SiteGroup.objects.create(name='Group B', slug='group-b') + site = Site.objects.create(name='Site', slug='site', group=group_a) + location = Location.objects.create(name='Loc', slug='loc', site=site) + prefix_1 = Prefix.objects.create(prefix='10.0.1.0/24', scope=site) + prefix_2 = Prefix.objects.create(prefix='10.0.2.0/24', scope=site) + prefix_3 = Prefix.objects.create(prefix='10.0.3.0/24', scope=location) + cluster_type = ClusterType.objects.create(name='CT', slug='ct') + cluster = Cluster.objects.create(name='Cluster', type=cluster_type, scope=site) + + site.group = group_b + site.save() + + # Each object's cached fields must derive from its own scope; a resync that + # applies one scope's computed values to all matched rows would corrupt these. + for prefix in (prefix_1, prefix_2): + prefix.refresh_from_db() + self.assertIsNone(prefix._location) + self.assertEqual(prefix._site, site) + self.assertEqual(prefix._site_group, group_b) + prefix_3.refresh_from_db() + self.assertEqual(prefix_3._location, location) + self.assertEqual(prefix_3._site, site) + self.assertEqual(prefix_3._site_group, group_b) + cluster.refresh_from_db() + self.assertEqual(cluster._site_group, group_b) + + def test_resync_issues_one_update_per_distinct_scope(self): + group = SiteGroup.objects.create(name='Group', slug='group') + site = Site.objects.create(name='Site', slug='site') + location = Location.objects.create(name='Loc', slug='loc', site=site) + for i in range(1, 4): + Prefix.objects.create(prefix=f'10.0.{i}.0/24', scope=site) + for i in range(4, 6): + Prefix.objects.create(prefix=f'10.0.{i}.0/24', scope=location) + cluster_type = ClusterType.objects.create(name='CT', slug='ct') + Cluster.objects.create(name='Cluster 1', type=cluster_type, scope=site) + Cluster.objects.create(name='Cluster 2', type=cluster_type, scope=site) + + # One UPDATE per distinct (scope_type, scope) pair — not one per row (nor a single + # per-row CASE WHEN statement). Multiple rows per scope are seeded above so that a + # default-ordering leak into DISTINCT (which degrades grouping to one pair per row) + # changes these counts. Only this signal's UPDATEs set _location_id; the + # denormalized-field registry (netbox.denormalized) also updates Prefix on every + # Site save but touches only _region_id/_site_group_id, so the filter below + # excludes it. + distinct_prefix_scopes = len(set( + Prefix.objects.filter(_site=site).values_list('scope_type_id', 'scope_id') + )) + self.assertEqual(distinct_prefix_scopes, 2) + + site.group = group # A real scope change: the resync must run + + with CaptureQueriesContext(connection) as ctx: + site.save() + + prefix_updates = [ + q for q in ctx.captured_queries + if q['sql'].startswith('UPDATE "ipam_prefix"') and '"_location_id"' in q['sql'] + ] + self.assertEqual(len(prefix_updates), distinct_prefix_scopes) + cluster_updates = [ + q for q in ctx.captured_queries if q['sql'].startswith('UPDATE "virtualization_cluster"') + ] + self.assertEqual(len(cluster_updates), 1) + + +class SyncCachedScopeFieldsAutocommitTestCase(TransactionTestCase): + """ + Exercise the autocommit save path, which TestCase cannot reach (it wraps every test + in a transaction). Outside an atomic block the pre-save read and the save's UPDATE + run in separate transactions, so the skip guard is disabled there: the stash is + cleared and the rebuild runs unconditionally. + + Note: TransactionTestCase teardown flushes all tables, which removes rows seeded by + data migrations from a --keepdb database (e.g. the dcim.0206 ModuleTypeProfiles). + A fresh test database restores them. + """ + + def test_autocommit_noop_save_always_resyncs(self): + group = SiteGroup.objects.create(name='Group', slug='group') + site = Site.objects.create(name='Site', slug='site', group=group) + location = Location.objects.create(name='Loc', slug='loc', site=site) + prefix = Prefix.objects.create(prefix='10.0.0.0/24', scope=site) + + # A transactional save first, so the instance carries a stash. The subsequent + # autocommit save must clear it rather than compare against a previous save's + # values. + with transaction.atomic(): + site.save() + + Prefix.objects.filter(pk=prefix.pk).update(_location=location) + + site.save() # Autocommit: no stash, unconditional rebuild + + prefix.refresh_from_db() + self.assertIsNone(prefix._location) + class CableSignalDirectHandlerTestCase(SimpleTestCase): """ From a1fc744556fc2cd185ffdac5d474ab3066b7cf38 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 30 Jul 2026 13:59:57 -0400 Subject: [PATCH 10/35] Release v4.6.7 --- contrib/openapi.json | 26 +- docs/release-notes/version-4.6.md | 16 + netbox/release.yaml | 4 +- netbox/translations/cs/LC_MESSAGES/django.mo | Bin 281770 -> 282284 bytes netbox/translations/cs/LC_MESSAGES/django.po | 587 +++++++++--------- netbox/translations/da/LC_MESSAGES/django.mo | Bin 273059 -> 273575 bytes netbox/translations/da/LC_MESSAGES/django.po | 589 +++++++++--------- netbox/translations/de/LC_MESSAGES/django.mo | Bin 287397 -> 287964 bytes netbox/translations/de/LC_MESSAGES/django.po | 599 ++++++++++--------- netbox/translations/es/LC_MESSAGES/django.mo | Bin 289622 -> 290174 bytes netbox/translations/es/LC_MESSAGES/django.po | 591 +++++++++--------- netbox/translations/fr/LC_MESSAGES/django.mo | Bin 292156 -> 292693 bytes netbox/translations/fr/LC_MESSAGES/django.po | 590 +++++++++--------- netbox/translations/it/LC_MESSAGES/django.mo | Bin 286877 -> 287436 bytes netbox/translations/it/LC_MESSAGES/django.po | 592 +++++++++--------- netbox/translations/ja/LC_MESSAGES/django.mo | Bin 309635 -> 310187 bytes netbox/translations/ja/LC_MESSAGES/django.po | 585 +++++++++--------- netbox/translations/ko/LC_MESSAGES/django.mo | Bin 281518 -> 282036 bytes netbox/translations/ko/LC_MESSAGES/django.po | 585 +++++++++--------- netbox/translations/lv/LC_MESSAGES/django.mo | Bin 280921 -> 281482 bytes netbox/translations/lv/LC_MESSAGES/django.po | 592 +++++++++--------- netbox/translations/nl/LC_MESSAGES/django.mo | Bin 282308 -> 282840 bytes netbox/translations/nl/LC_MESSAGES/django.po | 591 +++++++++--------- netbox/translations/pl/LC_MESSAGES/django.mo | Bin 285056 -> 285565 bytes netbox/translations/pl/LC_MESSAGES/django.po | 588 +++++++++--------- netbox/translations/pt/LC_MESSAGES/django.mo | Bin 284529 -> 285062 bytes netbox/translations/pt/LC_MESSAGES/django.po | 589 +++++++++--------- netbox/translations/ru/LC_MESSAGES/django.mo | Bin 366983 -> 367681 bytes netbox/translations/ru/LC_MESSAGES/django.po | 590 +++++++++--------- netbox/translations/tr/LC_MESSAGES/django.mo | Bin 277766 -> 278311 bytes netbox/translations/tr/LC_MESSAGES/django.po | 590 +++++++++--------- netbox/translations/uk/LC_MESSAGES/django.mo | Bin 364941 -> 365640 bytes netbox/translations/uk/LC_MESSAGES/django.po | 589 +++++++++--------- netbox/translations/zh/LC_MESSAGES/django.mo | Bin 257026 -> 257512 bytes netbox/translations/zh/LC_MESSAGES/django.po | 583 +++++++++--------- requirements.txt | 4 +- 36 files changed, 4915 insertions(+), 4565 deletions(-) diff --git a/contrib/openapi.json b/contrib/openapi.json index 024d34500..7a6989337 100644 --- a/contrib/openapi.json +++ b/contrib/openapi.json @@ -2,7 +2,7 @@ "openapi": "3.0.3", "info": { "title": "NetBox REST API", - "version": "4.6.6", + "version": "4.6.7", "license": { "name": "Apache v2 License" } @@ -555,6 +555,30 @@ "explode": true, "style": "form" }, + { + "in": "query", + "name": "member_type_id", + "schema": { + "type": "array", + "items": { + "type": "integer" + } + }, + "explode": true, + "style": "form" + }, + { + "in": "query", + "name": "member_type_id__n", + "schema": { + "type": "array", + "items": { + "type": "integer" + } + }, + "explode": true, + "style": "form" + }, { "in": "query", "name": "modified_by_request", diff --git a/docs/release-notes/version-4.6.md b/docs/release-notes/version-4.6.md index 349ad62bb..d3e30621a 100644 --- a/docs/release-notes/version-4.6.md +++ b/docs/release-notes/version-4.6.md @@ -1,5 +1,21 @@ # NetBox v4.6 +## v4.6.7 (FUTURE) + +### Performance Improvements + +* [#22810](https://github.com/netbox-community/netbox/issues/22810) - Skip cached scope rebuild for sites and locations when scope fields are unchanged +* [#22813](https://github.com/netbox-community/netbox/issues/22813) - Avoid extraneous database queries when fetching custom field data via the GraphQL API +* [#22822](https://github.com/netbox-community/netbox/issues/22822) - Avoid an extra database query when including rack reservation units via the GraphQL API +* [#22823](https://github.com/netbox-community/netbox/issues/22823) - Avoid extraneous database queries when fetching the IP address or prefix family via the GraphQL API + +### Bug Fixes + +* [#22738](https://github.com/netbox-community/netbox/issues/22738) - Correctly evaluate IP availability for users whose permissions are constrained by a custom field on a related object +* [#22800](https://github.com/netbox-community/netbox/issues/22800) - Filter circuit group assignments by member type to avoid displaying assignments belonging to a virtual circuit with the same ID + +--- + ## v4.6.6 (2026-07-28) ### Enhancements diff --git a/netbox/release.yaml b/netbox/release.yaml index ab2f9bfde..ecc1b766a 100644 --- a/netbox/release.yaml +++ b/netbox/release.yaml @@ -1,3 +1,3 @@ -version: "4.6.6" +version: "4.6.7" edition: "Community" -published: "2026-07-28" +published: "2026-07-30" diff --git a/netbox/translations/cs/LC_MESSAGES/django.mo b/netbox/translations/cs/LC_MESSAGES/django.mo index f9bcc79865c5b3051908c7cb64b5a6de0cb8355c..0468c4ebda54c1e9f18d2989aaa57979b8985eb7 100644 GIT binary patch delta 77785 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 delta 77323 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�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
tHsF8QNa*7JWTRp8Su-cbCT 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 SDWI!=w=CO7O!iJP|sa_Ug;#C-`5{oQXssyynhC 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 Gtp5jYqJ!lC diff --git a/netbox/translations/da/LC_MESSAGES/django.po b/netbox/translations/da/LC_MESSAGES/django.po index f761f4447..bfad3e496 100644 --- a/netbox/translations/da/LC_MESSAGES/django.po +++ b/netbox/translations/da/LC_MESSAGES/django.po @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-24 05:56+0000\n" +"POT-Creation-Date: 2026-07-30 05:52+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" "Last-Translator: Jeremy Stretch, 2026\n" "Language-Team: Danish (https://app.transifex.com/netbox-community/teams/178115/da/)\n" @@ -178,10 +178,10 @@ msgstr "Områdegruppe (slug)" #: netbox/circuits/forms/filtersets.py:249 #: netbox/circuits/tables/circuits.py:125 netbox/dcim/forms/bulk_edit.py:176 #: netbox/dcim/forms/bulk_edit.py:339 netbox/dcim/forms/bulk_edit.py:696 -#: netbox/dcim/forms/bulk_edit.py:906 netbox/dcim/forms/bulk_import.py:148 -#: netbox/dcim/forms/bulk_import.py:256 netbox/dcim/forms/bulk_import.py:365 -#: netbox/dcim/forms/bulk_import.py:656 netbox/dcim/forms/bulk_import.py:1701 -#: netbox/dcim/forms/bulk_import.py:1729 netbox/dcim/forms/filtersets.py:108 +#: netbox/dcim/forms/bulk_edit.py:906 netbox/dcim/forms/bulk_import.py:149 +#: netbox/dcim/forms/bulk_import.py:257 netbox/dcim/forms/bulk_import.py:366 +#: netbox/dcim/forms/bulk_import.py:657 netbox/dcim/forms/bulk_import.py:1789 +#: netbox/dcim/forms/bulk_import.py:1817 netbox/dcim/forms/filtersets.py:108 #: netbox/dcim/forms/filtersets.py:258 netbox/dcim/forms/filtersets.py:390 #: netbox/dcim/forms/filtersets.py:500 netbox/dcim/forms/filtersets.py:895 #: netbox/dcim/forms/filtersets.py:1117 netbox/dcim/forms/filtersets.py:1198 @@ -308,7 +308,7 @@ msgstr "Afslutning A (ID)" #: netbox/extras/filtersets.py:503 netbox/extras/filtersets.py:562 #: netbox/extras/filtersets.py:623 netbox/extras/filtersets.py:662 #: netbox/extras/filtersets.py:695 netbox/extras/filtersets.py:869 -#: netbox/ipam/forms/model_forms.py:523 netbox/netbox/filtersets.py:319 +#: netbox/ipam/forms/model_forms.py:523 netbox/netbox/filtersets.py:324 #: netbox/netbox/forms/filtersets.py:32 netbox/netbox/forms/search.py:20 #: netbox/templates/htmx/object_selector.html:28 #: netbox/templates/inc/filter_list.html:43 @@ -409,7 +409,7 @@ msgstr "Grænseflade (ID)" #: netbox/dcim/forms/bulk_edit.py:142 netbox/dcim/forms/filtersets.py:227 #: netbox/dcim/forms/model_forms.py:144 netbox/dcim/tables/sites.py:74 #: netbox/ipam/models/asns.py:164 netbox/ipam/tables/asn.py:37 -#: netbox/ipam/tables/ip.py:126 netbox/ipam/views.py:383 +#: netbox/ipam/tables/ip.py:126 netbox/ipam/views.py:384 #: netbox/netbox/navigation/menu.py:189 netbox/netbox/navigation/menu.py:192 msgid "ASNs" msgstr "ASN'er" @@ -457,7 +457,7 @@ msgstr "Tjeneste-id" #: netbox/dcim/forms/bulk_edit.py:628 netbox/dcim/forms/bulk_edit.py:849 #: netbox/dcim/forms/bulk_edit.py:1103 netbox/dcim/forms/bulk_edit.py:1202 #: netbox/dcim/forms/bulk_edit.py:1229 netbox/dcim/forms/bulk_edit.py:1773 -#: netbox/dcim/forms/bulk_import.py:1541 netbox/dcim/forms/filtersets.py:1283 +#: netbox/dcim/forms/bulk_import.py:1629 netbox/dcim/forms/filtersets.py:1283 #: netbox/dcim/forms/filtersets.py:1613 netbox/dcim/forms/filtersets.py:1829 #: netbox/dcim/forms/filtersets.py:1848 netbox/dcim/forms/filtersets.py:1872 #: netbox/dcim/forms/filtersets.py:1891 netbox/dcim/tables/devices.py:804 @@ -486,12 +486,12 @@ msgstr "Farve" #: netbox/dcim/forms/bulk_edit.py:1033 netbox/dcim/forms/bulk_edit.py:1056 #: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_edit.py:1146 #: netbox/dcim/forms/bulk_edit.py:1197 netbox/dcim/forms/bulk_edit.py:1224 -#: netbox/dcim/forms/bulk_import.py:214 netbox/dcim/forms/bulk_import.py:300 -#: netbox/dcim/forms/bulk_import.py:829 netbox/dcim/forms/bulk_import.py:855 -#: netbox/dcim/forms/bulk_import.py:881 netbox/dcim/forms/bulk_import.py:902 -#: netbox/dcim/forms/bulk_import.py:988 netbox/dcim/forms/bulk_import.py:1117 -#: netbox/dcim/forms/bulk_import.py:1136 netbox/dcim/forms/bulk_import.py:1515 -#: netbox/dcim/forms/bulk_import.py:1766 netbox/dcim/forms/filtersets.py:1155 +#: netbox/dcim/forms/bulk_import.py:215 netbox/dcim/forms/bulk_import.py:301 +#: netbox/dcim/forms/bulk_import.py:830 netbox/dcim/forms/bulk_import.py:856 +#: netbox/dcim/forms/bulk_import.py:882 netbox/dcim/forms/bulk_import.py:903 +#: netbox/dcim/forms/bulk_import.py:989 netbox/dcim/forms/bulk_import.py:1118 +#: netbox/dcim/forms/bulk_import.py:1224 netbox/dcim/forms/bulk_import.py:1603 +#: netbox/dcim/forms/bulk_import.py:1854 netbox/dcim/forms/filtersets.py:1155 #: netbox/dcim/forms/filtersets.py:1268 netbox/dcim/forms/filtersets.py:1401 #: netbox/dcim/forms/filtersets.py:1492 netbox/dcim/forms/filtersets.py:1512 #: netbox/dcim/forms/filtersets.py:1532 netbox/dcim/forms/filtersets.py:1552 @@ -550,11 +550,11 @@ msgstr "Leverandørkonto" #: netbox/dcim/forms/bulk_edit.py:719 netbox/dcim/forms/bulk_edit.py:778 #: netbox/dcim/forms/bulk_edit.py:822 netbox/dcim/forms/bulk_edit.py:942 #: netbox/dcim/forms/bulk_edit.py:1747 netbox/dcim/forms/bulk_edit.py:1791 -#: netbox/dcim/forms/bulk_import.py:105 netbox/dcim/forms/bulk_import.py:164 -#: netbox/dcim/forms/bulk_import.py:281 netbox/dcim/forms/bulk_import.py:390 -#: netbox/dcim/forms/bulk_import.py:621 netbox/dcim/forms/bulk_import.py:781 -#: netbox/dcim/forms/bulk_import.py:1258 netbox/dcim/forms/bulk_import.py:1503 -#: netbox/dcim/forms/bulk_import.py:1761 netbox/dcim/forms/bulk_import.py:1824 +#: netbox/dcim/forms/bulk_import.py:106 netbox/dcim/forms/bulk_import.py:165 +#: netbox/dcim/forms/bulk_import.py:282 netbox/dcim/forms/bulk_import.py:391 +#: netbox/dcim/forms/bulk_import.py:622 netbox/dcim/forms/bulk_import.py:782 +#: netbox/dcim/forms/bulk_import.py:1346 netbox/dcim/forms/bulk_import.py:1591 +#: netbox/dcim/forms/bulk_import.py:1849 netbox/dcim/forms/bulk_import.py:1912 #: netbox/dcim/forms/filtersets.py:210 netbox/dcim/forms/filtersets.py:270 #: netbox/dcim/forms/filtersets.py:413 netbox/dcim/forms/filtersets.py:528 #: netbox/dcim/forms/filtersets.py:941 netbox/dcim/forms/filtersets.py:1064 @@ -613,10 +613,10 @@ msgstr "Status" #: netbox/dcim/forms/bulk_edit.py:195 netbox/dcim/forms/bulk_edit.py:361 #: netbox/dcim/forms/bulk_edit.py:486 netbox/dcim/forms/bulk_edit.py:709 #: netbox/dcim/forms/bulk_edit.py:834 netbox/dcim/forms/bulk_edit.py:1796 -#: netbox/dcim/forms/bulk_import.py:124 netbox/dcim/forms/bulk_import.py:169 -#: netbox/dcim/forms/bulk_import.py:267 netbox/dcim/forms/bulk_import.py:395 -#: netbox/dcim/forms/bulk_import.py:595 netbox/dcim/forms/bulk_import.py:1521 -#: netbox/dcim/forms/bulk_import.py:1817 netbox/dcim/forms/filtersets.py:145 +#: netbox/dcim/forms/bulk_import.py:125 netbox/dcim/forms/bulk_import.py:170 +#: netbox/dcim/forms/bulk_import.py:268 netbox/dcim/forms/bulk_import.py:396 +#: netbox/dcim/forms/bulk_import.py:596 netbox/dcim/forms/bulk_import.py:1609 +#: netbox/dcim/forms/bulk_import.py:1905 netbox/dcim/forms/filtersets.py:145 #: netbox/dcim/forms/filtersets.py:204 netbox/dcim/forms/filtersets.py:237 #: netbox/dcim/forms/filtersets.py:374 netbox/dcim/forms/filtersets.py:459 #: netbox/dcim/forms/filtersets.py:480 netbox/dcim/forms/filtersets.py:863 @@ -707,7 +707,7 @@ msgstr "Serviceparametre" #: netbox/circuits/forms/filtersets.py:325 #: netbox/circuits/forms/filtersets.py:341 netbox/core/forms/filtersets.py:78 #: netbox/core/forms/filtersets.py:150 netbox/dcim/forms/bulk_edit.py:867 -#: netbox/dcim/forms/bulk_import.py:504 netbox/dcim/forms/filtersets.py:203 +#: netbox/dcim/forms/bulk_import.py:505 netbox/dcim/forms/filtersets.py:203 #: netbox/dcim/forms/filtersets.py:236 netbox/dcim/forms/filtersets.py:1054 #: netbox/dcim/forms/filtersets.py:1207 netbox/dcim/forms/filtersets.py:1219 #: netbox/dcim/forms/filtersets.py:1355 netbox/dcim/forms/filtersets.py:1482 @@ -803,7 +803,7 @@ msgstr "Beskrivelse" #: netbox/circuits/forms/bulk_edit.py:192 #: netbox/circuits/forms/model_forms.py:198 -#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/bulk_import.py:1494 +#: netbox/dcim/forms/bulk_import.py:1549 netbox/dcim/forms/bulk_import.py:1582 msgid "Termination type" msgstr "Afslutningstype" @@ -877,7 +877,7 @@ msgstr "Leverandørnetværk" #: netbox/circuits/forms/filtersets.py:393 #: netbox/circuits/forms/model_forms.py:399 netbox/dcim/forms/bulk_edit.py:372 #: netbox/dcim/forms/bulk_edit.py:1301 netbox/dcim/forms/bulk_edit.py:1737 -#: netbox/dcim/forms/bulk_import.py:286 netbox/dcim/forms/bulk_import.py:1227 +#: netbox/dcim/forms/bulk_import.py:287 netbox/dcim/forms/bulk_import.py:1315 #: netbox/dcim/forms/filtersets.py:421 netbox/dcim/forms/filtersets.py:919 #: netbox/dcim/forms/filtersets.py:1990 netbox/dcim/forms/filtersets.py:2030 #: netbox/dcim/forms/model_forms.py:312 netbox/dcim/forms/model_forms.py:1298 @@ -934,10 +934,10 @@ msgstr "Kredsløbstype" #: netbox/circuits/forms/bulk_import.py:102 #: netbox/circuits/forms/bulk_import.py:228 -#: netbox/dcim/forms/bulk_import.py:107 netbox/dcim/forms/bulk_import.py:166 -#: netbox/dcim/forms/bulk_import.py:283 netbox/dcim/forms/bulk_import.py:392 -#: netbox/dcim/forms/bulk_import.py:623 netbox/dcim/forms/bulk_import.py:783 -#: netbox/dcim/forms/bulk_import.py:1260 netbox/dcim/forms/bulk_import.py:1763 +#: netbox/dcim/forms/bulk_import.py:108 netbox/dcim/forms/bulk_import.py:167 +#: netbox/dcim/forms/bulk_import.py:284 netbox/dcim/forms/bulk_import.py:393 +#: netbox/dcim/forms/bulk_import.py:624 netbox/dcim/forms/bulk_import.py:784 +#: netbox/dcim/forms/bulk_import.py:1348 netbox/dcim/forms/bulk_import.py:1851 #: netbox/ipam/forms/bulk_import.py:207 netbox/ipam/forms/bulk_import.py:271 #: netbox/ipam/forms/bulk_import.py:307 netbox/ipam/forms/bulk_import.py:538 #: netbox/ipam/forms/bulk_import.py:551 @@ -951,10 +951,10 @@ msgstr "Driftsstatus" #: netbox/circuits/forms/bulk_import.py:115 #: netbox/circuits/forms/bulk_import.py:174 #: netbox/circuits/forms/bulk_import.py:235 -#: netbox/dcim/forms/bulk_import.py:128 netbox/dcim/forms/bulk_import.py:173 -#: netbox/dcim/forms/bulk_import.py:399 netbox/dcim/forms/bulk_import.py:599 -#: netbox/dcim/forms/bulk_import.py:1525 netbox/dcim/forms/bulk_import.py:1758 -#: netbox/dcim/forms/bulk_import.py:1821 netbox/ipam/forms/bulk_import.py:49 +#: netbox/dcim/forms/bulk_import.py:129 netbox/dcim/forms/bulk_import.py:174 +#: netbox/dcim/forms/bulk_import.py:400 netbox/dcim/forms/bulk_import.py:600 +#: netbox/dcim/forms/bulk_import.py:1613 netbox/dcim/forms/bulk_import.py:1846 +#: netbox/dcim/forms/bulk_import.py:1909 netbox/ipam/forms/bulk_import.py:49 #: netbox/ipam/forms/bulk_import.py:78 netbox/ipam/forms/bulk_import.py:106 #: netbox/ipam/forms/bulk_import.py:126 netbox/ipam/forms/bulk_import.py:153 #: netbox/ipam/forms/bulk_import.py:181 netbox/ipam/forms/bulk_import.py:266 @@ -999,7 +999,7 @@ msgstr "Operationel rolle" #: netbox/circuits/forms/bulk_import.py:258 #: netbox/circuits/forms/model_forms.py:402 #: netbox/circuits/tables/virtual_circuits.py:109 -#: netbox/circuits/ui/panels.py:179 netbox/dcim/forms/bulk_import.py:1358 +#: netbox/circuits/ui/panels.py:179 netbox/dcim/forms/bulk_import.py:1446 #: netbox/dcim/forms/model_forms.py:1372 netbox/dcim/forms/model_forms.py:1641 #: netbox/dcim/forms/model_forms.py:1822 netbox/dcim/forms/model_forms.py:1857 #: netbox/dcim/forms/model_forms.py:1982 netbox/dcim/tables/connections.py:66 @@ -1027,9 +1027,9 @@ msgstr "Grænseflade" #: netbox/circuits/tables/circuits.py:140 netbox/dcim/forms/bulk_edit.py:348 #: netbox/dcim/forms/bulk_edit.py:462 netbox/dcim/forms/bulk_edit.py:701 #: netbox/dcim/forms/bulk_edit.py:750 netbox/dcim/forms/bulk_edit.py:915 -#: netbox/dcim/forms/bulk_import.py:261 netbox/dcim/forms/bulk_import.py:371 -#: netbox/dcim/forms/bulk_import.py:662 netbox/dcim/forms/bulk_import.py:1707 -#: netbox/dcim/forms/bulk_import.py:1741 netbox/dcim/forms/filtersets.py:116 +#: netbox/dcim/forms/bulk_import.py:262 netbox/dcim/forms/bulk_import.py:372 +#: netbox/dcim/forms/bulk_import.py:663 netbox/dcim/forms/bulk_import.py:1795 +#: netbox/dcim/forms/bulk_import.py:1829 netbox/dcim/forms/filtersets.py:116 #: netbox/dcim/forms/filtersets.py:369 netbox/dcim/forms/filtersets.py:404 #: netbox/dcim/forms/filtersets.py:455 netbox/dcim/forms/filtersets.py:508 #: netbox/dcim/forms/filtersets.py:860 netbox/dcim/forms/filtersets.py:904 @@ -1151,7 +1151,7 @@ msgstr "Kontakter" #: netbox/circuits/forms/filtersets.py:239 #: netbox/circuits/tables/circuits.py:135 netbox/dcim/forms/bulk_edit.py:121 #: netbox/dcim/forms/bulk_edit.py:323 netbox/dcim/forms/bulk_edit.py:890 -#: netbox/dcim/forms/bulk_import.py:110 netbox/dcim/forms/filtersets.py:94 +#: netbox/dcim/forms/bulk_import.py:111 netbox/dcim/forms/filtersets.py:94 #: netbox/dcim/forms/filtersets.py:171 netbox/dcim/forms/filtersets.py:217 #: netbox/dcim/forms/filtersets.py:244 netbox/dcim/forms/filtersets.py:382 #: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:881 @@ -1215,7 +1215,7 @@ msgstr "Opgave" #: netbox/circuits/forms/filtersets.py:311 #: netbox/circuits/forms/model_forms.py:289 #: netbox/circuits/tables/circuits.py:187 netbox/dcim/forms/bulk_edit.py:126 -#: netbox/dcim/forms/bulk_edit.py:356 netbox/dcim/forms/bulk_import.py:117 +#: netbox/dcim/forms/bulk_edit.py:356 netbox/dcim/forms/bulk_import.py:118 #: netbox/dcim/forms/model_forms.py:137 netbox/dcim/tables/racks.py:139 #: netbox/dcim/tables/racks.py:232 netbox/dcim/tables/sites.py:69 #: netbox/extras/forms/filtersets.py:612 netbox/ipam/filtersets.py:1049 @@ -1710,13 +1710,13 @@ msgstr "Afslutninger" #: netbox/circuits/tables/virtual_circuits.py:106 #: netbox/dcim/forms/bulk_edit.py:749 netbox/dcim/forms/bulk_edit.py:1320 #: netbox/dcim/forms/bulk_edit.py:1732 netbox/dcim/forms/bulk_edit.py:1786 -#: netbox/dcim/forms/bulk_import.py:763 netbox/dcim/forms/bulk_import.py:824 -#: netbox/dcim/forms/bulk_import.py:850 netbox/dcim/forms/bulk_import.py:876 -#: netbox/dcim/forms/bulk_import.py:897 netbox/dcim/forms/bulk_import.py:953 -#: netbox/dcim/forms/bulk_import.py:1112 netbox/dcim/forms/bulk_import.py:1131 -#: netbox/dcim/forms/bulk_import.py:1150 netbox/dcim/forms/bulk_import.py:1168 -#: netbox/dcim/forms/bulk_import.py:1222 netbox/dcim/forms/bulk_import.py:1344 -#: netbox/dcim/forms/bulk_import.py:1811 netbox/dcim/forms/connections.py:34 +#: netbox/dcim/forms/bulk_import.py:764 netbox/dcim/forms/bulk_import.py:825 +#: netbox/dcim/forms/bulk_import.py:851 netbox/dcim/forms/bulk_import.py:877 +#: netbox/dcim/forms/bulk_import.py:898 netbox/dcim/forms/bulk_import.py:954 +#: netbox/dcim/forms/bulk_import.py:1113 netbox/dcim/forms/bulk_import.py:1219 +#: netbox/dcim/forms/bulk_import.py:1238 netbox/dcim/forms/bulk_import.py:1256 +#: netbox/dcim/forms/bulk_import.py:1310 netbox/dcim/forms/bulk_import.py:1432 +#: netbox/dcim/forms/bulk_import.py:1899 netbox/dcim/forms/connections.py:34 #: netbox/dcim/forms/filtersets.py:158 netbox/dcim/forms/filtersets.py:1061 #: netbox/dcim/forms/filtersets.py:1098 netbox/dcim/forms/filtersets.py:1265 #: netbox/dcim/forms/filtersets.py:1486 netbox/dcim/forms/filtersets.py:1509 @@ -1790,7 +1790,7 @@ msgid "Connection" msgstr "Forbindelse" #: netbox/circuits/ui/panels.py:99 netbox/dcim/forms/bulk_edit.py:1480 -#: netbox/dcim/forms/bulk_import.py:835 netbox/dcim/forms/bulk_import.py:861 +#: netbox/dcim/forms/bulk_import.py:836 netbox/dcim/forms/bulk_import.py:862 #: netbox/dcim/forms/filtersets.py:1497 netbox/dcim/forms/filtersets.py:1537 #: netbox/dcim/forms/filtersets.py:1675 netbox/dcim/tables/devices.py:662 #: netbox/dcim/ui/panels.py:488 @@ -1991,7 +1991,7 @@ msgstr "Info" msgid "Warning" msgstr "Advarsel" -#: netbox/core/constants.py:33 netbox/netbox/tables/columns.py:597 +#: netbox/core/constants.py:33 netbox/netbox/tables/columns.py:625 msgid "Error" msgstr "Fejl" @@ -2968,7 +2968,7 @@ msgid "Position (U)" msgstr "Position (U)" #: netbox/dcim/api/serializers_/devices.py:193 -#: netbox/dcim/forms/bulk_import.py:786 netbox/dcim/forms/model_forms.py:819 +#: netbox/dcim/forms/bulk_import.py:787 netbox/dcim/forms/model_forms.py:819 msgid "Replicate components" msgstr "Replikerer komponenter" @@ -2981,12 +2981,12 @@ msgstr "" " sandt)" #: netbox/dcim/api/serializers_/devices.py:200 -#: netbox/dcim/forms/bulk_import.py:791 netbox/dcim/forms/model_forms.py:825 +#: netbox/dcim/forms/bulk_import.py:792 netbox/dcim/forms/model_forms.py:825 msgid "Adopt components" msgstr "Vedtage komponenter" #: netbox/dcim/api/serializers_/devices.py:201 -#: netbox/dcim/forms/bulk_import.py:793 netbox/dcim/forms/model_forms.py:828 +#: netbox/dcim/forms/bulk_import.py:794 netbox/dcim/forms/model_forms.py:828 msgid "Adopt already existing components" msgstr "Vedtage allerede eksisterende komponenter" @@ -3123,11 +3123,11 @@ msgstr "Forældet" #: netbox/dcim/choices.py:170 netbox/dcim/forms/bulk_edit.py:87 #: netbox/dcim/forms/bulk_edit.py:101 netbox/dcim/forms/bulk_edit.py:181 #: netbox/dcim/forms/bulk_edit.py:623 netbox/dcim/forms/bulk_edit.py:651 -#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/bulk_import.py:77 -#: netbox/dcim/forms/bulk_import.py:91 netbox/dcim/forms/bulk_import.py:154 -#: netbox/dcim/forms/bulk_import.py:530 netbox/dcim/forms/bulk_import.py:556 -#: netbox/dcim/forms/bulk_import.py:682 netbox/dcim/forms/bulk_import.py:958 -#: netbox/dcim/forms/bulk_import.py:1239 netbox/dcim/forms/filtersets.py:267 +#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/bulk_import.py:78 +#: netbox/dcim/forms/bulk_import.py:92 netbox/dcim/forms/bulk_import.py:155 +#: netbox/dcim/forms/bulk_import.py:531 netbox/dcim/forms/bulk_import.py:557 +#: netbox/dcim/forms/bulk_import.py:683 netbox/dcim/forms/bulk_import.py:959 +#: netbox/dcim/forms/bulk_import.py:1327 netbox/dcim/forms/filtersets.py:267 #: netbox/dcim/forms/filtersets.py:820 netbox/dcim/forms/filtersets.py:836 #: netbox/dcim/forms/model_forms.py:95 netbox/dcim/forms/model_forms.py:113 #: netbox/dcim/forms/model_forms.py:216 netbox/dcim/forms/model_forms.py:559 @@ -3267,7 +3267,7 @@ msgid "Virtual interfaces" msgstr "Virtuelle grænseflader" #: netbox/dcim/choices.py:1164 netbox/dcim/forms/bulk_edit.py:1455 -#: netbox/dcim/forms/bulk_import.py:965 netbox/dcim/forms/model_forms.py:1171 +#: netbox/dcim/forms/bulk_import.py:966 netbox/dcim/forms/model_forms.py:1171 #: netbox/dcim/tables/devices.py:761 #: netbox/virtualization/forms/bulk_edit.py:231 #: netbox/virtualization/forms/bulk_import.py:198 @@ -4041,7 +4041,7 @@ msgstr "VM-grænseflade (ID)" msgid "Is assigned" msgstr "Er tildelt" -#: netbox/dcim/filtersets.py:2080 netbox/dcim/forms/bulk_import.py:1365 +#: netbox/dcim/filtersets.py:2080 netbox/dcim/forms/bulk_import.py:1453 #: netbox/ipam/forms/bulk_import.py:344 msgid "Is primary" msgstr "Er primær" @@ -4062,7 +4062,7 @@ msgid "Assigned VID" msgstr "Tildelt VID" #: netbox/dcim/filtersets.py:2158 netbox/dcim/forms/bulk_edit.py:1568 -#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/forms/filtersets.py:1755 +#: netbox/dcim/forms/bulk_import.py:1051 netbox/dcim/forms/filtersets.py:1755 #: netbox/dcim/forms/model_forms.py:1619 #: netbox/dcim/models/device_components.py:958 #: netbox/dcim/tables/devices.py:678 netbox/dcim/ui/panels.py:521 @@ -4287,7 +4287,7 @@ msgstr "Kontakt telefon" msgid "Contact E-mail" msgstr "Kontakt E-mail" -#: netbox/dcim/forms/bulk_edit.py:160 netbox/dcim/forms/bulk_import.py:140 +#: netbox/dcim/forms/bulk_edit.py:160 netbox/dcim/forms/bulk_import.py:141 #: netbox/dcim/forms/model_forms.py:159 msgid "Time zone" msgstr "Tidszone" @@ -4296,9 +4296,9 @@ msgstr "Tidszone" #: netbox/dcim/forms/bulk_edit.py:584 netbox/dcim/forms/bulk_edit.py:656 #: netbox/dcim/forms/bulk_edit.py:675 netbox/dcim/forms/bulk_edit.py:762 #: netbox/dcim/forms/bulk_edit.py:1306 netbox/dcim/forms/bulk_edit.py:1742 -#: netbox/dcim/forms/bulk_import.py:208 netbox/dcim/forms/bulk_import.py:432 -#: netbox/dcim/forms/bulk_import.py:482 netbox/dcim/forms/bulk_import.py:566 -#: netbox/dcim/forms/bulk_import.py:602 netbox/dcim/forms/bulk_import.py:1233 +#: netbox/dcim/forms/bulk_import.py:209 netbox/dcim/forms/bulk_import.py:433 +#: netbox/dcim/forms/bulk_import.py:483 netbox/dcim/forms/bulk_import.py:567 +#: netbox/dcim/forms/bulk_import.py:603 netbox/dcim/forms/bulk_import.py:1321 #: netbox/dcim/forms/filtersets.py:355 netbox/dcim/forms/filtersets.py:426 #: netbox/dcim/forms/filtersets.py:578 netbox/dcim/forms/filtersets.py:728 #: netbox/dcim/forms/filtersets.py:841 netbox/dcim/forms/filtersets.py:924 @@ -4317,21 +4317,21 @@ msgid "Manufacturer" msgstr "Producent" #: netbox/dcim/forms/bulk_edit.py:240 netbox/dcim/forms/bulk_edit.py:392 -#: netbox/dcim/forms/bulk_import.py:217 netbox/dcim/forms/bulk_import.py:303 +#: netbox/dcim/forms/bulk_import.py:218 netbox/dcim/forms/bulk_import.py:304 #: netbox/dcim/forms/filtersets.py:301 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "Formfaktor" #: netbox/dcim/forms/bulk_edit.py:245 netbox/dcim/forms/bulk_edit.py:397 -#: netbox/dcim/forms/bulk_import.py:225 netbox/dcim/forms/bulk_import.py:306 +#: netbox/dcim/forms/bulk_import.py:226 netbox/dcim/forms/bulk_import.py:307 #: netbox/dcim/forms/filtersets.py:306 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "Bredde" #: netbox/dcim/forms/bulk_edit.py:251 netbox/dcim/forms/bulk_edit.py:403 -#: netbox/dcim/forms/bulk_import.py:313 +#: netbox/dcim/forms/bulk_import.py:314 msgid "Height (U)" msgstr "Højde (U)" @@ -4353,7 +4353,7 @@ msgid "Outer depth" msgstr "Ydre dybde" #: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:426 -#: netbox/dcim/forms/bulk_import.py:230 netbox/dcim/forms/bulk_import.py:316 +#: netbox/dcim/forms/bulk_import.py:231 netbox/dcim/forms/bulk_import.py:317 msgid "Outer unit" msgstr "Ydre enhed" @@ -4365,7 +4365,7 @@ msgstr "Monteringsdybde" #: netbox/dcim/forms/bulk_edit.py:441 netbox/dcim/forms/bulk_edit.py:465 #: netbox/dcim/forms/bulk_edit.py:542 netbox/dcim/forms/bulk_edit.py:559 #: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/bulk_edit.py:614 -#: netbox/dcim/forms/bulk_import.py:445 netbox/dcim/forms/bulk_import.py:493 +#: netbox/dcim/forms/bulk_import.py:446 netbox/dcim/forms/bulk_import.py:494 #: netbox/dcim/forms/filtersets.py:326 netbox/dcim/forms/filtersets.py:348 #: netbox/dcim/forms/filtersets.py:373 netbox/dcim/forms/filtersets.py:458 #: netbox/dcim/forms/filtersets.py:571 netbox/dcim/forms/filtersets.py:683 @@ -4390,8 +4390,8 @@ msgstr "Maks. Vægt" #: netbox/dcim/forms/bulk_edit.py:298 netbox/dcim/forms/bulk_edit.py:451 #: netbox/dcim/forms/bulk_edit.py:547 netbox/dcim/forms/bulk_edit.py:603 -#: netbox/dcim/forms/bulk_import.py:236 netbox/dcim/forms/bulk_import.py:328 -#: netbox/dcim/forms/bulk_import.py:450 netbox/dcim/forms/bulk_import.py:498 +#: netbox/dcim/forms/bulk_import.py:237 netbox/dcim/forms/bulk_import.py:329 +#: netbox/dcim/forms/bulk_import.py:451 netbox/dcim/forms/bulk_import.py:499 #: netbox/dcim/forms/filtersets.py:336 netbox/dcim/forms/filtersets.py:687 #: netbox/dcim/forms/filtersets.py:799 msgid "Weight unit" @@ -4423,7 +4423,7 @@ msgstr "Dimensioner" msgid "Numbering" msgstr "Nummerering" -#: netbox/dcim/forms/bulk_edit.py:377 netbox/dcim/forms/bulk_import.py:293 +#: netbox/dcim/forms/bulk_edit.py:377 netbox/dcim/forms/bulk_import.py:294 #: netbox/dcim/forms/filtersets.py:434 msgid "Rack type" msgstr "Racktype" @@ -4441,17 +4441,17 @@ msgstr "Aktivemærke" #: netbox/dcim/forms/bulk_edit.py:436 netbox/dcim/forms/bulk_edit.py:537 #: netbox/dcim/forms/bulk_edit.py:593 netbox/dcim/forms/bulk_edit.py:724 -#: netbox/dcim/forms/bulk_import.py:322 netbox/dcim/forms/bulk_import.py:487 -#: netbox/dcim/forms/bulk_import.py:696 netbox/dcim/forms/filtersets.py:437 +#: netbox/dcim/forms/bulk_import.py:323 netbox/dcim/forms/bulk_import.py:488 +#: netbox/dcim/forms/bulk_import.py:697 netbox/dcim/forms/filtersets.py:437 #: netbox/dcim/forms/filtersets.py:600 netbox/dcim/forms/filtersets.py:790 #: netbox/dcim/forms/filtersets.py:946 msgid "Airflow" msgstr "Luftstrøm" #: netbox/dcim/forms/bulk_edit.py:460 netbox/dcim/forms/bulk_edit.py:937 -#: netbox/dcim/forms/bulk_import.py:378 netbox/dcim/forms/bulk_import.py:381 -#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/bulk_import.py:1748 -#: netbox/dcim/forms/bulk_import.py:1752 netbox/dcim/forms/filtersets.py:125 +#: netbox/dcim/forms/bulk_import.py:379 netbox/dcim/forms/bulk_import.py:382 +#: netbox/dcim/forms/bulk_import.py:670 netbox/dcim/forms/bulk_import.py:1836 +#: netbox/dcim/forms/bulk_import.py:1840 netbox/dcim/forms/filtersets.py:125 #: netbox/dcim/forms/filtersets.py:370 netbox/dcim/forms/filtersets.py:465 #: netbox/dcim/forms/filtersets.py:479 netbox/dcim/forms/filtersets.py:525 #: netbox/dcim/forms/filtersets.py:914 netbox/dcim/forms/filtersets.py:1130 @@ -4477,7 +4477,7 @@ msgstr "Rack" msgid "Hardware" msgstr "Hardware" -#: netbox/dcim/forms/bulk_edit.py:513 netbox/dcim/forms/bulk_import.py:438 +#: netbox/dcim/forms/bulk_edit.py:513 netbox/dcim/forms/bulk_import.py:439 #: netbox/dcim/forms/filtersets.py:583 netbox/dcim/forms/model_forms.py:416 #: netbox/virtualization/forms/bulk_edit.py:85 #: netbox/virtualization/forms/bulk_import.py:89 @@ -4516,8 +4516,8 @@ msgid "Schema" msgstr "Skema" #: netbox/dcim/forms/bulk_edit.py:572 netbox/dcim/forms/bulk_edit.py:579 -#: netbox/dcim/forms/bulk_edit.py:828 netbox/dcim/forms/bulk_import.py:476 -#: netbox/dcim/forms/bulk_import.py:1509 netbox/dcim/forms/filtersets.py:723 +#: netbox/dcim/forms/bulk_edit.py:828 netbox/dcim/forms/bulk_import.py:477 +#: netbox/dcim/forms/bulk_import.py:1597 netbox/dcim/forms/filtersets.py:723 #: netbox/dcim/forms/filtersets.py:1146 netbox/dcim/forms/filtersets.py:1278 #: netbox/dcim/forms/model_forms.py:463 netbox/dcim/forms/model_forms.py:476 #: netbox/dcim/tables/modules.py:43 netbox/dcim/tables/modules.py:97 @@ -4550,10 +4550,10 @@ msgid "VM role" msgstr "VM-rolle" #: netbox/dcim/forms/bulk_edit.py:637 netbox/dcim/forms/bulk_edit.py:661 -#: netbox/dcim/forms/bulk_edit.py:734 netbox/dcim/forms/bulk_import.py:540 -#: netbox/dcim/forms/bulk_import.py:544 netbox/dcim/forms/bulk_import.py:573 -#: netbox/dcim/forms/bulk_import.py:577 netbox/dcim/forms/bulk_import.py:702 -#: netbox/dcim/forms/bulk_import.py:706 netbox/dcim/forms/filtersets.py:815 +#: netbox/dcim/forms/bulk_edit.py:734 netbox/dcim/forms/bulk_import.py:541 +#: netbox/dcim/forms/bulk_import.py:545 netbox/dcim/forms/bulk_import.py:574 +#: netbox/dcim/forms/bulk_import.py:578 netbox/dcim/forms/bulk_import.py:703 +#: netbox/dcim/forms/bulk_import.py:707 netbox/dcim/forms/filtersets.py:815 #: netbox/dcim/forms/filtersets.py:846 netbox/dcim/forms/filtersets.py:965 #: netbox/dcim/forms/model_forms.py:554 netbox/dcim/forms/model_forms.py:591 #: netbox/dcim/forms/model_forms.py:716 @@ -4565,19 +4565,19 @@ msgid "Config template" msgstr "Konfigurationsskabelon" #: netbox/dcim/forms/bulk_edit.py:680 netbox/dcim/forms/bulk_edit.py:1086 -#: netbox/dcim/forms/bulk_import.py:608 netbox/dcim/forms/filtersets.py:135 +#: netbox/dcim/forms/bulk_import.py:609 netbox/dcim/forms/filtersets.py:135 #: netbox/dcim/forms/filtersets.py:1438 netbox/dcim/forms/model_forms.py:661 #: netbox/dcim/forms/model_forms.py:1048 netbox/dcim/forms/model_forms.py:1065 #: netbox/extras/filtersets.py:756 msgid "Device type" msgstr "Enhedstype" -#: netbox/dcim/forms/bulk_edit.py:691 netbox/dcim/forms/bulk_import.py:589 +#: netbox/dcim/forms/bulk_edit.py:691 netbox/dcim/forms/bulk_import.py:590 #: netbox/dcim/forms/filtersets.py:140 netbox/dcim/forms/model_forms.py:669 msgid "Device role" msgstr "Enhedsrolle" -#: netbox/dcim/forms/bulk_edit.py:714 netbox/dcim/forms/bulk_import.py:614 +#: netbox/dcim/forms/bulk_edit.py:714 netbox/dcim/forms/bulk_import.py:615 #: netbox/dcim/forms/filtersets.py:829 netbox/dcim/forms/filtersets.py:938 #: netbox/dcim/forms/model_forms.py:602 netbox/dcim/forms/model_forms.py:674 #: netbox/dcim/tables/devices.py:191 netbox/extras/filtersets.py:772 @@ -4589,7 +4589,7 @@ msgstr "Enhedsrolle" msgid "Platform" msgstr "Platformen" -#: netbox/dcim/forms/bulk_edit.py:739 netbox/dcim/forms/bulk_import.py:633 +#: netbox/dcim/forms/bulk_edit.py:739 netbox/dcim/forms/bulk_import.py:634 #: netbox/dcim/forms/filtersets.py:870 netbox/dcim/forms/filtersets.py:1040 #: netbox/dcim/forms/model_forms.py:683 netbox/dcim/tables/devices.py:211 #: netbox/extras/filtersets.py:805 netbox/extras/forms/filtersets.py:411 @@ -4618,12 +4618,12 @@ msgstr "Konfiguration" msgid "Virtualization" msgstr "Virtualisering" -#: netbox/dcim/forms/bulk_edit.py:767 netbox/dcim/forms/bulk_import.py:775 +#: netbox/dcim/forms/bulk_edit.py:767 netbox/dcim/forms/bulk_import.py:776 #: netbox/dcim/forms/model_forms.py:811 netbox/dcim/forms/model_forms.py:1073 msgid "Module type" msgstr "Modultype" -#: netbox/dcim/forms/bulk_edit.py:839 netbox/dcim/forms/bulk_import.py:1528 +#: netbox/dcim/forms/bulk_edit.py:839 netbox/dcim/forms/bulk_import.py:1616 #: netbox/dcim/forms/filtersets.py:1305 netbox/dcim/forms/model_forms.py:888 #: netbox/dcim/tables/cables.py:124 msgid "Bundle" @@ -4647,8 +4647,8 @@ msgstr "Mærke" msgid "Length" msgstr "Længde" -#: netbox/dcim/forms/bulk_edit.py:858 netbox/dcim/forms/bulk_import.py:1535 -#: netbox/dcim/forms/bulk_import.py:1538 netbox/dcim/forms/filtersets.py:1291 +#: netbox/dcim/forms/bulk_edit.py:858 netbox/dcim/forms/bulk_import.py:1623 +#: netbox/dcim/forms/bulk_import.py:1626 netbox/dcim/forms/filtersets.py:1291 msgid "Length unit" msgstr "Længdeenhed" @@ -4656,17 +4656,17 @@ msgstr "Længdeenhed" msgid "Domain" msgstr "domæne" -#: netbox/dcim/forms/bulk_edit.py:932 netbox/dcim/forms/bulk_import.py:1735 +#: netbox/dcim/forms/bulk_edit.py:932 netbox/dcim/forms/bulk_import.py:1823 #: netbox/dcim/forms/filtersets.py:1384 netbox/dcim/forms/model_forms.py:927 msgid "Power panel" msgstr "Strømpanel" -#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/bulk_import.py:1771 +#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/bulk_import.py:1859 #: netbox/dcim/forms/filtersets.py:1406 msgid "Supply" msgstr "Forsyning" -#: netbox/dcim/forms/bulk_edit.py:960 netbox/dcim/forms/bulk_import.py:1776 +#: netbox/dcim/forms/bulk_edit.py:960 netbox/dcim/forms/bulk_import.py:1864 #: netbox/dcim/forms/filtersets.py:1411 msgid "Phase" msgstr "Fase" @@ -4703,13 +4703,13 @@ msgstr "Tildelt lodtrækning" msgid "Allocated power draw (watts)" msgstr "Allokeret forbrug (watt)" -#: netbox/dcim/forms/bulk_edit.py:1107 netbox/dcim/forms/bulk_import.py:908 +#: netbox/dcim/forms/bulk_edit.py:1107 netbox/dcim/forms/bulk_import.py:909 #: netbox/dcim/forms/model_forms.py:1144 netbox/dcim/forms/model_forms.py:1509 #: netbox/dcim/forms/model_forms.py:1838 netbox/dcim/forms/object_import.py:56 msgid "Power port" msgstr "Strømstik" -#: netbox/dcim/forms/bulk_edit.py:1112 netbox/dcim/forms/bulk_import.py:915 +#: netbox/dcim/forms/bulk_edit.py:1112 netbox/dcim/forms/bulk_import.py:916 msgid "Feed leg" msgstr "Foderben" @@ -4719,7 +4719,7 @@ msgid "Management only" msgstr "Kun ledelse" #: netbox/dcim/forms/bulk_edit.py:1168 netbox/dcim/forms/bulk_edit.py:1495 -#: netbox/dcim/forms/bulk_import.py:1001 netbox/dcim/forms/filtersets.py:1711 +#: netbox/dcim/forms/bulk_import.py:1002 netbox/dcim/forms/filtersets.py:1711 #: netbox/dcim/forms/filtersets.py:1796 netbox/dcim/forms/object_import.py:91 #: netbox/dcim/models/device_component_templates.py:473 #: netbox/dcim/models/device_components.py:930 netbox/dcim/ui/panels.py:494 @@ -4727,7 +4727,7 @@ msgid "PoE mode" msgstr "PoE-tilstand" #: netbox/dcim/forms/bulk_edit.py:1174 netbox/dcim/forms/bulk_edit.py:1501 -#: netbox/dcim/forms/bulk_import.py:1007 netbox/dcim/forms/filtersets.py:1716 +#: netbox/dcim/forms/bulk_import.py:1008 netbox/dcim/forms/filtersets.py:1716 #: netbox/dcim/forms/filtersets.py:1801 netbox/dcim/forms/object_import.py:96 #: netbox/dcim/models/device_component_templates.py:480 #: netbox/dcim/models/device_components.py:937 netbox/dcim/ui/panels.py:495 @@ -4753,7 +4753,7 @@ msgstr "FORSINKELSE" msgid "Virtual device contexts" msgstr "Virtuelle enhedskontekster" -#: netbox/dcim/forms/bulk_edit.py:1509 netbox/dcim/forms/bulk_import.py:1010 +#: netbox/dcim/forms/bulk_edit.py:1509 netbox/dcim/forms/bulk_import.py:1011 #: netbox/virtualization/forms/bulk_edit.py:252 #: netbox/virtualization/forms/bulk_import.py:205 #: netbox/vpn/forms/bulk_edit.py:128 netbox/vpn/forms/bulk_edit.py:196 @@ -4764,7 +4764,7 @@ msgstr "Virtuelle enhedskontekster" msgid "Mode" msgstr "Tilstand" -#: netbox/dcim/forms/bulk_edit.py:1517 netbox/dcim/forms/bulk_import.py:1016 +#: netbox/dcim/forms/bulk_edit.py:1517 netbox/dcim/forms/bulk_import.py:1017 #: netbox/dcim/forms/model_forms.py:1585 netbox/ipam/forms/bulk_import.py:184 #: netbox/ipam/forms/filtersets.py:603 netbox/ipam/models/vlans.py:99 #: netbox/virtualization/forms/bulk_edit.py:259 @@ -4773,7 +4773,7 @@ msgstr "Tilstand" msgid "VLAN group" msgstr "VLAN-gruppe" -#: netbox/dcim/forms/bulk_edit.py:1526 netbox/dcim/forms/bulk_import.py:1023 +#: netbox/dcim/forms/bulk_edit.py:1526 netbox/dcim/forms/bulk_import.py:1024 #: netbox/dcim/forms/model_forms.py:1591 netbox/dcim/tables/devices.py:627 #: netbox/dcim/ui/panels.py:498 netbox/virtualization/forms/bulk_edit.py:267 #: netbox/virtualization/forms/bulk_import.py:218 @@ -4781,7 +4781,7 @@ msgstr "VLAN-gruppe" msgid "Untagged VLAN" msgstr "Umærket VLAN" -#: netbox/dcim/forms/bulk_edit.py:1535 netbox/dcim/forms/bulk_import.py:1030 +#: netbox/dcim/forms/bulk_edit.py:1535 netbox/dcim/forms/bulk_import.py:1031 #: netbox/dcim/forms/model_forms.py:1600 netbox/dcim/tables/devices.py:633 #: netbox/virtualization/forms/bulk_edit.py:275 #: netbox/virtualization/forms/bulk_import.py:225 @@ -4797,7 +4797,7 @@ msgstr "Tilføj taggede VLAN'er" msgid "Remove tagged VLANs" msgstr "Fjern mærkede VLAN'er" -#: netbox/dcim/forms/bulk_edit.py:1558 netbox/dcim/forms/bulk_import.py:1043 +#: netbox/dcim/forms/bulk_edit.py:1558 netbox/dcim/forms/bulk_import.py:1044 #: netbox/dcim/forms/model_forms.py:1609 #: netbox/virtualization/forms/bulk_import.py:238 #: netbox/virtualization/forms/model_forms.py:439 @@ -4865,239 +4865,239 @@ msgstr "Interfacetilstand skal specificeres for at tildele VLAN'er" msgid "An access interface cannot have tagged VLANs assigned." msgstr "En adgangsgrænseflade kan ikke have tildelt taggede VLAN'er." -#: netbox/dcim/forms/bulk_import.py:81 +#: netbox/dcim/forms/bulk_import.py:82 msgid "Name of parent region" msgstr "Navn på overordnet region" -#: netbox/dcim/forms/bulk_import.py:95 +#: netbox/dcim/forms/bulk_import.py:96 msgid "Name of parent site group" msgstr "Navn på overordnet områdegruppe" -#: netbox/dcim/forms/bulk_import.py:114 +#: netbox/dcim/forms/bulk_import.py:115 msgid "Assigned region" msgstr "Tildelt region" -#: netbox/dcim/forms/bulk_import.py:121 netbox/tenancy/forms/bulk_import.py:50 +#: netbox/dcim/forms/bulk_import.py:122 netbox/tenancy/forms/bulk_import.py:50 #: netbox/wireless/forms/bulk_import.py:41 msgid "Assigned group" msgstr "Tildelt gruppe" -#: netbox/dcim/forms/bulk_import.py:140 +#: netbox/dcim/forms/bulk_import.py:141 msgid "available options" msgstr "tilgængelige muligheder" -#: netbox/dcim/forms/bulk_import.py:151 netbox/dcim/forms/bulk_import.py:659 -#: netbox/dcim/forms/bulk_import.py:1732 netbox/ipam/forms/bulk_import.py:519 +#: netbox/dcim/forms/bulk_import.py:152 netbox/dcim/forms/bulk_import.py:660 +#: netbox/dcim/forms/bulk_import.py:1820 netbox/ipam/forms/bulk_import.py:519 #: netbox/virtualization/forms/bulk_import.py:66 msgid "Assigned site" msgstr "Tildelt område" -#: netbox/dcim/forms/bulk_import.py:158 +#: netbox/dcim/forms/bulk_import.py:159 msgid "Parent location" msgstr "Overordnet placering" -#: netbox/dcim/forms/bulk_import.py:160 +#: netbox/dcim/forms/bulk_import.py:161 msgid "Location not found." msgstr "Placering ikke fundet." -#: netbox/dcim/forms/bulk_import.py:211 +#: netbox/dcim/forms/bulk_import.py:212 msgid "The manufacturer of this rack type" msgstr "Producenten af denne racktype" -#: netbox/dcim/forms/bulk_import.py:222 +#: netbox/dcim/forms/bulk_import.py:223 msgid "The lowest-numbered position in the rack" msgstr "Den laveste nummererede position i racket" -#: netbox/dcim/forms/bulk_import.py:227 netbox/dcim/forms/bulk_import.py:309 +#: netbox/dcim/forms/bulk_import.py:228 netbox/dcim/forms/bulk_import.py:310 msgid "Rail-to-rail width (in inches)" msgstr "Skinne-til-skinne-bredde (i tommer)" -#: netbox/dcim/forms/bulk_import.py:233 netbox/dcim/forms/bulk_import.py:319 +#: netbox/dcim/forms/bulk_import.py:234 netbox/dcim/forms/bulk_import.py:320 msgid "Unit for outer dimensions" msgstr "Enhed til udvendige mål" -#: netbox/dcim/forms/bulk_import.py:239 netbox/dcim/forms/bulk_import.py:331 +#: netbox/dcim/forms/bulk_import.py:240 netbox/dcim/forms/bulk_import.py:332 msgid "Unit for rack weights" msgstr "Enhed til rackvægte" -#: netbox/dcim/forms/bulk_import.py:271 +#: netbox/dcim/forms/bulk_import.py:272 msgid "Name of assigned tenant" msgstr "Navn på tildelt lejer" -#: netbox/dcim/forms/bulk_import.py:274 netbox/dcim/forms/filtersets.py:410 +#: netbox/dcim/forms/bulk_import.py:275 netbox/dcim/forms/filtersets.py:410 #: netbox/dcim/forms/filtersets.py:515 netbox/dcim/ui/panels.py:47 #: netbox/ipam/forms/filtersets.py:497 msgid "Rack group" msgstr "Rackgruppe" -#: netbox/dcim/forms/bulk_import.py:278 +#: netbox/dcim/forms/bulk_import.py:279 msgid "Name of assigned group" msgstr "Navn på tildelt gruppe" -#: netbox/dcim/forms/bulk_import.py:290 +#: netbox/dcim/forms/bulk_import.py:291 msgid "Name of assigned role" msgstr "Navn på tildelt rolle" -#: netbox/dcim/forms/bulk_import.py:297 +#: netbox/dcim/forms/bulk_import.py:298 msgid "Rack type model" msgstr "Model af racktype" -#: netbox/dcim/forms/bulk_import.py:325 netbox/dcim/forms/bulk_import.py:490 -#: netbox/dcim/forms/bulk_import.py:699 +#: netbox/dcim/forms/bulk_import.py:326 netbox/dcim/forms/bulk_import.py:491 +#: netbox/dcim/forms/bulk_import.py:700 msgid "Airflow direction" msgstr "Luftstrømsretning" -#: netbox/dcim/forms/bulk_import.py:358 +#: netbox/dcim/forms/bulk_import.py:359 msgid "Width must be set if not specifying a rack type." msgstr "Bredden skal indstilles, hvis der ikke angives en racktype." -#: netbox/dcim/forms/bulk_import.py:360 +#: netbox/dcim/forms/bulk_import.py:361 msgid "U height must be set if not specifying a rack type." msgstr "U-højde skal indstilles, hvis der ikke angives en racktype." -#: netbox/dcim/forms/bulk_import.py:368 +#: netbox/dcim/forms/bulk_import.py:369 msgid "Parent site" msgstr "Overordnet område" -#: netbox/dcim/forms/bulk_import.py:375 netbox/dcim/forms/bulk_import.py:1745 +#: netbox/dcim/forms/bulk_import.py:376 netbox/dcim/forms/bulk_import.py:1833 msgid "Rack's location (if any)" msgstr "Rackets placering (hvis en sådan findes)" -#: netbox/dcim/forms/bulk_import.py:384 netbox/dcim/forms/model_forms.py:376 +#: netbox/dcim/forms/bulk_import.py:385 netbox/dcim/forms/model_forms.py:376 #: netbox/dcim/tables/racks.py:242 #: netbox/templates/dcim/rackreservation.html:7 msgid "Units" msgstr "Enheder" -#: netbox/dcim/forms/bulk_import.py:387 +#: netbox/dcim/forms/bulk_import.py:388 msgid "Comma-separated list of individual unit numbers" msgstr "Kommasepareret liste over individuelle enhedsnumre" -#: netbox/dcim/forms/bulk_import.py:435 +#: netbox/dcim/forms/bulk_import.py:436 msgid "The manufacturer which produces this device type" msgstr "Producenten, der fremstiller denne enhedstype" -#: netbox/dcim/forms/bulk_import.py:442 +#: netbox/dcim/forms/bulk_import.py:443 msgid "The default platform for devices of this type (optional)" msgstr "Standardplatformen for enheder af denne type (valgfrit)" -#: netbox/dcim/forms/bulk_import.py:447 +#: netbox/dcim/forms/bulk_import.py:448 msgid "Device weight" msgstr "Enhedsvægt" -#: netbox/dcim/forms/bulk_import.py:453 +#: netbox/dcim/forms/bulk_import.py:454 msgid "Unit for device weight" msgstr "Enhed til enhedens vægt" -#: netbox/dcim/forms/bulk_import.py:495 +#: netbox/dcim/forms/bulk_import.py:496 msgid "Module weight" msgstr "Modulvægt" -#: netbox/dcim/forms/bulk_import.py:501 +#: netbox/dcim/forms/bulk_import.py:502 msgid "Unit for module weight" msgstr "Enhed til modulvægt" -#: netbox/dcim/forms/bulk_import.py:506 +#: netbox/dcim/forms/bulk_import.py:507 msgid "Attribute values for the assigned profile, passed as a dictionary" msgstr "Attributværdier for den tildelte profil, videregivet som en ordbog" -#: netbox/dcim/forms/bulk_import.py:521 +#: netbox/dcim/forms/bulk_import.py:522 msgid "Profile must be specified if attribute data is provided." msgstr "Profil skal angives, hvis attributdata er angivet." -#: netbox/dcim/forms/bulk_import.py:534 +#: netbox/dcim/forms/bulk_import.py:535 msgid "Parent Device Role" msgstr "Overordnet enhedsrolle" -#: netbox/dcim/forms/bulk_import.py:536 +#: netbox/dcim/forms/bulk_import.py:537 msgid "Device role not found." msgstr "Enhedsrollen blev ikke fundet." -#: netbox/dcim/forms/bulk_import.py:560 +#: netbox/dcim/forms/bulk_import.py:561 msgid "Parent platform" msgstr "Overordnet platform" -#: netbox/dcim/forms/bulk_import.py:562 +#: netbox/dcim/forms/bulk_import.py:563 msgid "Platform not found." msgstr "Platformen blev ikke fundet." -#: netbox/dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:571 msgid "Limit platform assignments to this manufacturer" msgstr "Begræns platformstildelinger til denne producent" -#: netbox/dcim/forms/bulk_import.py:592 netbox/dcim/forms/bulk_import.py:1814 +#: netbox/dcim/forms/bulk_import.py:593 netbox/dcim/forms/bulk_import.py:1902 #: netbox/tenancy/forms/bulk_import.py:116 msgid "Assigned role" msgstr "Tildelt rolle" -#: netbox/dcim/forms/bulk_import.py:605 +#: netbox/dcim/forms/bulk_import.py:606 msgid "Device type manufacturer" msgstr "Producent af enhedstype" -#: netbox/dcim/forms/bulk_import.py:611 +#: netbox/dcim/forms/bulk_import.py:612 msgid "Device type model" msgstr "Enhedstypemodel" -#: netbox/dcim/forms/bulk_import.py:618 +#: netbox/dcim/forms/bulk_import.py:619 #: netbox/virtualization/forms/bulk_import.py:165 msgid "Assigned platform" msgstr "Tildelt platform" -#: netbox/dcim/forms/bulk_import.py:626 netbox/dcim/forms/bulk_import.py:630 +#: netbox/dcim/forms/bulk_import.py:627 netbox/dcim/forms/bulk_import.py:631 #: netbox/dcim/forms/model_forms.py:697 msgid "Virtual chassis" msgstr "Virtuelt kabinet" -#: netbox/dcim/forms/bulk_import.py:637 +#: netbox/dcim/forms/bulk_import.py:638 msgid "Virtualization cluster" msgstr "Virtualiseringsklynge" -#: netbox/dcim/forms/bulk_import.py:666 +#: netbox/dcim/forms/bulk_import.py:667 msgid "Assigned location (if any)" msgstr "Tildelt placering (hvis en sådan findes)" -#: netbox/dcim/forms/bulk_import.py:673 +#: netbox/dcim/forms/bulk_import.py:674 msgid "Assigned rack (if any)" msgstr "Tildelt rack (hvis et sådant findes)" -#: netbox/dcim/forms/bulk_import.py:676 netbox/dcim/forms/model_forms.py:653 +#: netbox/dcim/forms/bulk_import.py:677 netbox/dcim/forms/model_forms.py:653 msgid "Face" msgstr "Ansigt" -#: netbox/dcim/forms/bulk_import.py:679 +#: netbox/dcim/forms/bulk_import.py:680 msgid "Mounted rack face" msgstr "Monteret rackflade" -#: netbox/dcim/forms/bulk_import.py:686 +#: netbox/dcim/forms/bulk_import.py:687 msgid "Parent device (for child devices)" msgstr "Overordnet enhed (til underordnede enheder)" -#: netbox/dcim/forms/bulk_import.py:689 +#: netbox/dcim/forms/bulk_import.py:690 msgid "Device bay" msgstr "Enhedsplads" -#: netbox/dcim/forms/bulk_import.py:693 +#: netbox/dcim/forms/bulk_import.py:694 msgid "Device bay in which this device is installed (for child devices)" msgstr "" "Enhedsplads, hvor denne enhed er installeret (til underordnede enheder)" -#: netbox/dcim/forms/bulk_import.py:766 +#: netbox/dcim/forms/bulk_import.py:767 msgid "The device in which this module is installed" msgstr "Enheden, hvor dette modul er installeret" -#: netbox/dcim/forms/bulk_import.py:769 netbox/dcim/forms/model_forms.py:801 +#: netbox/dcim/forms/bulk_import.py:770 netbox/dcim/forms/model_forms.py:801 msgid "Module bay" msgstr "Modulplads" -#: netbox/dcim/forms/bulk_import.py:772 +#: netbox/dcim/forms/bulk_import.py:773 msgid "The module bay in which this module is installed" msgstr "Modulrummet, hvor dette modul er installeret" -#: netbox/dcim/forms/bulk_import.py:778 +#: netbox/dcim/forms/bulk_import.py:779 msgid "The type of module" msgstr "Typen af modul" -#: netbox/dcim/forms/bulk_import.py:788 +#: netbox/dcim/forms/bulk_import.py:789 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" @@ -5105,89 +5105,89 @@ msgstr "" "Udfyld automatisk komponenter, der er knyttet til denne modultype (aktiveret" " som standard)" -#: netbox/dcim/forms/bulk_import.py:832 netbox/dcim/forms/bulk_import.py:858 -#: netbox/dcim/forms/bulk_import.py:884 +#: netbox/dcim/forms/bulk_import.py:833 netbox/dcim/forms/bulk_import.py:859 +#: netbox/dcim/forms/bulk_import.py:885 msgid "Port type" msgstr "Porttype" -#: netbox/dcim/forms/bulk_import.py:840 netbox/dcim/forms/bulk_import.py:866 +#: netbox/dcim/forms/bulk_import.py:841 netbox/dcim/forms/bulk_import.py:867 msgid "Port speed in bps" msgstr "Porthastighed i bps" -#: netbox/dcim/forms/bulk_import.py:905 +#: netbox/dcim/forms/bulk_import.py:906 msgid "Outlet type" msgstr "Udtagstype" -#: netbox/dcim/forms/bulk_import.py:912 +#: netbox/dcim/forms/bulk_import.py:913 msgid "Local power port which feeds this outlet" msgstr "Lokalt strømstik, der forsyner dette strømudtag" -#: netbox/dcim/forms/bulk_import.py:918 +#: netbox/dcim/forms/bulk_import.py:919 msgid "Electrical phase (for three-phase circuits)" msgstr "Elektrisk fase (til trefasede kredsløb)" -#: netbox/dcim/forms/bulk_import.py:962 netbox/dcim/forms/model_forms.py:1547 +#: netbox/dcim/forms/bulk_import.py:963 netbox/dcim/forms/model_forms.py:1547 #: netbox/virtualization/forms/bulk_import.py:195 #: netbox/virtualization/forms/model_forms.py:400 msgid "Parent interface" msgstr "Overordnet grænseflade" -#: netbox/dcim/forms/bulk_import.py:969 netbox/dcim/forms/model_forms.py:1555 +#: netbox/dcim/forms/bulk_import.py:970 netbox/dcim/forms/model_forms.py:1555 #: netbox/virtualization/forms/bulk_import.py:202 #: netbox/virtualization/forms/model_forms.py:408 msgid "Bridged interface" msgstr "Brobaseret grænseflade" -#: netbox/dcim/forms/bulk_import.py:972 +#: netbox/dcim/forms/bulk_import.py:973 msgid "Lag" msgstr "Forsinkelse" -#: netbox/dcim/forms/bulk_import.py:976 +#: netbox/dcim/forms/bulk_import.py:977 msgid "Parent LAG interface" msgstr "Overordnet LAG-grænseflade" -#: netbox/dcim/forms/bulk_import.py:979 +#: netbox/dcim/forms/bulk_import.py:980 msgid "Vdcs" msgstr "Vdcs" -#: netbox/dcim/forms/bulk_import.py:984 +#: netbox/dcim/forms/bulk_import.py:985 msgid "VDC names separated by commas, encased with double quotes. Example:" msgstr "" "VDC-navne adskilt af kommaer, indkapslet med dobbelte anførselstegn. " "Eksempel:" -#: netbox/dcim/forms/bulk_import.py:990 +#: netbox/dcim/forms/bulk_import.py:991 msgid "Physical medium" msgstr "Fysisk medium" -#: netbox/dcim/forms/bulk_import.py:993 netbox/dcim/forms/filtersets.py:1682 +#: netbox/dcim/forms/bulk_import.py:994 netbox/dcim/forms/filtersets.py:1682 msgid "Duplex" msgstr "Duplex" -#: netbox/dcim/forms/bulk_import.py:998 +#: netbox/dcim/forms/bulk_import.py:999 msgid "Poe mode" msgstr "Poe-tilstand" -#: netbox/dcim/forms/bulk_import.py:1004 +#: netbox/dcim/forms/bulk_import.py:1005 msgid "Poe type" msgstr "Poe-type" -#: netbox/dcim/forms/bulk_import.py:1013 +#: netbox/dcim/forms/bulk_import.py:1014 #: netbox/virtualization/forms/bulk_import.py:208 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "IEEE 802.1Q driftstilstand (til L2-grænseflader)" -#: netbox/dcim/forms/bulk_import.py:1020 +#: netbox/dcim/forms/bulk_import.py:1021 #: netbox/virtualization/forms/bulk_import.py:215 msgid "Filter VLANs available for assignment by group" msgstr "Filtrer VLAN'er, der er tilgængelige til tildeling efter gruppe" -#: netbox/dcim/forms/bulk_import.py:1027 +#: netbox/dcim/forms/bulk_import.py:1028 #: netbox/virtualization/forms/bulk_import.py:222 msgid "Assigned untagged VLAN ID (filtered by VLAN group)" msgstr "Tildelt ikke-tagget VLAN ID (filtreret efter VLAN-gruppe)" -#: netbox/dcim/forms/bulk_import.py:1036 +#: netbox/dcim/forms/bulk_import.py:1037 #: netbox/virtualization/forms/bulk_import.py:231 msgid "" "Assigned tagged VLAN IDs separated by commas, encased with double quotes " @@ -5196,12 +5196,12 @@ msgstr "" "Tildelte taggede VLAN-id'er adskilt af kommaer, indkapslet med dobbelte " "anførselstegn (filtreret efter VLAN-gruppe). Eksempel:" -#: netbox/dcim/forms/bulk_import.py:1047 +#: netbox/dcim/forms/bulk_import.py:1048 #: netbox/virtualization/forms/bulk_import.py:242 msgid "Assigned Q-in-Q Service VLAN ID (filtered by VLAN group)" msgstr "Tildelt Q-in-Q-service-VLAN-id (filtreret efter VLAN-gruppe)" -#: netbox/dcim/forms/bulk_import.py:1054 netbox/ipam/forms/bulk_import.py:174 +#: netbox/dcim/forms/bulk_import.py:1055 netbox/ipam/forms/bulk_import.py:174 #: netbox/ipam/forms/bulk_import.py:259 netbox/ipam/forms/bulk_import.py:295 #: netbox/ipam/forms/filtersets.py:230 netbox/ipam/forms/filtersets.py:314 #: netbox/ipam/forms/filtersets.py:383 @@ -5209,74 +5209,107 @@ msgstr "Tildelt Q-in-Q-service-VLAN-id (filtreret efter VLAN-gruppe)" msgid "Assigned VRF" msgstr "Tildelt VRF" -#: netbox/dcim/forms/bulk_import.py:1057 +#: netbox/dcim/forms/bulk_import.py:1058 msgid "Rf role" msgstr "Rf-rolle" -#: netbox/dcim/forms/bulk_import.py:1060 +#: netbox/dcim/forms/bulk_import.py:1061 msgid "Wireless role (AP/station)" msgstr "Trådløs rolle (AP/station)" -#: netbox/dcim/forms/bulk_import.py:1103 +#: netbox/dcim/forms/bulk_import.py:1104 #, python-brace-format msgid "VDC {vdc} is not assigned to device {device}" msgstr "VDC {vdc} er ikke tildelt enheden {device}" -#: netbox/dcim/forms/bulk_import.py:1119 netbox/dcim/forms/bulk_import.py:1137 -#: netbox/dcim/forms/bulk_import.py:1518 +#: netbox/dcim/forms/bulk_import.py:1120 netbox/dcim/forms/bulk_import.py:1225 +#: netbox/dcim/forms/bulk_import.py:1606 msgid "Physical medium classification" msgstr "Klassificering af fysisk medium" -#: netbox/dcim/forms/bulk_import.py:1173 +#: netbox/dcim/forms/bulk_import.py:1123 netbox/dcim/forms/model_forms.py:1846 +#: netbox/dcim/forms/object_import.py:145 +msgid "Rear port" +msgstr "Bageste port" + +#: netbox/dcim/forms/bulk_import.py:1126 +msgid "Corresponding rear port (mapped to the front port's first position)" +msgstr "" +"Tilsvarende bageste port (kortlagt til den forreste ports første position)" + +#: netbox/dcim/forms/bulk_import.py:1129 +msgid "Rear port position" +msgstr "Bageste portposition" + +#: netbox/dcim/forms/bulk_import.py:1131 +msgid "Mapped position on the corresponding rear port (defaults to 1)" +msgstr "Kortlagt position på den tilsvarende bageste port (standard 1)" + +#: netbox/dcim/forms/bulk_import.py:1175 netbox/dcim/models/base.py:59 +#, python-brace-format +msgid "" +"Invalid rear port position ({rear_port_position}): Rear port {name} has only" +" {positions} positions." +msgstr "" +"Ugyldig bageste portposition ({rear_port_position}): Bageste port {name} har" +" kun {positions} positioner." + +#: netbox/dcim/forms/bulk_import.py:1193 +#, python-brace-format +msgid "Rear port {name} position {rear_port_position} is already occupied." +msgstr "" +"Bageste port {name} position {rear_port_position} Den er allerede besat." + +#: netbox/dcim/forms/bulk_import.py:1261 msgid "Installed device" msgstr "Installeret enhed" -#: netbox/dcim/forms/bulk_import.py:1177 +#: netbox/dcim/forms/bulk_import.py:1265 msgid "Child device installed within this bay" msgstr "Underordnet enhed installeret på denne plads" -#: netbox/dcim/forms/bulk_import.py:1179 +#: netbox/dcim/forms/bulk_import.py:1267 msgid "Child device not found." msgstr "Underordnet enhed blev ikke fundet." -#: netbox/dcim/forms/bulk_import.py:1243 +#: netbox/dcim/forms/bulk_import.py:1331 msgid "Parent inventory item" msgstr "Overordnet beholdningspost" -#: netbox/dcim/forms/bulk_import.py:1246 +#: netbox/dcim/forms/bulk_import.py:1334 msgid "Component type" msgstr "Komponenttype" -#: netbox/dcim/forms/bulk_import.py:1250 +#: netbox/dcim/forms/bulk_import.py:1338 msgid "Component Type" msgstr "Komponenttype" -#: netbox/dcim/forms/bulk_import.py:1253 +#: netbox/dcim/forms/bulk_import.py:1341 msgid "Component name" msgstr "Komponentnavn" -#: netbox/dcim/forms/bulk_import.py:1255 +#: netbox/dcim/forms/bulk_import.py:1343 msgid "Component Name" msgstr "Komponentnavn" -#: netbox/dcim/forms/bulk_import.py:1298 netbox/dcim/forms/bulk_import.py:1316 +#: netbox/dcim/forms/bulk_import.py:1386 netbox/dcim/forms/bulk_import.py:1404 msgid "Component name must be specified when component type is specified" msgstr "Komponentnavnet skal angives, når komponenttypen angives" -#: netbox/dcim/forms/bulk_import.py:1308 +#: netbox/dcim/forms/bulk_import.py:1396 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "Komponent ikke fundet: {device} - {component_name}" -#: netbox/dcim/forms/bulk_import.py:1321 +#: netbox/dcim/forms/bulk_import.py:1409 msgid "Component type must be specified when component name is specified" msgstr "Komponenttype skal angives, når komponentnavnet angives" -#: netbox/dcim/forms/bulk_import.py:1348 netbox/ipam/forms/bulk_import.py:320 +#: netbox/dcim/forms/bulk_import.py:1436 netbox/ipam/forms/bulk_import.py:320 msgid "Parent device of assigned interface (if any)" msgstr "Overordnet enhed med tildelt grænseflade (hvis nogen)" -#: netbox/dcim/forms/bulk_import.py:1351 netbox/ipam/forms/bulk_import.py:323 +#: netbox/dcim/forms/bulk_import.py:1439 netbox/ipam/forms/bulk_import.py:323 #: netbox/virtualization/filtersets.py:354 #: netbox/virtualization/filtersets.py:412 #: netbox/virtualization/forms/bulk_edit.py:219 @@ -5290,133 +5323,133 @@ msgstr "Overordnet enhed med tildelt grænseflade (hvis nogen)" msgid "Virtual machine" msgstr "Virtuel maskine" -#: netbox/dcim/forms/bulk_import.py:1355 netbox/ipam/forms/bulk_import.py:327 +#: netbox/dcim/forms/bulk_import.py:1443 netbox/ipam/forms/bulk_import.py:327 msgid "Parent VM of assigned interface (if any)" msgstr "Overordnet VM for tildelt grænseflade (hvis nogen)" -#: netbox/dcim/forms/bulk_import.py:1362 netbox/ipam/filtersets.py:1111 +#: netbox/dcim/forms/bulk_import.py:1450 netbox/ipam/filtersets.py:1111 #: netbox/ipam/forms/bulk_import.py:334 msgid "Assigned interface" msgstr "Tildelt grænseflade" -#: netbox/dcim/forms/bulk_import.py:1366 +#: netbox/dcim/forms/bulk_import.py:1454 msgid "Make this the primary MAC address for the assigned interface" msgstr "Gør dette til den primære MAC-adresse for den tildelte grænseflade" -#: netbox/dcim/forms/bulk_import.py:1404 +#: netbox/dcim/forms/bulk_import.py:1492 msgid "Must specify the parent device or VM when assigning an interface" msgstr "" "Den overordnede enhed eller VM skal angives når en grænseflade er tildelt" -#: netbox/dcim/forms/bulk_import.py:1437 +#: netbox/dcim/forms/bulk_import.py:1525 msgid "Side A site" msgstr "Side A område" -#: netbox/dcim/forms/bulk_import.py:1441 +#: netbox/dcim/forms/bulk_import.py:1529 #: netbox/wireless/forms/bulk_import.py:93 msgid "Site of parent device A (if any)" msgstr "Område for overordnet enhed A (hvis et sådant findes)" -#: netbox/dcim/forms/bulk_import.py:1444 +#: netbox/dcim/forms/bulk_import.py:1532 msgid "Side A device" msgstr "Side A-enhed" -#: netbox/dcim/forms/bulk_import.py:1448 netbox/dcim/forms/bulk_import.py:1481 +#: netbox/dcim/forms/bulk_import.py:1536 netbox/dcim/forms/bulk_import.py:1569 msgid "Device name (for device component terminations)" msgstr "Enhedsnavn (for terminering af enhedskomponenter)" -#: netbox/dcim/forms/bulk_import.py:1451 +#: netbox/dcim/forms/bulk_import.py:1539 msgid "Side A power panel" msgstr "Side A strømpanel" -#: netbox/dcim/forms/bulk_import.py:1455 netbox/dcim/forms/bulk_import.py:1488 +#: netbox/dcim/forms/bulk_import.py:1543 netbox/dcim/forms/bulk_import.py:1576 msgid "Power panel name (for power feed terminations)" msgstr "Navn på strømpanel (for strømtilførselsafslutninger)" -#: netbox/dcim/forms/bulk_import.py:1458 +#: netbox/dcim/forms/bulk_import.py:1546 msgid "Side A type" msgstr "Side A type" -#: netbox/dcim/forms/bulk_import.py:1464 +#: netbox/dcim/forms/bulk_import.py:1552 msgid "Side A name" msgstr "Side A navn" -#: netbox/dcim/forms/bulk_import.py:1465 netbox/dcim/forms/bulk_import.py:1498 +#: netbox/dcim/forms/bulk_import.py:1553 netbox/dcim/forms/bulk_import.py:1586 msgid "Termination name" msgstr "Opsigelsesnavn" -#: netbox/dcim/forms/bulk_import.py:1470 +#: netbox/dcim/forms/bulk_import.py:1558 msgid "Side B site" msgstr "Side B område" -#: netbox/dcim/forms/bulk_import.py:1474 +#: netbox/dcim/forms/bulk_import.py:1562 #: netbox/wireless/forms/bulk_import.py:114 msgid "Site of parent device B (if any)" msgstr "Området for overordnet enhed B (hvis et sådant findes)" -#: netbox/dcim/forms/bulk_import.py:1477 +#: netbox/dcim/forms/bulk_import.py:1565 msgid "Side B device" msgstr "Side B-enhed" -#: netbox/dcim/forms/bulk_import.py:1484 +#: netbox/dcim/forms/bulk_import.py:1572 msgid "Side B power panel" msgstr "Side B strømpanel" -#: netbox/dcim/forms/bulk_import.py:1491 +#: netbox/dcim/forms/bulk_import.py:1579 msgid "Side B type" msgstr "Side B type" -#: netbox/dcim/forms/bulk_import.py:1497 +#: netbox/dcim/forms/bulk_import.py:1585 msgid "Side B name" msgstr "Side B navn" -#: netbox/dcim/forms/bulk_import.py:1506 +#: netbox/dcim/forms/bulk_import.py:1594 #: netbox/templates/dcim/panels/connection.html:60 #: netbox/wireless/forms/bulk_import.py:133 msgid "Connection status" msgstr "Forbindelsesstatus" -#: netbox/dcim/forms/bulk_import.py:1512 +#: netbox/dcim/forms/bulk_import.py:1600 msgid "Cable connection profile" msgstr "Kabelforbindelsesprofil" -#: netbox/dcim/forms/bulk_import.py:1532 +#: netbox/dcim/forms/bulk_import.py:1620 msgid "Cable bundle name" msgstr "Navn på kabelbundt" -#: netbox/dcim/forms/bulk_import.py:1544 +#: netbox/dcim/forms/bulk_import.py:1632 msgid "Color name (e.g. \"Red\") or hex code (e.g. \"f44336\")" msgstr "Farvenavn (f.eks. „Rød“) eller hex-kode (f.eks. „f44336\")" -#: netbox/dcim/forms/bulk_import.py:1587 +#: netbox/dcim/forms/bulk_import.py:1675 #, python-brace-format msgid "Invalid side designation: {side}" msgstr "Ugyldig sidebetegnelse: {side}" -#: netbox/dcim/forms/bulk_import.py:1606 +#: netbox/dcim/forms/bulk_import.py:1694 #, python-brace-format msgid "" "Side {side_upper}: {power_panel} {termination_object} is already connected" msgstr "" "Side {side_upper}: {power_panel} {termination_object} er allerede tilsluttet" -#: netbox/dcim/forms/bulk_import.py:1612 +#: netbox/dcim/forms/bulk_import.py:1700 #, python-brace-format msgid "{side_upper} side termination not found: {power_panel} {name}" msgstr "{side_upper} sideafslutning ikke fundet: {power_panel} {name}" -#: netbox/dcim/forms/bulk_import.py:1630 +#: netbox/dcim/forms/bulk_import.py:1718 #, python-brace-format msgid "Side {side_upper}: {device} {termination_object} is already connected" msgstr "" "Side {side_upper}: {device} {termination_object} er allerede tilsluttet" -#: netbox/dcim/forms/bulk_import.py:1636 +#: netbox/dcim/forms/bulk_import.py:1724 #, python-brace-format msgid "{side_upper} side termination not found: {device} {name}" msgstr "{side_upper} sideafslutning ikke fundet: {device} {name}" -#: netbox/dcim/forms/bulk_import.py:1658 +#: netbox/dcim/forms/bulk_import.py:1746 #, python-brace-format msgid "" "{color} did not match any used color name and was longer than six " @@ -5425,53 +5458,53 @@ msgstr "" "{color} matchede ikke noget brugt farvenavn og var længere end seks tegn: " "ugyldig hex." -#: netbox/dcim/forms/bulk_import.py:1683 netbox/dcim/forms/model_forms.py:962 +#: netbox/dcim/forms/bulk_import.py:1771 netbox/dcim/forms/model_forms.py:962 #: netbox/dcim/tables/devices.py:1154 #: netbox/templates/dcim/panels/virtual_chassis_members.html:10 msgid "Master" msgstr "Mester" -#: netbox/dcim/forms/bulk_import.py:1687 +#: netbox/dcim/forms/bulk_import.py:1775 msgid "Master device" msgstr "Hovedenhed" -#: netbox/dcim/forms/bulk_import.py:1704 +#: netbox/dcim/forms/bulk_import.py:1792 msgid "Name of parent site" msgstr "Navn på overordnet område" -#: netbox/dcim/forms/bulk_import.py:1738 +#: netbox/dcim/forms/bulk_import.py:1826 msgid "Upstream power panel" msgstr "Hoved strømpanel" -#: netbox/dcim/forms/bulk_import.py:1768 +#: netbox/dcim/forms/bulk_import.py:1856 msgid "Primary or redundant" msgstr "Primær eller redundant" -#: netbox/dcim/forms/bulk_import.py:1773 +#: netbox/dcim/forms/bulk_import.py:1861 msgid "Supply type (AC/DC)" msgstr "Forsyningstype (AC/DC)" -#: netbox/dcim/forms/bulk_import.py:1778 +#: netbox/dcim/forms/bulk_import.py:1866 msgid "Single or three-phase" msgstr "Enkelt- eller trefaset" -#: netbox/dcim/forms/bulk_import.py:1828 netbox/dcim/forms/model_forms.py:1939 +#: netbox/dcim/forms/bulk_import.py:1916 netbox/dcim/forms/model_forms.py:1939 #: netbox/dcim/ui/panels.py:111 netbox/dcim/ui/panels.py:371 #: netbox/virtualization/ui/panels.py:55 msgid "Primary IPv4" msgstr "Primær IPv4" -#: netbox/dcim/forms/bulk_import.py:1832 +#: netbox/dcim/forms/bulk_import.py:1920 msgid "IPv4 address with mask, e.g. 1.2.3.4/24" msgstr "IP-adresse med maske, fx 1.2.3.4/24" -#: netbox/dcim/forms/bulk_import.py:1835 netbox/dcim/forms/model_forms.py:1948 +#: netbox/dcim/forms/bulk_import.py:1923 netbox/dcim/forms/model_forms.py:1948 #: netbox/dcim/ui/panels.py:116 netbox/dcim/ui/panels.py:376 #: netbox/virtualization/ui/panels.py:60 msgid "Primary IPv6" msgstr "Primær IPv6" -#: netbox/dcim/forms/bulk_import.py:1839 +#: netbox/dcim/forms/bulk_import.py:1927 msgid "IPv6 address with prefix length, e.g. 2001:db8::1/64" msgstr "IPv6-adresse med præfix-længde, fx 2001:db8::1/64" @@ -5958,11 +5991,6 @@ msgstr "Frontport" msgid "Power outlet" msgstr "Strømudtag" -#: netbox/dcim/forms/model_forms.py:1846 -#: netbox/dcim/forms/object_import.py:145 -msgid "Rear port" -msgstr "Bageste port" - #: netbox/dcim/forms/model_forms.py:1852 msgid "Inventory Item" msgstr "Lagergenstand" @@ -6014,7 +6042,7 @@ msgstr "" #: netbox/dcim/forms/object_create.py:312 netbox/dcim/tables/devices.py:1160 #: netbox/ipam/tables/fhrp.py:31 netbox/ipam/ui/panels.py:185 -#: netbox/ipam/views.py:1589 netbox/templates/dcim/virtualchassis_edit.html:59 +#: netbox/ipam/views.py:1594 netbox/templates/dcim/virtualchassis_edit.html:59 #: netbox/users/views.py:375 msgid "Members" msgstr "Medlemmer" @@ -6038,15 +6066,6 @@ msgstr "Medlemsenheder" msgid "A position must be specified for the first VC member." msgstr "En stilling skal specificeres for det første VC-medlem." -#: netbox/dcim/models/base.py:59 -#, python-brace-format -msgid "" -"Invalid rear port position ({rear_port_position}): Rear port {name} has only" -" {positions} positions." -msgstr "" -"Ugyldig bageste portposition ({rear_port_position}): Bageste port {name} har" -" kun {positions} positioner." - #: netbox/dcim/models/cables.py:62 msgid "cable bundle" msgstr "kabelbundt" @@ -7947,8 +7966,8 @@ msgstr "Tildelt lodtrækning (W)" #: netbox/dcim/tables/devices.py:597 netbox/dcim/views.py:3402 #: netbox/ipam/forms/model_forms.py:834 netbox/ipam/tables/fhrp.py:28 -#: netbox/ipam/ui/panels.py:252 netbox/ipam/views.py:922 -#: netbox/ipam/views.py:1047 netbox/netbox/navigation/menu.py:175 +#: netbox/ipam/ui/panels.py:252 netbox/ipam/views.py:924 +#: netbox/ipam/views.py:1052 netbox/netbox/navigation/menu.py:175 #: netbox/netbox/navigation/menu.py:177 netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "IP-adresser" @@ -8377,7 +8396,7 @@ msgstr "Virtuelle enhedskontekster" #: netbox/dcim/views.py:3414 netbox/ipam/forms/filtersets.py:469 #: netbox/ipam/models/vlans.py:308 netbox/ipam/tables/ip.py:121 -#: netbox/ipam/tables/vlans.py:52 netbox/ipam/views.py:1381 +#: netbox/ipam/tables/vlans.py:52 netbox/ipam/views.py:1386 #: netbox/netbox/navigation/menu.py:210 netbox/netbox/navigation/menu.py:212 msgid "VLANs" msgstr "VLAN'er" @@ -11325,11 +11344,11 @@ msgstr "Politik" msgid "Ports" msgstr "Havne" -#: netbox/ipam/forms/bulk_import.py:55 netbox/ipam/views.py:72 +#: netbox/ipam/forms/bulk_import.py:55 netbox/ipam/views.py:73 msgid "Import route targets" msgstr "Importer rutemål" -#: netbox/ipam/forms/bulk_import.py:61 netbox/ipam/views.py:75 +#: netbox/ipam/forms/bulk_import.py:61 netbox/ipam/views.py:76 msgid "Export route targets" msgstr "Eksporter rutemål" @@ -12185,8 +12204,8 @@ msgid "Added" msgstr "Tilføjet" #: netbox/ipam/tables/ip.py:76 netbox/ipam/tables/ip.py:111 -#: netbox/ipam/tables/vlans.py:125 netbox/ipam/views.py:621 -#: netbox/ipam/views.py:1731 netbox/netbox/navigation/menu.py:182 +#: netbox/ipam/tables/vlans.py:125 netbox/ipam/views.py:623 +#: netbox/ipam/views.py:1736 netbox/netbox/navigation/menu.py:182 #: netbox/netbox/navigation/menu.py:184 msgid "Prefixes" msgstr "Præfikser" @@ -12389,77 +12408,77 @@ msgstr "" "Kun alfanumeriske tegn, stjerner, bindestreger, punktum og understregninger " "er tilladt i DNS-navne" -#: netbox/ipam/views.py:106 netbox/ipam/views.py:1761 +#: netbox/ipam/views.py:107 netbox/ipam/views.py:1766 msgid "Device Interfaces" msgstr "Enhedsgrænseflader" -#: netbox/ipam/views.py:111 netbox/ipam/views.py:1779 +#: netbox/ipam/views.py:112 netbox/ipam/views.py:1784 msgid "VM Interfaces" msgstr "VM-grænseflader" -#: netbox/ipam/views.py:196 +#: netbox/ipam/views.py:197 msgid "Importing VRFs" msgstr "Importere VRF'er" -#: netbox/ipam/views.py:203 +#: netbox/ipam/views.py:204 msgid "Exporting VRFs" msgstr "Eksport af VRF'er" -#: netbox/ipam/views.py:212 +#: netbox/ipam/views.py:213 msgid "Importing L2VPNs" msgstr "Import af L2VPN'er" -#: netbox/ipam/views.py:219 +#: netbox/ipam/views.py:220 msgid "Exporting L2VPNs" msgstr "Eksport af L2VPN'er" -#: netbox/ipam/views.py:798 +#: netbox/ipam/views.py:800 msgid "Duplicate prefixes" msgstr "Duplicerede præfikser" -#: netbox/ipam/views.py:799 netbox/ipam/views.py:1012 -#: netbox/ipam/views.py:1120 +#: netbox/ipam/views.py:801 netbox/ipam/views.py:1017 +#: netbox/ipam/views.py:1125 msgid "Parent prefixes" msgstr "Overordnede præfikser" -#: netbox/ipam/views.py:851 +#: netbox/ipam/views.py:853 msgid "Child Prefixes" msgstr "Underordnede præfikser" -#: netbox/ipam/views.py:895 +#: netbox/ipam/views.py:897 msgid "Child Ranges" msgstr "Underordnede intervaller" -#: netbox/ipam/views.py:1121 +#: netbox/ipam/views.py:1126 msgid "Duplicate IPs" msgstr "Duplikater IP'er" -#: netbox/ipam/views.py:1125 +#: netbox/ipam/views.py:1130 msgid "Application services" msgstr "Applikationstjenester" -#: netbox/ipam/views.py:1291 +#: netbox/ipam/views.py:1296 msgid "Related IPs" msgstr "Relaterede IP'er" -#: netbox/ipam/views.py:1432 +#: netbox/ipam/views.py:1437 msgid "VLAN translation rules" msgstr "VLAN-oversættelsesregler" -#: netbox/ipam/views.py:1438 +#: netbox/ipam/views.py:1443 msgid "Add Rule" msgstr "Tilføj regel" -#: netbox/ipam/views.py:1580 +#: netbox/ipam/views.py:1585 msgid "Virtual IP addresses" msgstr "Virtuelle IP-adresser" -#: netbox/ipam/views.py:1585 netbox/templates/ipam/iprange/ip_addresses.html:8 +#: netbox/ipam/views.py:1590 netbox/templates/ipam/iprange/ip_addresses.html:8 #: netbox/templates/ipam/prefix/ip_addresses.html:7 msgid "Add IP Address" msgstr "Tilføj IP-adresse" -#: netbox/ipam/views.py:1744 +#: netbox/ipam/views.py:1749 msgid "Add a Prefix" msgstr "Tilføj et præfiks" @@ -13870,7 +13889,7 @@ msgstr "Synkroniserede data for {object_type} {object}." msgid "Synced {count} {object_type}" msgstr "Synkroniseret {count} {object_type}" -#: netbox/netbox/views/generic/object_views.py:118 +#: netbox/netbox/views/generic/object_views.py:120 #, python-brace-format msgid "{class_name} must implement get_children()" msgstr "{class_name} skal implementere get_children ()" @@ -15836,7 +15855,7 @@ msgstr "Per side" msgid "Data is out of sync with upstream file" msgstr "Data er ude af synkronisering med opstrømsfilen" -#: netbox/templates/inc/table_controls_htmx.html:11 +#: netbox/templates/inc/table_controls_htmx.html:10 #: netbox/templates/inc/table_controls_htmx.html:12 msgid "Quick search" msgstr "Hurtig søgning" diff --git a/netbox/translations/de/LC_MESSAGES/django.mo b/netbox/translations/de/LC_MESSAGES/django.mo index 8ea5976b44469ce09d5c025841b9eaf8e955bd68..331091dd8f08617910424fc447459e0f2ee7ae30 100644 GIT binary patch delta 77868 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%0A59~sY2LB9)b$E)4{%Q$c~Z;2-kqbWU$epqDL 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 P{>gaTW^MD1yz2h|RDVD5 delta 77365 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

W~W7E&s* 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 Jr%$9c{|{`igRuYr diff --git a/netbox/translations/de/LC_MESSAGES/django.po b/netbox/translations/de/LC_MESSAGES/django.po index 73ada5522..62d7f8bcb 100644 --- a/netbox/translations/de/LC_MESSAGES/django.po +++ b/netbox/translations/de/LC_MESSAGES/django.po @@ -11,17 +11,17 @@ # Niklas, 2025 # Lukas Körfer, 2026 # Robin Reinhardt, 2026 -# chbally, 2026 # Jeremy Stretch, 2026 +# chbally, 2026 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-24 05:56+0000\n" +"POT-Creation-Date: 2026-07-30 05:52+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" -"Last-Translator: Jeremy Stretch, 2026\n" +"Last-Translator: chbally, 2026\n" "Language-Team: German (https://app.transifex.com/netbox-community/teams/178115/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -183,10 +183,10 @@ msgstr "Standortgruppe (URL-Slug)" #: netbox/circuits/forms/filtersets.py:249 #: netbox/circuits/tables/circuits.py:125 netbox/dcim/forms/bulk_edit.py:176 #: netbox/dcim/forms/bulk_edit.py:339 netbox/dcim/forms/bulk_edit.py:696 -#: netbox/dcim/forms/bulk_edit.py:906 netbox/dcim/forms/bulk_import.py:148 -#: netbox/dcim/forms/bulk_import.py:256 netbox/dcim/forms/bulk_import.py:365 -#: netbox/dcim/forms/bulk_import.py:656 netbox/dcim/forms/bulk_import.py:1701 -#: netbox/dcim/forms/bulk_import.py:1729 netbox/dcim/forms/filtersets.py:108 +#: netbox/dcim/forms/bulk_edit.py:906 netbox/dcim/forms/bulk_import.py:149 +#: netbox/dcim/forms/bulk_import.py:257 netbox/dcim/forms/bulk_import.py:366 +#: netbox/dcim/forms/bulk_import.py:657 netbox/dcim/forms/bulk_import.py:1789 +#: netbox/dcim/forms/bulk_import.py:1817 netbox/dcim/forms/filtersets.py:108 #: netbox/dcim/forms/filtersets.py:258 netbox/dcim/forms/filtersets.py:390 #: netbox/dcim/forms/filtersets.py:500 netbox/dcim/forms/filtersets.py:895 #: netbox/dcim/forms/filtersets.py:1117 netbox/dcim/forms/filtersets.py:1198 @@ -313,7 +313,7 @@ msgstr "Abschlusspunkt A (ID)" #: netbox/extras/filtersets.py:503 netbox/extras/filtersets.py:562 #: netbox/extras/filtersets.py:623 netbox/extras/filtersets.py:662 #: netbox/extras/filtersets.py:695 netbox/extras/filtersets.py:869 -#: netbox/ipam/forms/model_forms.py:523 netbox/netbox/filtersets.py:319 +#: netbox/ipam/forms/model_forms.py:523 netbox/netbox/filtersets.py:324 #: netbox/netbox/forms/filtersets.py:32 netbox/netbox/forms/search.py:20 #: netbox/templates/htmx/object_selector.html:28 #: netbox/templates/inc/filter_list.html:43 @@ -414,7 +414,7 @@ msgstr "Schnittstelle (ID)" #: netbox/dcim/forms/bulk_edit.py:142 netbox/dcim/forms/filtersets.py:227 #: netbox/dcim/forms/model_forms.py:144 netbox/dcim/tables/sites.py:74 #: netbox/ipam/models/asns.py:164 netbox/ipam/tables/asn.py:37 -#: netbox/ipam/tables/ip.py:126 netbox/ipam/views.py:383 +#: netbox/ipam/tables/ip.py:126 netbox/ipam/views.py:384 #: netbox/netbox/navigation/menu.py:189 netbox/netbox/navigation/menu.py:192 msgid "ASNs" msgstr "ASNs" @@ -462,7 +462,7 @@ msgstr "Dienst ID" #: netbox/dcim/forms/bulk_edit.py:628 netbox/dcim/forms/bulk_edit.py:849 #: netbox/dcim/forms/bulk_edit.py:1103 netbox/dcim/forms/bulk_edit.py:1202 #: netbox/dcim/forms/bulk_edit.py:1229 netbox/dcim/forms/bulk_edit.py:1773 -#: netbox/dcim/forms/bulk_import.py:1541 netbox/dcim/forms/filtersets.py:1283 +#: netbox/dcim/forms/bulk_import.py:1629 netbox/dcim/forms/filtersets.py:1283 #: netbox/dcim/forms/filtersets.py:1613 netbox/dcim/forms/filtersets.py:1829 #: netbox/dcim/forms/filtersets.py:1848 netbox/dcim/forms/filtersets.py:1872 #: netbox/dcim/forms/filtersets.py:1891 netbox/dcim/tables/devices.py:804 @@ -491,12 +491,12 @@ msgstr "Farbe" #: netbox/dcim/forms/bulk_edit.py:1033 netbox/dcim/forms/bulk_edit.py:1056 #: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_edit.py:1146 #: netbox/dcim/forms/bulk_edit.py:1197 netbox/dcim/forms/bulk_edit.py:1224 -#: netbox/dcim/forms/bulk_import.py:214 netbox/dcim/forms/bulk_import.py:300 -#: netbox/dcim/forms/bulk_import.py:829 netbox/dcim/forms/bulk_import.py:855 -#: netbox/dcim/forms/bulk_import.py:881 netbox/dcim/forms/bulk_import.py:902 -#: netbox/dcim/forms/bulk_import.py:988 netbox/dcim/forms/bulk_import.py:1117 -#: netbox/dcim/forms/bulk_import.py:1136 netbox/dcim/forms/bulk_import.py:1515 -#: netbox/dcim/forms/bulk_import.py:1766 netbox/dcim/forms/filtersets.py:1155 +#: netbox/dcim/forms/bulk_import.py:215 netbox/dcim/forms/bulk_import.py:301 +#: netbox/dcim/forms/bulk_import.py:830 netbox/dcim/forms/bulk_import.py:856 +#: netbox/dcim/forms/bulk_import.py:882 netbox/dcim/forms/bulk_import.py:903 +#: netbox/dcim/forms/bulk_import.py:989 netbox/dcim/forms/bulk_import.py:1118 +#: netbox/dcim/forms/bulk_import.py:1224 netbox/dcim/forms/bulk_import.py:1603 +#: netbox/dcim/forms/bulk_import.py:1854 netbox/dcim/forms/filtersets.py:1155 #: netbox/dcim/forms/filtersets.py:1268 netbox/dcim/forms/filtersets.py:1401 #: netbox/dcim/forms/filtersets.py:1492 netbox/dcim/forms/filtersets.py:1512 #: netbox/dcim/forms/filtersets.py:1532 netbox/dcim/forms/filtersets.py:1552 @@ -555,11 +555,11 @@ msgstr "Providerkonto" #: netbox/dcim/forms/bulk_edit.py:719 netbox/dcim/forms/bulk_edit.py:778 #: netbox/dcim/forms/bulk_edit.py:822 netbox/dcim/forms/bulk_edit.py:942 #: netbox/dcim/forms/bulk_edit.py:1747 netbox/dcim/forms/bulk_edit.py:1791 -#: netbox/dcim/forms/bulk_import.py:105 netbox/dcim/forms/bulk_import.py:164 -#: netbox/dcim/forms/bulk_import.py:281 netbox/dcim/forms/bulk_import.py:390 -#: netbox/dcim/forms/bulk_import.py:621 netbox/dcim/forms/bulk_import.py:781 -#: netbox/dcim/forms/bulk_import.py:1258 netbox/dcim/forms/bulk_import.py:1503 -#: netbox/dcim/forms/bulk_import.py:1761 netbox/dcim/forms/bulk_import.py:1824 +#: netbox/dcim/forms/bulk_import.py:106 netbox/dcim/forms/bulk_import.py:165 +#: netbox/dcim/forms/bulk_import.py:282 netbox/dcim/forms/bulk_import.py:391 +#: netbox/dcim/forms/bulk_import.py:622 netbox/dcim/forms/bulk_import.py:782 +#: netbox/dcim/forms/bulk_import.py:1346 netbox/dcim/forms/bulk_import.py:1591 +#: netbox/dcim/forms/bulk_import.py:1849 netbox/dcim/forms/bulk_import.py:1912 #: netbox/dcim/forms/filtersets.py:210 netbox/dcim/forms/filtersets.py:270 #: netbox/dcim/forms/filtersets.py:413 netbox/dcim/forms/filtersets.py:528 #: netbox/dcim/forms/filtersets.py:941 netbox/dcim/forms/filtersets.py:1064 @@ -618,10 +618,10 @@ msgstr "Status" #: netbox/dcim/forms/bulk_edit.py:195 netbox/dcim/forms/bulk_edit.py:361 #: netbox/dcim/forms/bulk_edit.py:486 netbox/dcim/forms/bulk_edit.py:709 #: netbox/dcim/forms/bulk_edit.py:834 netbox/dcim/forms/bulk_edit.py:1796 -#: netbox/dcim/forms/bulk_import.py:124 netbox/dcim/forms/bulk_import.py:169 -#: netbox/dcim/forms/bulk_import.py:267 netbox/dcim/forms/bulk_import.py:395 -#: netbox/dcim/forms/bulk_import.py:595 netbox/dcim/forms/bulk_import.py:1521 -#: netbox/dcim/forms/bulk_import.py:1817 netbox/dcim/forms/filtersets.py:145 +#: netbox/dcim/forms/bulk_import.py:125 netbox/dcim/forms/bulk_import.py:170 +#: netbox/dcim/forms/bulk_import.py:268 netbox/dcim/forms/bulk_import.py:396 +#: netbox/dcim/forms/bulk_import.py:596 netbox/dcim/forms/bulk_import.py:1609 +#: netbox/dcim/forms/bulk_import.py:1905 netbox/dcim/forms/filtersets.py:145 #: netbox/dcim/forms/filtersets.py:204 netbox/dcim/forms/filtersets.py:237 #: netbox/dcim/forms/filtersets.py:374 netbox/dcim/forms/filtersets.py:459 #: netbox/dcim/forms/filtersets.py:480 netbox/dcim/forms/filtersets.py:863 @@ -712,7 +712,7 @@ msgstr "Service Parameter" #: netbox/circuits/forms/filtersets.py:325 #: netbox/circuits/forms/filtersets.py:341 netbox/core/forms/filtersets.py:78 #: netbox/core/forms/filtersets.py:150 netbox/dcim/forms/bulk_edit.py:867 -#: netbox/dcim/forms/bulk_import.py:504 netbox/dcim/forms/filtersets.py:203 +#: netbox/dcim/forms/bulk_import.py:505 netbox/dcim/forms/filtersets.py:203 #: netbox/dcim/forms/filtersets.py:236 netbox/dcim/forms/filtersets.py:1054 #: netbox/dcim/forms/filtersets.py:1207 netbox/dcim/forms/filtersets.py:1219 #: netbox/dcim/forms/filtersets.py:1355 netbox/dcim/forms/filtersets.py:1482 @@ -808,7 +808,7 @@ msgstr "Beschreibung" #: netbox/circuits/forms/bulk_edit.py:192 #: netbox/circuits/forms/model_forms.py:198 -#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/bulk_import.py:1494 +#: netbox/dcim/forms/bulk_import.py:1549 netbox/dcim/forms/bulk_import.py:1582 msgid "Termination type" msgstr "Typ des Abschlusspunktes" @@ -882,7 +882,7 @@ msgstr "Providernetzwerk" #: netbox/circuits/forms/filtersets.py:393 #: netbox/circuits/forms/model_forms.py:399 netbox/dcim/forms/bulk_edit.py:372 #: netbox/dcim/forms/bulk_edit.py:1301 netbox/dcim/forms/bulk_edit.py:1737 -#: netbox/dcim/forms/bulk_import.py:286 netbox/dcim/forms/bulk_import.py:1227 +#: netbox/dcim/forms/bulk_import.py:287 netbox/dcim/forms/bulk_import.py:1315 #: netbox/dcim/forms/filtersets.py:421 netbox/dcim/forms/filtersets.py:919 #: netbox/dcim/forms/filtersets.py:1990 netbox/dcim/forms/filtersets.py:2030 #: netbox/dcim/forms/model_forms.py:312 netbox/dcim/forms/model_forms.py:1298 @@ -939,10 +939,10 @@ msgstr "Transportnetz Typ" #: netbox/circuits/forms/bulk_import.py:102 #: netbox/circuits/forms/bulk_import.py:228 -#: netbox/dcim/forms/bulk_import.py:107 netbox/dcim/forms/bulk_import.py:166 -#: netbox/dcim/forms/bulk_import.py:283 netbox/dcim/forms/bulk_import.py:392 -#: netbox/dcim/forms/bulk_import.py:623 netbox/dcim/forms/bulk_import.py:783 -#: netbox/dcim/forms/bulk_import.py:1260 netbox/dcim/forms/bulk_import.py:1763 +#: netbox/dcim/forms/bulk_import.py:108 netbox/dcim/forms/bulk_import.py:167 +#: netbox/dcim/forms/bulk_import.py:284 netbox/dcim/forms/bulk_import.py:393 +#: netbox/dcim/forms/bulk_import.py:624 netbox/dcim/forms/bulk_import.py:784 +#: netbox/dcim/forms/bulk_import.py:1348 netbox/dcim/forms/bulk_import.py:1851 #: netbox/ipam/forms/bulk_import.py:207 netbox/ipam/forms/bulk_import.py:271 #: netbox/ipam/forms/bulk_import.py:307 netbox/ipam/forms/bulk_import.py:538 #: netbox/ipam/forms/bulk_import.py:551 @@ -956,10 +956,10 @@ msgstr "Betriebsstatus" #: netbox/circuits/forms/bulk_import.py:115 #: netbox/circuits/forms/bulk_import.py:174 #: netbox/circuits/forms/bulk_import.py:235 -#: netbox/dcim/forms/bulk_import.py:128 netbox/dcim/forms/bulk_import.py:173 -#: netbox/dcim/forms/bulk_import.py:399 netbox/dcim/forms/bulk_import.py:599 -#: netbox/dcim/forms/bulk_import.py:1525 netbox/dcim/forms/bulk_import.py:1758 -#: netbox/dcim/forms/bulk_import.py:1821 netbox/ipam/forms/bulk_import.py:49 +#: netbox/dcim/forms/bulk_import.py:129 netbox/dcim/forms/bulk_import.py:174 +#: netbox/dcim/forms/bulk_import.py:400 netbox/dcim/forms/bulk_import.py:600 +#: netbox/dcim/forms/bulk_import.py:1613 netbox/dcim/forms/bulk_import.py:1846 +#: netbox/dcim/forms/bulk_import.py:1909 netbox/ipam/forms/bulk_import.py:49 #: netbox/ipam/forms/bulk_import.py:78 netbox/ipam/forms/bulk_import.py:106 #: netbox/ipam/forms/bulk_import.py:126 netbox/ipam/forms/bulk_import.py:153 #: netbox/ipam/forms/bulk_import.py:181 netbox/ipam/forms/bulk_import.py:266 @@ -1004,7 +1004,7 @@ msgstr "Operative Rolle" #: netbox/circuits/forms/bulk_import.py:258 #: netbox/circuits/forms/model_forms.py:402 #: netbox/circuits/tables/virtual_circuits.py:109 -#: netbox/circuits/ui/panels.py:179 netbox/dcim/forms/bulk_import.py:1358 +#: netbox/circuits/ui/panels.py:179 netbox/dcim/forms/bulk_import.py:1446 #: netbox/dcim/forms/model_forms.py:1372 netbox/dcim/forms/model_forms.py:1641 #: netbox/dcim/forms/model_forms.py:1822 netbox/dcim/forms/model_forms.py:1857 #: netbox/dcim/forms/model_forms.py:1982 netbox/dcim/tables/connections.py:66 @@ -1032,9 +1032,9 @@ msgstr "Schnittstelle" #: netbox/circuits/tables/circuits.py:140 netbox/dcim/forms/bulk_edit.py:348 #: netbox/dcim/forms/bulk_edit.py:462 netbox/dcim/forms/bulk_edit.py:701 #: netbox/dcim/forms/bulk_edit.py:750 netbox/dcim/forms/bulk_edit.py:915 -#: netbox/dcim/forms/bulk_import.py:261 netbox/dcim/forms/bulk_import.py:371 -#: netbox/dcim/forms/bulk_import.py:662 netbox/dcim/forms/bulk_import.py:1707 -#: netbox/dcim/forms/bulk_import.py:1741 netbox/dcim/forms/filtersets.py:116 +#: netbox/dcim/forms/bulk_import.py:262 netbox/dcim/forms/bulk_import.py:372 +#: netbox/dcim/forms/bulk_import.py:663 netbox/dcim/forms/bulk_import.py:1795 +#: netbox/dcim/forms/bulk_import.py:1829 netbox/dcim/forms/filtersets.py:116 #: netbox/dcim/forms/filtersets.py:369 netbox/dcim/forms/filtersets.py:404 #: netbox/dcim/forms/filtersets.py:455 netbox/dcim/forms/filtersets.py:508 #: netbox/dcim/forms/filtersets.py:860 netbox/dcim/forms/filtersets.py:904 @@ -1156,7 +1156,7 @@ msgstr "Kontakte" #: netbox/circuits/forms/filtersets.py:239 #: netbox/circuits/tables/circuits.py:135 netbox/dcim/forms/bulk_edit.py:121 #: netbox/dcim/forms/bulk_edit.py:323 netbox/dcim/forms/bulk_edit.py:890 -#: netbox/dcim/forms/bulk_import.py:110 netbox/dcim/forms/filtersets.py:94 +#: netbox/dcim/forms/bulk_import.py:111 netbox/dcim/forms/filtersets.py:94 #: netbox/dcim/forms/filtersets.py:171 netbox/dcim/forms/filtersets.py:217 #: netbox/dcim/forms/filtersets.py:244 netbox/dcim/forms/filtersets.py:382 #: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:881 @@ -1220,7 +1220,7 @@ msgstr "Zuweisung" #: netbox/circuits/forms/filtersets.py:311 #: netbox/circuits/forms/model_forms.py:289 #: netbox/circuits/tables/circuits.py:187 netbox/dcim/forms/bulk_edit.py:126 -#: netbox/dcim/forms/bulk_edit.py:356 netbox/dcim/forms/bulk_import.py:117 +#: netbox/dcim/forms/bulk_edit.py:356 netbox/dcim/forms/bulk_import.py:118 #: netbox/dcim/forms/model_forms.py:137 netbox/dcim/tables/racks.py:139 #: netbox/dcim/tables/racks.py:232 netbox/dcim/tables/sites.py:69 #: netbox/extras/forms/filtersets.py:612 netbox/ipam/filtersets.py:1049 @@ -1717,13 +1717,13 @@ msgstr "Abschlusspunkte" #: netbox/circuits/tables/virtual_circuits.py:106 #: netbox/dcim/forms/bulk_edit.py:749 netbox/dcim/forms/bulk_edit.py:1320 #: netbox/dcim/forms/bulk_edit.py:1732 netbox/dcim/forms/bulk_edit.py:1786 -#: netbox/dcim/forms/bulk_import.py:763 netbox/dcim/forms/bulk_import.py:824 -#: netbox/dcim/forms/bulk_import.py:850 netbox/dcim/forms/bulk_import.py:876 -#: netbox/dcim/forms/bulk_import.py:897 netbox/dcim/forms/bulk_import.py:953 -#: netbox/dcim/forms/bulk_import.py:1112 netbox/dcim/forms/bulk_import.py:1131 -#: netbox/dcim/forms/bulk_import.py:1150 netbox/dcim/forms/bulk_import.py:1168 -#: netbox/dcim/forms/bulk_import.py:1222 netbox/dcim/forms/bulk_import.py:1344 -#: netbox/dcim/forms/bulk_import.py:1811 netbox/dcim/forms/connections.py:34 +#: netbox/dcim/forms/bulk_import.py:764 netbox/dcim/forms/bulk_import.py:825 +#: netbox/dcim/forms/bulk_import.py:851 netbox/dcim/forms/bulk_import.py:877 +#: netbox/dcim/forms/bulk_import.py:898 netbox/dcim/forms/bulk_import.py:954 +#: netbox/dcim/forms/bulk_import.py:1113 netbox/dcim/forms/bulk_import.py:1219 +#: netbox/dcim/forms/bulk_import.py:1238 netbox/dcim/forms/bulk_import.py:1256 +#: netbox/dcim/forms/bulk_import.py:1310 netbox/dcim/forms/bulk_import.py:1432 +#: netbox/dcim/forms/bulk_import.py:1899 netbox/dcim/forms/connections.py:34 #: netbox/dcim/forms/filtersets.py:158 netbox/dcim/forms/filtersets.py:1061 #: netbox/dcim/forms/filtersets.py:1098 netbox/dcim/forms/filtersets.py:1265 #: netbox/dcim/forms/filtersets.py:1486 netbox/dcim/forms/filtersets.py:1509 @@ -1797,7 +1797,7 @@ msgid "Connection" msgstr "Verbindung" #: netbox/circuits/ui/panels.py:99 netbox/dcim/forms/bulk_edit.py:1480 -#: netbox/dcim/forms/bulk_import.py:835 netbox/dcim/forms/bulk_import.py:861 +#: netbox/dcim/forms/bulk_import.py:836 netbox/dcim/forms/bulk_import.py:862 #: netbox/dcim/forms/filtersets.py:1497 netbox/dcim/forms/filtersets.py:1537 #: netbox/dcim/forms/filtersets.py:1675 netbox/dcim/tables/devices.py:662 #: netbox/dcim/ui/panels.py:488 @@ -1999,7 +1999,7 @@ msgstr "Info" msgid "Warning" msgstr "Warnung" -#: netbox/core/constants.py:33 netbox/netbox/tables/columns.py:597 +#: netbox/core/constants.py:33 netbox/netbox/tables/columns.py:625 msgid "Error" msgstr "Fehler" @@ -2989,7 +2989,7 @@ msgid "Position (U)" msgstr "Position (HE)" #: netbox/dcim/api/serializers_/devices.py:193 -#: netbox/dcim/forms/bulk_import.py:786 netbox/dcim/forms/model_forms.py:819 +#: netbox/dcim/forms/bulk_import.py:787 netbox/dcim/forms/model_forms.py:819 msgid "Replicate components" msgstr "Komponenten replizieren" @@ -3002,12 +3002,12 @@ msgstr "" "(Standard: true)" #: netbox/dcim/api/serializers_/devices.py:200 -#: netbox/dcim/forms/bulk_import.py:791 netbox/dcim/forms/model_forms.py:825 +#: netbox/dcim/forms/bulk_import.py:792 netbox/dcim/forms/model_forms.py:825 msgid "Adopt components" msgstr "Komponenten übernehmen" #: netbox/dcim/api/serializers_/devices.py:201 -#: netbox/dcim/forms/bulk_import.py:793 netbox/dcim/forms/model_forms.py:828 +#: netbox/dcim/forms/bulk_import.py:794 netbox/dcim/forms/model_forms.py:828 msgid "Adopt already existing components" msgstr "Übernehmen Sie bereits bestehende Komponenten" @@ -3145,11 +3145,11 @@ msgstr "Abgestanden" #: netbox/dcim/choices.py:170 netbox/dcim/forms/bulk_edit.py:87 #: netbox/dcim/forms/bulk_edit.py:101 netbox/dcim/forms/bulk_edit.py:181 #: netbox/dcim/forms/bulk_edit.py:623 netbox/dcim/forms/bulk_edit.py:651 -#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/bulk_import.py:77 -#: netbox/dcim/forms/bulk_import.py:91 netbox/dcim/forms/bulk_import.py:154 -#: netbox/dcim/forms/bulk_import.py:530 netbox/dcim/forms/bulk_import.py:556 -#: netbox/dcim/forms/bulk_import.py:682 netbox/dcim/forms/bulk_import.py:958 -#: netbox/dcim/forms/bulk_import.py:1239 netbox/dcim/forms/filtersets.py:267 +#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/bulk_import.py:78 +#: netbox/dcim/forms/bulk_import.py:92 netbox/dcim/forms/bulk_import.py:155 +#: netbox/dcim/forms/bulk_import.py:531 netbox/dcim/forms/bulk_import.py:557 +#: netbox/dcim/forms/bulk_import.py:683 netbox/dcim/forms/bulk_import.py:959 +#: netbox/dcim/forms/bulk_import.py:1327 netbox/dcim/forms/filtersets.py:267 #: netbox/dcim/forms/filtersets.py:820 netbox/dcim/forms/filtersets.py:836 #: netbox/dcim/forms/model_forms.py:95 netbox/dcim/forms/model_forms.py:113 #: netbox/dcim/forms/model_forms.py:216 netbox/dcim/forms/model_forms.py:559 @@ -3289,7 +3289,7 @@ msgid "Virtual interfaces" msgstr "Virtuelle Schnittstellen" #: netbox/dcim/choices.py:1164 netbox/dcim/forms/bulk_edit.py:1455 -#: netbox/dcim/forms/bulk_import.py:965 netbox/dcim/forms/model_forms.py:1171 +#: netbox/dcim/forms/bulk_import.py:966 netbox/dcim/forms/model_forms.py:1171 #: netbox/dcim/tables/devices.py:761 #: netbox/virtualization/forms/bulk_edit.py:231 #: netbox/virtualization/forms/bulk_import.py:198 @@ -4063,7 +4063,7 @@ msgstr "VM-Schnittstelle (ID)" msgid "Is assigned" msgstr "Ist zugewiesen" -#: netbox/dcim/filtersets.py:2080 netbox/dcim/forms/bulk_import.py:1365 +#: netbox/dcim/filtersets.py:2080 netbox/dcim/forms/bulk_import.py:1453 #: netbox/ipam/forms/bulk_import.py:344 msgid "Is primary" msgstr "Ist primär" @@ -4084,7 +4084,7 @@ msgid "Assigned VID" msgstr "Zugewiesene VID" #: netbox/dcim/filtersets.py:2158 netbox/dcim/forms/bulk_edit.py:1568 -#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/forms/filtersets.py:1755 +#: netbox/dcim/forms/bulk_import.py:1051 netbox/dcim/forms/filtersets.py:1755 #: netbox/dcim/forms/model_forms.py:1619 #: netbox/dcim/models/device_components.py:958 #: netbox/dcim/tables/devices.py:678 netbox/dcim/ui/panels.py:521 @@ -4310,7 +4310,7 @@ msgstr "Telefon des Kontakts" msgid "Contact E-mail" msgstr "E-Mail des Kontakts" -#: netbox/dcim/forms/bulk_edit.py:160 netbox/dcim/forms/bulk_import.py:140 +#: netbox/dcim/forms/bulk_edit.py:160 netbox/dcim/forms/bulk_import.py:141 #: netbox/dcim/forms/model_forms.py:159 msgid "Time zone" msgstr "Zeitzone" @@ -4319,9 +4319,9 @@ msgstr "Zeitzone" #: netbox/dcim/forms/bulk_edit.py:584 netbox/dcim/forms/bulk_edit.py:656 #: netbox/dcim/forms/bulk_edit.py:675 netbox/dcim/forms/bulk_edit.py:762 #: netbox/dcim/forms/bulk_edit.py:1306 netbox/dcim/forms/bulk_edit.py:1742 -#: netbox/dcim/forms/bulk_import.py:208 netbox/dcim/forms/bulk_import.py:432 -#: netbox/dcim/forms/bulk_import.py:482 netbox/dcim/forms/bulk_import.py:566 -#: netbox/dcim/forms/bulk_import.py:602 netbox/dcim/forms/bulk_import.py:1233 +#: netbox/dcim/forms/bulk_import.py:209 netbox/dcim/forms/bulk_import.py:433 +#: netbox/dcim/forms/bulk_import.py:483 netbox/dcim/forms/bulk_import.py:567 +#: netbox/dcim/forms/bulk_import.py:603 netbox/dcim/forms/bulk_import.py:1321 #: netbox/dcim/forms/filtersets.py:355 netbox/dcim/forms/filtersets.py:426 #: netbox/dcim/forms/filtersets.py:578 netbox/dcim/forms/filtersets.py:728 #: netbox/dcim/forms/filtersets.py:841 netbox/dcim/forms/filtersets.py:924 @@ -4340,21 +4340,21 @@ msgid "Manufacturer" msgstr "Hersteller" #: netbox/dcim/forms/bulk_edit.py:240 netbox/dcim/forms/bulk_edit.py:392 -#: netbox/dcim/forms/bulk_import.py:217 netbox/dcim/forms/bulk_import.py:303 +#: netbox/dcim/forms/bulk_import.py:218 netbox/dcim/forms/bulk_import.py:304 #: netbox/dcim/forms/filtersets.py:301 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "Formfaktor" #: netbox/dcim/forms/bulk_edit.py:245 netbox/dcim/forms/bulk_edit.py:397 -#: netbox/dcim/forms/bulk_import.py:225 netbox/dcim/forms/bulk_import.py:306 +#: netbox/dcim/forms/bulk_import.py:226 netbox/dcim/forms/bulk_import.py:307 #: netbox/dcim/forms/filtersets.py:306 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "Breite" #: netbox/dcim/forms/bulk_edit.py:251 netbox/dcim/forms/bulk_edit.py:403 -#: netbox/dcim/forms/bulk_import.py:313 +#: netbox/dcim/forms/bulk_import.py:314 msgid "Height (U)" msgstr "Höhe (HE)" @@ -4376,7 +4376,7 @@ msgid "Outer depth" msgstr "Äußere Tiefe" #: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:426 -#: netbox/dcim/forms/bulk_import.py:230 netbox/dcim/forms/bulk_import.py:316 +#: netbox/dcim/forms/bulk_import.py:231 netbox/dcim/forms/bulk_import.py:317 msgid "Outer unit" msgstr "Äußere Einheit" @@ -4388,7 +4388,7 @@ msgstr "Einbautiefe" #: netbox/dcim/forms/bulk_edit.py:441 netbox/dcim/forms/bulk_edit.py:465 #: netbox/dcim/forms/bulk_edit.py:542 netbox/dcim/forms/bulk_edit.py:559 #: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/bulk_edit.py:614 -#: netbox/dcim/forms/bulk_import.py:445 netbox/dcim/forms/bulk_import.py:493 +#: netbox/dcim/forms/bulk_import.py:446 netbox/dcim/forms/bulk_import.py:494 #: netbox/dcim/forms/filtersets.py:326 netbox/dcim/forms/filtersets.py:348 #: netbox/dcim/forms/filtersets.py:373 netbox/dcim/forms/filtersets.py:458 #: netbox/dcim/forms/filtersets.py:571 netbox/dcim/forms/filtersets.py:683 @@ -4413,8 +4413,8 @@ msgstr "Maximales Gewicht" #: netbox/dcim/forms/bulk_edit.py:298 netbox/dcim/forms/bulk_edit.py:451 #: netbox/dcim/forms/bulk_edit.py:547 netbox/dcim/forms/bulk_edit.py:603 -#: netbox/dcim/forms/bulk_import.py:236 netbox/dcim/forms/bulk_import.py:328 -#: netbox/dcim/forms/bulk_import.py:450 netbox/dcim/forms/bulk_import.py:498 +#: netbox/dcim/forms/bulk_import.py:237 netbox/dcim/forms/bulk_import.py:329 +#: netbox/dcim/forms/bulk_import.py:451 netbox/dcim/forms/bulk_import.py:499 #: netbox/dcim/forms/filtersets.py:336 netbox/dcim/forms/filtersets.py:687 #: netbox/dcim/forms/filtersets.py:799 msgid "Weight unit" @@ -4446,7 +4446,7 @@ msgstr "Abmessungen" msgid "Numbering" msgstr "Nummerierung" -#: netbox/dcim/forms/bulk_edit.py:377 netbox/dcim/forms/bulk_import.py:293 +#: netbox/dcim/forms/bulk_edit.py:377 netbox/dcim/forms/bulk_import.py:294 #: netbox/dcim/forms/filtersets.py:434 msgid "Rack type" msgstr "Racktyp" @@ -4464,17 +4464,17 @@ msgstr "Asset-Tag" #: netbox/dcim/forms/bulk_edit.py:436 netbox/dcim/forms/bulk_edit.py:537 #: netbox/dcim/forms/bulk_edit.py:593 netbox/dcim/forms/bulk_edit.py:724 -#: netbox/dcim/forms/bulk_import.py:322 netbox/dcim/forms/bulk_import.py:487 -#: netbox/dcim/forms/bulk_import.py:696 netbox/dcim/forms/filtersets.py:437 +#: netbox/dcim/forms/bulk_import.py:323 netbox/dcim/forms/bulk_import.py:488 +#: netbox/dcim/forms/bulk_import.py:697 netbox/dcim/forms/filtersets.py:437 #: netbox/dcim/forms/filtersets.py:600 netbox/dcim/forms/filtersets.py:790 #: netbox/dcim/forms/filtersets.py:946 msgid "Airflow" msgstr "Luftstrom" #: netbox/dcim/forms/bulk_edit.py:460 netbox/dcim/forms/bulk_edit.py:937 -#: netbox/dcim/forms/bulk_import.py:378 netbox/dcim/forms/bulk_import.py:381 -#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/bulk_import.py:1748 -#: netbox/dcim/forms/bulk_import.py:1752 netbox/dcim/forms/filtersets.py:125 +#: netbox/dcim/forms/bulk_import.py:379 netbox/dcim/forms/bulk_import.py:382 +#: netbox/dcim/forms/bulk_import.py:670 netbox/dcim/forms/bulk_import.py:1836 +#: netbox/dcim/forms/bulk_import.py:1840 netbox/dcim/forms/filtersets.py:125 #: netbox/dcim/forms/filtersets.py:370 netbox/dcim/forms/filtersets.py:465 #: netbox/dcim/forms/filtersets.py:479 netbox/dcim/forms/filtersets.py:525 #: netbox/dcim/forms/filtersets.py:914 netbox/dcim/forms/filtersets.py:1130 @@ -4500,7 +4500,7 @@ msgstr "Rack" msgid "Hardware" msgstr "Hardware" -#: netbox/dcim/forms/bulk_edit.py:513 netbox/dcim/forms/bulk_import.py:438 +#: netbox/dcim/forms/bulk_edit.py:513 netbox/dcim/forms/bulk_import.py:439 #: netbox/dcim/forms/filtersets.py:583 netbox/dcim/forms/model_forms.py:416 #: netbox/virtualization/forms/bulk_edit.py:85 #: netbox/virtualization/forms/bulk_import.py:89 @@ -4539,8 +4539,8 @@ msgid "Schema" msgstr "Schema" #: netbox/dcim/forms/bulk_edit.py:572 netbox/dcim/forms/bulk_edit.py:579 -#: netbox/dcim/forms/bulk_edit.py:828 netbox/dcim/forms/bulk_import.py:476 -#: netbox/dcim/forms/bulk_import.py:1509 netbox/dcim/forms/filtersets.py:723 +#: netbox/dcim/forms/bulk_edit.py:828 netbox/dcim/forms/bulk_import.py:477 +#: netbox/dcim/forms/bulk_import.py:1597 netbox/dcim/forms/filtersets.py:723 #: netbox/dcim/forms/filtersets.py:1146 netbox/dcim/forms/filtersets.py:1278 #: netbox/dcim/forms/model_forms.py:463 netbox/dcim/forms/model_forms.py:476 #: netbox/dcim/tables/modules.py:43 netbox/dcim/tables/modules.py:97 @@ -4573,10 +4573,10 @@ msgid "VM role" msgstr "VM-Rolle" #: netbox/dcim/forms/bulk_edit.py:637 netbox/dcim/forms/bulk_edit.py:661 -#: netbox/dcim/forms/bulk_edit.py:734 netbox/dcim/forms/bulk_import.py:540 -#: netbox/dcim/forms/bulk_import.py:544 netbox/dcim/forms/bulk_import.py:573 -#: netbox/dcim/forms/bulk_import.py:577 netbox/dcim/forms/bulk_import.py:702 -#: netbox/dcim/forms/bulk_import.py:706 netbox/dcim/forms/filtersets.py:815 +#: netbox/dcim/forms/bulk_edit.py:734 netbox/dcim/forms/bulk_import.py:541 +#: netbox/dcim/forms/bulk_import.py:545 netbox/dcim/forms/bulk_import.py:574 +#: netbox/dcim/forms/bulk_import.py:578 netbox/dcim/forms/bulk_import.py:703 +#: netbox/dcim/forms/bulk_import.py:707 netbox/dcim/forms/filtersets.py:815 #: netbox/dcim/forms/filtersets.py:846 netbox/dcim/forms/filtersets.py:965 #: netbox/dcim/forms/model_forms.py:554 netbox/dcim/forms/model_forms.py:591 #: netbox/dcim/forms/model_forms.py:716 @@ -4588,19 +4588,19 @@ msgid "Config template" msgstr "Konfigurationsvorlage" #: netbox/dcim/forms/bulk_edit.py:680 netbox/dcim/forms/bulk_edit.py:1086 -#: netbox/dcim/forms/bulk_import.py:608 netbox/dcim/forms/filtersets.py:135 +#: netbox/dcim/forms/bulk_import.py:609 netbox/dcim/forms/filtersets.py:135 #: netbox/dcim/forms/filtersets.py:1438 netbox/dcim/forms/model_forms.py:661 #: netbox/dcim/forms/model_forms.py:1048 netbox/dcim/forms/model_forms.py:1065 #: netbox/extras/filtersets.py:756 msgid "Device type" msgstr "Gerätetyp" -#: netbox/dcim/forms/bulk_edit.py:691 netbox/dcim/forms/bulk_import.py:589 +#: netbox/dcim/forms/bulk_edit.py:691 netbox/dcim/forms/bulk_import.py:590 #: netbox/dcim/forms/filtersets.py:140 netbox/dcim/forms/model_forms.py:669 msgid "Device role" msgstr "Geräterolle" -#: netbox/dcim/forms/bulk_edit.py:714 netbox/dcim/forms/bulk_import.py:614 +#: netbox/dcim/forms/bulk_edit.py:714 netbox/dcim/forms/bulk_import.py:615 #: netbox/dcim/forms/filtersets.py:829 netbox/dcim/forms/filtersets.py:938 #: netbox/dcim/forms/model_forms.py:602 netbox/dcim/forms/model_forms.py:674 #: netbox/dcim/tables/devices.py:191 netbox/extras/filtersets.py:772 @@ -4612,7 +4612,7 @@ msgstr "Geräterolle" msgid "Platform" msgstr "Betriebssystem" -#: netbox/dcim/forms/bulk_edit.py:739 netbox/dcim/forms/bulk_import.py:633 +#: netbox/dcim/forms/bulk_edit.py:739 netbox/dcim/forms/bulk_import.py:634 #: netbox/dcim/forms/filtersets.py:870 netbox/dcim/forms/filtersets.py:1040 #: netbox/dcim/forms/model_forms.py:683 netbox/dcim/tables/devices.py:211 #: netbox/extras/filtersets.py:805 netbox/extras/forms/filtersets.py:411 @@ -4641,12 +4641,12 @@ msgstr "Konfiguration" msgid "Virtualization" msgstr "Virtualisierung" -#: netbox/dcim/forms/bulk_edit.py:767 netbox/dcim/forms/bulk_import.py:775 +#: netbox/dcim/forms/bulk_edit.py:767 netbox/dcim/forms/bulk_import.py:776 #: netbox/dcim/forms/model_forms.py:811 netbox/dcim/forms/model_forms.py:1073 msgid "Module type" msgstr "Modultyp" -#: netbox/dcim/forms/bulk_edit.py:839 netbox/dcim/forms/bulk_import.py:1528 +#: netbox/dcim/forms/bulk_edit.py:839 netbox/dcim/forms/bulk_import.py:1616 #: netbox/dcim/forms/filtersets.py:1305 netbox/dcim/forms/model_forms.py:888 #: netbox/dcim/tables/cables.py:124 msgid "Bundle" @@ -4670,8 +4670,8 @@ msgstr "Label" msgid "Length" msgstr "Länge" -#: netbox/dcim/forms/bulk_edit.py:858 netbox/dcim/forms/bulk_import.py:1535 -#: netbox/dcim/forms/bulk_import.py:1538 netbox/dcim/forms/filtersets.py:1291 +#: netbox/dcim/forms/bulk_edit.py:858 netbox/dcim/forms/bulk_import.py:1623 +#: netbox/dcim/forms/bulk_import.py:1626 netbox/dcim/forms/filtersets.py:1291 msgid "Length unit" msgstr "Längeneinheit" @@ -4679,17 +4679,17 @@ msgstr "Längeneinheit" msgid "Domain" msgstr "Domäne" -#: netbox/dcim/forms/bulk_edit.py:932 netbox/dcim/forms/bulk_import.py:1735 +#: netbox/dcim/forms/bulk_edit.py:932 netbox/dcim/forms/bulk_import.py:1823 #: netbox/dcim/forms/filtersets.py:1384 netbox/dcim/forms/model_forms.py:927 msgid "Power panel" msgstr "Stromverteiler" -#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/bulk_import.py:1771 +#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/bulk_import.py:1859 #: netbox/dcim/forms/filtersets.py:1406 msgid "Supply" msgstr "Versorgung" -#: netbox/dcim/forms/bulk_edit.py:960 netbox/dcim/forms/bulk_import.py:1776 +#: netbox/dcim/forms/bulk_edit.py:960 netbox/dcim/forms/bulk_import.py:1864 #: netbox/dcim/forms/filtersets.py:1411 msgid "Phase" msgstr "Phase" @@ -4726,13 +4726,13 @@ msgstr "Zugewiesene Leistungsaufnahme" msgid "Allocated power draw (watts)" msgstr "Zugewiesene Leistungsaufnahme (Watt)" -#: netbox/dcim/forms/bulk_edit.py:1107 netbox/dcim/forms/bulk_import.py:908 +#: netbox/dcim/forms/bulk_edit.py:1107 netbox/dcim/forms/bulk_import.py:909 #: netbox/dcim/forms/model_forms.py:1144 netbox/dcim/forms/model_forms.py:1509 #: netbox/dcim/forms/model_forms.py:1838 netbox/dcim/forms/object_import.py:56 msgid "Power port" msgstr "Stromanschluss" -#: netbox/dcim/forms/bulk_edit.py:1112 netbox/dcim/forms/bulk_import.py:915 +#: netbox/dcim/forms/bulk_edit.py:1112 netbox/dcim/forms/bulk_import.py:916 msgid "Feed leg" msgstr "Phasenlage" @@ -4742,7 +4742,7 @@ msgid "Management only" msgstr "Nur Management" #: netbox/dcim/forms/bulk_edit.py:1168 netbox/dcim/forms/bulk_edit.py:1495 -#: netbox/dcim/forms/bulk_import.py:1001 netbox/dcim/forms/filtersets.py:1711 +#: netbox/dcim/forms/bulk_import.py:1002 netbox/dcim/forms/filtersets.py:1711 #: netbox/dcim/forms/filtersets.py:1796 netbox/dcim/forms/object_import.py:91 #: netbox/dcim/models/device_component_templates.py:473 #: netbox/dcim/models/device_components.py:930 netbox/dcim/ui/panels.py:494 @@ -4750,7 +4750,7 @@ msgid "PoE mode" msgstr "PoE-Modus" #: netbox/dcim/forms/bulk_edit.py:1174 netbox/dcim/forms/bulk_edit.py:1501 -#: netbox/dcim/forms/bulk_import.py:1007 netbox/dcim/forms/filtersets.py:1716 +#: netbox/dcim/forms/bulk_import.py:1008 netbox/dcim/forms/filtersets.py:1716 #: netbox/dcim/forms/filtersets.py:1801 netbox/dcim/forms/object_import.py:96 #: netbox/dcim/models/device_component_templates.py:480 #: netbox/dcim/models/device_components.py:937 netbox/dcim/ui/panels.py:495 @@ -4776,7 +4776,7 @@ msgstr "LAG" msgid "Virtual device contexts" msgstr "Virtual Device Contexts" -#: netbox/dcim/forms/bulk_edit.py:1509 netbox/dcim/forms/bulk_import.py:1010 +#: netbox/dcim/forms/bulk_edit.py:1509 netbox/dcim/forms/bulk_import.py:1011 #: netbox/virtualization/forms/bulk_edit.py:252 #: netbox/virtualization/forms/bulk_import.py:205 #: netbox/vpn/forms/bulk_edit.py:128 netbox/vpn/forms/bulk_edit.py:196 @@ -4787,7 +4787,7 @@ msgstr "Virtual Device Contexts" msgid "Mode" msgstr "Modus" -#: netbox/dcim/forms/bulk_edit.py:1517 netbox/dcim/forms/bulk_import.py:1016 +#: netbox/dcim/forms/bulk_edit.py:1517 netbox/dcim/forms/bulk_import.py:1017 #: netbox/dcim/forms/model_forms.py:1585 netbox/ipam/forms/bulk_import.py:184 #: netbox/ipam/forms/filtersets.py:603 netbox/ipam/models/vlans.py:99 #: netbox/virtualization/forms/bulk_edit.py:259 @@ -4796,7 +4796,7 @@ msgstr "Modus" msgid "VLAN group" msgstr "VLAN-Gruppe" -#: netbox/dcim/forms/bulk_edit.py:1526 netbox/dcim/forms/bulk_import.py:1023 +#: netbox/dcim/forms/bulk_edit.py:1526 netbox/dcim/forms/bulk_import.py:1024 #: netbox/dcim/forms/model_forms.py:1591 netbox/dcim/tables/devices.py:627 #: netbox/dcim/ui/panels.py:498 netbox/virtualization/forms/bulk_edit.py:267 #: netbox/virtualization/forms/bulk_import.py:218 @@ -4804,7 +4804,7 @@ msgstr "VLAN-Gruppe" msgid "Untagged VLAN" msgstr "Untagged VLAN" -#: netbox/dcim/forms/bulk_edit.py:1535 netbox/dcim/forms/bulk_import.py:1030 +#: netbox/dcim/forms/bulk_edit.py:1535 netbox/dcim/forms/bulk_import.py:1031 #: netbox/dcim/forms/model_forms.py:1600 netbox/dcim/tables/devices.py:633 #: netbox/virtualization/forms/bulk_edit.py:275 #: netbox/virtualization/forms/bulk_import.py:225 @@ -4820,7 +4820,7 @@ msgstr "Hinzufügen eines getaggten VLANs" msgid "Remove tagged VLANs" msgstr "Getaggte VLANs entfernen" -#: netbox/dcim/forms/bulk_edit.py:1558 netbox/dcim/forms/bulk_import.py:1043 +#: netbox/dcim/forms/bulk_edit.py:1558 netbox/dcim/forms/bulk_import.py:1044 #: netbox/dcim/forms/model_forms.py:1609 #: netbox/virtualization/forms/bulk_import.py:238 #: netbox/virtualization/forms/model_forms.py:439 @@ -4890,244 +4890,244 @@ msgstr "" "Einer Endgeräteschnittstelle (Access) können keine getaggten VLANs " "zugewiesen sein." -#: netbox/dcim/forms/bulk_import.py:81 +#: netbox/dcim/forms/bulk_import.py:82 msgid "Name of parent region" msgstr "Name der übergeordneten Region" -#: netbox/dcim/forms/bulk_import.py:95 +#: netbox/dcim/forms/bulk_import.py:96 msgid "Name of parent site group" msgstr "Name der übergeordneten Standortgruppe" -#: netbox/dcim/forms/bulk_import.py:114 +#: netbox/dcim/forms/bulk_import.py:115 msgid "Assigned region" msgstr "Zugewiesene Region" -#: netbox/dcim/forms/bulk_import.py:121 netbox/tenancy/forms/bulk_import.py:50 +#: netbox/dcim/forms/bulk_import.py:122 netbox/tenancy/forms/bulk_import.py:50 #: netbox/wireless/forms/bulk_import.py:41 msgid "Assigned group" msgstr "Zugewiesene Gruppe" -#: netbox/dcim/forms/bulk_import.py:140 +#: netbox/dcim/forms/bulk_import.py:141 msgid "available options" msgstr "verfügbare Optionen" -#: netbox/dcim/forms/bulk_import.py:151 netbox/dcim/forms/bulk_import.py:659 -#: netbox/dcim/forms/bulk_import.py:1732 netbox/ipam/forms/bulk_import.py:519 +#: netbox/dcim/forms/bulk_import.py:152 netbox/dcim/forms/bulk_import.py:660 +#: netbox/dcim/forms/bulk_import.py:1820 netbox/ipam/forms/bulk_import.py:519 #: netbox/virtualization/forms/bulk_import.py:66 msgid "Assigned site" msgstr "Zugewiesener Standort" -#: netbox/dcim/forms/bulk_import.py:158 +#: netbox/dcim/forms/bulk_import.py:159 msgid "Parent location" msgstr "Übergeordnete Lokation" -#: netbox/dcim/forms/bulk_import.py:160 +#: netbox/dcim/forms/bulk_import.py:161 msgid "Location not found." msgstr "Lokation wurde nicht gefunden." -#: netbox/dcim/forms/bulk_import.py:211 +#: netbox/dcim/forms/bulk_import.py:212 msgid "The manufacturer of this rack type" msgstr "Der Hersteller dieses Racktyps" -#: netbox/dcim/forms/bulk_import.py:222 +#: netbox/dcim/forms/bulk_import.py:223 msgid "The lowest-numbered position in the rack" msgstr "Die Position mit der niedrigsten Nummer im Rack" -#: netbox/dcim/forms/bulk_import.py:227 netbox/dcim/forms/bulk_import.py:309 +#: netbox/dcim/forms/bulk_import.py:228 netbox/dcim/forms/bulk_import.py:310 msgid "Rail-to-rail width (in inches)" msgstr "Breite von Schiene zu Schiene (in Zoll)" -#: netbox/dcim/forms/bulk_import.py:233 netbox/dcim/forms/bulk_import.py:319 +#: netbox/dcim/forms/bulk_import.py:234 netbox/dcim/forms/bulk_import.py:320 msgid "Unit for outer dimensions" msgstr "Einheit für Außenmaße" -#: netbox/dcim/forms/bulk_import.py:239 netbox/dcim/forms/bulk_import.py:331 +#: netbox/dcim/forms/bulk_import.py:240 netbox/dcim/forms/bulk_import.py:332 msgid "Unit for rack weights" msgstr "Einheit für Rackgewichte" -#: netbox/dcim/forms/bulk_import.py:271 +#: netbox/dcim/forms/bulk_import.py:272 msgid "Name of assigned tenant" msgstr "Name des zugewiesenen Mandanten " -#: netbox/dcim/forms/bulk_import.py:274 netbox/dcim/forms/filtersets.py:410 +#: netbox/dcim/forms/bulk_import.py:275 netbox/dcim/forms/filtersets.py:410 #: netbox/dcim/forms/filtersets.py:515 netbox/dcim/ui/panels.py:47 #: netbox/ipam/forms/filtersets.py:497 msgid "Rack group" msgstr "Rack-Gruppe" -#: netbox/dcim/forms/bulk_import.py:278 +#: netbox/dcim/forms/bulk_import.py:279 msgid "Name of assigned group" msgstr "Name der zugewiesenen Gruppe" -#: netbox/dcim/forms/bulk_import.py:290 +#: netbox/dcim/forms/bulk_import.py:291 msgid "Name of assigned role" msgstr "Name der zugewiesenen Rolle" -#: netbox/dcim/forms/bulk_import.py:297 +#: netbox/dcim/forms/bulk_import.py:298 msgid "Rack type model" msgstr "Racktyp Modell" -#: netbox/dcim/forms/bulk_import.py:325 netbox/dcim/forms/bulk_import.py:490 -#: netbox/dcim/forms/bulk_import.py:699 +#: netbox/dcim/forms/bulk_import.py:326 netbox/dcim/forms/bulk_import.py:491 +#: netbox/dcim/forms/bulk_import.py:700 msgid "Airflow direction" msgstr "Richtung des Luftstroms" -#: netbox/dcim/forms/bulk_import.py:358 +#: netbox/dcim/forms/bulk_import.py:359 msgid "Width must be set if not specifying a rack type." msgstr "Die Breite muss festgelegt werden, wenn kein Racktyp angegeben wird." -#: netbox/dcim/forms/bulk_import.py:360 +#: netbox/dcim/forms/bulk_import.py:361 msgid "U height must be set if not specifying a rack type." msgstr "" "Die Anzahl HE muss festgelegt werden, wenn kein Racktyp angegeben wird." -#: netbox/dcim/forms/bulk_import.py:368 +#: netbox/dcim/forms/bulk_import.py:369 msgid "Parent site" msgstr "Übergeordneter Standort" -#: netbox/dcim/forms/bulk_import.py:375 netbox/dcim/forms/bulk_import.py:1745 +#: netbox/dcim/forms/bulk_import.py:376 netbox/dcim/forms/bulk_import.py:1833 msgid "Rack's location (if any)" msgstr "Lokation des Racks (falls vorhanden)" -#: netbox/dcim/forms/bulk_import.py:384 netbox/dcim/forms/model_forms.py:376 +#: netbox/dcim/forms/bulk_import.py:385 netbox/dcim/forms/model_forms.py:376 #: netbox/dcim/tables/racks.py:242 #: netbox/templates/dcim/rackreservation.html:7 msgid "Units" msgstr "Einheiten" -#: netbox/dcim/forms/bulk_import.py:387 +#: netbox/dcim/forms/bulk_import.py:388 msgid "Comma-separated list of individual unit numbers" msgstr "Kommagetrennte Liste einzelner Einheitennummern" -#: netbox/dcim/forms/bulk_import.py:435 +#: netbox/dcim/forms/bulk_import.py:436 msgid "The manufacturer which produces this device type" msgstr "Der Hersteller, der diesen Gerätetyp herstellt" -#: netbox/dcim/forms/bulk_import.py:442 +#: netbox/dcim/forms/bulk_import.py:443 msgid "The default platform for devices of this type (optional)" msgstr "Das Standard-Betriebssystem für Geräte diesen Typs (optional)" -#: netbox/dcim/forms/bulk_import.py:447 +#: netbox/dcim/forms/bulk_import.py:448 msgid "Device weight" msgstr "Gewicht des Geräts" -#: netbox/dcim/forms/bulk_import.py:453 +#: netbox/dcim/forms/bulk_import.py:454 msgid "Unit for device weight" msgstr "Einheit für das Gerätegewicht" -#: netbox/dcim/forms/bulk_import.py:495 +#: netbox/dcim/forms/bulk_import.py:496 msgid "Module weight" msgstr "Gewicht des Moduls" -#: netbox/dcim/forms/bulk_import.py:501 +#: netbox/dcim/forms/bulk_import.py:502 msgid "Unit for module weight" msgstr "Einheit für das Modulgewicht" -#: netbox/dcim/forms/bulk_import.py:506 +#: netbox/dcim/forms/bulk_import.py:507 msgid "Attribute values for the assigned profile, passed as a dictionary" msgstr "" "Attributwerte für das zugewiesene Profil, die als assoziatives Array " "übergeben werden" -#: netbox/dcim/forms/bulk_import.py:521 +#: netbox/dcim/forms/bulk_import.py:522 msgid "Profile must be specified if attribute data is provided." msgstr "" "Das Profil muss angegeben werden, wenn Attributdaten bereitgestellt werden." -#: netbox/dcim/forms/bulk_import.py:534 +#: netbox/dcim/forms/bulk_import.py:535 msgid "Parent Device Role" msgstr "Rolle „Übergeordnetes Gerät“" -#: netbox/dcim/forms/bulk_import.py:536 +#: netbox/dcim/forms/bulk_import.py:537 msgid "Device role not found." msgstr "Die Geräterolle wurde nicht gefunden." -#: netbox/dcim/forms/bulk_import.py:560 +#: netbox/dcim/forms/bulk_import.py:561 msgid "Parent platform" msgstr "Übergeordnete Plattform" -#: netbox/dcim/forms/bulk_import.py:562 +#: netbox/dcim/forms/bulk_import.py:563 msgid "Platform not found." msgstr "Plattform wurde nicht gefunden." -#: netbox/dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:571 msgid "Limit platform assignments to this manufacturer" msgstr "Betriebssystem-Zuweisungen auf diesen Hersteller beschränken" -#: netbox/dcim/forms/bulk_import.py:592 netbox/dcim/forms/bulk_import.py:1814 +#: netbox/dcim/forms/bulk_import.py:593 netbox/dcim/forms/bulk_import.py:1902 #: netbox/tenancy/forms/bulk_import.py:116 msgid "Assigned role" msgstr "Zugewiesene Rolle" -#: netbox/dcim/forms/bulk_import.py:605 +#: netbox/dcim/forms/bulk_import.py:606 msgid "Device type manufacturer" msgstr "Gerätetyp Hersteller" -#: netbox/dcim/forms/bulk_import.py:611 +#: netbox/dcim/forms/bulk_import.py:612 msgid "Device type model" msgstr "Gerätetyp Modell" -#: netbox/dcim/forms/bulk_import.py:618 +#: netbox/dcim/forms/bulk_import.py:619 #: netbox/virtualization/forms/bulk_import.py:165 msgid "Assigned platform" msgstr "Zugewiesenes Betriebssystem" -#: netbox/dcim/forms/bulk_import.py:626 netbox/dcim/forms/bulk_import.py:630 +#: netbox/dcim/forms/bulk_import.py:627 netbox/dcim/forms/bulk_import.py:631 #: netbox/dcim/forms/model_forms.py:697 msgid "Virtual chassis" msgstr "Virtuelles Gehäuse" -#: netbox/dcim/forms/bulk_import.py:637 +#: netbox/dcim/forms/bulk_import.py:638 msgid "Virtualization cluster" msgstr "Virtualisierungscluster" -#: netbox/dcim/forms/bulk_import.py:666 +#: netbox/dcim/forms/bulk_import.py:667 msgid "Assigned location (if any)" msgstr "Zugewiesene Lokation (falls vorhanden)" -#: netbox/dcim/forms/bulk_import.py:673 +#: netbox/dcim/forms/bulk_import.py:674 msgid "Assigned rack (if any)" msgstr "Zugewiesenes Rack (falls vorhanden)" -#: netbox/dcim/forms/bulk_import.py:676 netbox/dcim/forms/model_forms.py:653 +#: netbox/dcim/forms/bulk_import.py:677 netbox/dcim/forms/model_forms.py:653 msgid "Face" msgstr "Ausrichtung" -#: netbox/dcim/forms/bulk_import.py:679 +#: netbox/dcim/forms/bulk_import.py:680 msgid "Mounted rack face" msgstr "Montierte Rackseite" -#: netbox/dcim/forms/bulk_import.py:686 +#: netbox/dcim/forms/bulk_import.py:687 msgid "Parent device (for child devices)" msgstr "Übergeordnetes Gerät (für untergeordnete Geräte)" -#: netbox/dcim/forms/bulk_import.py:689 +#: netbox/dcim/forms/bulk_import.py:690 msgid "Device bay" msgstr "Geräteeinsatz" -#: netbox/dcim/forms/bulk_import.py:693 +#: netbox/dcim/forms/bulk_import.py:694 msgid "Device bay in which this device is installed (for child devices)" msgstr "" "Geräteschacht, in dem dieses Gerät installiert ist (für untergeordnete " "Geräte)" -#: netbox/dcim/forms/bulk_import.py:766 +#: netbox/dcim/forms/bulk_import.py:767 msgid "The device in which this module is installed" msgstr "Das Gerät, in dem dieses Modul installiert ist" -#: netbox/dcim/forms/bulk_import.py:769 netbox/dcim/forms/model_forms.py:801 +#: netbox/dcim/forms/bulk_import.py:770 netbox/dcim/forms/model_forms.py:801 msgid "Module bay" msgstr "Moduleinsatz" -#: netbox/dcim/forms/bulk_import.py:772 +#: netbox/dcim/forms/bulk_import.py:773 msgid "The module bay in which this module is installed" msgstr "Der Modulschacht, in dem dieses Modul installiert ist" -#: netbox/dcim/forms/bulk_import.py:778 +#: netbox/dcim/forms/bulk_import.py:779 msgid "The type of module" msgstr "Der Typ des Moduls" -#: netbox/dcim/forms/bulk_import.py:788 +#: netbox/dcim/forms/bulk_import.py:789 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" @@ -5135,89 +5135,89 @@ msgstr "" "Automatisches Ausfüllen von Komponenten, die diesem Modultyp zugeordnet sind" " (standardmäßig aktiviert)" -#: netbox/dcim/forms/bulk_import.py:832 netbox/dcim/forms/bulk_import.py:858 -#: netbox/dcim/forms/bulk_import.py:884 +#: netbox/dcim/forms/bulk_import.py:833 netbox/dcim/forms/bulk_import.py:859 +#: netbox/dcim/forms/bulk_import.py:885 msgid "Port type" msgstr "Anschlusstyp" -#: netbox/dcim/forms/bulk_import.py:840 netbox/dcim/forms/bulk_import.py:866 +#: netbox/dcim/forms/bulk_import.py:841 netbox/dcim/forms/bulk_import.py:867 msgid "Port speed in bps" msgstr "Anschlussgeschwindigkeit in Bit/s" -#: netbox/dcim/forms/bulk_import.py:905 +#: netbox/dcim/forms/bulk_import.py:906 msgid "Outlet type" msgstr "Ausgangstyp" -#: netbox/dcim/forms/bulk_import.py:912 +#: netbox/dcim/forms/bulk_import.py:913 msgid "Local power port which feeds this outlet" msgstr "Lokaler Stromanschluss, der diese Steckdose speist" -#: netbox/dcim/forms/bulk_import.py:918 +#: netbox/dcim/forms/bulk_import.py:919 msgid "Electrical phase (for three-phase circuits)" msgstr "Elektrische Phase (für dreiphasige Stromkreise)" -#: netbox/dcim/forms/bulk_import.py:962 netbox/dcim/forms/model_forms.py:1547 +#: netbox/dcim/forms/bulk_import.py:963 netbox/dcim/forms/model_forms.py:1547 #: netbox/virtualization/forms/bulk_import.py:195 #: netbox/virtualization/forms/model_forms.py:400 msgid "Parent interface" msgstr "Übergeordnete Schnittstelle" -#: netbox/dcim/forms/bulk_import.py:969 netbox/dcim/forms/model_forms.py:1555 +#: netbox/dcim/forms/bulk_import.py:970 netbox/dcim/forms/model_forms.py:1555 #: netbox/virtualization/forms/bulk_import.py:202 #: netbox/virtualization/forms/model_forms.py:408 msgid "Bridged interface" msgstr "Überbrückte Schnittstelle" -#: netbox/dcim/forms/bulk_import.py:972 +#: netbox/dcim/forms/bulk_import.py:973 msgid "Lag" msgstr "Lag" -#: netbox/dcim/forms/bulk_import.py:976 +#: netbox/dcim/forms/bulk_import.py:977 msgid "Parent LAG interface" msgstr "Übergeordnete LAG-Schnittstelle" -#: netbox/dcim/forms/bulk_import.py:979 +#: netbox/dcim/forms/bulk_import.py:980 msgid "Vdcs" msgstr "Vdcs" -#: netbox/dcim/forms/bulk_import.py:984 +#: netbox/dcim/forms/bulk_import.py:985 msgid "VDC names separated by commas, encased with double quotes. Example:" msgstr "" "VDC-Namen, getrennt durch Kommas, umgeben von doppelten Anführungszeichen. " "Beispiel:" -#: netbox/dcim/forms/bulk_import.py:990 +#: netbox/dcim/forms/bulk_import.py:991 msgid "Physical medium" msgstr "Physikalisches Medium" -#: netbox/dcim/forms/bulk_import.py:993 netbox/dcim/forms/filtersets.py:1682 +#: netbox/dcim/forms/bulk_import.py:994 netbox/dcim/forms/filtersets.py:1682 msgid "Duplex" msgstr "Duplex" -#: netbox/dcim/forms/bulk_import.py:998 +#: netbox/dcim/forms/bulk_import.py:999 msgid "Poe mode" msgstr "PoE-Modus" -#: netbox/dcim/forms/bulk_import.py:1004 +#: netbox/dcim/forms/bulk_import.py:1005 msgid "Poe type" msgstr "PoE-Typ" -#: netbox/dcim/forms/bulk_import.py:1013 +#: netbox/dcim/forms/bulk_import.py:1014 #: netbox/virtualization/forms/bulk_import.py:208 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "IEEE 802.1Q-Betriebsmodus (für L2-Schnittstellen)" -#: netbox/dcim/forms/bulk_import.py:1020 +#: netbox/dcim/forms/bulk_import.py:1021 #: netbox/virtualization/forms/bulk_import.py:215 msgid "Filter VLANs available for assignment by group" msgstr "Filtern Sie VLANs, die für die Zuweisung nach Gruppe verfügbar sind" -#: netbox/dcim/forms/bulk_import.py:1027 +#: netbox/dcim/forms/bulk_import.py:1028 #: netbox/virtualization/forms/bulk_import.py:222 msgid "Assigned untagged VLAN ID (filtered by VLAN group)" msgstr "Zugewiesene VLAN-ID ohne Tags (gefiltert nach VLAN-Gruppe)" -#: netbox/dcim/forms/bulk_import.py:1036 +#: netbox/dcim/forms/bulk_import.py:1037 #: netbox/virtualization/forms/bulk_import.py:231 msgid "" "Assigned tagged VLAN IDs separated by commas, encased with double quotes " @@ -5226,12 +5226,12 @@ msgstr "" "Zugewiesene markierte VLAN-IDs, getrennt durch Kommas, umgeben von doppelten" " Anführungszeichen (gefiltert nach VLAN-Gruppe). Beispiel:" -#: netbox/dcim/forms/bulk_import.py:1047 +#: netbox/dcim/forms/bulk_import.py:1048 #: netbox/virtualization/forms/bulk_import.py:242 msgid "Assigned Q-in-Q Service VLAN ID (filtered by VLAN group)" msgstr "Zugewiesene Q-in-Q Service VLAN-ID (gefiltert nach VLAN-Gruppe)" -#: netbox/dcim/forms/bulk_import.py:1054 netbox/ipam/forms/bulk_import.py:174 +#: netbox/dcim/forms/bulk_import.py:1055 netbox/ipam/forms/bulk_import.py:174 #: netbox/ipam/forms/bulk_import.py:259 netbox/ipam/forms/bulk_import.py:295 #: netbox/ipam/forms/filtersets.py:230 netbox/ipam/forms/filtersets.py:314 #: netbox/ipam/forms/filtersets.py:383 @@ -5239,78 +5239,113 @@ msgstr "Zugewiesene Q-in-Q Service VLAN-ID (gefiltert nach VLAN-Gruppe)" msgid "Assigned VRF" msgstr "Zugewiesenes VRF" -#: netbox/dcim/forms/bulk_import.py:1057 +#: netbox/dcim/forms/bulk_import.py:1058 msgid "Rf role" msgstr "Rf-Rolle" -#: netbox/dcim/forms/bulk_import.py:1060 +#: netbox/dcim/forms/bulk_import.py:1061 msgid "Wireless role (AP/station)" msgstr "WLAN Rolle (AP/Station)" -#: netbox/dcim/forms/bulk_import.py:1103 +#: netbox/dcim/forms/bulk_import.py:1104 #, python-brace-format msgid "VDC {vdc} is not assigned to device {device}" msgstr "VDC {vdc} ist dem Gerät {device} nicht zugewiesen" -#: netbox/dcim/forms/bulk_import.py:1119 netbox/dcim/forms/bulk_import.py:1137 -#: netbox/dcim/forms/bulk_import.py:1518 +#: netbox/dcim/forms/bulk_import.py:1120 netbox/dcim/forms/bulk_import.py:1225 +#: netbox/dcim/forms/bulk_import.py:1606 msgid "Physical medium classification" msgstr "Klassifizierung des physikalischen Mediums" -#: netbox/dcim/forms/bulk_import.py:1173 +#: netbox/dcim/forms/bulk_import.py:1123 netbox/dcim/forms/model_forms.py:1846 +#: netbox/dcim/forms/object_import.py:145 +msgid "Rear port" +msgstr "Rückseitenanschluss" + +#: netbox/dcim/forms/bulk_import.py:1126 +msgid "Corresponding rear port (mapped to the front port's first position)" +msgstr "" +"Entsprechender hinterer Anschluss (der ersten Position des vorderen " +"Anschlusses zugeordnet)" + +#: netbox/dcim/forms/bulk_import.py:1129 +msgid "Rear port position" +msgstr "Position des hinteren Anschlusses" + +#: netbox/dcim/forms/bulk_import.py:1131 +msgid "Mapped position on the corresponding rear port (defaults to 1)" +msgstr "" +"Zugeordnete Position am entsprechenden hinteren Anschluss (standardmäßig 1)" + +#: netbox/dcim/forms/bulk_import.py:1175 netbox/dcim/models/base.py:59 +#, python-brace-format +msgid "" +"Invalid rear port position ({rear_port_position}): Rear port {name} has only" +" {positions} positions." +msgstr "" +"Ungültige Position des hinteren Anschlusses ({rear_port_position}): Hinterer" +" Anschluss {name} hat nur {positions} Stellungen." + +#: netbox/dcim/forms/bulk_import.py:1193 +#, python-brace-format +msgid "Rear port {name} position {rear_port_position} is already occupied." +msgstr "" +"Hinterer Anschluss {name} Position {rear_port_position} ist bereits besetzt." + +#: netbox/dcim/forms/bulk_import.py:1261 msgid "Installed device" msgstr "Installiertes Gerät" -#: netbox/dcim/forms/bulk_import.py:1177 +#: netbox/dcim/forms/bulk_import.py:1265 msgid "Child device installed within this bay" msgstr "In diesem Schacht installiertes untergeordnetes Gerät" -#: netbox/dcim/forms/bulk_import.py:1179 +#: netbox/dcim/forms/bulk_import.py:1267 msgid "Child device not found." msgstr "Untergeordnetes Gerät wurde nicht gefunden." -#: netbox/dcim/forms/bulk_import.py:1243 +#: netbox/dcim/forms/bulk_import.py:1331 msgid "Parent inventory item" msgstr "Artikel aus dem übergeordneten Inventar" -#: netbox/dcim/forms/bulk_import.py:1246 +#: netbox/dcim/forms/bulk_import.py:1334 msgid "Component type" msgstr "Komponententyp" -#: netbox/dcim/forms/bulk_import.py:1250 +#: netbox/dcim/forms/bulk_import.py:1338 msgid "Component Type" msgstr "Komponententyp" -#: netbox/dcim/forms/bulk_import.py:1253 +#: netbox/dcim/forms/bulk_import.py:1341 msgid "Component name" msgstr "Name der Komponente" -#: netbox/dcim/forms/bulk_import.py:1255 +#: netbox/dcim/forms/bulk_import.py:1343 msgid "Component Name" msgstr "Name der Komponente" -#: netbox/dcim/forms/bulk_import.py:1298 netbox/dcim/forms/bulk_import.py:1316 +#: netbox/dcim/forms/bulk_import.py:1386 netbox/dcim/forms/bulk_import.py:1404 msgid "Component name must be specified when component type is specified" msgstr "" "Der Komponentenname muss angegeben werden, wenn der Komponententyp angegeben" " wird" -#: netbox/dcim/forms/bulk_import.py:1308 +#: netbox/dcim/forms/bulk_import.py:1396 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "Komponente wurde nicht gefunden: {device} - {component_name}" -#: netbox/dcim/forms/bulk_import.py:1321 +#: netbox/dcim/forms/bulk_import.py:1409 msgid "Component type must be specified when component name is specified" msgstr "" "Der Komponententyp (Component type) muss angegeben werden, wenn der " "Komponentenname (Component name) angegeben wird" -#: netbox/dcim/forms/bulk_import.py:1348 netbox/ipam/forms/bulk_import.py:320 +#: netbox/dcim/forms/bulk_import.py:1436 netbox/ipam/forms/bulk_import.py:320 msgid "Parent device of assigned interface (if any)" msgstr "Übergeordnetes Gerät der zugewiesenen Schnittstelle (falls vorhanden)" -#: netbox/dcim/forms/bulk_import.py:1351 netbox/ipam/forms/bulk_import.py:323 +#: netbox/dcim/forms/bulk_import.py:1439 netbox/ipam/forms/bulk_import.py:323 #: netbox/virtualization/filtersets.py:354 #: netbox/virtualization/filtersets.py:412 #: netbox/virtualization/forms/bulk_edit.py:219 @@ -5324,135 +5359,135 @@ msgstr "Übergeordnetes Gerät der zugewiesenen Schnittstelle (falls vorhanden)" msgid "Virtual machine" msgstr "Virtuelle Maschine" -#: netbox/dcim/forms/bulk_import.py:1355 netbox/ipam/forms/bulk_import.py:327 +#: netbox/dcim/forms/bulk_import.py:1443 netbox/ipam/forms/bulk_import.py:327 msgid "Parent VM of assigned interface (if any)" msgstr "Übergeordnete VM der zugewiesenen Schnittstelle (falls vorhanden)" -#: netbox/dcim/forms/bulk_import.py:1362 netbox/ipam/filtersets.py:1111 +#: netbox/dcim/forms/bulk_import.py:1450 netbox/ipam/filtersets.py:1111 #: netbox/ipam/forms/bulk_import.py:334 msgid "Assigned interface" msgstr "Zugewiesene Schnittstelle" -#: netbox/dcim/forms/bulk_import.py:1366 +#: netbox/dcim/forms/bulk_import.py:1454 msgid "Make this the primary MAC address for the assigned interface" msgstr "" "Machen Sie dies zur primären MAC-Adresse für die zugewiesene Schnittstelle" -#: netbox/dcim/forms/bulk_import.py:1404 +#: netbox/dcim/forms/bulk_import.py:1492 msgid "Must specify the parent device or VM when assigning an interface" msgstr "" "Bei der Zuweisung einer Schnittstelle muss das übergeordnete Gerät oder die " "virtuelle Maschine angegeben werden" -#: netbox/dcim/forms/bulk_import.py:1437 +#: netbox/dcim/forms/bulk_import.py:1525 msgid "Side A site" msgstr "Seite A" -#: netbox/dcim/forms/bulk_import.py:1441 +#: netbox/dcim/forms/bulk_import.py:1529 #: netbox/wireless/forms/bulk_import.py:93 msgid "Site of parent device A (if any)" msgstr "Standort des übergeordneten Geräts A (falls vorhanden)" -#: netbox/dcim/forms/bulk_import.py:1444 +#: netbox/dcim/forms/bulk_import.py:1532 msgid "Side A device" msgstr "Gerät Seite A" -#: netbox/dcim/forms/bulk_import.py:1448 netbox/dcim/forms/bulk_import.py:1481 +#: netbox/dcim/forms/bulk_import.py:1536 netbox/dcim/forms/bulk_import.py:1569 msgid "Device name (for device component terminations)" msgstr "Gerätename (für Gerätekomponentenabschlüsse)" -#: netbox/dcim/forms/bulk_import.py:1451 +#: netbox/dcim/forms/bulk_import.py:1539 msgid "Side A power panel" msgstr "Seite A - Stromversorgungspanel" -#: netbox/dcim/forms/bulk_import.py:1455 netbox/dcim/forms/bulk_import.py:1488 +#: netbox/dcim/forms/bulk_import.py:1543 netbox/dcim/forms/bulk_import.py:1576 msgid "Power panel name (for power feed terminations)" msgstr "Name der Schalttafel (für Anschlüsse der Stromzuführung)" -#: netbox/dcim/forms/bulk_import.py:1458 +#: netbox/dcim/forms/bulk_import.py:1546 msgid "Side A type" msgstr "Typ Seite A" -#: netbox/dcim/forms/bulk_import.py:1464 +#: netbox/dcim/forms/bulk_import.py:1552 msgid "Side A name" msgstr "Name der Seite A" -#: netbox/dcim/forms/bulk_import.py:1465 netbox/dcim/forms/bulk_import.py:1498 +#: netbox/dcim/forms/bulk_import.py:1553 netbox/dcim/forms/bulk_import.py:1586 msgid "Termination name" msgstr "Name des Abschlusspunktes" -#: netbox/dcim/forms/bulk_import.py:1470 +#: netbox/dcim/forms/bulk_import.py:1558 msgid "Side B site" msgstr "Seite B" -#: netbox/dcim/forms/bulk_import.py:1474 +#: netbox/dcim/forms/bulk_import.py:1562 #: netbox/wireless/forms/bulk_import.py:114 msgid "Site of parent device B (if any)" msgstr "Standort des übergeordneten Geräts B (falls vorhanden)" -#: netbox/dcim/forms/bulk_import.py:1477 +#: netbox/dcim/forms/bulk_import.py:1565 msgid "Side B device" msgstr "Gerät Seite B" -#: netbox/dcim/forms/bulk_import.py:1484 +#: netbox/dcim/forms/bulk_import.py:1572 msgid "Side B power panel" msgstr "Seite B - Stromversorgungspanel Seite B" -#: netbox/dcim/forms/bulk_import.py:1491 +#: netbox/dcim/forms/bulk_import.py:1579 msgid "Side B type" msgstr "Typ Seite B" -#: netbox/dcim/forms/bulk_import.py:1497 +#: netbox/dcim/forms/bulk_import.py:1585 msgid "Side B name" msgstr "Name der Seite B" -#: netbox/dcim/forms/bulk_import.py:1506 +#: netbox/dcim/forms/bulk_import.py:1594 #: netbox/templates/dcim/panels/connection.html:60 #: netbox/wireless/forms/bulk_import.py:133 msgid "Connection status" msgstr "Status der Verbindung" -#: netbox/dcim/forms/bulk_import.py:1512 +#: netbox/dcim/forms/bulk_import.py:1600 msgid "Cable connection profile" msgstr "Kabelverbindungsprofil" -#: netbox/dcim/forms/bulk_import.py:1532 +#: netbox/dcim/forms/bulk_import.py:1620 msgid "Cable bundle name" msgstr "Name des Kabelbündels" -#: netbox/dcim/forms/bulk_import.py:1544 +#: netbox/dcim/forms/bulk_import.py:1632 msgid "Color name (e.g. \"Red\") or hex code (e.g. \"f44336\")" msgstr "Farbname (z. B. „Rot“) oder Hex-Code (z. B. „f44336\")" -#: netbox/dcim/forms/bulk_import.py:1587 +#: netbox/dcim/forms/bulk_import.py:1675 #, python-brace-format msgid "Invalid side designation: {side}" msgstr "Ungültige Seitenbezeichnung: {side}" -#: netbox/dcim/forms/bulk_import.py:1606 +#: netbox/dcim/forms/bulk_import.py:1694 #, python-brace-format msgid "" "Side {side_upper}: {power_panel} {termination_object} is already connected" msgstr "" "Seite {side_upper}: {power_panel} {termination_object} ist bereits verbunden" -#: netbox/dcim/forms/bulk_import.py:1612 +#: netbox/dcim/forms/bulk_import.py:1700 #, python-brace-format msgid "{side_upper} side termination not found: {power_panel} {name}" msgstr "{side_upper} Seite Abschluss nicht gefunden: {power_panel} {name}" -#: netbox/dcim/forms/bulk_import.py:1630 +#: netbox/dcim/forms/bulk_import.py:1718 #, python-brace-format msgid "Side {side_upper}: {device} {termination_object} is already connected" msgstr "" "Seite {side_upper}: {device} {termination_object} ist bereits verbunden" -#: netbox/dcim/forms/bulk_import.py:1636 +#: netbox/dcim/forms/bulk_import.py:1724 #, python-brace-format msgid "{side_upper} side termination not found: {device} {name}" msgstr "{side_upper} Standort Abschluss nicht gefunden: {device} {name}" -#: netbox/dcim/forms/bulk_import.py:1658 +#: netbox/dcim/forms/bulk_import.py:1746 #, python-brace-format msgid "" "{color} did not match any used color name and was longer than six " @@ -5461,53 +5496,53 @@ msgstr "" "{color} stimmte mit keinem verwendeten Farbnamen überein und war länger als " "sechs Zeichen: ungültiges Hexadezimalzeichen." -#: netbox/dcim/forms/bulk_import.py:1683 netbox/dcim/forms/model_forms.py:962 +#: netbox/dcim/forms/bulk_import.py:1771 netbox/dcim/forms/model_forms.py:962 #: netbox/dcim/tables/devices.py:1154 #: netbox/templates/dcim/panels/virtual_chassis_members.html:10 msgid "Master" msgstr "Master" -#: netbox/dcim/forms/bulk_import.py:1687 +#: netbox/dcim/forms/bulk_import.py:1775 msgid "Master device" msgstr "Mastergerät" -#: netbox/dcim/forms/bulk_import.py:1704 +#: netbox/dcim/forms/bulk_import.py:1792 msgid "Name of parent site" msgstr "Name des übergeordneten Standorts" -#: netbox/dcim/forms/bulk_import.py:1738 +#: netbox/dcim/forms/bulk_import.py:1826 msgid "Upstream power panel" msgstr "vorgeschalteter Stromverteiler" -#: netbox/dcim/forms/bulk_import.py:1768 +#: netbox/dcim/forms/bulk_import.py:1856 msgid "Primary or redundant" msgstr "Primär oder redundant" -#: netbox/dcim/forms/bulk_import.py:1773 +#: netbox/dcim/forms/bulk_import.py:1861 msgid "Supply type (AC/DC)" msgstr "Versorgungsart (AC/DC)" -#: netbox/dcim/forms/bulk_import.py:1778 +#: netbox/dcim/forms/bulk_import.py:1866 msgid "Single or three-phase" msgstr "Ein- oder Dreiphasig" -#: netbox/dcim/forms/bulk_import.py:1828 netbox/dcim/forms/model_forms.py:1939 +#: netbox/dcim/forms/bulk_import.py:1916 netbox/dcim/forms/model_forms.py:1939 #: netbox/dcim/ui/panels.py:111 netbox/dcim/ui/panels.py:371 #: netbox/virtualization/ui/panels.py:55 msgid "Primary IPv4" msgstr "Primäre IPv4" -#: netbox/dcim/forms/bulk_import.py:1832 +#: netbox/dcim/forms/bulk_import.py:1920 msgid "IPv4 address with mask, e.g. 1.2.3.4/24" msgstr "IPv4-Adresse mit Maske, z. B. 1.2.3.4/24" -#: netbox/dcim/forms/bulk_import.py:1835 netbox/dcim/forms/model_forms.py:1948 +#: netbox/dcim/forms/bulk_import.py:1923 netbox/dcim/forms/model_forms.py:1948 #: netbox/dcim/ui/panels.py:116 netbox/dcim/ui/panels.py:376 #: netbox/virtualization/ui/panels.py:60 msgid "Primary IPv6" msgstr "Primäre IPv6" -#: netbox/dcim/forms/bulk_import.py:1839 +#: netbox/dcim/forms/bulk_import.py:1927 msgid "IPv6 address with prefix length, e.g. 2001:db8::1/64" msgstr "IPv6-Adresse mit Präfixlänge, z. B. 2001:db8: :1/64" @@ -6002,11 +6037,6 @@ msgstr "Frontanschluss" msgid "Power outlet" msgstr "Stromabgang" -#: netbox/dcim/forms/model_forms.py:1846 -#: netbox/dcim/forms/object_import.py:145 -msgid "Rear port" -msgstr "Rückseitenanschluss" - #: netbox/dcim/forms/model_forms.py:1852 msgid "Inventory Item" msgstr "Inventar-Artikel" @@ -6058,7 +6088,7 @@ msgstr "" #: netbox/dcim/forms/object_create.py:312 netbox/dcim/tables/devices.py:1160 #: netbox/ipam/tables/fhrp.py:31 netbox/ipam/ui/panels.py:185 -#: netbox/ipam/views.py:1589 netbox/templates/dcim/virtualchassis_edit.html:59 +#: netbox/ipam/views.py:1594 netbox/templates/dcim/virtualchassis_edit.html:59 #: netbox/users/views.py:375 msgid "Members" msgstr "Mitglieder" @@ -6083,15 +6113,6 @@ msgstr "Mitgliedsgeräte" msgid "A position must be specified for the first VC member." msgstr "Für das erste VC-Mitglied muss eine Position angegeben werden." -#: netbox/dcim/models/base.py:59 -#, python-brace-format -msgid "" -"Invalid rear port position ({rear_port_position}): Rear port {name} has only" -" {positions} positions." -msgstr "" -"Ungültige Position des hinteren Anschlusses ({rear_port_position}): Hinterer" -" Anschluss {name} hat nur {positions} Stellungen." - #: netbox/dcim/models/cables.py:62 msgid "cable bundle" msgstr "Kabelbündel" @@ -8070,8 +8091,8 @@ msgstr "Zugewiesener Stromverbrauch (W)" #: netbox/dcim/tables/devices.py:597 netbox/dcim/views.py:3402 #: netbox/ipam/forms/model_forms.py:834 netbox/ipam/tables/fhrp.py:28 -#: netbox/ipam/ui/panels.py:252 netbox/ipam/views.py:922 -#: netbox/ipam/views.py:1047 netbox/netbox/navigation/menu.py:175 +#: netbox/ipam/ui/panels.py:252 netbox/ipam/views.py:924 +#: netbox/ipam/views.py:1052 netbox/netbox/navigation/menu.py:175 #: netbox/netbox/navigation/menu.py:177 netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "IP-Adressen" @@ -8500,7 +8521,7 @@ msgstr "Virtual Device Context" #: netbox/dcim/views.py:3414 netbox/ipam/forms/filtersets.py:469 #: netbox/ipam/models/vlans.py:308 netbox/ipam/tables/ip.py:121 -#: netbox/ipam/tables/vlans.py:52 netbox/ipam/views.py:1381 +#: netbox/ipam/tables/vlans.py:52 netbox/ipam/views.py:1386 #: netbox/netbox/navigation/menu.py:210 netbox/netbox/navigation/menu.py:212 msgid "VLANs" msgstr "VLANs" @@ -11517,11 +11538,11 @@ msgstr "Richtlinie" msgid "Ports" msgstr "Ports" -#: netbox/ipam/forms/bulk_import.py:55 netbox/ipam/views.py:72 +#: netbox/ipam/forms/bulk_import.py:55 netbox/ipam/views.py:73 msgid "Import route targets" msgstr "Routenziele importieren" -#: netbox/ipam/forms/bulk_import.py:61 netbox/ipam/views.py:75 +#: netbox/ipam/forms/bulk_import.py:61 netbox/ipam/views.py:76 msgid "Export route targets" msgstr "Routenziele exportieren" @@ -12393,8 +12414,8 @@ msgid "Added" msgstr "Hinzugefügt" #: netbox/ipam/tables/ip.py:76 netbox/ipam/tables/ip.py:111 -#: netbox/ipam/tables/vlans.py:125 netbox/ipam/views.py:621 -#: netbox/ipam/views.py:1731 netbox/netbox/navigation/menu.py:182 +#: netbox/ipam/tables/vlans.py:125 netbox/ipam/views.py:623 +#: netbox/ipam/views.py:1736 netbox/netbox/navigation/menu.py:182 #: netbox/netbox/navigation/menu.py:184 msgid "Prefixes" msgstr "Prefixe" @@ -12597,77 +12618,77 @@ msgstr "" "In DNS-Namen sind nur alphanumerische Zeichen, Sternchen, Bindestriche, " "Punkte und Unterstriche zulässig" -#: netbox/ipam/views.py:106 netbox/ipam/views.py:1761 +#: netbox/ipam/views.py:107 netbox/ipam/views.py:1766 msgid "Device Interfaces" msgstr "Geräteschnittstellen" -#: netbox/ipam/views.py:111 netbox/ipam/views.py:1779 +#: netbox/ipam/views.py:112 netbox/ipam/views.py:1784 msgid "VM Interfaces" msgstr "VM-Schnittstellen" -#: netbox/ipam/views.py:196 +#: netbox/ipam/views.py:197 msgid "Importing VRFs" msgstr "VRFs importieren" -#: netbox/ipam/views.py:203 +#: netbox/ipam/views.py:204 msgid "Exporting VRFs" msgstr "VRFs exportieren" -#: netbox/ipam/views.py:212 +#: netbox/ipam/views.py:213 msgid "Importing L2VPNs" msgstr "L2VPNs importieren" -#: netbox/ipam/views.py:219 +#: netbox/ipam/views.py:220 msgid "Exporting L2VPNs" msgstr "L2VPNs exportieren" -#: netbox/ipam/views.py:798 +#: netbox/ipam/views.py:800 msgid "Duplicate prefixes" msgstr "Doppelte Präfixe" -#: netbox/ipam/views.py:799 netbox/ipam/views.py:1012 -#: netbox/ipam/views.py:1120 +#: netbox/ipam/views.py:801 netbox/ipam/views.py:1017 +#: netbox/ipam/views.py:1125 msgid "Parent prefixes" msgstr "Haupt Präfixe" -#: netbox/ipam/views.py:851 +#: netbox/ipam/views.py:853 msgid "Child Prefixes" msgstr "untergeordnete Prefixe" -#: netbox/ipam/views.py:895 +#: netbox/ipam/views.py:897 msgid "Child Ranges" msgstr "untergeordnete Bereiche" -#: netbox/ipam/views.py:1121 +#: netbox/ipam/views.py:1126 msgid "Duplicate IPs" msgstr "Doppelte IPs" -#: netbox/ipam/views.py:1125 +#: netbox/ipam/views.py:1130 msgid "Application services" msgstr "Anwendungsdienste" -#: netbox/ipam/views.py:1291 +#: netbox/ipam/views.py:1296 msgid "Related IPs" msgstr "Verwandte IPs" -#: netbox/ipam/views.py:1432 +#: netbox/ipam/views.py:1437 msgid "VLAN translation rules" msgstr "VLAN-Übersetzungsregeln" -#: netbox/ipam/views.py:1438 +#: netbox/ipam/views.py:1443 msgid "Add Rule" msgstr "Regel hinzufügen" -#: netbox/ipam/views.py:1580 +#: netbox/ipam/views.py:1585 msgid "Virtual IP addresses" msgstr "Virtuelle IP-Adressen" -#: netbox/ipam/views.py:1585 netbox/templates/ipam/iprange/ip_addresses.html:8 +#: netbox/ipam/views.py:1590 netbox/templates/ipam/iprange/ip_addresses.html:8 #: netbox/templates/ipam/prefix/ip_addresses.html:7 msgid "Add IP Address" msgstr "IP-Adresse hinzufügen" -#: netbox/ipam/views.py:1744 +#: netbox/ipam/views.py:1749 msgid "Add a Prefix" msgstr "Präfix hinzufügen" @@ -14103,7 +14124,7 @@ msgstr "Daten synchronisiert für {object_type} {object}." msgid "Synced {count} {object_type}" msgstr "Synchronisiert {count} {object_type}" -#: netbox/netbox/views/generic/object_views.py:118 +#: netbox/netbox/views/generic/object_views.py:120 #, python-brace-format msgid "{class_name} must implement get_children()" msgstr "{class_name} muss get_children () implementieren" @@ -16039,8 +16060,8 @@ msgid "" "Before you can add a %(model)s you must first create a " "%(prerequisite_model)s." msgstr "" -"Bevor Sie ein %(model)s hinzufügen können, müssen Sie zunächst ein " -"%(prerequisite_model)s erstellen." +"Bevor Sie ein/eine %(model)s hinzufügen können, müssen Sie zunächst " +"ein/einen %(prerequisite_model)s erstellen." #: netbox/templates/inc/notification_bell.html:6 msgid "You have unread notifications" @@ -16083,7 +16104,7 @@ msgstr "pro Seite" msgid "Data is out of sync with upstream file" msgstr "Die Daten sind nicht mit der Upstream-Datei synchronisiert" -#: netbox/templates/inc/table_controls_htmx.html:11 +#: netbox/templates/inc/table_controls_htmx.html:10 #: netbox/templates/inc/table_controls_htmx.html:12 msgid "Quick search" msgstr "Schnellsuche" diff --git a/netbox/translations/es/LC_MESSAGES/django.mo b/netbox/translations/es/LC_MESSAGES/django.mo index e6bc8c8cb35429df666f568e30384269a6d43972..5e5e0ac5edd717a137b457bc5d19e42425243e05 100644 GIT binary patch delta 77810 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 UP8n z+K>=n0d%Bg(ARezG~hnyJ7g?6uq3+4R}SI)S10iv1wJs&V` z&;~}LfsR8@$yD?Sxdh!zYtU!^3ur)l(0boQ|3%v^I5N~LhSW>)FO-BEI-?y7i}^7z ze+PQwLac@NVL9B525<_Up-V=EdO6UM=SQcwXv|kYH)U;fGd93W{r;ao!YP@aDxf1Q zO@0YFf-UHX4xsgZKu3HQeWYf)DRkTcJ&rxlj;Eu6%|(yrU04!dLifTEO#T1=ej6+N zflIhhbaePd!E@+{KSxJ&`Izw4dNrDFgzkm5=-T&2*K}-j2393MAAM=Pf}QXatcj&> zj^F=%NcaRBhEDbE=&@OdcJLTF;!Wt3Z%2>O0kp&4(EI;IM^`G#OBiW?wBb?FiRf4JteC$Y-F$bUGw}r0!L8^^?00k~ z%a04kv_CqqHRCw{j`T$e^gVQHkH!i=q79zK>X>JISlec3c_(yJ4Z)r`5*_h&bY^y< zd*&co|64TBvoW7HIU&4$%c21^M>kuq=vXXHelB|BI`lZcfp)M9?cgKyf%IMUY%I?` zF|=D0tzQ#;-8YTp$-eQzxOib!%s+&=skj!a;S2aA9!IC{u1TT8?z0maV;HrS`rIu(rebIJq!LfKJrvCizOuUeBYxsaDgid*NbV{3}Q`R9~ zzaDM)mgqdR;g#qv-;54mH@3jfIxACIBOwD4`=dIvOsMfm@^&H_5Br3$Lap3g*cPT6;sgkSTB$8i zEBXfN`SAy8>*5S`;<_`@(S2DIDo|ypJ!}tUI0&keNj6>tb;>sxcR=ayg9>m3s({x} zcTf0Xj(=ZcGN`ka1+p@3S5Z0&P!8%7kOokOjbT#Q4r(PvLj_s^)53jFl|O?OVfNw9 zZRUo0aoP%-!^^NH%rnASv9Yik;|;K)?tkx*&h1kbs)7zsD>2l#04kxqFas-lY5f4 z=Ldq@!psOR!&1b`9Xm3dF7N3t6#vC&X^bD*|nE%bw@ZTuQ)3nK@4 zyT-z}P+R3*Os6WHqj0(=rZ@rCL!FK7P$U>LnROZwfDWCo{VFl z0xW>q+ucxw-GM6LGt_HF_!-U{o{Z4*`~Mr!@nfPZOb(~OoNyb|6Ydqv1Y^#0UPg<; zER6dYS3*6&ZorJtYnHcbGt3NC`9r8B{|Hr3gxOBw$!Bx_tI}Ku6u1)9-gky&;dE2H z59Qz!l!J(KocliotjM?o)Y+K`wZ}W4DnAMJ&gedr{ckAym~$QbjB~mFYaytJpb=aM z>p{N#&9h|np$t3Nco3B1AgBk)N|PUhy6vt*y+(Y6Dk$N6C$Yj%cTH=kE$9yQ8Zy&O zM|*n&dY;`-72JXf{2J5Ff|Npae6!;2MW_OG)j9;L(D9lplG)INH-4eqLFb7oNCQyfP z0F<9)P>F7Wx+`u#-8JEtIj;eEpy&7h^rfQ*!bm8C*{}*c1hvGz%bmSS2(_f;p%ShP z6{wDlTiCb*)XMaNIy-}*{EV{kB&Zjk>Cp4@znAG~&u>EAF0Wx47;%O3K*mRKVU)r+x_3k}rkD;bvG9eueU1aivpmo0Z)Ea?}rjG93z4*%&CrDNv_< zz3~K8q7R^+e4n89GW;q>FA3E1B#(`&7~2>JLD|oQ+OpNF+>WDD2;}GvRN&9B42-eb zaaa%Pe(wTx|Bi=BY!lQ25uLW9j{WIXc?=#!!c+JJcZ==TYFL0P6PK3_TS=?dg3ey+2U)(Kk6v1C?-LsQL0x zi8h2PtQAxO9W~bL|3Et0f)O?`9jcO5P!6_3KX?)+VAO3}M=)c`@7zkxJ6w1+Ts3+V8 zI22xnx}WRq@b>)OuU;?@<5w^vOu5r}KTr+o@OFoaHw?<(L^qw3be2G!{*zFZU4(_< zJE%7lS#~*JGN}R6GoA^xgh!y3^c+-x%TTBM5!BXxw6V`_XGMHrG34oBIp}UrN2hrU z)RJ6;rQsVW2f6k*r@l1QldcKW-u8xiZ#Whz;6|uK4nS3S6e^($P>1e5RDn;SR`@N% zkK6T&jsiy8>pZDyLmjFhs6eyf1Go-WgOm3;i9Lean$J*rQTIC!7C)$^EdV923bjQo zU{yF6)`gc~0^R=^4|uyaA}9mr!5>f+%sl9vfhAD)_co}+&cf92U#Lp{Ky6XvLr%q6 zj76YUunN@5HHAv34=f1B!JNAPPtws6{)O6te-1mRG(FU*t^jo=8bPfQm3T*}E$IQ3_;Bd?{+}Q^g%Hex8Q^WGrHXjec@?Y=6>uSx z;U1{l_9WCHyax5edjOU28>oP;W6pd;n1!J)lwAp^6|Q!S`(O8ILj+}EAiM;3K{=Rk z+<9b9huVU9P!FE1Q1d&XR^Sj+A{U_!;Vme?_o24nD^y|;PB?c}0$7Q0y%XI3dL}PJ zpgma&)Lrqz zO-B{EPB{U5pvDoQGLC9Y3U&KrgIbAvPzhFr+PbDTo(pBS*2epx5;za@!CNpdjC0!A z0(TWU%D6sMMFCKb-B4#?0@UH!1y%WZs0!{tB^3LN^PkDYP~*x_dbOeaw1hhK-E2Gp z>h1}Kti0Q`myQA-fm))gFcbU<_2x0%S*PL-FeBq3Pu*xD)SLA4x9pYnpZ((egKw$r=j$s zUvds{VyG2JY0L$4F)j^tCi+3$HRGWUc`$VA5xSI4ez+GZ!|zar5idIdi$Db`4;7#e z)SkA1((enC!7(r`Tmy9*UWK~5ZbB9E0II<6&<{qv!u>BtnXfn*6@xOU3MH=tWzY`# z!2u?p2UWpFDE$Lai5-Vpnd`7DOnlWzuocwG^?-T{Hwfykn0b}^zZIRO2y{P2{nt6Y zzEB3qpd4p}I&6iErJxe51hoQ9q4YZ2co5WKn*{ZISZee8q0Ytys6+nRZJmVIoJz_; z1*!^FVO^8AhRQg=#(ivl5Y!4ygtA)E2I@9^0CijchO$e3(>aV8Ao^}s zAv$`3RfGyK+L>_8fy#U})SiaD<-Bt#2mKh2fl6>SRKnY#0`7w;;0>tT^^eU*xb19l zG^j*kL(k`bN$AKhCk%#Fpd3Dh3h)N%iT1Ow7X z3s?*evhg7(zxSc%_y4@6qqksxp&TW;>%7TK2eUG+2$ev8sDNXjRw@W8@ug6Q?*LR~ z7oiUGO{m-ZKGY%n4t4r{?>Xa)(DU`b(sb%DQ5(u|EtI3pP!EnhFc~}tTfp~F71p}% zB+?WnW!x3&Fa|*-vIH*ALpbS?+ zIob|&*bYM3Uw{hy1ggRxP%G;D(3#H)HD3y9z8=)d1wM2;3gZxDN3hU%1uAfaM@}NX zP+OA;Sbzi=k&lptfW?d;$|aab8@!pE~cV^FzI{83gCTy|5N+^vwBm&Ao|E5d^O1 z&LguZtiW&-)Dm8SdM)?>r@*u?ygk39Y7flMxZ6wTjm0{sm+R-SG|c$QvFi$#GhP8R z!|Jb{FFp@~=(%0*=;*e~^Tzpv;vCG&IPzQPL#UE42jdPcgsx`@&9o|9_fJGXw=cIGN3bO&Lf1=zIzuU|a&Z}TUOcF2kJi>OQBZq2&@ESe0J{tCQykifV!KWK+o%cgfGtf_6$%JRD-Il8*BiV z!uc@FSLg0n1hvE`p>Dev-@HA4UNali-kyV9VXE)moTo8B=;OKztHXs}JRc(YxQa5q64|kf6UE0h zo^eU2t-AzumJ+z5`glGXtqXNH))+rPWt`_9AJ3izK|PRsqd9?-Kp)0MpdL&mp&q%_ zpzinPP_Gs9U{tsa>WR0-#^<3P@$Nfx^hA3K^-kss)T1|CbSGdun3i!0D7}hMThai= zg#l2GhMRl>)RS-_)ZMTP>bAWB)4|9wd^}IiT#&@wu5xt3F;N>T<3=|2hmjd~fJ&?v zRHY-K5}0b^I!V--CLY?{&zCNBO=Xj{VtDrYL2J>+?PQg@+!^ZY;HPro>fsPbL z8plFC`zON2a3<^qzr%bmAdYjYm%~bof5IBDTwEW|e?;cMag0B~s&H^T=a624It$_B zJN{!scWwkp>3FsPYUvum*sv4SVHyUdcMzt4-(gaiIDwDnfmH}<+!ShQ2f{3H6x7P> zfEnR$DEssYot3Gako!M1f_4b>%%23a!;?^Z`Wu#oaT7U-HHChR1EH2M2rAJXFeN+( z^#uI{RcYMB&Yq`&Iy-rxwyqS^t7^5x-2chwv_ha27zuUCCqNm@g_>Ulb-2#JqVO4f z4bvrY5{;YGd0u3L3OoerFi(Q=GXv^uErmK0+n_JJX`xPg z38?wnurO=`Ww#9G3d6fzoBy2L*@EyXoWRkc^b$j@XfD_tR)Ltg+(+mr!{f#)#s|i? zQ11hNK^?OADV@XA5$ez`fLggFP=|IkECRPe-Bn*q{u63t!lrU6_k}#r+^#fqRAF|g z3QIw4K^>^QZ3T7P^@Dl>PK9zbA8HBLLT%AO=m#G`&+V1kdEjJ#DxenBqdO4Fej@bz z{NG$U3b+lng-1OTd~0u`oG24lBWzPzB}7$o;QM3T1RMD-AW#2&%GXP|yDMHtq}k7!QNGy_Q04-CE-w zs55aIW`*})E*K+|b9 z^cmFBeup}w(Xu#qQ(CC`Tu}1TP=1?0`Rxal_(Zn}=0Rn;32MooLmBvFbsQyw+Pmyf z0n0(1@+MGQG7KuQMaE-Ld;b#3uPd9w+^{6W4p0fYH_(y8gHWgV8dSv}pkB>lW_KPq zjiB~!HY@{QKvkAKhm$}BD7&^W4;%#*_yE)veuaASh0p11T?)w7yImRRlw%?%)U$a2 z)bn68EClC3or#-J8Q+C+^bTqXqvUcDPY7k73)Y0ipw7rNs6#jx>J7;as5AH7Gtd1O zCbx6@M1nfi(V!gXgp*(i_#9q=`QW}hJ}xgW9KZ^Uf97>os7yZR)owV{6Y(UJp9@fT z)jg=Ce**QO%aET#PJCA(I(h_`fvT`3)K>UIodvgzXF?fnhB`z?p`PtGpjPaI$-@?K zwlqFeL0MpRSQBammO<$sg>F4kuhY?zK7v{rS3yTHBGeM5g*r@GjisRU>O*Z!3z!ME zhNcq?Ru#~-2cjOE&{EBOBJiAv#05xDl7yQxGdDE zZU9wLYm;|}TKbVtXJ#zaA)8}d1a($cK>68ajTFUXpU?_+4p#rXhI;01oo)cH0{Jn)rI8t$sp4*j>j`l7y)L!R> zGAsfWs0Nfl8!1SfGWlhb--Sx_CG>p#?*|<*iFg+X%br)=bNp$}| zprbwUD&vH>kw_ zDdTKeGN>&~Q-=FridhgSaABy5Ye6N{3Ch7xs03z0CAJLe!LkWzNiRZG_8a=a^ktoj zD?rbowQ+AKf8(J1Eh_7FGFgv6j<-V{s>4uAb`ol7@7VYm)Yklhsvvebhl!!|Q^8~~ zAJk!N0JSo$p!9n{6*d6s_6>5=@hmA+0?VOplg+RRJO{OhS;{*vK4qX190c{G8vzwy zEYz0FhN^fil%L~JXW^mAUzpsdg7e^WC#9o3ECsbRHJ}2vg`Pkr9|4u<9H>BRq4sn? zl>H^BMD9av>3gWV$W_sKUyumOt{~LXSB9*t+tq-M0{KI&Kzpb_J)trm36sJJPzkPs zs{9Dl5}$-h;0jdWhfs-qfI1^#D>++}5-NebP>Gg@5%mB6`gF9%Ej$9A*-(yq7zaTG z9t(9y7ed_?JD}_iLao?osDO{4&VYAiXNgn6)Ql@Yot;3axAkM-Kf3?N)6tU5fvS8Z z)Jp7<0z78(SD`9>2o>->)XGJy;#3q3N$c(*t?dKP&}xD(nBSZ3u+~c zLFt!;iq`;o{{CMNI?8k)l;L=&C)W&szL>*2UU4nSRZzU zdIFw>(!UH9@D`N*2dFIzQ{NfKf*PlUN+@@Id;KqlAQOUeFbnJnv%zIh4zEKQzJ*#b zuLe%QSWxmrP>E(Xc^;@0C<0Y!Rj7bXpjN0IRN`(o9c4NU%3vzgUM_{IXbsffZGo!% z1eD$-sDO{49KMFynlKF=d3>lulSAE>xuEx&Ld^(cZU&I)t5}_Glc`-cE*k za;=1Na2P7^DX2s)LnZJSDuEwRiNdgukW+ju9G{Xr=GGf-#gvW-7Nt-uectqR}RS(*6I^ZP$D(ouyapekzw zwF0ed+#YHvyFooTMnEO95X#|7sFm7n;WX4zzJWR&>|K%tS9Wf1*gS=17F1&Mp;mGol>P}QzZakidI07B zJJia>Y|j0!rA^t~36uxwcB^1)26cFPLcLuc3w0JI!s2i~TnHb+5^#76=k`4bb2I({ zbz5g^>3n^m3CzrRI@E1`tfkw>)rHPi1X}vG{!XT2U{}TqVM`dNm5=AQUG{|v{1g_0 z>03LWig$no8SjT$>fgr1ZJfO?1hqviU|~2C_JPOTbd-7VwmzO;Dl;7FQ?I`;8!Xh$ zIlY}=N5=hNQTPI;ff?HScz#~6hH(ZgkNhsI3Db9Q0=l8}_rm1x3DnBCBX)HD>y!s- z?^;4HSWFv8ORIa!+G94o9~-VjzHl}Ig*OB{hUg=XRw)YY z5_2J~5IWvGWBbDl2*=?dm_AQZS4pdA4@<1pkYvxnNZ9AZ*F$td+HewR%KRG&>yOYq z+>E5~gr#i2WPgmdS`r5cRF?o1Z3W^G^a{q;n6CzdZ22$R{9OEGBycgSFd5aBvbm}h zcb0gg8FzB*SpQIM5l*`@vDAz;l@A9YtqJ{kjQw?&)=a}o}jInY)*iLC|nA)WFZcVQ@PrGTd^qEG{o^l#&r~oHVU1T z*pDKpT6vT2V0_4AN0D{0)!pu<(tOTRxTc|yo~1j0!UUYCZD4K!%5Cf{tYfYQdi}Ig z$SyMO!xaHPlNomlm3UO-YST$@0EsIK62aclZ$nkpF{;gK z%*3!Z*KUkD{=HNAJ*g{&fT zS4rg>dP6LgUbf*r$i9+++5#BI%IQh0z1Wt(b}Ss~#gpSHgP%;~N3kEle=-r$`kCWP z3Qk$YNF*-0BhWj|TzmpnCYaha=D*=%FTsA}!)@|2mQ*}!A2HwA{3j>wL*jedXB=k1 zFb>W?;7F}3oQ{)?7#@Hb(NW{urCe#vX&q$Uar6S6AL!J=W)pr|)8EWoagt0)(5C3W zMD~moyUu)a`f4e3a;~GGmX*xjps<`IMw=`Vl{X-O+5qPHpNs1QP7kA(87J)ttXAC| zW~Cnwog>WOhkPHOYXVeDTNpoNypVAWsJ59(#t~SpEvt19yRZbOpnL#m}okk%RMvF+GKS9zlu8aYHxyrRE=>AJz zcN4TDnu~*2@ZSJe9YVaJujctI5GG(fLfS|=%}Fr}(X!JYiN0DxA_P<31=7Alq;MwB z#dsCE1Bvqj|1YsUiT*o%)S83NRe}w~AU(!@D1@{*Bo~WX3*)E;4%A{2BmmvL$j9MW ztu%JGkgL_hS7QS0rR;3j_d;h3^L4b*)@G2vSjO-5tCrFeFb0ZcQ2K##pegPqK#(QF z-??<%CW*1OQVB?A8rKC9xq_`eci2upnkA$-X|d0MJ)i!0T1@mpnlH)TCW$F-{+W!^ zJ19-Vfm(JFxPb9V0(zl%7x{6F&)N!9Vy-e*7p}`(cL-V2WgMxk!Rb#}2S*=qywc=JNO&dkKbF{bZ09i!!%EepO0^-#igWeCt^|Io z;HwK)MtoeyZij4De|0YX$Mg|ZsnsRBrc_;lek7EN!Ynvy4MSRU0xh%ZLS$lZn7Ur`t7uNHo7A8yMyeJB4 zEtw2y#Yt#4S5X3A#c&DECX!Tjl8i;a4K~|Qo@}-ub~$W(9l<~74-T1tiHTK(;8*cm zTKj*BfOl|S13_XOZ=!z>*#xpx<4@1Il2{dIkVm27Z!i}+TCxrmJ4;`BK-JCP-Y zQ3 zGFn30aX1s%O@gYeA#e}o-qH6(Z!4UKk52Hc+3ZGNtsA=TfB2^s0TUuzMusooMx3gZ zLq47HZfEHEw;hS{!ODMa553dq1)A(8KHgd&DRm?GJ8Y(!&zcmh_JxEq=|}DI5nw3B zPcb^hWC;wmaH+*0xg}glkw2CUreU>~5@eSJd5wKY8%Dn_b81Vm`%aJq=7-Tdj5sgcb7iJ4e<8&5@@K--w$w{U=4tH4PQyI^+ zDhCrFEjoMgwE@{`V${brq+LZ5kkUvzaH;ZjRrT+a$LLw_OjS+N<8<6$I|Iq3a2-=KS+ecV2z6pvIs zP|k2XHiU_(aS2ga#Zx}!{=%L_Nlsa*@G%3sTSVS%o9K_cHh#TqiImk| z?3!~8MyDCEV(UA}-=MIJK(i3GW>W2&ZB%aL3kZ6Tx%C9>%~g_lefl{JUH%m7e{DUw zYF?H=d&c~X3a=1+0s_wAb0`VjBU!cZ=uHh1bm6n-ugShcD>f+|CW2Z-v~Q8wzm$~# zPeY0HjgtHstM#@_+hg+_`C&L#C81XdU!N?CokYvTRULV2^wioAqZ^szBt|YS_jCR^ zhXOzP;`)t3eRDn+#pvus6UIB~d!e%&CxdY~p5$&ZE)Ts4tX71po~MUC3A8Y|K0U6? zxHMyL0%xUv3fmkouHItw#mO23A#D`F#*ox*luJW>#Cd{M2uCtstcs~P%TK=>9Ebfv z=0{+64gJt9I?0b9P-^sM6XUk6e+K#ukb7QY`+_$FQ!9X@(CsWr`f^tsg2W6p*OB0} zao)w_#Ie}Sd{<-_2+}=NK{e5RMsgqUF@^aawvD&x7t~MlC$!*lQywQ*P*w|rBQGjS zOurWn3lMA}`}+m?4V>~bKCX#Y@lg8r2~Z#B5$rLs)vEP4H)p#DUJHlk3E05&?lCTpKfaO371jLbv&wrg z{)=rv{b=14R=}Si`m#kP0{&#Or5+LPd$=8FCU4NHh{glP`ohE$(%Xa8e5>O(^Tp9$ zX(^%N3cyoB=Iot-5hU1bDq3>Gah@ON&$+5G*9+b2mgq$DlLg&g`2C8mS~`8u9nTzu zrve|0y+~pl0rbVIImiy7oD8{IB32{{`o7GcAV5*7PIA#$~$^tYlsADy)Xx{lL{ z^wSf3El$fa{~X<9%snRXMss|Z#F{Wa!^Vy`-sWRF0v}gk0exIGoNPMUKF!BStrH6E zSn}MK&<#iI%0Q547^+3at_%ToF+NL>4xkQS4CUeq&OPnG2o*L%n5(edp{hvVNkTmx6y)@&xw z6r68^r?`$_(;S=W$PSU*0UBvF^KT4!_vSeC zYvG=sUv&+|GJx&;z}1hd7zK79oZ4*o8Oz(GwZ;nWg6CR9P#Z!De2Lrj3fVqv_nW*e zek(9nj=7WgUrH>su3X2_Ij1ih#Gsj2m0&nh*5E;AxtP%#NZolgUB0m~CMUOX3g4{cOQkkq}=ocHM{h zso*4fkD2da6;EP?Qqxap3BC%wANVV0N=rEUB7hl^S7RjMrGOvt${aU~kQN zRWn|1r(*)acOc77^2g9AX{(h2*+cU&3Huu8S43wL{^BCVe_}o*du9D|_!_|6KKxw6#`82S>}29<#Kd*7J>Z$pBsVcm7ntz?jPl?>EfW2$ z*mYtR%7zMb%9-~3`*(M{|AGGVP##&qV6QM< z8QfWjSr^@qmKr~$7_TMILY9x_8e*o_fNMRM5A{Stw+Zpb<8CdB^)K~wL9Vukx#fgE zgSZV#jwTSf&V?&ABqs1-rFmQdo;-$#9ocxjNobY;BVXY!z{#S zo7ZF*?6cZ<730>H+jDYG%3MfGh}{5uKV?zEbJe4s$H=;&myf)DGN$p@t<8Z(BT>AE zlikP$lEfU6XoK>8*o*nkurbNs#8Dj_y|)5otCj^@zS;4=_TCBN8KYlJY()XL3Mym1$XiB@{QP)q1vP1aXwyg-5)Le*b`h5bNrs znU#>A36&rDTTA6MbK}rC3OgffYwqN7ww1F8eYMEw6vnTQt#@j&*+;w;=$&zN8oQ1o z{Fk)9qwM!zUEJO(ivSle@F&P@OH__`Qco^y!Xq1lv({Yu3DVU9^|z!l1`i5LjpNB7 zEuzY(55a9&#vci{oE(zTpNY%WFr>vI>@i%mVhw7W%aFOXgl&P3ZP@Oj-;vPc@qLb~ zI6kH@UWZLyTd#&uI3sZos*S=>EhWlDtkzjLdQCqL&eCHzJ5(a89d*}ToJHYkN!^~G z=R$sh0&?QFHg*Z{ahKw@VcQ+wfALdVdrm78iAQNy6x=8zLg6KbB~glw!?!YmRWY#K zTzxPs%Y0V&0xo5K3jH2%vngFhu9kwt`5txG91FGrPDdvJ{vuk@(e$y{7_J;R7|D{V zWitcyBl1Ytj@+AMR--o(2SJ*kt)#k!wo=2fd4OyXMYKd-58dzt`9lKRu~i$5pW@7I z#Kza`-188q#W!vZDHYj6WQ%Yz$Fe<)^G#;h8QDI@-3YvlU?FW4_B$wMB0(o{b*Eaj zaLDVT+Zb5~#t-omPJe;q2U+!C@{}ohwC$f$I38^Q^~(e5vb2$HER{nfkQArQxYVvO z&-bjkP7tITep8cV32hC9jKFRrF%}VP4D)Kq_zpbRJcJ8EISpnU*(zF!v$`16bo5;l z36KHZeK=k~|0CSbwFH~4a09{S5jZC{YUyoNi&}z_(ZS4>iUgWsQ&nI1RvSa0pIpW1 z^DA5aYl8`v04F)9v>=Wra3zrk+7q0t=Q_^#lNAsFAIZb%(=gAcf@rlO!aC9#f~Bg8 zW!Cag3VCkkXKO%vKzeHJ(N#-N)Xb!L5%0g5t4?OKu<5}3P~_f>4}r#du-w!ib;bfMe_1Z_ZN{LF$%GSi{Koto#eQb0w%%z$a4@k zpXam16U?3ndiSjpHp9F2o`IC^Rdn{j@UWI7F=BQkUTdR^W>* z)n^<|#MgLi+~{^EiMf{KRQ#4lzYV$p$QR)!Fa2QMC!yQFOcciWDo*ZMu&A}_Vr_{&cox5+03vc$}({el4@U)b%y;H^#E#Bmdp)z)Eno!}v@DgiHBz=5W( zxwTx)S^X9ysaArZ0~qf!-Gk7LFJH5XWk=MlnCc zs&7hyYORsK!uB=SM&|3Io5Y!NjU;#(sy)M84CD_ju%`E6_nNu!N-pGN@Oz_N4X897 z1|2b0n@FIuIKE{|8Awv&nV*V`Z^3olrvD6<#r7S}63~B3l3S6hT|^d)uSfVz&vlsj z$@rS8z_f&n-K$YpN5zS4?=;aEC4M%@(^``43$9D%bfy`%rlLm3W-_N%ivaCxWzL{; zjs6oWq$!CfXFeyFT1w=XBGnY zCD1Z-)pjG#ZHqh*yTP8sInRTbe1zd(g2rZI8vQX$t|q`^*xoAec;TM~=%`IX-h=sJ zIKE6`?dbbj0L|w?Zwhm2`qsm~Bz}x!N^!-dqSfeD4*959N{et3ldCL~oyfdC*B6vN z*wPgzq1v`R2k2kG#>?j7l6*`O7)A043A&HDAL!O%9En6npqGw$wWcIC6SPcoGfWN?7GT;A?#7eSiP&rSakjutZc4A~m0 zSZfI!MV?1S*1iQV@Z}EfOo4BhT88Rk{AMMGMyS0(?ULm<7@bkbI-$3T{vlkZN4I^b zI^}h{jThiUZ3NdEQc_F9Tsdm}mxZeV)yC?36U*VOgefg2$aaE+w1^Zv*cMH)Gt5=8 z8Uk@rfqqyEruo|DXCpz>N}^K+A8PMO;Ewsq2=@{Rdo6_vHwYuQ}8hm@+%@;Z%E`j!Ml-c zJ+6IL&^YWk!30NXJkCC1bck_XtMUtp^}}f~t~ktJ!1!N`&oloWy&zdk zGJe5ToeKNlD+!#%RS5gI=mns29-lENK&_R&)oB3PZDcZyjHv213V#Ts)(J+%`FRXm z5Hu<}v*Bc0oi;drfnGR*sZDm^s!0;%(XGt51v=+L0wTLb{|@?9C?r7puhj@yM>wI6c7R1Im{hJ{(@jVO>Y2m_epLk zR9mMvnqdfh#u>X}QK?!1f}J6eZ)O+)C(*dtJJYTz=;gP$VmPd1d#dRd^eYiKq%~)p znHXxT@KFJ~DA=gEdlRU(RXhs8UnV|Tb{-A>Nr!PP92T^IaajJ(W>eDwm!kR<*k*!} zkewrtAFElEMC;>k1wI}#--5Y)mR#wG{2$hbrCN-US~>bntUnpU=md(5lTsFJKTgBq zU{|OFGY5B!=asPD3HO?9>fH{|Y*5&{y-KU&HebGPrXBezoa5lFGu|5(_wvaSki)0zMAn z%SA!i;ZAJh5p#lMw9)wf!dxk0-ej&i`gxh#&fEplkzOBswpMp6wpQ{9hctV16fa>0mUD={t11 zaQ=g&hLeCV`aO_kMRo?gkmgMy6)ovZ@F4bgiR)_0)t3O_2yh%hJ`~lKQF$_)sC~mA zHrG)ct|y4vbeIOa@5p*HcL9e7@v#=Wy^Phu;%{EBtHrzG4A zau4MCY4e|ObrSdK(Md`zD}xu{!hPSSBjYtEDr(7zIN$m)F)2gzvy3a^wm)+tLxp@m zIJHZpavL8X&F%zxKFI!H8w;IN%&D~?rQ=jr4ZT|W6~FIM2x)nk>|*0Ep@M`r;{!PQ zhvkbO5(M2X*u3OYn}J>`r|YUl0-YJ3v1RK|A?>L9U*u|YnR~4NzrUeV1qWxDe2Y?V zCJWJT2m3P4K(^^EsTdrNhUgxYGaNNGXRk^23;H>*Q;ToOr!l+BtXw4esj*9h&Uke0 zkk~7IF}0g5;Q=NRkxX)U7sb;i&&1fD{!!+>+Cl1pgPe??k=#o~q&*-&V^*dgvJ&{6 zY^xNRWG>nYmBH^|{9R_QHY@4ggA=t+mhnGK?xL!;jMv%RX-CD?7Wr}<4Qk-ZpNafJLUHNgvMI1`?Qx(_Bg})LcpOPJ*LB7+1C69ho0Oasvpi zW2Kgu1V(XvvR#m@4{;)5zsri6!dzSZFzQeg>v6TCx_3BkkHd^yV==0S((91bCi`dv zSNnvX+E0>bO1}d-U%6^Bj*a{@{W=s;7yF6?t;7|XYaF`a%!llUxyhy>*G8_P2;yR( zmXvJg!=WUV7)KH>#K9v1l%=ocPeNM=loY3{ak|1*WIy^-=%+zHDsx>;-W~lk6qXIy zGyGSD)X#F8g8I9OlmrKUC?=(Uge$zAjaBdfbD`TN9Q|PR262V79_SU|s*51xlZDQq zV!W|)kWdf81USry6Se&WRZIJS1(EC~*$zW~nyPByY`EzpL4Jkc>q8|_f%${jWW#S> z`aQAP!Adn{e9~eZ@aU(IYnFpSJ{0;;?E@~gz9_GzpE>w_a$YfVG99{Aq=-!TErH5y za+!pSrNsKgPIf`|4fEVw)7hD&7;Z#oGIQ(DQOkzE67Gi9y^dB`19YbmBN_fLbHy^W!@!&6Q-XBK`}|uSBd>*e*mC9i1IqTgdM`<8$O1Og-J9T2kX@@(exK1$Nh@$^RzYums ziE)Q<2IiVDKF-*e1by`b7U6L4Tq{JIO~83fOd#WE1fGS1Za5o+!Di$Gxzrk10?SBX zAma(J06xNVEGn=vQ|VvCW+lPYh8dF(s|dPkMey-TclRD9n-Xj!{oY(5tr5X*p!60; zub7`tf3a1&&=UTIv#FMp>}oKc$@mX?=kS{jAK@t~q@82@fk6i=z#RpHuT;C7&)4U|B_K8An!nmx6S{(E~**PeVPJWV_ z7|!$ane2^Kos24npuCVtANqkf+>hfb7_=kcU7Q32S4+cZ@8uC6MJ1%|ptA`#ewe78 zgUeu7@^8jM{AI2W<6YD?E|lGO>UnKB7sGvC=90mK*tEk(BzTc@{y{Gh_KS(zAPWBl z`baTdgI}ldO6Xo}3;d866POQax8#TG81hv3nuf_N`u8n<9duvN&w%`wt#eJrn{n`q z>jE)XqOX<}-Q_SdV{iIVZ7uyHa}V_=Nwv-dQ>$zN!s1{)$(0SYi9K0>#ppHU3S#aF zI^OhSnoc5YhjEo;y;E?hdE-9`0h_TX9?XwzMkdxGGpnTCW#$5RMTg-Kk*R`8-FU>fnEa(d<>n-_&ZHe8}L!Y zZ0aM+gT9*kC==UA;2#XP;W%{rgF$wjtK~9IwdK2ytb}KV0the{KiiqBPCp0!e&X*G zMLb}v_6=VH@Lv{2=Du2uzm58CjDn`H45O6vw~~EE4Ev+J38yLSChTb|kPe+N%oiir zc;-8?YE8^XTWo(It4(#&;6j4E#P1b!zLG>r#>J>!Z7uV|^h3&p>149y)t z1^G>`+~}yqk}*!oajEq;{xYX6Na`k6cak4ss~MjHf=T`X{^H>0E_Mw_Y7I&4DrgQy z+VaZjFiYSW3L$MT{Vh}%#R5rQA$U&)o+dA>_z=}frm_o{TQ!HfmgJ&zdehGls@9qa zACm9CxW8hl1dwYjd`v^X7xUM+E-`-|U&oZcr4vv=xmFn{yTzwwSb9{ zFT>elOnc^_o+(V0xJ;@G{UA10LVV$4TG{~U8GNVJ=FQ0+4YlgMlp zE33ARszTZ;9A_{mw{e)4YZ&@|=qE*f8b{5Moe8zL%^07;S7V&G2^wt9l4Dcad^J|$ zIk~bU2y4P+1S^GewX0k)ar6Pl9*az?3FKngb?fC$kD>t?f-8?RC+Y)(1{fe^l$0k%|EbXTTcT1U9||` zJ9&REAN-+?cfw%)0C0+;|79L(A)L(qpDWRuEV_0(w19Q!-kGv8Z;P_ayZrk91K;az AFaQ7m delta 77328 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≫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 z zte9tpH`WB0i=QpbRivLy72@wCMciYo_7z`!@m~^#<-S^lzjgX|R(yzR z8B^Jg%T3JvBW7cAQ98YGoh4MQl@Z=2-^;kaY^ii0*DCm!j(&IMuW+4b{tUj3;p?`g z6#@N`As>58Gh-#u$relfw*>oQ0TUr#jI$-k2czGWdYZx>R__bueUZ&UX9B?rWA}`{ zE0pgdS_AaYGPi<6yLx^%A37f}7*A%aSy{EsR29-*;W&*sxrxKW%xea-DluX<(A8~i$|cZ}^tqj|6Yw7rC{Phf}b`?~miFB^P$k554G QkKH~Ix0l@OlY7Je1036LMIUy?`^$2t=d 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 jM)Mx;Hf1lXY diff --git a/netbox/translations/fr/LC_MESSAGES/django.po b/netbox/translations/fr/LC_MESSAGES/django.po index f6af11d97..c60bca834 100644 --- a/netbox/translations/fr/LC_MESSAGES/django.po +++ b/netbox/translations/fr/LC_MESSAGES/django.po @@ -23,7 +23,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-24 05:56+0000\n" +"POT-Creation-Date: 2026-07-30 05:52+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" "Last-Translator: Jeremy Stretch, 2026\n" "Language-Team: French (https://app.transifex.com/netbox-community/teams/178115/fr/)\n" @@ -188,10 +188,10 @@ msgstr "Groupe de sites (slug)" #: netbox/circuits/forms/filtersets.py:249 #: netbox/circuits/tables/circuits.py:125 netbox/dcim/forms/bulk_edit.py:176 #: netbox/dcim/forms/bulk_edit.py:339 netbox/dcim/forms/bulk_edit.py:696 -#: netbox/dcim/forms/bulk_edit.py:906 netbox/dcim/forms/bulk_import.py:148 -#: netbox/dcim/forms/bulk_import.py:256 netbox/dcim/forms/bulk_import.py:365 -#: netbox/dcim/forms/bulk_import.py:656 netbox/dcim/forms/bulk_import.py:1701 -#: netbox/dcim/forms/bulk_import.py:1729 netbox/dcim/forms/filtersets.py:108 +#: netbox/dcim/forms/bulk_edit.py:906 netbox/dcim/forms/bulk_import.py:149 +#: netbox/dcim/forms/bulk_import.py:257 netbox/dcim/forms/bulk_import.py:366 +#: netbox/dcim/forms/bulk_import.py:657 netbox/dcim/forms/bulk_import.py:1789 +#: netbox/dcim/forms/bulk_import.py:1817 netbox/dcim/forms/filtersets.py:108 #: netbox/dcim/forms/filtersets.py:258 netbox/dcim/forms/filtersets.py:390 #: netbox/dcim/forms/filtersets.py:500 netbox/dcim/forms/filtersets.py:895 #: netbox/dcim/forms/filtersets.py:1117 netbox/dcim/forms/filtersets.py:1198 @@ -318,7 +318,7 @@ msgstr "Terminaison A (ID)" #: netbox/extras/filtersets.py:503 netbox/extras/filtersets.py:562 #: netbox/extras/filtersets.py:623 netbox/extras/filtersets.py:662 #: netbox/extras/filtersets.py:695 netbox/extras/filtersets.py:869 -#: netbox/ipam/forms/model_forms.py:523 netbox/netbox/filtersets.py:319 +#: netbox/ipam/forms/model_forms.py:523 netbox/netbox/filtersets.py:324 #: netbox/netbox/forms/filtersets.py:32 netbox/netbox/forms/search.py:20 #: netbox/templates/htmx/object_selector.html:28 #: netbox/templates/inc/filter_list.html:43 @@ -419,7 +419,7 @@ msgstr "Interface (ID)" #: netbox/dcim/forms/bulk_edit.py:142 netbox/dcim/forms/filtersets.py:227 #: netbox/dcim/forms/model_forms.py:144 netbox/dcim/tables/sites.py:74 #: netbox/ipam/models/asns.py:164 netbox/ipam/tables/asn.py:37 -#: netbox/ipam/tables/ip.py:126 netbox/ipam/views.py:383 +#: netbox/ipam/tables/ip.py:126 netbox/ipam/views.py:384 #: netbox/netbox/navigation/menu.py:189 netbox/netbox/navigation/menu.py:192 msgid "ASNs" msgstr "Numéros d'AS" @@ -467,7 +467,7 @@ msgstr "Identifiant du service" #: netbox/dcim/forms/bulk_edit.py:628 netbox/dcim/forms/bulk_edit.py:849 #: netbox/dcim/forms/bulk_edit.py:1103 netbox/dcim/forms/bulk_edit.py:1202 #: netbox/dcim/forms/bulk_edit.py:1229 netbox/dcim/forms/bulk_edit.py:1773 -#: netbox/dcim/forms/bulk_import.py:1541 netbox/dcim/forms/filtersets.py:1283 +#: netbox/dcim/forms/bulk_import.py:1629 netbox/dcim/forms/filtersets.py:1283 #: netbox/dcim/forms/filtersets.py:1613 netbox/dcim/forms/filtersets.py:1829 #: netbox/dcim/forms/filtersets.py:1848 netbox/dcim/forms/filtersets.py:1872 #: netbox/dcim/forms/filtersets.py:1891 netbox/dcim/tables/devices.py:804 @@ -496,12 +496,12 @@ msgstr "Couleur" #: netbox/dcim/forms/bulk_edit.py:1033 netbox/dcim/forms/bulk_edit.py:1056 #: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_edit.py:1146 #: netbox/dcim/forms/bulk_edit.py:1197 netbox/dcim/forms/bulk_edit.py:1224 -#: netbox/dcim/forms/bulk_import.py:214 netbox/dcim/forms/bulk_import.py:300 -#: netbox/dcim/forms/bulk_import.py:829 netbox/dcim/forms/bulk_import.py:855 -#: netbox/dcim/forms/bulk_import.py:881 netbox/dcim/forms/bulk_import.py:902 -#: netbox/dcim/forms/bulk_import.py:988 netbox/dcim/forms/bulk_import.py:1117 -#: netbox/dcim/forms/bulk_import.py:1136 netbox/dcim/forms/bulk_import.py:1515 -#: netbox/dcim/forms/bulk_import.py:1766 netbox/dcim/forms/filtersets.py:1155 +#: netbox/dcim/forms/bulk_import.py:215 netbox/dcim/forms/bulk_import.py:301 +#: netbox/dcim/forms/bulk_import.py:830 netbox/dcim/forms/bulk_import.py:856 +#: netbox/dcim/forms/bulk_import.py:882 netbox/dcim/forms/bulk_import.py:903 +#: netbox/dcim/forms/bulk_import.py:989 netbox/dcim/forms/bulk_import.py:1118 +#: netbox/dcim/forms/bulk_import.py:1224 netbox/dcim/forms/bulk_import.py:1603 +#: netbox/dcim/forms/bulk_import.py:1854 netbox/dcim/forms/filtersets.py:1155 #: netbox/dcim/forms/filtersets.py:1268 netbox/dcim/forms/filtersets.py:1401 #: netbox/dcim/forms/filtersets.py:1492 netbox/dcim/forms/filtersets.py:1512 #: netbox/dcim/forms/filtersets.py:1532 netbox/dcim/forms/filtersets.py:1552 @@ -560,11 +560,11 @@ msgstr "Identifiant de compte du prestataire" #: netbox/dcim/forms/bulk_edit.py:719 netbox/dcim/forms/bulk_edit.py:778 #: netbox/dcim/forms/bulk_edit.py:822 netbox/dcim/forms/bulk_edit.py:942 #: netbox/dcim/forms/bulk_edit.py:1747 netbox/dcim/forms/bulk_edit.py:1791 -#: netbox/dcim/forms/bulk_import.py:105 netbox/dcim/forms/bulk_import.py:164 -#: netbox/dcim/forms/bulk_import.py:281 netbox/dcim/forms/bulk_import.py:390 -#: netbox/dcim/forms/bulk_import.py:621 netbox/dcim/forms/bulk_import.py:781 -#: netbox/dcim/forms/bulk_import.py:1258 netbox/dcim/forms/bulk_import.py:1503 -#: netbox/dcim/forms/bulk_import.py:1761 netbox/dcim/forms/bulk_import.py:1824 +#: netbox/dcim/forms/bulk_import.py:106 netbox/dcim/forms/bulk_import.py:165 +#: netbox/dcim/forms/bulk_import.py:282 netbox/dcim/forms/bulk_import.py:391 +#: netbox/dcim/forms/bulk_import.py:622 netbox/dcim/forms/bulk_import.py:782 +#: netbox/dcim/forms/bulk_import.py:1346 netbox/dcim/forms/bulk_import.py:1591 +#: netbox/dcim/forms/bulk_import.py:1849 netbox/dcim/forms/bulk_import.py:1912 #: netbox/dcim/forms/filtersets.py:210 netbox/dcim/forms/filtersets.py:270 #: netbox/dcim/forms/filtersets.py:413 netbox/dcim/forms/filtersets.py:528 #: netbox/dcim/forms/filtersets.py:941 netbox/dcim/forms/filtersets.py:1064 @@ -623,10 +623,10 @@ msgstr "Statut" #: netbox/dcim/forms/bulk_edit.py:195 netbox/dcim/forms/bulk_edit.py:361 #: netbox/dcim/forms/bulk_edit.py:486 netbox/dcim/forms/bulk_edit.py:709 #: netbox/dcim/forms/bulk_edit.py:834 netbox/dcim/forms/bulk_edit.py:1796 -#: netbox/dcim/forms/bulk_import.py:124 netbox/dcim/forms/bulk_import.py:169 -#: netbox/dcim/forms/bulk_import.py:267 netbox/dcim/forms/bulk_import.py:395 -#: netbox/dcim/forms/bulk_import.py:595 netbox/dcim/forms/bulk_import.py:1521 -#: netbox/dcim/forms/bulk_import.py:1817 netbox/dcim/forms/filtersets.py:145 +#: netbox/dcim/forms/bulk_import.py:125 netbox/dcim/forms/bulk_import.py:170 +#: netbox/dcim/forms/bulk_import.py:268 netbox/dcim/forms/bulk_import.py:396 +#: netbox/dcim/forms/bulk_import.py:596 netbox/dcim/forms/bulk_import.py:1609 +#: netbox/dcim/forms/bulk_import.py:1905 netbox/dcim/forms/filtersets.py:145 #: netbox/dcim/forms/filtersets.py:204 netbox/dcim/forms/filtersets.py:237 #: netbox/dcim/forms/filtersets.py:374 netbox/dcim/forms/filtersets.py:459 #: netbox/dcim/forms/filtersets.py:480 netbox/dcim/forms/filtersets.py:863 @@ -717,7 +717,7 @@ msgstr "Paramètres du service" #: netbox/circuits/forms/filtersets.py:325 #: netbox/circuits/forms/filtersets.py:341 netbox/core/forms/filtersets.py:78 #: netbox/core/forms/filtersets.py:150 netbox/dcim/forms/bulk_edit.py:867 -#: netbox/dcim/forms/bulk_import.py:504 netbox/dcim/forms/filtersets.py:203 +#: netbox/dcim/forms/bulk_import.py:505 netbox/dcim/forms/filtersets.py:203 #: netbox/dcim/forms/filtersets.py:236 netbox/dcim/forms/filtersets.py:1054 #: netbox/dcim/forms/filtersets.py:1207 netbox/dcim/forms/filtersets.py:1219 #: netbox/dcim/forms/filtersets.py:1355 netbox/dcim/forms/filtersets.py:1482 @@ -813,7 +813,7 @@ msgstr "Description" #: netbox/circuits/forms/bulk_edit.py:192 #: netbox/circuits/forms/model_forms.py:198 -#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/bulk_import.py:1494 +#: netbox/dcim/forms/bulk_import.py:1549 netbox/dcim/forms/bulk_import.py:1582 msgid "Termination type" msgstr "Type de terminaison" @@ -887,7 +887,7 @@ msgstr "Réseau du fournisseur" #: netbox/circuits/forms/filtersets.py:393 #: netbox/circuits/forms/model_forms.py:399 netbox/dcim/forms/bulk_edit.py:372 #: netbox/dcim/forms/bulk_edit.py:1301 netbox/dcim/forms/bulk_edit.py:1737 -#: netbox/dcim/forms/bulk_import.py:286 netbox/dcim/forms/bulk_import.py:1227 +#: netbox/dcim/forms/bulk_import.py:287 netbox/dcim/forms/bulk_import.py:1315 #: netbox/dcim/forms/filtersets.py:421 netbox/dcim/forms/filtersets.py:919 #: netbox/dcim/forms/filtersets.py:1990 netbox/dcim/forms/filtersets.py:2030 #: netbox/dcim/forms/model_forms.py:312 netbox/dcim/forms/model_forms.py:1298 @@ -944,10 +944,10 @@ msgstr "Type de circuit" #: netbox/circuits/forms/bulk_import.py:102 #: netbox/circuits/forms/bulk_import.py:228 -#: netbox/dcim/forms/bulk_import.py:107 netbox/dcim/forms/bulk_import.py:166 -#: netbox/dcim/forms/bulk_import.py:283 netbox/dcim/forms/bulk_import.py:392 -#: netbox/dcim/forms/bulk_import.py:623 netbox/dcim/forms/bulk_import.py:783 -#: netbox/dcim/forms/bulk_import.py:1260 netbox/dcim/forms/bulk_import.py:1763 +#: netbox/dcim/forms/bulk_import.py:108 netbox/dcim/forms/bulk_import.py:167 +#: netbox/dcim/forms/bulk_import.py:284 netbox/dcim/forms/bulk_import.py:393 +#: netbox/dcim/forms/bulk_import.py:624 netbox/dcim/forms/bulk_import.py:784 +#: netbox/dcim/forms/bulk_import.py:1348 netbox/dcim/forms/bulk_import.py:1851 #: netbox/ipam/forms/bulk_import.py:207 netbox/ipam/forms/bulk_import.py:271 #: netbox/ipam/forms/bulk_import.py:307 netbox/ipam/forms/bulk_import.py:538 #: netbox/ipam/forms/bulk_import.py:551 @@ -961,10 +961,10 @@ msgstr "État opérationnel" #: netbox/circuits/forms/bulk_import.py:115 #: netbox/circuits/forms/bulk_import.py:174 #: netbox/circuits/forms/bulk_import.py:235 -#: netbox/dcim/forms/bulk_import.py:128 netbox/dcim/forms/bulk_import.py:173 -#: netbox/dcim/forms/bulk_import.py:399 netbox/dcim/forms/bulk_import.py:599 -#: netbox/dcim/forms/bulk_import.py:1525 netbox/dcim/forms/bulk_import.py:1758 -#: netbox/dcim/forms/bulk_import.py:1821 netbox/ipam/forms/bulk_import.py:49 +#: netbox/dcim/forms/bulk_import.py:129 netbox/dcim/forms/bulk_import.py:174 +#: netbox/dcim/forms/bulk_import.py:400 netbox/dcim/forms/bulk_import.py:600 +#: netbox/dcim/forms/bulk_import.py:1613 netbox/dcim/forms/bulk_import.py:1846 +#: netbox/dcim/forms/bulk_import.py:1909 netbox/ipam/forms/bulk_import.py:49 #: netbox/ipam/forms/bulk_import.py:78 netbox/ipam/forms/bulk_import.py:106 #: netbox/ipam/forms/bulk_import.py:126 netbox/ipam/forms/bulk_import.py:153 #: netbox/ipam/forms/bulk_import.py:181 netbox/ipam/forms/bulk_import.py:266 @@ -1009,7 +1009,7 @@ msgstr "Rôle opérationnel" #: netbox/circuits/forms/bulk_import.py:258 #: netbox/circuits/forms/model_forms.py:402 #: netbox/circuits/tables/virtual_circuits.py:109 -#: netbox/circuits/ui/panels.py:179 netbox/dcim/forms/bulk_import.py:1358 +#: netbox/circuits/ui/panels.py:179 netbox/dcim/forms/bulk_import.py:1446 #: netbox/dcim/forms/model_forms.py:1372 netbox/dcim/forms/model_forms.py:1641 #: netbox/dcim/forms/model_forms.py:1822 netbox/dcim/forms/model_forms.py:1857 #: netbox/dcim/forms/model_forms.py:1982 netbox/dcim/tables/connections.py:66 @@ -1037,9 +1037,9 @@ msgstr "Interface" #: netbox/circuits/tables/circuits.py:140 netbox/dcim/forms/bulk_edit.py:348 #: netbox/dcim/forms/bulk_edit.py:462 netbox/dcim/forms/bulk_edit.py:701 #: netbox/dcim/forms/bulk_edit.py:750 netbox/dcim/forms/bulk_edit.py:915 -#: netbox/dcim/forms/bulk_import.py:261 netbox/dcim/forms/bulk_import.py:371 -#: netbox/dcim/forms/bulk_import.py:662 netbox/dcim/forms/bulk_import.py:1707 -#: netbox/dcim/forms/bulk_import.py:1741 netbox/dcim/forms/filtersets.py:116 +#: netbox/dcim/forms/bulk_import.py:262 netbox/dcim/forms/bulk_import.py:372 +#: netbox/dcim/forms/bulk_import.py:663 netbox/dcim/forms/bulk_import.py:1795 +#: netbox/dcim/forms/bulk_import.py:1829 netbox/dcim/forms/filtersets.py:116 #: netbox/dcim/forms/filtersets.py:369 netbox/dcim/forms/filtersets.py:404 #: netbox/dcim/forms/filtersets.py:455 netbox/dcim/forms/filtersets.py:508 #: netbox/dcim/forms/filtersets.py:860 netbox/dcim/forms/filtersets.py:904 @@ -1161,7 +1161,7 @@ msgstr "Contacts" #: netbox/circuits/forms/filtersets.py:239 #: netbox/circuits/tables/circuits.py:135 netbox/dcim/forms/bulk_edit.py:121 #: netbox/dcim/forms/bulk_edit.py:323 netbox/dcim/forms/bulk_edit.py:890 -#: netbox/dcim/forms/bulk_import.py:110 netbox/dcim/forms/filtersets.py:94 +#: netbox/dcim/forms/bulk_import.py:111 netbox/dcim/forms/filtersets.py:94 #: netbox/dcim/forms/filtersets.py:171 netbox/dcim/forms/filtersets.py:217 #: netbox/dcim/forms/filtersets.py:244 netbox/dcim/forms/filtersets.py:382 #: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:881 @@ -1225,7 +1225,7 @@ msgstr "Affectation" #: netbox/circuits/forms/filtersets.py:311 #: netbox/circuits/forms/model_forms.py:289 #: netbox/circuits/tables/circuits.py:187 netbox/dcim/forms/bulk_edit.py:126 -#: netbox/dcim/forms/bulk_edit.py:356 netbox/dcim/forms/bulk_import.py:117 +#: netbox/dcim/forms/bulk_edit.py:356 netbox/dcim/forms/bulk_import.py:118 #: netbox/dcim/forms/model_forms.py:137 netbox/dcim/tables/racks.py:139 #: netbox/dcim/tables/racks.py:232 netbox/dcim/tables/sites.py:69 #: netbox/extras/forms/filtersets.py:612 netbox/ipam/filtersets.py:1049 @@ -1721,13 +1721,13 @@ msgstr "Terminaisons" #: netbox/circuits/tables/virtual_circuits.py:106 #: netbox/dcim/forms/bulk_edit.py:749 netbox/dcim/forms/bulk_edit.py:1320 #: netbox/dcim/forms/bulk_edit.py:1732 netbox/dcim/forms/bulk_edit.py:1786 -#: netbox/dcim/forms/bulk_import.py:763 netbox/dcim/forms/bulk_import.py:824 -#: netbox/dcim/forms/bulk_import.py:850 netbox/dcim/forms/bulk_import.py:876 -#: netbox/dcim/forms/bulk_import.py:897 netbox/dcim/forms/bulk_import.py:953 -#: netbox/dcim/forms/bulk_import.py:1112 netbox/dcim/forms/bulk_import.py:1131 -#: netbox/dcim/forms/bulk_import.py:1150 netbox/dcim/forms/bulk_import.py:1168 -#: netbox/dcim/forms/bulk_import.py:1222 netbox/dcim/forms/bulk_import.py:1344 -#: netbox/dcim/forms/bulk_import.py:1811 netbox/dcim/forms/connections.py:34 +#: netbox/dcim/forms/bulk_import.py:764 netbox/dcim/forms/bulk_import.py:825 +#: netbox/dcim/forms/bulk_import.py:851 netbox/dcim/forms/bulk_import.py:877 +#: netbox/dcim/forms/bulk_import.py:898 netbox/dcim/forms/bulk_import.py:954 +#: netbox/dcim/forms/bulk_import.py:1113 netbox/dcim/forms/bulk_import.py:1219 +#: netbox/dcim/forms/bulk_import.py:1238 netbox/dcim/forms/bulk_import.py:1256 +#: netbox/dcim/forms/bulk_import.py:1310 netbox/dcim/forms/bulk_import.py:1432 +#: netbox/dcim/forms/bulk_import.py:1899 netbox/dcim/forms/connections.py:34 #: netbox/dcim/forms/filtersets.py:158 netbox/dcim/forms/filtersets.py:1061 #: netbox/dcim/forms/filtersets.py:1098 netbox/dcim/forms/filtersets.py:1265 #: netbox/dcim/forms/filtersets.py:1486 netbox/dcim/forms/filtersets.py:1509 @@ -1801,7 +1801,7 @@ msgid "Connection" msgstr "Connexion" #: netbox/circuits/ui/panels.py:99 netbox/dcim/forms/bulk_edit.py:1480 -#: netbox/dcim/forms/bulk_import.py:835 netbox/dcim/forms/bulk_import.py:861 +#: netbox/dcim/forms/bulk_import.py:836 netbox/dcim/forms/bulk_import.py:862 #: netbox/dcim/forms/filtersets.py:1497 netbox/dcim/forms/filtersets.py:1537 #: netbox/dcim/forms/filtersets.py:1675 netbox/dcim/tables/devices.py:662 #: netbox/dcim/ui/panels.py:488 @@ -2003,7 +2003,7 @@ msgstr "Infos" msgid "Warning" msgstr "Avertissement" -#: netbox/core/constants.py:33 netbox/netbox/tables/columns.py:597 +#: netbox/core/constants.py:33 netbox/netbox/tables/columns.py:625 msgid "Error" msgstr "Erreur" @@ -2996,7 +2996,7 @@ msgid "Position (U)" msgstr "Position (U)" #: netbox/dcim/api/serializers_/devices.py:193 -#: netbox/dcim/forms/bulk_import.py:786 netbox/dcim/forms/model_forms.py:819 +#: netbox/dcim/forms/bulk_import.py:787 netbox/dcim/forms/model_forms.py:819 msgid "Replicate components" msgstr "Répliquer les composants" @@ -3009,12 +3009,12 @@ msgstr "" "défaut : true)" #: netbox/dcim/api/serializers_/devices.py:200 -#: netbox/dcim/forms/bulk_import.py:791 netbox/dcim/forms/model_forms.py:825 +#: netbox/dcim/forms/bulk_import.py:792 netbox/dcim/forms/model_forms.py:825 msgid "Adopt components" msgstr "Adoptez des composants" #: netbox/dcim/api/serializers_/devices.py:201 -#: netbox/dcim/forms/bulk_import.py:793 netbox/dcim/forms/model_forms.py:828 +#: netbox/dcim/forms/bulk_import.py:794 netbox/dcim/forms/model_forms.py:828 msgid "Adopt already existing components" msgstr "Adoptez des composants déjà existants" @@ -3152,11 +3152,11 @@ msgstr "Rassis" #: netbox/dcim/choices.py:170 netbox/dcim/forms/bulk_edit.py:87 #: netbox/dcim/forms/bulk_edit.py:101 netbox/dcim/forms/bulk_edit.py:181 #: netbox/dcim/forms/bulk_edit.py:623 netbox/dcim/forms/bulk_edit.py:651 -#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/bulk_import.py:77 -#: netbox/dcim/forms/bulk_import.py:91 netbox/dcim/forms/bulk_import.py:154 -#: netbox/dcim/forms/bulk_import.py:530 netbox/dcim/forms/bulk_import.py:556 -#: netbox/dcim/forms/bulk_import.py:682 netbox/dcim/forms/bulk_import.py:958 -#: netbox/dcim/forms/bulk_import.py:1239 netbox/dcim/forms/filtersets.py:267 +#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/bulk_import.py:78 +#: netbox/dcim/forms/bulk_import.py:92 netbox/dcim/forms/bulk_import.py:155 +#: netbox/dcim/forms/bulk_import.py:531 netbox/dcim/forms/bulk_import.py:557 +#: netbox/dcim/forms/bulk_import.py:683 netbox/dcim/forms/bulk_import.py:959 +#: netbox/dcim/forms/bulk_import.py:1327 netbox/dcim/forms/filtersets.py:267 #: netbox/dcim/forms/filtersets.py:820 netbox/dcim/forms/filtersets.py:836 #: netbox/dcim/forms/model_forms.py:95 netbox/dcim/forms/model_forms.py:113 #: netbox/dcim/forms/model_forms.py:216 netbox/dcim/forms/model_forms.py:559 @@ -3296,7 +3296,7 @@ msgid "Virtual interfaces" msgstr "Interfaces virtuelles" #: netbox/dcim/choices.py:1164 netbox/dcim/forms/bulk_edit.py:1455 -#: netbox/dcim/forms/bulk_import.py:965 netbox/dcim/forms/model_forms.py:1171 +#: netbox/dcim/forms/bulk_import.py:966 netbox/dcim/forms/model_forms.py:1171 #: netbox/dcim/tables/devices.py:761 #: netbox/virtualization/forms/bulk_edit.py:231 #: netbox/virtualization/forms/bulk_import.py:198 @@ -4070,7 +4070,7 @@ msgstr "Interface de machine virtuelle (ID)" msgid "Is assigned" msgstr "Est attribué" -#: netbox/dcim/filtersets.py:2080 netbox/dcim/forms/bulk_import.py:1365 +#: netbox/dcim/filtersets.py:2080 netbox/dcim/forms/bulk_import.py:1453 #: netbox/ipam/forms/bulk_import.py:344 msgid "Is primary" msgstr "Est principal" @@ -4091,7 +4091,7 @@ msgid "Assigned VID" msgstr "VID attribué" #: netbox/dcim/filtersets.py:2158 netbox/dcim/forms/bulk_edit.py:1568 -#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/forms/filtersets.py:1755 +#: netbox/dcim/forms/bulk_import.py:1051 netbox/dcim/forms/filtersets.py:1755 #: netbox/dcim/forms/model_forms.py:1619 #: netbox/dcim/models/device_components.py:958 #: netbox/dcim/tables/devices.py:678 netbox/dcim/ui/panels.py:521 @@ -4317,7 +4317,7 @@ msgstr "Téléphone de contact" msgid "Contact E-mail" msgstr "Adresse mail de contact" -#: netbox/dcim/forms/bulk_edit.py:160 netbox/dcim/forms/bulk_import.py:140 +#: netbox/dcim/forms/bulk_edit.py:160 netbox/dcim/forms/bulk_import.py:141 #: netbox/dcim/forms/model_forms.py:159 msgid "Time zone" msgstr "Fuseau horaire" @@ -4326,9 +4326,9 @@ msgstr "Fuseau horaire" #: netbox/dcim/forms/bulk_edit.py:584 netbox/dcim/forms/bulk_edit.py:656 #: netbox/dcim/forms/bulk_edit.py:675 netbox/dcim/forms/bulk_edit.py:762 #: netbox/dcim/forms/bulk_edit.py:1306 netbox/dcim/forms/bulk_edit.py:1742 -#: netbox/dcim/forms/bulk_import.py:208 netbox/dcim/forms/bulk_import.py:432 -#: netbox/dcim/forms/bulk_import.py:482 netbox/dcim/forms/bulk_import.py:566 -#: netbox/dcim/forms/bulk_import.py:602 netbox/dcim/forms/bulk_import.py:1233 +#: netbox/dcim/forms/bulk_import.py:209 netbox/dcim/forms/bulk_import.py:433 +#: netbox/dcim/forms/bulk_import.py:483 netbox/dcim/forms/bulk_import.py:567 +#: netbox/dcim/forms/bulk_import.py:603 netbox/dcim/forms/bulk_import.py:1321 #: netbox/dcim/forms/filtersets.py:355 netbox/dcim/forms/filtersets.py:426 #: netbox/dcim/forms/filtersets.py:578 netbox/dcim/forms/filtersets.py:728 #: netbox/dcim/forms/filtersets.py:841 netbox/dcim/forms/filtersets.py:924 @@ -4347,21 +4347,21 @@ msgid "Manufacturer" msgstr "Fabricant" #: netbox/dcim/forms/bulk_edit.py:240 netbox/dcim/forms/bulk_edit.py:392 -#: netbox/dcim/forms/bulk_import.py:217 netbox/dcim/forms/bulk_import.py:303 +#: netbox/dcim/forms/bulk_import.py:218 netbox/dcim/forms/bulk_import.py:304 #: netbox/dcim/forms/filtersets.py:301 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "Facteur de forme" #: netbox/dcim/forms/bulk_edit.py:245 netbox/dcim/forms/bulk_edit.py:397 -#: netbox/dcim/forms/bulk_import.py:225 netbox/dcim/forms/bulk_import.py:306 +#: netbox/dcim/forms/bulk_import.py:226 netbox/dcim/forms/bulk_import.py:307 #: netbox/dcim/forms/filtersets.py:306 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "Largeur" #: netbox/dcim/forms/bulk_edit.py:251 netbox/dcim/forms/bulk_edit.py:403 -#: netbox/dcim/forms/bulk_import.py:313 +#: netbox/dcim/forms/bulk_import.py:314 msgid "Height (U)" msgstr "Hauteur (U)" @@ -4383,7 +4383,7 @@ msgid "Outer depth" msgstr "Profondeur extérieure" #: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:426 -#: netbox/dcim/forms/bulk_import.py:230 netbox/dcim/forms/bulk_import.py:316 +#: netbox/dcim/forms/bulk_import.py:231 netbox/dcim/forms/bulk_import.py:317 msgid "Outer unit" msgstr "Unité extérieure" @@ -4395,7 +4395,7 @@ msgstr "Profondeur de montage" #: netbox/dcim/forms/bulk_edit.py:441 netbox/dcim/forms/bulk_edit.py:465 #: netbox/dcim/forms/bulk_edit.py:542 netbox/dcim/forms/bulk_edit.py:559 #: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/bulk_edit.py:614 -#: netbox/dcim/forms/bulk_import.py:445 netbox/dcim/forms/bulk_import.py:493 +#: netbox/dcim/forms/bulk_import.py:446 netbox/dcim/forms/bulk_import.py:494 #: netbox/dcim/forms/filtersets.py:326 netbox/dcim/forms/filtersets.py:348 #: netbox/dcim/forms/filtersets.py:373 netbox/dcim/forms/filtersets.py:458 #: netbox/dcim/forms/filtersets.py:571 netbox/dcim/forms/filtersets.py:683 @@ -4420,8 +4420,8 @@ msgstr "Poids maximum" #: netbox/dcim/forms/bulk_edit.py:298 netbox/dcim/forms/bulk_edit.py:451 #: netbox/dcim/forms/bulk_edit.py:547 netbox/dcim/forms/bulk_edit.py:603 -#: netbox/dcim/forms/bulk_import.py:236 netbox/dcim/forms/bulk_import.py:328 -#: netbox/dcim/forms/bulk_import.py:450 netbox/dcim/forms/bulk_import.py:498 +#: netbox/dcim/forms/bulk_import.py:237 netbox/dcim/forms/bulk_import.py:329 +#: netbox/dcim/forms/bulk_import.py:451 netbox/dcim/forms/bulk_import.py:499 #: netbox/dcim/forms/filtersets.py:336 netbox/dcim/forms/filtersets.py:687 #: netbox/dcim/forms/filtersets.py:799 msgid "Weight unit" @@ -4453,7 +4453,7 @@ msgstr "Dimensions" msgid "Numbering" msgstr "Numérotation" -#: netbox/dcim/forms/bulk_edit.py:377 netbox/dcim/forms/bulk_import.py:293 +#: netbox/dcim/forms/bulk_edit.py:377 netbox/dcim/forms/bulk_import.py:294 #: netbox/dcim/forms/filtersets.py:434 msgid "Rack type" msgstr "Type de baie" @@ -4471,17 +4471,17 @@ msgstr "Étiquette d'actif" #: netbox/dcim/forms/bulk_edit.py:436 netbox/dcim/forms/bulk_edit.py:537 #: netbox/dcim/forms/bulk_edit.py:593 netbox/dcim/forms/bulk_edit.py:724 -#: netbox/dcim/forms/bulk_import.py:322 netbox/dcim/forms/bulk_import.py:487 -#: netbox/dcim/forms/bulk_import.py:696 netbox/dcim/forms/filtersets.py:437 +#: netbox/dcim/forms/bulk_import.py:323 netbox/dcim/forms/bulk_import.py:488 +#: netbox/dcim/forms/bulk_import.py:697 netbox/dcim/forms/filtersets.py:437 #: netbox/dcim/forms/filtersets.py:600 netbox/dcim/forms/filtersets.py:790 #: netbox/dcim/forms/filtersets.py:946 msgid "Airflow" msgstr "Flux d'air" #: netbox/dcim/forms/bulk_edit.py:460 netbox/dcim/forms/bulk_edit.py:937 -#: netbox/dcim/forms/bulk_import.py:378 netbox/dcim/forms/bulk_import.py:381 -#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/bulk_import.py:1748 -#: netbox/dcim/forms/bulk_import.py:1752 netbox/dcim/forms/filtersets.py:125 +#: netbox/dcim/forms/bulk_import.py:379 netbox/dcim/forms/bulk_import.py:382 +#: netbox/dcim/forms/bulk_import.py:670 netbox/dcim/forms/bulk_import.py:1836 +#: netbox/dcim/forms/bulk_import.py:1840 netbox/dcim/forms/filtersets.py:125 #: netbox/dcim/forms/filtersets.py:370 netbox/dcim/forms/filtersets.py:465 #: netbox/dcim/forms/filtersets.py:479 netbox/dcim/forms/filtersets.py:525 #: netbox/dcim/forms/filtersets.py:914 netbox/dcim/forms/filtersets.py:1130 @@ -4507,7 +4507,7 @@ msgstr "Baie" msgid "Hardware" msgstr "Matériel" -#: netbox/dcim/forms/bulk_edit.py:513 netbox/dcim/forms/bulk_import.py:438 +#: netbox/dcim/forms/bulk_edit.py:513 netbox/dcim/forms/bulk_import.py:439 #: netbox/dcim/forms/filtersets.py:583 netbox/dcim/forms/model_forms.py:416 #: netbox/virtualization/forms/bulk_edit.py:85 #: netbox/virtualization/forms/bulk_import.py:89 @@ -4546,8 +4546,8 @@ msgid "Schema" msgstr "Schéma" #: netbox/dcim/forms/bulk_edit.py:572 netbox/dcim/forms/bulk_edit.py:579 -#: netbox/dcim/forms/bulk_edit.py:828 netbox/dcim/forms/bulk_import.py:476 -#: netbox/dcim/forms/bulk_import.py:1509 netbox/dcim/forms/filtersets.py:723 +#: netbox/dcim/forms/bulk_edit.py:828 netbox/dcim/forms/bulk_import.py:477 +#: netbox/dcim/forms/bulk_import.py:1597 netbox/dcim/forms/filtersets.py:723 #: netbox/dcim/forms/filtersets.py:1146 netbox/dcim/forms/filtersets.py:1278 #: netbox/dcim/forms/model_forms.py:463 netbox/dcim/forms/model_forms.py:476 #: netbox/dcim/tables/modules.py:43 netbox/dcim/tables/modules.py:97 @@ -4580,10 +4580,10 @@ msgid "VM role" msgstr "rôle de machine virtuelle" #: netbox/dcim/forms/bulk_edit.py:637 netbox/dcim/forms/bulk_edit.py:661 -#: netbox/dcim/forms/bulk_edit.py:734 netbox/dcim/forms/bulk_import.py:540 -#: netbox/dcim/forms/bulk_import.py:544 netbox/dcim/forms/bulk_import.py:573 -#: netbox/dcim/forms/bulk_import.py:577 netbox/dcim/forms/bulk_import.py:702 -#: netbox/dcim/forms/bulk_import.py:706 netbox/dcim/forms/filtersets.py:815 +#: netbox/dcim/forms/bulk_edit.py:734 netbox/dcim/forms/bulk_import.py:541 +#: netbox/dcim/forms/bulk_import.py:545 netbox/dcim/forms/bulk_import.py:574 +#: netbox/dcim/forms/bulk_import.py:578 netbox/dcim/forms/bulk_import.py:703 +#: netbox/dcim/forms/bulk_import.py:707 netbox/dcim/forms/filtersets.py:815 #: netbox/dcim/forms/filtersets.py:846 netbox/dcim/forms/filtersets.py:965 #: netbox/dcim/forms/model_forms.py:554 netbox/dcim/forms/model_forms.py:591 #: netbox/dcim/forms/model_forms.py:716 @@ -4595,19 +4595,19 @@ msgid "Config template" msgstr "Modèle de configuration" #: netbox/dcim/forms/bulk_edit.py:680 netbox/dcim/forms/bulk_edit.py:1086 -#: netbox/dcim/forms/bulk_import.py:608 netbox/dcim/forms/filtersets.py:135 +#: netbox/dcim/forms/bulk_import.py:609 netbox/dcim/forms/filtersets.py:135 #: netbox/dcim/forms/filtersets.py:1438 netbox/dcim/forms/model_forms.py:661 #: netbox/dcim/forms/model_forms.py:1048 netbox/dcim/forms/model_forms.py:1065 #: netbox/extras/filtersets.py:756 msgid "Device type" msgstr "Type d'appareil" -#: netbox/dcim/forms/bulk_edit.py:691 netbox/dcim/forms/bulk_import.py:589 +#: netbox/dcim/forms/bulk_edit.py:691 netbox/dcim/forms/bulk_import.py:590 #: netbox/dcim/forms/filtersets.py:140 netbox/dcim/forms/model_forms.py:669 msgid "Device role" msgstr "Rôle de l'appareil" -#: netbox/dcim/forms/bulk_edit.py:714 netbox/dcim/forms/bulk_import.py:614 +#: netbox/dcim/forms/bulk_edit.py:714 netbox/dcim/forms/bulk_import.py:615 #: netbox/dcim/forms/filtersets.py:829 netbox/dcim/forms/filtersets.py:938 #: netbox/dcim/forms/model_forms.py:602 netbox/dcim/forms/model_forms.py:674 #: netbox/dcim/tables/devices.py:191 netbox/extras/filtersets.py:772 @@ -4619,7 +4619,7 @@ msgstr "Rôle de l'appareil" msgid "Platform" msgstr "Plateforme" -#: netbox/dcim/forms/bulk_edit.py:739 netbox/dcim/forms/bulk_import.py:633 +#: netbox/dcim/forms/bulk_edit.py:739 netbox/dcim/forms/bulk_import.py:634 #: netbox/dcim/forms/filtersets.py:870 netbox/dcim/forms/filtersets.py:1040 #: netbox/dcim/forms/model_forms.py:683 netbox/dcim/tables/devices.py:211 #: netbox/extras/filtersets.py:805 netbox/extras/forms/filtersets.py:411 @@ -4648,12 +4648,12 @@ msgstr "Configuration" msgid "Virtualization" msgstr "Virtualisation" -#: netbox/dcim/forms/bulk_edit.py:767 netbox/dcim/forms/bulk_import.py:775 +#: netbox/dcim/forms/bulk_edit.py:767 netbox/dcim/forms/bulk_import.py:776 #: netbox/dcim/forms/model_forms.py:811 netbox/dcim/forms/model_forms.py:1073 msgid "Module type" msgstr "Type de module" -#: netbox/dcim/forms/bulk_edit.py:839 netbox/dcim/forms/bulk_import.py:1528 +#: netbox/dcim/forms/bulk_edit.py:839 netbox/dcim/forms/bulk_import.py:1616 #: netbox/dcim/forms/filtersets.py:1305 netbox/dcim/forms/model_forms.py:888 #: netbox/dcim/tables/cables.py:124 msgid "Bundle" @@ -4677,8 +4677,8 @@ msgstr "Libellé" msgid "Length" msgstr "Longueur" -#: netbox/dcim/forms/bulk_edit.py:858 netbox/dcim/forms/bulk_import.py:1535 -#: netbox/dcim/forms/bulk_import.py:1538 netbox/dcim/forms/filtersets.py:1291 +#: netbox/dcim/forms/bulk_edit.py:858 netbox/dcim/forms/bulk_import.py:1623 +#: netbox/dcim/forms/bulk_import.py:1626 netbox/dcim/forms/filtersets.py:1291 msgid "Length unit" msgstr "Unité de longueur" @@ -4686,17 +4686,17 @@ msgstr "Unité de longueur" msgid "Domain" msgstr "Domaine" -#: netbox/dcim/forms/bulk_edit.py:932 netbox/dcim/forms/bulk_import.py:1735 +#: netbox/dcim/forms/bulk_edit.py:932 netbox/dcim/forms/bulk_import.py:1823 #: netbox/dcim/forms/filtersets.py:1384 netbox/dcim/forms/model_forms.py:927 msgid "Power panel" msgstr "panneau d'alimentation" -#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/bulk_import.py:1771 +#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/bulk_import.py:1859 #: netbox/dcim/forms/filtersets.py:1406 msgid "Supply" msgstr "Approvisionnement" -#: netbox/dcim/forms/bulk_edit.py:960 netbox/dcim/forms/bulk_import.py:1776 +#: netbox/dcim/forms/bulk_edit.py:960 netbox/dcim/forms/bulk_import.py:1864 #: netbox/dcim/forms/filtersets.py:1411 msgid "Phase" msgstr "Phase" @@ -4733,13 +4733,13 @@ msgstr "Tirage au sort attribué" msgid "Allocated power draw (watts)" msgstr "Consommation électrique allouée (watts)" -#: netbox/dcim/forms/bulk_edit.py:1107 netbox/dcim/forms/bulk_import.py:908 +#: netbox/dcim/forms/bulk_edit.py:1107 netbox/dcim/forms/bulk_import.py:909 #: netbox/dcim/forms/model_forms.py:1144 netbox/dcim/forms/model_forms.py:1509 #: netbox/dcim/forms/model_forms.py:1838 netbox/dcim/forms/object_import.py:56 msgid "Power port" msgstr "port d'alimentation" -#: netbox/dcim/forms/bulk_edit.py:1112 netbox/dcim/forms/bulk_import.py:915 +#: netbox/dcim/forms/bulk_edit.py:1112 netbox/dcim/forms/bulk_import.py:916 msgid "Feed leg" msgstr "Patte d'alimentation" @@ -4749,7 +4749,7 @@ msgid "Management only" msgstr "Gestion uniquement" #: netbox/dcim/forms/bulk_edit.py:1168 netbox/dcim/forms/bulk_edit.py:1495 -#: netbox/dcim/forms/bulk_import.py:1001 netbox/dcim/forms/filtersets.py:1711 +#: netbox/dcim/forms/bulk_import.py:1002 netbox/dcim/forms/filtersets.py:1711 #: netbox/dcim/forms/filtersets.py:1796 netbox/dcim/forms/object_import.py:91 #: netbox/dcim/models/device_component_templates.py:473 #: netbox/dcim/models/device_components.py:930 netbox/dcim/ui/panels.py:494 @@ -4757,7 +4757,7 @@ msgid "PoE mode" msgstr "Mode PoE" #: netbox/dcim/forms/bulk_edit.py:1174 netbox/dcim/forms/bulk_edit.py:1501 -#: netbox/dcim/forms/bulk_import.py:1007 netbox/dcim/forms/filtersets.py:1716 +#: netbox/dcim/forms/bulk_import.py:1008 netbox/dcim/forms/filtersets.py:1716 #: netbox/dcim/forms/filtersets.py:1801 netbox/dcim/forms/object_import.py:96 #: netbox/dcim/models/device_component_templates.py:480 #: netbox/dcim/models/device_components.py:937 netbox/dcim/ui/panels.py:495 @@ -4783,7 +4783,7 @@ msgstr "DÉCALAGE" msgid "Virtual device contexts" msgstr "Contextes des appareils virtuels" -#: netbox/dcim/forms/bulk_edit.py:1509 netbox/dcim/forms/bulk_import.py:1010 +#: netbox/dcim/forms/bulk_edit.py:1509 netbox/dcim/forms/bulk_import.py:1011 #: netbox/virtualization/forms/bulk_edit.py:252 #: netbox/virtualization/forms/bulk_import.py:205 #: netbox/vpn/forms/bulk_edit.py:128 netbox/vpn/forms/bulk_edit.py:196 @@ -4794,7 +4794,7 @@ msgstr "Contextes des appareils virtuels" msgid "Mode" msgstr "Mode" -#: netbox/dcim/forms/bulk_edit.py:1517 netbox/dcim/forms/bulk_import.py:1016 +#: netbox/dcim/forms/bulk_edit.py:1517 netbox/dcim/forms/bulk_import.py:1017 #: netbox/dcim/forms/model_forms.py:1585 netbox/ipam/forms/bulk_import.py:184 #: netbox/ipam/forms/filtersets.py:603 netbox/ipam/models/vlans.py:99 #: netbox/virtualization/forms/bulk_edit.py:259 @@ -4803,7 +4803,7 @@ msgstr "Mode" msgid "VLAN group" msgstr "groupe VLAN" -#: netbox/dcim/forms/bulk_edit.py:1526 netbox/dcim/forms/bulk_import.py:1023 +#: netbox/dcim/forms/bulk_edit.py:1526 netbox/dcim/forms/bulk_import.py:1024 #: netbox/dcim/forms/model_forms.py:1591 netbox/dcim/tables/devices.py:627 #: netbox/dcim/ui/panels.py:498 netbox/virtualization/forms/bulk_edit.py:267 #: netbox/virtualization/forms/bulk_import.py:218 @@ -4811,7 +4811,7 @@ msgstr "groupe VLAN" msgid "Untagged VLAN" msgstr "VLAN non étiqueté" -#: netbox/dcim/forms/bulk_edit.py:1535 netbox/dcim/forms/bulk_import.py:1030 +#: netbox/dcim/forms/bulk_edit.py:1535 netbox/dcim/forms/bulk_import.py:1031 #: netbox/dcim/forms/model_forms.py:1600 netbox/dcim/tables/devices.py:633 #: netbox/virtualization/forms/bulk_edit.py:275 #: netbox/virtualization/forms/bulk_import.py:225 @@ -4827,7 +4827,7 @@ msgstr "Ajouter des VLANs étiquetés" msgid "Remove tagged VLANs" msgstr "Retirer des VLANs étiquetés" -#: netbox/dcim/forms/bulk_edit.py:1558 netbox/dcim/forms/bulk_import.py:1043 +#: netbox/dcim/forms/bulk_edit.py:1558 netbox/dcim/forms/bulk_import.py:1044 #: netbox/dcim/forms/model_forms.py:1609 #: netbox/virtualization/forms/bulk_import.py:238 #: netbox/virtualization/forms/model_forms.py:439 @@ -4896,242 +4896,242 @@ msgid "An access interface cannot have tagged VLANs assigned." msgstr "" "Des étiquettes de VLAN ne peuvent pas être associés à une interface d'accès." -#: netbox/dcim/forms/bulk_import.py:81 +#: netbox/dcim/forms/bulk_import.py:82 msgid "Name of parent region" msgstr "Nom de la région mère" -#: netbox/dcim/forms/bulk_import.py:95 +#: netbox/dcim/forms/bulk_import.py:96 msgid "Name of parent site group" msgstr "Nom du groupe de sites parent" -#: netbox/dcim/forms/bulk_import.py:114 +#: netbox/dcim/forms/bulk_import.py:115 msgid "Assigned region" msgstr "Région associé" -#: netbox/dcim/forms/bulk_import.py:121 netbox/tenancy/forms/bulk_import.py:50 +#: netbox/dcim/forms/bulk_import.py:122 netbox/tenancy/forms/bulk_import.py:50 #: netbox/wireless/forms/bulk_import.py:41 msgid "Assigned group" msgstr "Groupe associé" -#: netbox/dcim/forms/bulk_import.py:140 +#: netbox/dcim/forms/bulk_import.py:141 msgid "available options" msgstr "options disponibles" -#: netbox/dcim/forms/bulk_import.py:151 netbox/dcim/forms/bulk_import.py:659 -#: netbox/dcim/forms/bulk_import.py:1732 netbox/ipam/forms/bulk_import.py:519 +#: netbox/dcim/forms/bulk_import.py:152 netbox/dcim/forms/bulk_import.py:660 +#: netbox/dcim/forms/bulk_import.py:1820 netbox/ipam/forms/bulk_import.py:519 #: netbox/virtualization/forms/bulk_import.py:66 msgid "Assigned site" msgstr "Site associé" -#: netbox/dcim/forms/bulk_import.py:158 +#: netbox/dcim/forms/bulk_import.py:159 msgid "Parent location" msgstr "Emplacement du parent" -#: netbox/dcim/forms/bulk_import.py:160 +#: netbox/dcim/forms/bulk_import.py:161 msgid "Location not found." msgstr "Emplacement introuvable." -#: netbox/dcim/forms/bulk_import.py:211 +#: netbox/dcim/forms/bulk_import.py:212 msgid "The manufacturer of this rack type" msgstr "Le fabricant de ce type de baie" -#: netbox/dcim/forms/bulk_import.py:222 +#: netbox/dcim/forms/bulk_import.py:223 msgid "The lowest-numbered position in the rack" msgstr "La position la plus basse de la baie" -#: netbox/dcim/forms/bulk_import.py:227 netbox/dcim/forms/bulk_import.py:309 +#: netbox/dcim/forms/bulk_import.py:228 netbox/dcim/forms/bulk_import.py:310 msgid "Rail-to-rail width (in inches)" msgstr "Largeur rail à rail (en pouces)" -#: netbox/dcim/forms/bulk_import.py:233 netbox/dcim/forms/bulk_import.py:319 +#: netbox/dcim/forms/bulk_import.py:234 netbox/dcim/forms/bulk_import.py:320 msgid "Unit for outer dimensions" msgstr "Unité pour les dimensions extérieures" -#: netbox/dcim/forms/bulk_import.py:239 netbox/dcim/forms/bulk_import.py:331 +#: netbox/dcim/forms/bulk_import.py:240 netbox/dcim/forms/bulk_import.py:332 msgid "Unit for rack weights" msgstr "Unité de poids de la baie" -#: netbox/dcim/forms/bulk_import.py:271 +#: netbox/dcim/forms/bulk_import.py:272 msgid "Name of assigned tenant" msgstr "Nom de l'entité associée" -#: netbox/dcim/forms/bulk_import.py:274 netbox/dcim/forms/filtersets.py:410 +#: netbox/dcim/forms/bulk_import.py:275 netbox/dcim/forms/filtersets.py:410 #: netbox/dcim/forms/filtersets.py:515 netbox/dcim/ui/panels.py:47 #: netbox/ipam/forms/filtersets.py:497 msgid "Rack group" msgstr "Groupe de rayonnages" -#: netbox/dcim/forms/bulk_import.py:278 +#: netbox/dcim/forms/bulk_import.py:279 msgid "Name of assigned group" msgstr "Nom du groupe assigné" -#: netbox/dcim/forms/bulk_import.py:290 +#: netbox/dcim/forms/bulk_import.py:291 msgid "Name of assigned role" msgstr "Nom du rôle attribué" -#: netbox/dcim/forms/bulk_import.py:297 +#: netbox/dcim/forms/bulk_import.py:298 msgid "Rack type model" msgstr "Modèle de baie" -#: netbox/dcim/forms/bulk_import.py:325 netbox/dcim/forms/bulk_import.py:490 -#: netbox/dcim/forms/bulk_import.py:699 +#: netbox/dcim/forms/bulk_import.py:326 netbox/dcim/forms/bulk_import.py:491 +#: netbox/dcim/forms/bulk_import.py:700 msgid "Airflow direction" msgstr "Direction du flux d'air" -#: netbox/dcim/forms/bulk_import.py:358 +#: netbox/dcim/forms/bulk_import.py:359 msgid "Width must be set if not specifying a rack type." msgstr "La largeur doit être définie si aucun type de rack n'est spécifié." -#: netbox/dcim/forms/bulk_import.py:360 +#: netbox/dcim/forms/bulk_import.py:361 msgid "U height must be set if not specifying a rack type." msgstr "La hauteur U doit être définie si aucun type de rack n'est spécifié." -#: netbox/dcim/forms/bulk_import.py:368 +#: netbox/dcim/forms/bulk_import.py:369 msgid "Parent site" msgstr "Site parent" -#: netbox/dcim/forms/bulk_import.py:375 netbox/dcim/forms/bulk_import.py:1745 +#: netbox/dcim/forms/bulk_import.py:376 netbox/dcim/forms/bulk_import.py:1833 msgid "Rack's location (if any)" msgstr "Emplacement de la baie (le cas échéant)" -#: netbox/dcim/forms/bulk_import.py:384 netbox/dcim/forms/model_forms.py:376 +#: netbox/dcim/forms/bulk_import.py:385 netbox/dcim/forms/model_forms.py:376 #: netbox/dcim/tables/racks.py:242 #: netbox/templates/dcim/rackreservation.html:7 msgid "Units" msgstr "Unités" -#: netbox/dcim/forms/bulk_import.py:387 +#: netbox/dcim/forms/bulk_import.py:388 msgid "Comma-separated list of individual unit numbers" msgstr "Liste de numéros d'unités individuels séparés par des virgules" -#: netbox/dcim/forms/bulk_import.py:435 +#: netbox/dcim/forms/bulk_import.py:436 msgid "The manufacturer which produces this device type" msgstr "Le fabricant qui produit ce type d'appareil" -#: netbox/dcim/forms/bulk_import.py:442 +#: netbox/dcim/forms/bulk_import.py:443 msgid "The default platform for devices of this type (optional)" msgstr "Plateforme par défaut pour les appareils de ce type (facultatif)" -#: netbox/dcim/forms/bulk_import.py:447 +#: netbox/dcim/forms/bulk_import.py:448 msgid "Device weight" msgstr "Poids de l'appareil" -#: netbox/dcim/forms/bulk_import.py:453 +#: netbox/dcim/forms/bulk_import.py:454 msgid "Unit for device weight" msgstr "Unité de poids de l'appareil" -#: netbox/dcim/forms/bulk_import.py:495 +#: netbox/dcim/forms/bulk_import.py:496 msgid "Module weight" msgstr "Poids du module" -#: netbox/dcim/forms/bulk_import.py:501 +#: netbox/dcim/forms/bulk_import.py:502 msgid "Unit for module weight" msgstr "Unité pour le poids du module" -#: netbox/dcim/forms/bulk_import.py:506 +#: netbox/dcim/forms/bulk_import.py:507 msgid "Attribute values for the assigned profile, passed as a dictionary" msgstr "" "Valeurs d'attribut pour le profil attribué, transmises sous forme de " "dictionnaire" -#: netbox/dcim/forms/bulk_import.py:521 +#: netbox/dcim/forms/bulk_import.py:522 msgid "Profile must be specified if attribute data is provided." msgstr "Le profil doit être spécifié si des données d'attribut sont fournies." -#: netbox/dcim/forms/bulk_import.py:534 +#: netbox/dcim/forms/bulk_import.py:535 msgid "Parent Device Role" msgstr "Rôle de l'appareil parent" -#: netbox/dcim/forms/bulk_import.py:536 +#: netbox/dcim/forms/bulk_import.py:537 msgid "Device role not found." msgstr "Le rôle de l'appareil n'a pas été trouvé." -#: netbox/dcim/forms/bulk_import.py:560 +#: netbox/dcim/forms/bulk_import.py:561 msgid "Parent platform" msgstr "Plateforme pour parents" -#: netbox/dcim/forms/bulk_import.py:562 +#: netbox/dcim/forms/bulk_import.py:563 msgid "Platform not found." msgstr "Plateforme introuvable." -#: netbox/dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:571 msgid "Limit platform assignments to this manufacturer" msgstr "Limiter les affectations de plateforme à ce fabricant" -#: netbox/dcim/forms/bulk_import.py:592 netbox/dcim/forms/bulk_import.py:1814 +#: netbox/dcim/forms/bulk_import.py:593 netbox/dcim/forms/bulk_import.py:1902 #: netbox/tenancy/forms/bulk_import.py:116 msgid "Assigned role" msgstr "Rôle attribué" -#: netbox/dcim/forms/bulk_import.py:605 +#: netbox/dcim/forms/bulk_import.py:606 msgid "Device type manufacturer" msgstr "Fabricant du type d'appareil" -#: netbox/dcim/forms/bulk_import.py:611 +#: netbox/dcim/forms/bulk_import.py:612 msgid "Device type model" msgstr "Type d'appareil et modèle" -#: netbox/dcim/forms/bulk_import.py:618 +#: netbox/dcim/forms/bulk_import.py:619 #: netbox/virtualization/forms/bulk_import.py:165 msgid "Assigned platform" msgstr "Plateforme attribuée" -#: netbox/dcim/forms/bulk_import.py:626 netbox/dcim/forms/bulk_import.py:630 +#: netbox/dcim/forms/bulk_import.py:627 netbox/dcim/forms/bulk_import.py:631 #: netbox/dcim/forms/model_forms.py:697 msgid "Virtual chassis" msgstr "Châssis virtuel" -#: netbox/dcim/forms/bulk_import.py:637 +#: netbox/dcim/forms/bulk_import.py:638 msgid "Virtualization cluster" msgstr "Cluster de virtualisation" -#: netbox/dcim/forms/bulk_import.py:666 +#: netbox/dcim/forms/bulk_import.py:667 msgid "Assigned location (if any)" msgstr "Emplacement attribué (le cas échéant)" -#: netbox/dcim/forms/bulk_import.py:673 +#: netbox/dcim/forms/bulk_import.py:674 msgid "Assigned rack (if any)" msgstr "Baie attribuée (le cas échéant)" -#: netbox/dcim/forms/bulk_import.py:676 netbox/dcim/forms/model_forms.py:653 +#: netbox/dcim/forms/bulk_import.py:677 netbox/dcim/forms/model_forms.py:653 msgid "Face" msgstr "Orientation" -#: netbox/dcim/forms/bulk_import.py:679 +#: netbox/dcim/forms/bulk_import.py:680 msgid "Mounted rack face" msgstr "Face montée en baie" -#: netbox/dcim/forms/bulk_import.py:686 +#: netbox/dcim/forms/bulk_import.py:687 msgid "Parent device (for child devices)" msgstr "Appareil parent (pour les appareils pour enfants)" -#: netbox/dcim/forms/bulk_import.py:689 +#: netbox/dcim/forms/bulk_import.py:690 msgid "Device bay" msgstr "Baie pour appareils" -#: netbox/dcim/forms/bulk_import.py:693 +#: netbox/dcim/forms/bulk_import.py:694 msgid "Device bay in which this device is installed (for child devices)" msgstr "" "Baie d'appareils dans laquelle cet appareil est installé (pour les appareils" " pour enfants)" -#: netbox/dcim/forms/bulk_import.py:766 +#: netbox/dcim/forms/bulk_import.py:767 msgid "The device in which this module is installed" msgstr "L'appareil sur lequel ce module est installé" -#: netbox/dcim/forms/bulk_import.py:769 netbox/dcim/forms/model_forms.py:801 +#: netbox/dcim/forms/bulk_import.py:770 netbox/dcim/forms/model_forms.py:801 msgid "Module bay" msgstr "Baie modulaire" -#: netbox/dcim/forms/bulk_import.py:772 +#: netbox/dcim/forms/bulk_import.py:773 msgid "The module bay in which this module is installed" msgstr "La baie du module dans laquelle ce module est installé" -#: netbox/dcim/forms/bulk_import.py:778 +#: netbox/dcim/forms/bulk_import.py:779 msgid "The type of module" msgstr "Le type de module" -#: netbox/dcim/forms/bulk_import.py:788 +#: netbox/dcim/forms/bulk_import.py:789 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" @@ -5139,88 +5139,88 @@ msgstr "" "Remplir automatiquement les composants associés à ce type de module (activé " "par défaut)" -#: netbox/dcim/forms/bulk_import.py:832 netbox/dcim/forms/bulk_import.py:858 -#: netbox/dcim/forms/bulk_import.py:884 +#: netbox/dcim/forms/bulk_import.py:833 netbox/dcim/forms/bulk_import.py:859 +#: netbox/dcim/forms/bulk_import.py:885 msgid "Port type" msgstr "Type de port" -#: netbox/dcim/forms/bulk_import.py:840 netbox/dcim/forms/bulk_import.py:866 +#: netbox/dcim/forms/bulk_import.py:841 netbox/dcim/forms/bulk_import.py:867 msgid "Port speed in bps" msgstr "Vitesse du port en bits/s" -#: netbox/dcim/forms/bulk_import.py:905 +#: netbox/dcim/forms/bulk_import.py:906 msgid "Outlet type" msgstr "Type de prise" -#: netbox/dcim/forms/bulk_import.py:912 +#: netbox/dcim/forms/bulk_import.py:913 msgid "Local power port which feeds this outlet" msgstr "Port d'alimentation local qui alimente cette prise" -#: netbox/dcim/forms/bulk_import.py:918 +#: netbox/dcim/forms/bulk_import.py:919 msgid "Electrical phase (for three-phase circuits)" msgstr "Phase électrique (pour circuits triphasés)" -#: netbox/dcim/forms/bulk_import.py:962 netbox/dcim/forms/model_forms.py:1547 +#: netbox/dcim/forms/bulk_import.py:963 netbox/dcim/forms/model_forms.py:1547 #: netbox/virtualization/forms/bulk_import.py:195 #: netbox/virtualization/forms/model_forms.py:400 msgid "Parent interface" msgstr "Interface parente" -#: netbox/dcim/forms/bulk_import.py:969 netbox/dcim/forms/model_forms.py:1555 +#: netbox/dcim/forms/bulk_import.py:970 netbox/dcim/forms/model_forms.py:1555 #: netbox/virtualization/forms/bulk_import.py:202 #: netbox/virtualization/forms/model_forms.py:408 msgid "Bridged interface" msgstr "Interface switchée" -#: netbox/dcim/forms/bulk_import.py:972 +#: netbox/dcim/forms/bulk_import.py:973 msgid "Lag" msgstr "Lag" -#: netbox/dcim/forms/bulk_import.py:976 +#: netbox/dcim/forms/bulk_import.py:977 msgid "Parent LAG interface" msgstr "Interface LAG parente" -#: netbox/dcim/forms/bulk_import.py:979 +#: netbox/dcim/forms/bulk_import.py:980 msgid "Vdcs" msgstr "VDC" -#: netbox/dcim/forms/bulk_import.py:984 +#: netbox/dcim/forms/bulk_import.py:985 msgid "VDC names separated by commas, encased with double quotes. Example:" msgstr "" "Noms de VDC séparés par des virgules, entre guillemets doubles. Exemple :" -#: netbox/dcim/forms/bulk_import.py:990 +#: netbox/dcim/forms/bulk_import.py:991 msgid "Physical medium" msgstr "Support physique" -#: netbox/dcim/forms/bulk_import.py:993 netbox/dcim/forms/filtersets.py:1682 +#: netbox/dcim/forms/bulk_import.py:994 netbox/dcim/forms/filtersets.py:1682 msgid "Duplex" msgstr "Duplex" -#: netbox/dcim/forms/bulk_import.py:998 +#: netbox/dcim/forms/bulk_import.py:999 msgid "Poe mode" msgstr "Mode PoE" -#: netbox/dcim/forms/bulk_import.py:1004 +#: netbox/dcim/forms/bulk_import.py:1005 msgid "Poe type" msgstr "Type de POE" -#: netbox/dcim/forms/bulk_import.py:1013 +#: netbox/dcim/forms/bulk_import.py:1014 #: netbox/virtualization/forms/bulk_import.py:208 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "Mode de fonctionnement IEEE 802.1Q (pour interfaces L2)" -#: netbox/dcim/forms/bulk_import.py:1020 +#: netbox/dcim/forms/bulk_import.py:1021 #: netbox/virtualization/forms/bulk_import.py:215 msgid "Filter VLANs available for assignment by group" msgstr "Filtrer les VLAN disponibles pour une attribution par groupe" -#: netbox/dcim/forms/bulk_import.py:1027 +#: netbox/dcim/forms/bulk_import.py:1028 #: netbox/virtualization/forms/bulk_import.py:222 msgid "Assigned untagged VLAN ID (filtered by VLAN group)" msgstr "ID de VLAN non balisé attribué (filtré par groupe de VLAN)" -#: netbox/dcim/forms/bulk_import.py:1036 +#: netbox/dcim/forms/bulk_import.py:1037 #: netbox/virtualization/forms/bulk_import.py:231 msgid "" "Assigned tagged VLAN IDs separated by commas, encased with double quotes " @@ -5229,12 +5229,12 @@ msgstr "" "Identifiants de VLAN balisés attribués, séparés par des virgules, encadrés " "par des guillemets doubles (filtrés par groupe de VLAN). Exemple :" -#: netbox/dcim/forms/bulk_import.py:1047 +#: netbox/dcim/forms/bulk_import.py:1048 #: netbox/virtualization/forms/bulk_import.py:242 msgid "Assigned Q-in-Q Service VLAN ID (filtered by VLAN group)" msgstr "ID VLAN Q-in-Q Service attribué (filtré par groupe de VLAN)" -#: netbox/dcim/forms/bulk_import.py:1054 netbox/ipam/forms/bulk_import.py:174 +#: netbox/dcim/forms/bulk_import.py:1055 netbox/ipam/forms/bulk_import.py:174 #: netbox/ipam/forms/bulk_import.py:259 netbox/ipam/forms/bulk_import.py:295 #: netbox/ipam/forms/filtersets.py:230 netbox/ipam/forms/filtersets.py:314 #: netbox/ipam/forms/filtersets.py:383 @@ -5242,78 +5242,112 @@ msgstr "ID VLAN Q-in-Q Service attribué (filtré par groupe de VLAN)" msgid "Assigned VRF" msgstr "VRF attribué" -#: netbox/dcim/forms/bulk_import.py:1057 +#: netbox/dcim/forms/bulk_import.py:1058 msgid "Rf role" msgstr "Rôle RF" -#: netbox/dcim/forms/bulk_import.py:1060 +#: netbox/dcim/forms/bulk_import.py:1061 msgid "Wireless role (AP/station)" msgstr "Rôle sans fil (AP/station)" -#: netbox/dcim/forms/bulk_import.py:1103 +#: netbox/dcim/forms/bulk_import.py:1104 #, python-brace-format msgid "VDC {vdc} is not assigned to device {device}" msgstr "VDC {vdc} n'est pas attribué à l'appareil {device}" -#: netbox/dcim/forms/bulk_import.py:1119 netbox/dcim/forms/bulk_import.py:1137 -#: netbox/dcim/forms/bulk_import.py:1518 +#: netbox/dcim/forms/bulk_import.py:1120 netbox/dcim/forms/bulk_import.py:1225 +#: netbox/dcim/forms/bulk_import.py:1606 msgid "Physical medium classification" msgstr "Classification des supports physiques" -#: netbox/dcim/forms/bulk_import.py:1173 +#: netbox/dcim/forms/bulk_import.py:1123 netbox/dcim/forms/model_forms.py:1846 +#: netbox/dcim/forms/object_import.py:145 +msgid "Rear port" +msgstr "Port arrière" + +#: netbox/dcim/forms/bulk_import.py:1126 +msgid "Corresponding rear port (mapped to the front port's first position)" +msgstr "" +"Port arrière correspondant (mappé à la première position du port avant)" + +#: netbox/dcim/forms/bulk_import.py:1129 +msgid "Rear port position" +msgstr "Position du port arrière" + +#: netbox/dcim/forms/bulk_import.py:1131 +msgid "Mapped position on the corresponding rear port (defaults to 1)" +msgstr "" +"Position mappée sur le port arrière correspondant (la valeur par défaut est " +"1)" + +#: netbox/dcim/forms/bulk_import.py:1175 netbox/dcim/models/base.py:59 +#, python-brace-format +msgid "" +"Invalid rear port position ({rear_port_position}): Rear port {name} has only" +" {positions} positions." +msgstr "" +"Position du port arrière non valide ({rear_port_position}) : Port arrière " +"{name} n'a que {positions} positions." + +#: netbox/dcim/forms/bulk_import.py:1193 +#, python-brace-format +msgid "Rear port {name} position {rear_port_position} is already occupied." +msgstr "Port arrière {name} position {rear_port_position} est déjà occupé." + +#: netbox/dcim/forms/bulk_import.py:1261 msgid "Installed device" msgstr "Appareil installé" -#: netbox/dcim/forms/bulk_import.py:1177 +#: netbox/dcim/forms/bulk_import.py:1265 msgid "Child device installed within this bay" msgstr "Appareil pour enfant installé dans cette baie" -#: netbox/dcim/forms/bulk_import.py:1179 +#: netbox/dcim/forms/bulk_import.py:1267 msgid "Child device not found." msgstr "Appareil pour enfant introuvable." -#: netbox/dcim/forms/bulk_import.py:1243 +#: netbox/dcim/forms/bulk_import.py:1331 msgid "Parent inventory item" msgstr "Article d'inventaire parent" -#: netbox/dcim/forms/bulk_import.py:1246 +#: netbox/dcim/forms/bulk_import.py:1334 msgid "Component type" msgstr "Type de composant" -#: netbox/dcim/forms/bulk_import.py:1250 +#: netbox/dcim/forms/bulk_import.py:1338 msgid "Component Type" msgstr "Type de composant" -#: netbox/dcim/forms/bulk_import.py:1253 +#: netbox/dcim/forms/bulk_import.py:1341 msgid "Component name" msgstr "Nom du composant" -#: netbox/dcim/forms/bulk_import.py:1255 +#: netbox/dcim/forms/bulk_import.py:1343 msgid "Component Name" msgstr "Nom du composant" -#: netbox/dcim/forms/bulk_import.py:1298 netbox/dcim/forms/bulk_import.py:1316 +#: netbox/dcim/forms/bulk_import.py:1386 netbox/dcim/forms/bulk_import.py:1404 msgid "Component name must be specified when component type is specified" msgstr "" "Le nom du composant doit être spécifié lorsque le type de composant est " "spécifié" -#: netbox/dcim/forms/bulk_import.py:1308 +#: netbox/dcim/forms/bulk_import.py:1396 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "Composant introuvable : {device} - {component_name}" -#: netbox/dcim/forms/bulk_import.py:1321 +#: netbox/dcim/forms/bulk_import.py:1409 msgid "Component type must be specified when component name is specified" msgstr "" "Le type de composant doit être spécifié lorsque le nom du composant est " "spécifié" -#: netbox/dcim/forms/bulk_import.py:1348 netbox/ipam/forms/bulk_import.py:320 +#: netbox/dcim/forms/bulk_import.py:1436 netbox/ipam/forms/bulk_import.py:320 msgid "Parent device of assigned interface (if any)" msgstr "Appareil parent auquel est attribuée l'interface (le cas échéant)" -#: netbox/dcim/forms/bulk_import.py:1351 netbox/ipam/forms/bulk_import.py:323 +#: netbox/dcim/forms/bulk_import.py:1439 netbox/ipam/forms/bulk_import.py:323 #: netbox/virtualization/filtersets.py:354 #: netbox/virtualization/filtersets.py:412 #: netbox/virtualization/forms/bulk_edit.py:219 @@ -5327,136 +5361,136 @@ msgstr "Appareil parent auquel est attribuée l'interface (le cas échéant)" msgid "Virtual machine" msgstr "Machine virtuelle" -#: netbox/dcim/forms/bulk_import.py:1355 netbox/ipam/forms/bulk_import.py:327 +#: netbox/dcim/forms/bulk_import.py:1443 netbox/ipam/forms/bulk_import.py:327 msgid "Parent VM of assigned interface (if any)" msgstr "VM parent de l'interface attribuée (le cas échéant)" -#: netbox/dcim/forms/bulk_import.py:1362 netbox/ipam/filtersets.py:1111 +#: netbox/dcim/forms/bulk_import.py:1450 netbox/ipam/filtersets.py:1111 #: netbox/ipam/forms/bulk_import.py:334 msgid "Assigned interface" msgstr "Interface attribuée" -#: netbox/dcim/forms/bulk_import.py:1366 +#: netbox/dcim/forms/bulk_import.py:1454 msgid "Make this the primary MAC address for the assigned interface" msgstr "En faire l'adresse MAC principale pour l'interface attribuée" -#: netbox/dcim/forms/bulk_import.py:1404 +#: netbox/dcim/forms/bulk_import.py:1492 msgid "Must specify the parent device or VM when assigning an interface" msgstr "" "Doit spécifier le périphérique parent ou la machine virtuelle lors de " "l'attribution d'une interface" -#: netbox/dcim/forms/bulk_import.py:1437 +#: netbox/dcim/forms/bulk_import.py:1525 msgid "Side A site" msgstr "Site de la face A" -#: netbox/dcim/forms/bulk_import.py:1441 +#: netbox/dcim/forms/bulk_import.py:1529 #: netbox/wireless/forms/bulk_import.py:93 msgid "Site of parent device A (if any)" msgstr "Site de l'appareil parent A (le cas échéant)" -#: netbox/dcim/forms/bulk_import.py:1444 +#: netbox/dcim/forms/bulk_import.py:1532 msgid "Side A device" msgstr "Appareil côté A" -#: netbox/dcim/forms/bulk_import.py:1448 netbox/dcim/forms/bulk_import.py:1481 +#: netbox/dcim/forms/bulk_import.py:1536 netbox/dcim/forms/bulk_import.py:1569 msgid "Device name (for device component terminations)" msgstr "" "Nom de l'appareil (pour les terminaisons des composants de l'appareil)" -#: netbox/dcim/forms/bulk_import.py:1451 +#: netbox/dcim/forms/bulk_import.py:1539 msgid "Side A power panel" msgstr "Panneau d'alimentation côté A" -#: netbox/dcim/forms/bulk_import.py:1455 netbox/dcim/forms/bulk_import.py:1488 +#: netbox/dcim/forms/bulk_import.py:1543 netbox/dcim/forms/bulk_import.py:1576 msgid "Power panel name (for power feed terminations)" msgstr "Nom du panneau d'alimentation (pour les terminaisons d'alimentation)" -#: netbox/dcim/forms/bulk_import.py:1458 +#: netbox/dcim/forms/bulk_import.py:1546 msgid "Side A type" msgstr "Côté A type" -#: netbox/dcim/forms/bulk_import.py:1464 +#: netbox/dcim/forms/bulk_import.py:1552 msgid "Side A name" msgstr "Nom de la face A" -#: netbox/dcim/forms/bulk_import.py:1465 netbox/dcim/forms/bulk_import.py:1498 +#: netbox/dcim/forms/bulk_import.py:1553 netbox/dcim/forms/bulk_import.py:1586 msgid "Termination name" msgstr "Nom de terminaison" -#: netbox/dcim/forms/bulk_import.py:1470 +#: netbox/dcim/forms/bulk_import.py:1558 msgid "Side B site" msgstr "Site de la face B" -#: netbox/dcim/forms/bulk_import.py:1474 +#: netbox/dcim/forms/bulk_import.py:1562 #: netbox/wireless/forms/bulk_import.py:114 msgid "Site of parent device B (if any)" msgstr "Site de l'appareil parent B (le cas échéant)" -#: netbox/dcim/forms/bulk_import.py:1477 +#: netbox/dcim/forms/bulk_import.py:1565 msgid "Side B device" msgstr "Appareil Side B" -#: netbox/dcim/forms/bulk_import.py:1484 +#: netbox/dcim/forms/bulk_import.py:1572 msgid "Side B power panel" msgstr "Panneau d'alimentation côté B" -#: netbox/dcim/forms/bulk_import.py:1491 +#: netbox/dcim/forms/bulk_import.py:1579 msgid "Side B type" msgstr "Type de face B" -#: netbox/dcim/forms/bulk_import.py:1497 +#: netbox/dcim/forms/bulk_import.py:1585 msgid "Side B name" msgstr "Nom de la face B" -#: netbox/dcim/forms/bulk_import.py:1506 +#: netbox/dcim/forms/bulk_import.py:1594 #: netbox/templates/dcim/panels/connection.html:60 #: netbox/wireless/forms/bulk_import.py:133 msgid "Connection status" msgstr "État de la connexion" -#: netbox/dcim/forms/bulk_import.py:1512 +#: netbox/dcim/forms/bulk_import.py:1600 msgid "Cable connection profile" msgstr "Profil de connexion des câbles" -#: netbox/dcim/forms/bulk_import.py:1532 +#: netbox/dcim/forms/bulk_import.py:1620 msgid "Cable bundle name" msgstr "Nom du faisceau de câbles" -#: netbox/dcim/forms/bulk_import.py:1544 +#: netbox/dcim/forms/bulk_import.py:1632 msgid "Color name (e.g. \"Red\") or hex code (e.g. \"f44336\")" msgstr "" "Nom de la couleur (par exemple « Rouge ») ou code hexadécimal (par exemple " "« f44336 »)" -#: netbox/dcim/forms/bulk_import.py:1587 +#: netbox/dcim/forms/bulk_import.py:1675 #, python-brace-format msgid "Invalid side designation: {side}" msgstr "Désignation latérale non valide : {side}" -#: netbox/dcim/forms/bulk_import.py:1606 +#: netbox/dcim/forms/bulk_import.py:1694 #, python-brace-format msgid "" "Side {side_upper}: {power_panel} {termination_object} is already connected" msgstr "" "Côté {side_upper}: {power_panel} {termination_object} est déjà connecté" -#: netbox/dcim/forms/bulk_import.py:1612 +#: netbox/dcim/forms/bulk_import.py:1700 #, python-brace-format msgid "{side_upper} side termination not found: {power_panel} {name}" msgstr "{side_upper} terminaison latérale introuvable : {power_panel} {name}" -#: netbox/dcim/forms/bulk_import.py:1630 +#: netbox/dcim/forms/bulk_import.py:1718 #, python-brace-format msgid "Side {side_upper}: {device} {termination_object} is already connected" msgstr "Côté {side_upper}: {device} {termination_object} est déjà connecté" -#: netbox/dcim/forms/bulk_import.py:1636 +#: netbox/dcim/forms/bulk_import.py:1724 #, python-brace-format msgid "{side_upper} side termination not found: {device} {name}" msgstr "{side_upper} terminaison latérale introuvable : {device} {name}" -#: netbox/dcim/forms/bulk_import.py:1658 +#: netbox/dcim/forms/bulk_import.py:1746 #, python-brace-format msgid "" "{color} did not match any used color name and was longer than six " @@ -5465,53 +5499,53 @@ msgstr "" "{color} ne correspondait à aucun nom de couleur utilisé et comportait plus " "de six caractères : hexadécimal non valide." -#: netbox/dcim/forms/bulk_import.py:1683 netbox/dcim/forms/model_forms.py:962 +#: netbox/dcim/forms/bulk_import.py:1771 netbox/dcim/forms/model_forms.py:962 #: netbox/dcim/tables/devices.py:1154 #: netbox/templates/dcim/panels/virtual_chassis_members.html:10 msgid "Master" msgstr "Maître" -#: netbox/dcim/forms/bulk_import.py:1687 +#: netbox/dcim/forms/bulk_import.py:1775 msgid "Master device" msgstr "Appareil principal" -#: netbox/dcim/forms/bulk_import.py:1704 +#: netbox/dcim/forms/bulk_import.py:1792 msgid "Name of parent site" msgstr "Nom du site parent" -#: netbox/dcim/forms/bulk_import.py:1738 +#: netbox/dcim/forms/bulk_import.py:1826 msgid "Upstream power panel" msgstr "Panneau d'alimentation en amont" -#: netbox/dcim/forms/bulk_import.py:1768 +#: netbox/dcim/forms/bulk_import.py:1856 msgid "Primary or redundant" msgstr "Principal ou redondant" -#: netbox/dcim/forms/bulk_import.py:1773 +#: netbox/dcim/forms/bulk_import.py:1861 msgid "Supply type (AC/DC)" msgstr "Type d'alimentation (AC/DC)" -#: netbox/dcim/forms/bulk_import.py:1778 +#: netbox/dcim/forms/bulk_import.py:1866 msgid "Single or three-phase" msgstr "Monophasé ou triphasé" -#: netbox/dcim/forms/bulk_import.py:1828 netbox/dcim/forms/model_forms.py:1939 +#: netbox/dcim/forms/bulk_import.py:1916 netbox/dcim/forms/model_forms.py:1939 #: netbox/dcim/ui/panels.py:111 netbox/dcim/ui/panels.py:371 #: netbox/virtualization/ui/panels.py:55 msgid "Primary IPv4" msgstr "IPv4 principal" -#: netbox/dcim/forms/bulk_import.py:1832 +#: netbox/dcim/forms/bulk_import.py:1920 msgid "IPv4 address with mask, e.g. 1.2.3.4/24" msgstr "Adresse IPv4 avec masque, par exemple 1.2.3.4/24" -#: netbox/dcim/forms/bulk_import.py:1835 netbox/dcim/forms/model_forms.py:1948 +#: netbox/dcim/forms/bulk_import.py:1923 netbox/dcim/forms/model_forms.py:1948 #: netbox/dcim/ui/panels.py:116 netbox/dcim/ui/panels.py:376 #: netbox/virtualization/ui/panels.py:60 msgid "Primary IPv6" msgstr "IPv6 principal" -#: netbox/dcim/forms/bulk_import.py:1839 +#: netbox/dcim/forms/bulk_import.py:1927 msgid "IPv6 address with prefix length, e.g. 2001:db8::1/64" msgstr "Adresse IPv6 avec longueur de préfixe, par exemple 2001:db8 : :1/64" @@ -6002,11 +6036,6 @@ msgstr "Port avant" msgid "Power outlet" msgstr "prise de courant" -#: netbox/dcim/forms/model_forms.py:1846 -#: netbox/dcim/forms/object_import.py:145 -msgid "Rear port" -msgstr "Port arrière" - #: netbox/dcim/forms/model_forms.py:1852 msgid "Inventory Item" msgstr "Article d'inventaire" @@ -6058,7 +6087,7 @@ msgstr "" #: netbox/dcim/forms/object_create.py:312 netbox/dcim/tables/devices.py:1160 #: netbox/ipam/tables/fhrp.py:31 netbox/ipam/ui/panels.py:185 -#: netbox/ipam/views.py:1589 netbox/templates/dcim/virtualchassis_edit.html:59 +#: netbox/ipam/views.py:1594 netbox/templates/dcim/virtualchassis_edit.html:59 #: netbox/users/views.py:375 msgid "Members" msgstr "Membres" @@ -6083,15 +6112,6 @@ msgstr "Appareils membres" msgid "A position must be specified for the first VC member." msgstr "Une position doit être spécifiée pour le premier membre du VC." -#: netbox/dcim/models/base.py:59 -#, python-brace-format -msgid "" -"Invalid rear port position ({rear_port_position}): Rear port {name} has only" -" {positions} positions." -msgstr "" -"Position du port arrière non valide ({rear_port_position}) : Port arrière " -"{name} n'a que {positions} positions." - #: netbox/dcim/models/cables.py:62 msgid "cable bundle" msgstr "faisceau de câbles" @@ -8045,8 +8065,8 @@ msgstr "Tirage alloué (W)" #: netbox/dcim/tables/devices.py:597 netbox/dcim/views.py:3402 #: netbox/ipam/forms/model_forms.py:834 netbox/ipam/tables/fhrp.py:28 -#: netbox/ipam/ui/panels.py:252 netbox/ipam/views.py:922 -#: netbox/ipam/views.py:1047 netbox/netbox/navigation/menu.py:175 +#: netbox/ipam/ui/panels.py:252 netbox/ipam/views.py:924 +#: netbox/ipam/views.py:1052 netbox/netbox/navigation/menu.py:175 #: netbox/netbox/navigation/menu.py:177 netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "Adresses IP" @@ -8476,7 +8496,7 @@ msgstr "Contextes des appareils virtuels" #: netbox/dcim/views.py:3414 netbox/ipam/forms/filtersets.py:469 #: netbox/ipam/models/vlans.py:308 netbox/ipam/tables/ip.py:121 -#: netbox/ipam/tables/vlans.py:52 netbox/ipam/views.py:1381 +#: netbox/ipam/tables/vlans.py:52 netbox/ipam/views.py:1386 #: netbox/netbox/navigation/menu.py:210 netbox/netbox/navigation/menu.py:212 msgid "VLANs" msgstr "VLAN" @@ -11491,11 +11511,11 @@ msgstr "Politique" msgid "Ports" msgstr "Ports" -#: netbox/ipam/forms/bulk_import.py:55 netbox/ipam/views.py:72 +#: netbox/ipam/forms/bulk_import.py:55 netbox/ipam/views.py:73 msgid "Import route targets" msgstr "Importer des cibles d'itinéraire" -#: netbox/ipam/forms/bulk_import.py:61 netbox/ipam/views.py:75 +#: netbox/ipam/forms/bulk_import.py:61 netbox/ipam/views.py:76 msgid "Export route targets" msgstr "Cibles d'itinéraire d'exportation" @@ -12370,8 +12390,8 @@ msgid "Added" msgstr "Ajouté" #: netbox/ipam/tables/ip.py:76 netbox/ipam/tables/ip.py:111 -#: netbox/ipam/tables/vlans.py:125 netbox/ipam/views.py:621 -#: netbox/ipam/views.py:1731 netbox/netbox/navigation/menu.py:182 +#: netbox/ipam/tables/vlans.py:125 netbox/ipam/views.py:623 +#: netbox/ipam/views.py:1736 netbox/netbox/navigation/menu.py:182 #: netbox/netbox/navigation/menu.py:184 msgid "Prefixes" msgstr "Préfixes" @@ -12576,77 +12596,77 @@ msgstr "" "Seuls les caractères alphanumériques, les astérisques, les tirets, les " "points et les traits de soulignement sont autorisés dans les noms DNS" -#: netbox/ipam/views.py:106 netbox/ipam/views.py:1761 +#: netbox/ipam/views.py:107 netbox/ipam/views.py:1766 msgid "Device Interfaces" msgstr "Interfaces des appareils" -#: netbox/ipam/views.py:111 netbox/ipam/views.py:1779 +#: netbox/ipam/views.py:112 netbox/ipam/views.py:1784 msgid "VM Interfaces" msgstr "Interfaces de machines virtuelles" -#: netbox/ipam/views.py:196 +#: netbox/ipam/views.py:197 msgid "Importing VRFs" msgstr "Importer des VRF" -#: netbox/ipam/views.py:203 +#: netbox/ipam/views.py:204 msgid "Exporting VRFs" msgstr "Exporter des VRF" -#: netbox/ipam/views.py:212 +#: netbox/ipam/views.py:213 msgid "Importing L2VPNs" msgstr "Importer des L2VPN" -#: netbox/ipam/views.py:219 +#: netbox/ipam/views.py:220 msgid "Exporting L2VPNs" msgstr "Exporter des L2VPN" -#: netbox/ipam/views.py:798 +#: netbox/ipam/views.py:800 msgid "Duplicate prefixes" msgstr "Préfixes dupliqués" -#: netbox/ipam/views.py:799 netbox/ipam/views.py:1012 -#: netbox/ipam/views.py:1120 +#: netbox/ipam/views.py:801 netbox/ipam/views.py:1017 +#: netbox/ipam/views.py:1125 msgid "Parent prefixes" msgstr "Préfixes pour les parents" -#: netbox/ipam/views.py:851 +#: netbox/ipam/views.py:853 msgid "Child Prefixes" msgstr "Préfixes pour enfants" -#: netbox/ipam/views.py:895 +#: netbox/ipam/views.py:897 msgid "Child Ranges" msgstr "Plages pour enfants" -#: netbox/ipam/views.py:1121 +#: netbox/ipam/views.py:1126 msgid "Duplicate IPs" msgstr "IP dupliquées" -#: netbox/ipam/views.py:1125 +#: netbox/ipam/views.py:1130 msgid "Application services" msgstr "Services d'application" -#: netbox/ipam/views.py:1291 +#: netbox/ipam/views.py:1296 msgid "Related IPs" msgstr "IP associées" -#: netbox/ipam/views.py:1432 +#: netbox/ipam/views.py:1437 msgid "VLAN translation rules" msgstr "Règles de traduction VLAN" -#: netbox/ipam/views.py:1438 +#: netbox/ipam/views.py:1443 msgid "Add Rule" msgstr "Ajouter une règle" -#: netbox/ipam/views.py:1580 +#: netbox/ipam/views.py:1585 msgid "Virtual IP addresses" msgstr "Adresses IP virtuelles" -#: netbox/ipam/views.py:1585 netbox/templates/ipam/iprange/ip_addresses.html:8 +#: netbox/ipam/views.py:1590 netbox/templates/ipam/iprange/ip_addresses.html:8 #: netbox/templates/ipam/prefix/ip_addresses.html:7 msgid "Add IP Address" msgstr "Ajouter une adresse IP" -#: netbox/ipam/views.py:1744 +#: netbox/ipam/views.py:1749 msgid "Add a Prefix" msgstr "Ajouter un préfixe" @@ -14093,7 +14113,7 @@ msgstr "Données synchronisées pour {object_type} {object}." msgid "Synced {count} {object_type}" msgstr "Synchronisé {count} {object_type}" -#: netbox/netbox/views/generic/object_views.py:118 +#: netbox/netbox/views/generic/object_views.py:120 #, python-brace-format msgid "{class_name} must implement get_children()" msgstr "{class_name} doit implémenter get_children ()" @@ -16075,7 +16095,7 @@ msgstr "Par page" msgid "Data is out of sync with upstream file" msgstr "Les données ne sont pas synchronisées avec le fichier en amont" -#: netbox/templates/inc/table_controls_htmx.html:11 +#: netbox/templates/inc/table_controls_htmx.html:10 #: netbox/templates/inc/table_controls_htmx.html:12 msgid "Quick search" msgstr "Recherche rapide" diff --git a/netbox/translations/it/LC_MESSAGES/django.mo b/netbox/translations/it/LC_MESSAGES/django.mo index 1304d4bce6d626375b897388ad6293106d194053..6bed711045b03b2bd47d3d543aaf3c82afb78400 100644 GIT binary patch delta 77762 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 GRsRnrAQ;sE delta 77335 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

cl%rix53YSsdgq~D{a!#l;6B>CE4+{A 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 F{|6ulmhk`p diff --git a/netbox/translations/it/LC_MESSAGES/django.po b/netbox/translations/it/LC_MESSAGES/django.po index 563babe55..1257571c5 100644 --- a/netbox/translations/it/LC_MESSAGES/django.po +++ b/netbox/translations/it/LC_MESSAGES/django.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-24 05:56+0000\n" +"POT-Creation-Date: 2026-07-30 05:52+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" "Last-Translator: Jeremy Stretch, 2026\n" "Language-Team: Italian (https://app.transifex.com/netbox-community/teams/178115/it/)\n" @@ -179,10 +179,10 @@ msgstr "Gruppo del sito (slug)" #: netbox/circuits/forms/filtersets.py:249 #: netbox/circuits/tables/circuits.py:125 netbox/dcim/forms/bulk_edit.py:176 #: netbox/dcim/forms/bulk_edit.py:339 netbox/dcim/forms/bulk_edit.py:696 -#: netbox/dcim/forms/bulk_edit.py:906 netbox/dcim/forms/bulk_import.py:148 -#: netbox/dcim/forms/bulk_import.py:256 netbox/dcim/forms/bulk_import.py:365 -#: netbox/dcim/forms/bulk_import.py:656 netbox/dcim/forms/bulk_import.py:1701 -#: netbox/dcim/forms/bulk_import.py:1729 netbox/dcim/forms/filtersets.py:108 +#: netbox/dcim/forms/bulk_edit.py:906 netbox/dcim/forms/bulk_import.py:149 +#: netbox/dcim/forms/bulk_import.py:257 netbox/dcim/forms/bulk_import.py:366 +#: netbox/dcim/forms/bulk_import.py:657 netbox/dcim/forms/bulk_import.py:1789 +#: netbox/dcim/forms/bulk_import.py:1817 netbox/dcim/forms/filtersets.py:108 #: netbox/dcim/forms/filtersets.py:258 netbox/dcim/forms/filtersets.py:390 #: netbox/dcim/forms/filtersets.py:500 netbox/dcim/forms/filtersets.py:895 #: netbox/dcim/forms/filtersets.py:1117 netbox/dcim/forms/filtersets.py:1198 @@ -309,7 +309,7 @@ msgstr "Terminazione A (ID)" #: netbox/extras/filtersets.py:503 netbox/extras/filtersets.py:562 #: netbox/extras/filtersets.py:623 netbox/extras/filtersets.py:662 #: netbox/extras/filtersets.py:695 netbox/extras/filtersets.py:869 -#: netbox/ipam/forms/model_forms.py:523 netbox/netbox/filtersets.py:319 +#: netbox/ipam/forms/model_forms.py:523 netbox/netbox/filtersets.py:324 #: netbox/netbox/forms/filtersets.py:32 netbox/netbox/forms/search.py:20 #: netbox/templates/htmx/object_selector.html:28 #: netbox/templates/inc/filter_list.html:43 @@ -410,7 +410,7 @@ msgstr "Interfaccia (ID)" #: netbox/dcim/forms/bulk_edit.py:142 netbox/dcim/forms/filtersets.py:227 #: netbox/dcim/forms/model_forms.py:144 netbox/dcim/tables/sites.py:74 #: netbox/ipam/models/asns.py:164 netbox/ipam/tables/asn.py:37 -#: netbox/ipam/tables/ip.py:126 netbox/ipam/views.py:383 +#: netbox/ipam/tables/ip.py:126 netbox/ipam/views.py:384 #: netbox/netbox/navigation/menu.py:189 netbox/netbox/navigation/menu.py:192 msgid "ASNs" msgstr "ASN" @@ -458,7 +458,7 @@ msgstr "ID del servizio" #: netbox/dcim/forms/bulk_edit.py:628 netbox/dcim/forms/bulk_edit.py:849 #: netbox/dcim/forms/bulk_edit.py:1103 netbox/dcim/forms/bulk_edit.py:1202 #: netbox/dcim/forms/bulk_edit.py:1229 netbox/dcim/forms/bulk_edit.py:1773 -#: netbox/dcim/forms/bulk_import.py:1541 netbox/dcim/forms/filtersets.py:1283 +#: netbox/dcim/forms/bulk_import.py:1629 netbox/dcim/forms/filtersets.py:1283 #: netbox/dcim/forms/filtersets.py:1613 netbox/dcim/forms/filtersets.py:1829 #: netbox/dcim/forms/filtersets.py:1848 netbox/dcim/forms/filtersets.py:1872 #: netbox/dcim/forms/filtersets.py:1891 netbox/dcim/tables/devices.py:804 @@ -487,12 +487,12 @@ msgstr "Colore" #: netbox/dcim/forms/bulk_edit.py:1033 netbox/dcim/forms/bulk_edit.py:1056 #: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_edit.py:1146 #: netbox/dcim/forms/bulk_edit.py:1197 netbox/dcim/forms/bulk_edit.py:1224 -#: netbox/dcim/forms/bulk_import.py:214 netbox/dcim/forms/bulk_import.py:300 -#: netbox/dcim/forms/bulk_import.py:829 netbox/dcim/forms/bulk_import.py:855 -#: netbox/dcim/forms/bulk_import.py:881 netbox/dcim/forms/bulk_import.py:902 -#: netbox/dcim/forms/bulk_import.py:988 netbox/dcim/forms/bulk_import.py:1117 -#: netbox/dcim/forms/bulk_import.py:1136 netbox/dcim/forms/bulk_import.py:1515 -#: netbox/dcim/forms/bulk_import.py:1766 netbox/dcim/forms/filtersets.py:1155 +#: netbox/dcim/forms/bulk_import.py:215 netbox/dcim/forms/bulk_import.py:301 +#: netbox/dcim/forms/bulk_import.py:830 netbox/dcim/forms/bulk_import.py:856 +#: netbox/dcim/forms/bulk_import.py:882 netbox/dcim/forms/bulk_import.py:903 +#: netbox/dcim/forms/bulk_import.py:989 netbox/dcim/forms/bulk_import.py:1118 +#: netbox/dcim/forms/bulk_import.py:1224 netbox/dcim/forms/bulk_import.py:1603 +#: netbox/dcim/forms/bulk_import.py:1854 netbox/dcim/forms/filtersets.py:1155 #: netbox/dcim/forms/filtersets.py:1268 netbox/dcim/forms/filtersets.py:1401 #: netbox/dcim/forms/filtersets.py:1492 netbox/dcim/forms/filtersets.py:1512 #: netbox/dcim/forms/filtersets.py:1532 netbox/dcim/forms/filtersets.py:1552 @@ -551,11 +551,11 @@ msgstr "Provider account " #: netbox/dcim/forms/bulk_edit.py:719 netbox/dcim/forms/bulk_edit.py:778 #: netbox/dcim/forms/bulk_edit.py:822 netbox/dcim/forms/bulk_edit.py:942 #: netbox/dcim/forms/bulk_edit.py:1747 netbox/dcim/forms/bulk_edit.py:1791 -#: netbox/dcim/forms/bulk_import.py:105 netbox/dcim/forms/bulk_import.py:164 -#: netbox/dcim/forms/bulk_import.py:281 netbox/dcim/forms/bulk_import.py:390 -#: netbox/dcim/forms/bulk_import.py:621 netbox/dcim/forms/bulk_import.py:781 -#: netbox/dcim/forms/bulk_import.py:1258 netbox/dcim/forms/bulk_import.py:1503 -#: netbox/dcim/forms/bulk_import.py:1761 netbox/dcim/forms/bulk_import.py:1824 +#: netbox/dcim/forms/bulk_import.py:106 netbox/dcim/forms/bulk_import.py:165 +#: netbox/dcim/forms/bulk_import.py:282 netbox/dcim/forms/bulk_import.py:391 +#: netbox/dcim/forms/bulk_import.py:622 netbox/dcim/forms/bulk_import.py:782 +#: netbox/dcim/forms/bulk_import.py:1346 netbox/dcim/forms/bulk_import.py:1591 +#: netbox/dcim/forms/bulk_import.py:1849 netbox/dcim/forms/bulk_import.py:1912 #: netbox/dcim/forms/filtersets.py:210 netbox/dcim/forms/filtersets.py:270 #: netbox/dcim/forms/filtersets.py:413 netbox/dcim/forms/filtersets.py:528 #: netbox/dcim/forms/filtersets.py:941 netbox/dcim/forms/filtersets.py:1064 @@ -614,10 +614,10 @@ msgstr "Status" #: netbox/dcim/forms/bulk_edit.py:195 netbox/dcim/forms/bulk_edit.py:361 #: netbox/dcim/forms/bulk_edit.py:486 netbox/dcim/forms/bulk_edit.py:709 #: netbox/dcim/forms/bulk_edit.py:834 netbox/dcim/forms/bulk_edit.py:1796 -#: netbox/dcim/forms/bulk_import.py:124 netbox/dcim/forms/bulk_import.py:169 -#: netbox/dcim/forms/bulk_import.py:267 netbox/dcim/forms/bulk_import.py:395 -#: netbox/dcim/forms/bulk_import.py:595 netbox/dcim/forms/bulk_import.py:1521 -#: netbox/dcim/forms/bulk_import.py:1817 netbox/dcim/forms/filtersets.py:145 +#: netbox/dcim/forms/bulk_import.py:125 netbox/dcim/forms/bulk_import.py:170 +#: netbox/dcim/forms/bulk_import.py:268 netbox/dcim/forms/bulk_import.py:396 +#: netbox/dcim/forms/bulk_import.py:596 netbox/dcim/forms/bulk_import.py:1609 +#: netbox/dcim/forms/bulk_import.py:1905 netbox/dcim/forms/filtersets.py:145 #: netbox/dcim/forms/filtersets.py:204 netbox/dcim/forms/filtersets.py:237 #: netbox/dcim/forms/filtersets.py:374 netbox/dcim/forms/filtersets.py:459 #: netbox/dcim/forms/filtersets.py:480 netbox/dcim/forms/filtersets.py:863 @@ -708,7 +708,7 @@ msgstr "Parametri del servizio" #: netbox/circuits/forms/filtersets.py:325 #: netbox/circuits/forms/filtersets.py:341 netbox/core/forms/filtersets.py:78 #: netbox/core/forms/filtersets.py:150 netbox/dcim/forms/bulk_edit.py:867 -#: netbox/dcim/forms/bulk_import.py:504 netbox/dcim/forms/filtersets.py:203 +#: netbox/dcim/forms/bulk_import.py:505 netbox/dcim/forms/filtersets.py:203 #: netbox/dcim/forms/filtersets.py:236 netbox/dcim/forms/filtersets.py:1054 #: netbox/dcim/forms/filtersets.py:1207 netbox/dcim/forms/filtersets.py:1219 #: netbox/dcim/forms/filtersets.py:1355 netbox/dcim/forms/filtersets.py:1482 @@ -804,7 +804,7 @@ msgstr "Descrizione" #: netbox/circuits/forms/bulk_edit.py:192 #: netbox/circuits/forms/model_forms.py:198 -#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/bulk_import.py:1494 +#: netbox/dcim/forms/bulk_import.py:1549 netbox/dcim/forms/bulk_import.py:1582 msgid "Termination type" msgstr "Tipo di terminazione" @@ -878,7 +878,7 @@ msgstr "Provider network" #: netbox/circuits/forms/filtersets.py:393 #: netbox/circuits/forms/model_forms.py:399 netbox/dcim/forms/bulk_edit.py:372 #: netbox/dcim/forms/bulk_edit.py:1301 netbox/dcim/forms/bulk_edit.py:1737 -#: netbox/dcim/forms/bulk_import.py:286 netbox/dcim/forms/bulk_import.py:1227 +#: netbox/dcim/forms/bulk_import.py:287 netbox/dcim/forms/bulk_import.py:1315 #: netbox/dcim/forms/filtersets.py:421 netbox/dcim/forms/filtersets.py:919 #: netbox/dcim/forms/filtersets.py:1990 netbox/dcim/forms/filtersets.py:2030 #: netbox/dcim/forms/model_forms.py:312 netbox/dcim/forms/model_forms.py:1298 @@ -935,10 +935,10 @@ msgstr "Tipo di circuito" #: netbox/circuits/forms/bulk_import.py:102 #: netbox/circuits/forms/bulk_import.py:228 -#: netbox/dcim/forms/bulk_import.py:107 netbox/dcim/forms/bulk_import.py:166 -#: netbox/dcim/forms/bulk_import.py:283 netbox/dcim/forms/bulk_import.py:392 -#: netbox/dcim/forms/bulk_import.py:623 netbox/dcim/forms/bulk_import.py:783 -#: netbox/dcim/forms/bulk_import.py:1260 netbox/dcim/forms/bulk_import.py:1763 +#: netbox/dcim/forms/bulk_import.py:108 netbox/dcim/forms/bulk_import.py:167 +#: netbox/dcim/forms/bulk_import.py:284 netbox/dcim/forms/bulk_import.py:393 +#: netbox/dcim/forms/bulk_import.py:624 netbox/dcim/forms/bulk_import.py:784 +#: netbox/dcim/forms/bulk_import.py:1348 netbox/dcim/forms/bulk_import.py:1851 #: netbox/ipam/forms/bulk_import.py:207 netbox/ipam/forms/bulk_import.py:271 #: netbox/ipam/forms/bulk_import.py:307 netbox/ipam/forms/bulk_import.py:538 #: netbox/ipam/forms/bulk_import.py:551 @@ -952,10 +952,10 @@ msgstr "Stato operativo" #: netbox/circuits/forms/bulk_import.py:115 #: netbox/circuits/forms/bulk_import.py:174 #: netbox/circuits/forms/bulk_import.py:235 -#: netbox/dcim/forms/bulk_import.py:128 netbox/dcim/forms/bulk_import.py:173 -#: netbox/dcim/forms/bulk_import.py:399 netbox/dcim/forms/bulk_import.py:599 -#: netbox/dcim/forms/bulk_import.py:1525 netbox/dcim/forms/bulk_import.py:1758 -#: netbox/dcim/forms/bulk_import.py:1821 netbox/ipam/forms/bulk_import.py:49 +#: netbox/dcim/forms/bulk_import.py:129 netbox/dcim/forms/bulk_import.py:174 +#: netbox/dcim/forms/bulk_import.py:400 netbox/dcim/forms/bulk_import.py:600 +#: netbox/dcim/forms/bulk_import.py:1613 netbox/dcim/forms/bulk_import.py:1846 +#: netbox/dcim/forms/bulk_import.py:1909 netbox/ipam/forms/bulk_import.py:49 #: netbox/ipam/forms/bulk_import.py:78 netbox/ipam/forms/bulk_import.py:106 #: netbox/ipam/forms/bulk_import.py:126 netbox/ipam/forms/bulk_import.py:153 #: netbox/ipam/forms/bulk_import.py:181 netbox/ipam/forms/bulk_import.py:266 @@ -1000,7 +1000,7 @@ msgstr "Ruolo operativo" #: netbox/circuits/forms/bulk_import.py:258 #: netbox/circuits/forms/model_forms.py:402 #: netbox/circuits/tables/virtual_circuits.py:109 -#: netbox/circuits/ui/panels.py:179 netbox/dcim/forms/bulk_import.py:1358 +#: netbox/circuits/ui/panels.py:179 netbox/dcim/forms/bulk_import.py:1446 #: netbox/dcim/forms/model_forms.py:1372 netbox/dcim/forms/model_forms.py:1641 #: netbox/dcim/forms/model_forms.py:1822 netbox/dcim/forms/model_forms.py:1857 #: netbox/dcim/forms/model_forms.py:1982 netbox/dcim/tables/connections.py:66 @@ -1028,9 +1028,9 @@ msgstr "Interfaccia" #: netbox/circuits/tables/circuits.py:140 netbox/dcim/forms/bulk_edit.py:348 #: netbox/dcim/forms/bulk_edit.py:462 netbox/dcim/forms/bulk_edit.py:701 #: netbox/dcim/forms/bulk_edit.py:750 netbox/dcim/forms/bulk_edit.py:915 -#: netbox/dcim/forms/bulk_import.py:261 netbox/dcim/forms/bulk_import.py:371 -#: netbox/dcim/forms/bulk_import.py:662 netbox/dcim/forms/bulk_import.py:1707 -#: netbox/dcim/forms/bulk_import.py:1741 netbox/dcim/forms/filtersets.py:116 +#: netbox/dcim/forms/bulk_import.py:262 netbox/dcim/forms/bulk_import.py:372 +#: netbox/dcim/forms/bulk_import.py:663 netbox/dcim/forms/bulk_import.py:1795 +#: netbox/dcim/forms/bulk_import.py:1829 netbox/dcim/forms/filtersets.py:116 #: netbox/dcim/forms/filtersets.py:369 netbox/dcim/forms/filtersets.py:404 #: netbox/dcim/forms/filtersets.py:455 netbox/dcim/forms/filtersets.py:508 #: netbox/dcim/forms/filtersets.py:860 netbox/dcim/forms/filtersets.py:904 @@ -1152,7 +1152,7 @@ msgstr "Contatti" #: netbox/circuits/forms/filtersets.py:239 #: netbox/circuits/tables/circuits.py:135 netbox/dcim/forms/bulk_edit.py:121 #: netbox/dcim/forms/bulk_edit.py:323 netbox/dcim/forms/bulk_edit.py:890 -#: netbox/dcim/forms/bulk_import.py:110 netbox/dcim/forms/filtersets.py:94 +#: netbox/dcim/forms/bulk_import.py:111 netbox/dcim/forms/filtersets.py:94 #: netbox/dcim/forms/filtersets.py:171 netbox/dcim/forms/filtersets.py:217 #: netbox/dcim/forms/filtersets.py:244 netbox/dcim/forms/filtersets.py:382 #: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:881 @@ -1216,7 +1216,7 @@ msgstr "Assegnazione" #: netbox/circuits/forms/filtersets.py:311 #: netbox/circuits/forms/model_forms.py:289 #: netbox/circuits/tables/circuits.py:187 netbox/dcim/forms/bulk_edit.py:126 -#: netbox/dcim/forms/bulk_edit.py:356 netbox/dcim/forms/bulk_import.py:117 +#: netbox/dcim/forms/bulk_edit.py:356 netbox/dcim/forms/bulk_import.py:118 #: netbox/dcim/forms/model_forms.py:137 netbox/dcim/tables/racks.py:139 #: netbox/dcim/tables/racks.py:232 netbox/dcim/tables/sites.py:69 #: netbox/extras/forms/filtersets.py:612 netbox/ipam/filtersets.py:1049 @@ -1712,13 +1712,13 @@ msgstr "Terminazioni" #: netbox/circuits/tables/virtual_circuits.py:106 #: netbox/dcim/forms/bulk_edit.py:749 netbox/dcim/forms/bulk_edit.py:1320 #: netbox/dcim/forms/bulk_edit.py:1732 netbox/dcim/forms/bulk_edit.py:1786 -#: netbox/dcim/forms/bulk_import.py:763 netbox/dcim/forms/bulk_import.py:824 -#: netbox/dcim/forms/bulk_import.py:850 netbox/dcim/forms/bulk_import.py:876 -#: netbox/dcim/forms/bulk_import.py:897 netbox/dcim/forms/bulk_import.py:953 -#: netbox/dcim/forms/bulk_import.py:1112 netbox/dcim/forms/bulk_import.py:1131 -#: netbox/dcim/forms/bulk_import.py:1150 netbox/dcim/forms/bulk_import.py:1168 -#: netbox/dcim/forms/bulk_import.py:1222 netbox/dcim/forms/bulk_import.py:1344 -#: netbox/dcim/forms/bulk_import.py:1811 netbox/dcim/forms/connections.py:34 +#: netbox/dcim/forms/bulk_import.py:764 netbox/dcim/forms/bulk_import.py:825 +#: netbox/dcim/forms/bulk_import.py:851 netbox/dcim/forms/bulk_import.py:877 +#: netbox/dcim/forms/bulk_import.py:898 netbox/dcim/forms/bulk_import.py:954 +#: netbox/dcim/forms/bulk_import.py:1113 netbox/dcim/forms/bulk_import.py:1219 +#: netbox/dcim/forms/bulk_import.py:1238 netbox/dcim/forms/bulk_import.py:1256 +#: netbox/dcim/forms/bulk_import.py:1310 netbox/dcim/forms/bulk_import.py:1432 +#: netbox/dcim/forms/bulk_import.py:1899 netbox/dcim/forms/connections.py:34 #: netbox/dcim/forms/filtersets.py:158 netbox/dcim/forms/filtersets.py:1061 #: netbox/dcim/forms/filtersets.py:1098 netbox/dcim/forms/filtersets.py:1265 #: netbox/dcim/forms/filtersets.py:1486 netbox/dcim/forms/filtersets.py:1509 @@ -1792,7 +1792,7 @@ msgid "Connection" msgstr "Connessione" #: netbox/circuits/ui/panels.py:99 netbox/dcim/forms/bulk_edit.py:1480 -#: netbox/dcim/forms/bulk_import.py:835 netbox/dcim/forms/bulk_import.py:861 +#: netbox/dcim/forms/bulk_import.py:836 netbox/dcim/forms/bulk_import.py:862 #: netbox/dcim/forms/filtersets.py:1497 netbox/dcim/forms/filtersets.py:1537 #: netbox/dcim/forms/filtersets.py:1675 netbox/dcim/tables/devices.py:662 #: netbox/dcim/ui/panels.py:488 @@ -1995,7 +1995,7 @@ msgstr "Informazioni" msgid "Warning" msgstr "Avvertenza" -#: netbox/core/constants.py:33 netbox/netbox/tables/columns.py:597 +#: netbox/core/constants.py:33 netbox/netbox/tables/columns.py:625 msgid "Error" msgstr "Errore" @@ -2982,7 +2982,7 @@ msgid "Position (U)" msgstr "Posizione (U)" #: netbox/dcim/api/serializers_/devices.py:193 -#: netbox/dcim/forms/bulk_import.py:786 netbox/dcim/forms/model_forms.py:819 +#: netbox/dcim/forms/bulk_import.py:787 netbox/dcim/forms/model_forms.py:819 msgid "Replicate components" msgstr "Componenti replicati" @@ -2995,12 +2995,12 @@ msgstr "" "(impostazione predefinita: true)" #: netbox/dcim/api/serializers_/devices.py:200 -#: netbox/dcim/forms/bulk_import.py:791 netbox/dcim/forms/model_forms.py:825 +#: netbox/dcim/forms/bulk_import.py:792 netbox/dcim/forms/model_forms.py:825 msgid "Adopt components" msgstr "Adotta i componenti" #: netbox/dcim/api/serializers_/devices.py:201 -#: netbox/dcim/forms/bulk_import.py:793 netbox/dcim/forms/model_forms.py:828 +#: netbox/dcim/forms/bulk_import.py:794 netbox/dcim/forms/model_forms.py:828 msgid "Adopt already existing components" msgstr "Adotta componenti già esistenti" @@ -3137,11 +3137,11 @@ msgstr "Stantio" #: netbox/dcim/choices.py:170 netbox/dcim/forms/bulk_edit.py:87 #: netbox/dcim/forms/bulk_edit.py:101 netbox/dcim/forms/bulk_edit.py:181 #: netbox/dcim/forms/bulk_edit.py:623 netbox/dcim/forms/bulk_edit.py:651 -#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/bulk_import.py:77 -#: netbox/dcim/forms/bulk_import.py:91 netbox/dcim/forms/bulk_import.py:154 -#: netbox/dcim/forms/bulk_import.py:530 netbox/dcim/forms/bulk_import.py:556 -#: netbox/dcim/forms/bulk_import.py:682 netbox/dcim/forms/bulk_import.py:958 -#: netbox/dcim/forms/bulk_import.py:1239 netbox/dcim/forms/filtersets.py:267 +#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/bulk_import.py:78 +#: netbox/dcim/forms/bulk_import.py:92 netbox/dcim/forms/bulk_import.py:155 +#: netbox/dcim/forms/bulk_import.py:531 netbox/dcim/forms/bulk_import.py:557 +#: netbox/dcim/forms/bulk_import.py:683 netbox/dcim/forms/bulk_import.py:959 +#: netbox/dcim/forms/bulk_import.py:1327 netbox/dcim/forms/filtersets.py:267 #: netbox/dcim/forms/filtersets.py:820 netbox/dcim/forms/filtersets.py:836 #: netbox/dcim/forms/model_forms.py:95 netbox/dcim/forms/model_forms.py:113 #: netbox/dcim/forms/model_forms.py:216 netbox/dcim/forms/model_forms.py:559 @@ -3281,7 +3281,7 @@ msgid "Virtual interfaces" msgstr "Interfacce virtuali" #: netbox/dcim/choices.py:1164 netbox/dcim/forms/bulk_edit.py:1455 -#: netbox/dcim/forms/bulk_import.py:965 netbox/dcim/forms/model_forms.py:1171 +#: netbox/dcim/forms/bulk_import.py:966 netbox/dcim/forms/model_forms.py:1171 #: netbox/dcim/tables/devices.py:761 #: netbox/virtualization/forms/bulk_edit.py:231 #: netbox/virtualization/forms/bulk_import.py:198 @@ -4055,7 +4055,7 @@ msgstr "Interfaccia VM (ID)" msgid "Is assigned" msgstr "È assegnato" -#: netbox/dcim/filtersets.py:2080 netbox/dcim/forms/bulk_import.py:1365 +#: netbox/dcim/filtersets.py:2080 netbox/dcim/forms/bulk_import.py:1453 #: netbox/ipam/forms/bulk_import.py:344 msgid "Is primary" msgstr "È primario" @@ -4076,7 +4076,7 @@ msgid "Assigned VID" msgstr "VID assegnato" #: netbox/dcim/filtersets.py:2158 netbox/dcim/forms/bulk_edit.py:1568 -#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/forms/filtersets.py:1755 +#: netbox/dcim/forms/bulk_import.py:1051 netbox/dcim/forms/filtersets.py:1755 #: netbox/dcim/forms/model_forms.py:1619 #: netbox/dcim/models/device_components.py:958 #: netbox/dcim/tables/devices.py:678 netbox/dcim/ui/panels.py:521 @@ -4305,7 +4305,7 @@ msgstr "Telefono di contatto" msgid "Contact E-mail" msgstr "E-mail di contatto" -#: netbox/dcim/forms/bulk_edit.py:160 netbox/dcim/forms/bulk_import.py:140 +#: netbox/dcim/forms/bulk_edit.py:160 netbox/dcim/forms/bulk_import.py:141 #: netbox/dcim/forms/model_forms.py:159 msgid "Time zone" msgstr "Fuso orario" @@ -4314,9 +4314,9 @@ msgstr "Fuso orario" #: netbox/dcim/forms/bulk_edit.py:584 netbox/dcim/forms/bulk_edit.py:656 #: netbox/dcim/forms/bulk_edit.py:675 netbox/dcim/forms/bulk_edit.py:762 #: netbox/dcim/forms/bulk_edit.py:1306 netbox/dcim/forms/bulk_edit.py:1742 -#: netbox/dcim/forms/bulk_import.py:208 netbox/dcim/forms/bulk_import.py:432 -#: netbox/dcim/forms/bulk_import.py:482 netbox/dcim/forms/bulk_import.py:566 -#: netbox/dcim/forms/bulk_import.py:602 netbox/dcim/forms/bulk_import.py:1233 +#: netbox/dcim/forms/bulk_import.py:209 netbox/dcim/forms/bulk_import.py:433 +#: netbox/dcim/forms/bulk_import.py:483 netbox/dcim/forms/bulk_import.py:567 +#: netbox/dcim/forms/bulk_import.py:603 netbox/dcim/forms/bulk_import.py:1321 #: netbox/dcim/forms/filtersets.py:355 netbox/dcim/forms/filtersets.py:426 #: netbox/dcim/forms/filtersets.py:578 netbox/dcim/forms/filtersets.py:728 #: netbox/dcim/forms/filtersets.py:841 netbox/dcim/forms/filtersets.py:924 @@ -4335,21 +4335,21 @@ msgid "Manufacturer" msgstr "Produttore" #: netbox/dcim/forms/bulk_edit.py:240 netbox/dcim/forms/bulk_edit.py:392 -#: netbox/dcim/forms/bulk_import.py:217 netbox/dcim/forms/bulk_import.py:303 +#: netbox/dcim/forms/bulk_import.py:218 netbox/dcim/forms/bulk_import.py:304 #: netbox/dcim/forms/filtersets.py:301 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "Fattore di forma" #: netbox/dcim/forms/bulk_edit.py:245 netbox/dcim/forms/bulk_edit.py:397 -#: netbox/dcim/forms/bulk_import.py:225 netbox/dcim/forms/bulk_import.py:306 +#: netbox/dcim/forms/bulk_import.py:226 netbox/dcim/forms/bulk_import.py:307 #: netbox/dcim/forms/filtersets.py:306 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "Larghezza" #: netbox/dcim/forms/bulk_edit.py:251 netbox/dcim/forms/bulk_edit.py:403 -#: netbox/dcim/forms/bulk_import.py:313 +#: netbox/dcim/forms/bulk_import.py:314 msgid "Height (U)" msgstr "Altezza (U)" @@ -4371,7 +4371,7 @@ msgid "Outer depth" msgstr "Profondità esterna" #: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:426 -#: netbox/dcim/forms/bulk_import.py:230 netbox/dcim/forms/bulk_import.py:316 +#: netbox/dcim/forms/bulk_import.py:231 netbox/dcim/forms/bulk_import.py:317 msgid "Outer unit" msgstr "Unità esterna" @@ -4383,7 +4383,7 @@ msgstr "Profondità di montaggio" #: netbox/dcim/forms/bulk_edit.py:441 netbox/dcim/forms/bulk_edit.py:465 #: netbox/dcim/forms/bulk_edit.py:542 netbox/dcim/forms/bulk_edit.py:559 #: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/bulk_edit.py:614 -#: netbox/dcim/forms/bulk_import.py:445 netbox/dcim/forms/bulk_import.py:493 +#: netbox/dcim/forms/bulk_import.py:446 netbox/dcim/forms/bulk_import.py:494 #: netbox/dcim/forms/filtersets.py:326 netbox/dcim/forms/filtersets.py:348 #: netbox/dcim/forms/filtersets.py:373 netbox/dcim/forms/filtersets.py:458 #: netbox/dcim/forms/filtersets.py:571 netbox/dcim/forms/filtersets.py:683 @@ -4408,8 +4408,8 @@ msgstr "Peso massimo" #: netbox/dcim/forms/bulk_edit.py:298 netbox/dcim/forms/bulk_edit.py:451 #: netbox/dcim/forms/bulk_edit.py:547 netbox/dcim/forms/bulk_edit.py:603 -#: netbox/dcim/forms/bulk_import.py:236 netbox/dcim/forms/bulk_import.py:328 -#: netbox/dcim/forms/bulk_import.py:450 netbox/dcim/forms/bulk_import.py:498 +#: netbox/dcim/forms/bulk_import.py:237 netbox/dcim/forms/bulk_import.py:329 +#: netbox/dcim/forms/bulk_import.py:451 netbox/dcim/forms/bulk_import.py:499 #: netbox/dcim/forms/filtersets.py:336 netbox/dcim/forms/filtersets.py:687 #: netbox/dcim/forms/filtersets.py:799 msgid "Weight unit" @@ -4441,7 +4441,7 @@ msgstr "Dimensioni" msgid "Numbering" msgstr "Numerazione" -#: netbox/dcim/forms/bulk_edit.py:377 netbox/dcim/forms/bulk_import.py:293 +#: netbox/dcim/forms/bulk_edit.py:377 netbox/dcim/forms/bulk_import.py:294 #: netbox/dcim/forms/filtersets.py:434 msgid "Rack type" msgstr "Tipo di rack" @@ -4459,17 +4459,17 @@ msgstr "Etichetta dell'asset" #: netbox/dcim/forms/bulk_edit.py:436 netbox/dcim/forms/bulk_edit.py:537 #: netbox/dcim/forms/bulk_edit.py:593 netbox/dcim/forms/bulk_edit.py:724 -#: netbox/dcim/forms/bulk_import.py:322 netbox/dcim/forms/bulk_import.py:487 -#: netbox/dcim/forms/bulk_import.py:696 netbox/dcim/forms/filtersets.py:437 +#: netbox/dcim/forms/bulk_import.py:323 netbox/dcim/forms/bulk_import.py:488 +#: netbox/dcim/forms/bulk_import.py:697 netbox/dcim/forms/filtersets.py:437 #: netbox/dcim/forms/filtersets.py:600 netbox/dcim/forms/filtersets.py:790 #: netbox/dcim/forms/filtersets.py:946 msgid "Airflow" msgstr "Flusso d'aria" #: netbox/dcim/forms/bulk_edit.py:460 netbox/dcim/forms/bulk_edit.py:937 -#: netbox/dcim/forms/bulk_import.py:378 netbox/dcim/forms/bulk_import.py:381 -#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/bulk_import.py:1748 -#: netbox/dcim/forms/bulk_import.py:1752 netbox/dcim/forms/filtersets.py:125 +#: netbox/dcim/forms/bulk_import.py:379 netbox/dcim/forms/bulk_import.py:382 +#: netbox/dcim/forms/bulk_import.py:670 netbox/dcim/forms/bulk_import.py:1836 +#: netbox/dcim/forms/bulk_import.py:1840 netbox/dcim/forms/filtersets.py:125 #: netbox/dcim/forms/filtersets.py:370 netbox/dcim/forms/filtersets.py:465 #: netbox/dcim/forms/filtersets.py:479 netbox/dcim/forms/filtersets.py:525 #: netbox/dcim/forms/filtersets.py:914 netbox/dcim/forms/filtersets.py:1130 @@ -4495,7 +4495,7 @@ msgstr "cremagliera" msgid "Hardware" msgstr "Hardware" -#: netbox/dcim/forms/bulk_edit.py:513 netbox/dcim/forms/bulk_import.py:438 +#: netbox/dcim/forms/bulk_edit.py:513 netbox/dcim/forms/bulk_import.py:439 #: netbox/dcim/forms/filtersets.py:583 netbox/dcim/forms/model_forms.py:416 #: netbox/virtualization/forms/bulk_edit.py:85 #: netbox/virtualization/forms/bulk_import.py:89 @@ -4534,8 +4534,8 @@ msgid "Schema" msgstr "Schema" #: netbox/dcim/forms/bulk_edit.py:572 netbox/dcim/forms/bulk_edit.py:579 -#: netbox/dcim/forms/bulk_edit.py:828 netbox/dcim/forms/bulk_import.py:476 -#: netbox/dcim/forms/bulk_import.py:1509 netbox/dcim/forms/filtersets.py:723 +#: netbox/dcim/forms/bulk_edit.py:828 netbox/dcim/forms/bulk_import.py:477 +#: netbox/dcim/forms/bulk_import.py:1597 netbox/dcim/forms/filtersets.py:723 #: netbox/dcim/forms/filtersets.py:1146 netbox/dcim/forms/filtersets.py:1278 #: netbox/dcim/forms/model_forms.py:463 netbox/dcim/forms/model_forms.py:476 #: netbox/dcim/tables/modules.py:43 netbox/dcim/tables/modules.py:97 @@ -4568,10 +4568,10 @@ msgid "VM role" msgstr "Ruolo VM" #: netbox/dcim/forms/bulk_edit.py:637 netbox/dcim/forms/bulk_edit.py:661 -#: netbox/dcim/forms/bulk_edit.py:734 netbox/dcim/forms/bulk_import.py:540 -#: netbox/dcim/forms/bulk_import.py:544 netbox/dcim/forms/bulk_import.py:573 -#: netbox/dcim/forms/bulk_import.py:577 netbox/dcim/forms/bulk_import.py:702 -#: netbox/dcim/forms/bulk_import.py:706 netbox/dcim/forms/filtersets.py:815 +#: netbox/dcim/forms/bulk_edit.py:734 netbox/dcim/forms/bulk_import.py:541 +#: netbox/dcim/forms/bulk_import.py:545 netbox/dcim/forms/bulk_import.py:574 +#: netbox/dcim/forms/bulk_import.py:578 netbox/dcim/forms/bulk_import.py:703 +#: netbox/dcim/forms/bulk_import.py:707 netbox/dcim/forms/filtersets.py:815 #: netbox/dcim/forms/filtersets.py:846 netbox/dcim/forms/filtersets.py:965 #: netbox/dcim/forms/model_forms.py:554 netbox/dcim/forms/model_forms.py:591 #: netbox/dcim/forms/model_forms.py:716 @@ -4583,19 +4583,19 @@ msgid "Config template" msgstr "Modello di configurazione" #: netbox/dcim/forms/bulk_edit.py:680 netbox/dcim/forms/bulk_edit.py:1086 -#: netbox/dcim/forms/bulk_import.py:608 netbox/dcim/forms/filtersets.py:135 +#: netbox/dcim/forms/bulk_import.py:609 netbox/dcim/forms/filtersets.py:135 #: netbox/dcim/forms/filtersets.py:1438 netbox/dcim/forms/model_forms.py:661 #: netbox/dcim/forms/model_forms.py:1048 netbox/dcim/forms/model_forms.py:1065 #: netbox/extras/filtersets.py:756 msgid "Device type" msgstr "Tipo di dispositivo" -#: netbox/dcim/forms/bulk_edit.py:691 netbox/dcim/forms/bulk_import.py:589 +#: netbox/dcim/forms/bulk_edit.py:691 netbox/dcim/forms/bulk_import.py:590 #: netbox/dcim/forms/filtersets.py:140 netbox/dcim/forms/model_forms.py:669 msgid "Device role" msgstr "Ruolo del dispositivo" -#: netbox/dcim/forms/bulk_edit.py:714 netbox/dcim/forms/bulk_import.py:614 +#: netbox/dcim/forms/bulk_edit.py:714 netbox/dcim/forms/bulk_import.py:615 #: netbox/dcim/forms/filtersets.py:829 netbox/dcim/forms/filtersets.py:938 #: netbox/dcim/forms/model_forms.py:602 netbox/dcim/forms/model_forms.py:674 #: netbox/dcim/tables/devices.py:191 netbox/extras/filtersets.py:772 @@ -4607,7 +4607,7 @@ msgstr "Ruolo del dispositivo" msgid "Platform" msgstr "piattaforma" -#: netbox/dcim/forms/bulk_edit.py:739 netbox/dcim/forms/bulk_import.py:633 +#: netbox/dcim/forms/bulk_edit.py:739 netbox/dcim/forms/bulk_import.py:634 #: netbox/dcim/forms/filtersets.py:870 netbox/dcim/forms/filtersets.py:1040 #: netbox/dcim/forms/model_forms.py:683 netbox/dcim/tables/devices.py:211 #: netbox/extras/filtersets.py:805 netbox/extras/forms/filtersets.py:411 @@ -4636,12 +4636,12 @@ msgstr "Configurazione" msgid "Virtualization" msgstr "Virtualizzazione" -#: netbox/dcim/forms/bulk_edit.py:767 netbox/dcim/forms/bulk_import.py:775 +#: netbox/dcim/forms/bulk_edit.py:767 netbox/dcim/forms/bulk_import.py:776 #: netbox/dcim/forms/model_forms.py:811 netbox/dcim/forms/model_forms.py:1073 msgid "Module type" msgstr "Tipo di modulo" -#: netbox/dcim/forms/bulk_edit.py:839 netbox/dcim/forms/bulk_import.py:1528 +#: netbox/dcim/forms/bulk_edit.py:839 netbox/dcim/forms/bulk_import.py:1616 #: netbox/dcim/forms/filtersets.py:1305 netbox/dcim/forms/model_forms.py:888 #: netbox/dcim/tables/cables.py:124 msgid "Bundle" @@ -4665,8 +4665,8 @@ msgstr "Etichetta" msgid "Length" msgstr "Lunghezza" -#: netbox/dcim/forms/bulk_edit.py:858 netbox/dcim/forms/bulk_import.py:1535 -#: netbox/dcim/forms/bulk_import.py:1538 netbox/dcim/forms/filtersets.py:1291 +#: netbox/dcim/forms/bulk_edit.py:858 netbox/dcim/forms/bulk_import.py:1623 +#: netbox/dcim/forms/bulk_import.py:1626 netbox/dcim/forms/filtersets.py:1291 msgid "Length unit" msgstr "Unità di lunghezza" @@ -4674,17 +4674,17 @@ msgstr "Unità di lunghezza" msgid "Domain" msgstr "Dominio" -#: netbox/dcim/forms/bulk_edit.py:932 netbox/dcim/forms/bulk_import.py:1735 +#: netbox/dcim/forms/bulk_edit.py:932 netbox/dcim/forms/bulk_import.py:1823 #: netbox/dcim/forms/filtersets.py:1384 netbox/dcim/forms/model_forms.py:927 msgid "Power panel" msgstr "Pannello di alimentazione" -#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/bulk_import.py:1771 +#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/bulk_import.py:1859 #: netbox/dcim/forms/filtersets.py:1406 msgid "Supply" msgstr "Fornitura" -#: netbox/dcim/forms/bulk_edit.py:960 netbox/dcim/forms/bulk_import.py:1776 +#: netbox/dcim/forms/bulk_edit.py:960 netbox/dcim/forms/bulk_import.py:1864 #: netbox/dcim/forms/filtersets.py:1411 msgid "Phase" msgstr "Fase" @@ -4721,13 +4721,13 @@ msgstr "Pareggio assegnato" msgid "Allocated power draw (watts)" msgstr "Potenza assorbita allocata (watt)" -#: netbox/dcim/forms/bulk_edit.py:1107 netbox/dcim/forms/bulk_import.py:908 +#: netbox/dcim/forms/bulk_edit.py:1107 netbox/dcim/forms/bulk_import.py:909 #: netbox/dcim/forms/model_forms.py:1144 netbox/dcim/forms/model_forms.py:1509 #: netbox/dcim/forms/model_forms.py:1838 netbox/dcim/forms/object_import.py:56 msgid "Power port" msgstr "Porta di alimentazione" -#: netbox/dcim/forms/bulk_edit.py:1112 netbox/dcim/forms/bulk_import.py:915 +#: netbox/dcim/forms/bulk_edit.py:1112 netbox/dcim/forms/bulk_import.py:916 msgid "Feed leg" msgstr "Gamba di alimentazione" @@ -4737,7 +4737,7 @@ msgid "Management only" msgstr "Solo gestione" #: netbox/dcim/forms/bulk_edit.py:1168 netbox/dcim/forms/bulk_edit.py:1495 -#: netbox/dcim/forms/bulk_import.py:1001 netbox/dcim/forms/filtersets.py:1711 +#: netbox/dcim/forms/bulk_import.py:1002 netbox/dcim/forms/filtersets.py:1711 #: netbox/dcim/forms/filtersets.py:1796 netbox/dcim/forms/object_import.py:91 #: netbox/dcim/models/device_component_templates.py:473 #: netbox/dcim/models/device_components.py:930 netbox/dcim/ui/panels.py:494 @@ -4745,7 +4745,7 @@ msgid "PoE mode" msgstr "modalità PoE" #: netbox/dcim/forms/bulk_edit.py:1174 netbox/dcim/forms/bulk_edit.py:1501 -#: netbox/dcim/forms/bulk_import.py:1007 netbox/dcim/forms/filtersets.py:1716 +#: netbox/dcim/forms/bulk_import.py:1008 netbox/dcim/forms/filtersets.py:1716 #: netbox/dcim/forms/filtersets.py:1801 netbox/dcim/forms/object_import.py:96 #: netbox/dcim/models/device_component_templates.py:480 #: netbox/dcim/models/device_components.py:937 netbox/dcim/ui/panels.py:495 @@ -4771,7 +4771,7 @@ msgstr "RITARDO" msgid "Virtual device contexts" msgstr "Contesti dei dispositivi virtuali" -#: netbox/dcim/forms/bulk_edit.py:1509 netbox/dcim/forms/bulk_import.py:1010 +#: netbox/dcim/forms/bulk_edit.py:1509 netbox/dcim/forms/bulk_import.py:1011 #: netbox/virtualization/forms/bulk_edit.py:252 #: netbox/virtualization/forms/bulk_import.py:205 #: netbox/vpn/forms/bulk_edit.py:128 netbox/vpn/forms/bulk_edit.py:196 @@ -4782,7 +4782,7 @@ msgstr "Contesti dei dispositivi virtuali" msgid "Mode" msgstr "modalità" -#: netbox/dcim/forms/bulk_edit.py:1517 netbox/dcim/forms/bulk_import.py:1016 +#: netbox/dcim/forms/bulk_edit.py:1517 netbox/dcim/forms/bulk_import.py:1017 #: netbox/dcim/forms/model_forms.py:1585 netbox/ipam/forms/bulk_import.py:184 #: netbox/ipam/forms/filtersets.py:603 netbox/ipam/models/vlans.py:99 #: netbox/virtualization/forms/bulk_edit.py:259 @@ -4791,7 +4791,7 @@ msgstr "modalità" msgid "VLAN group" msgstr "Gruppo VLAN" -#: netbox/dcim/forms/bulk_edit.py:1526 netbox/dcim/forms/bulk_import.py:1023 +#: netbox/dcim/forms/bulk_edit.py:1526 netbox/dcim/forms/bulk_import.py:1024 #: netbox/dcim/forms/model_forms.py:1591 netbox/dcim/tables/devices.py:627 #: netbox/dcim/ui/panels.py:498 netbox/virtualization/forms/bulk_edit.py:267 #: netbox/virtualization/forms/bulk_import.py:218 @@ -4799,7 +4799,7 @@ msgstr "Gruppo VLAN" msgid "Untagged VLAN" msgstr "VLAN senza tag" -#: netbox/dcim/forms/bulk_edit.py:1535 netbox/dcim/forms/bulk_import.py:1030 +#: netbox/dcim/forms/bulk_edit.py:1535 netbox/dcim/forms/bulk_import.py:1031 #: netbox/dcim/forms/model_forms.py:1600 netbox/dcim/tables/devices.py:633 #: netbox/virtualization/forms/bulk_edit.py:275 #: netbox/virtualization/forms/bulk_import.py:225 @@ -4815,7 +4815,7 @@ msgstr "Aggiungi VLAN con tag" msgid "Remove tagged VLANs" msgstr "Rimuovi le VLAN contrassegnate" -#: netbox/dcim/forms/bulk_edit.py:1558 netbox/dcim/forms/bulk_import.py:1043 +#: netbox/dcim/forms/bulk_edit.py:1558 netbox/dcim/forms/bulk_import.py:1044 #: netbox/dcim/forms/model_forms.py:1609 #: netbox/virtualization/forms/bulk_import.py:238 #: netbox/virtualization/forms/model_forms.py:439 @@ -4885,245 +4885,245 @@ msgid "An access interface cannot have tagged VLANs assigned." msgstr "" "A un'interfaccia di accesso non possono essere assegnate VLAN con tag." -#: netbox/dcim/forms/bulk_import.py:81 +#: netbox/dcim/forms/bulk_import.py:82 msgid "Name of parent region" msgstr "Nome della regione madre" -#: netbox/dcim/forms/bulk_import.py:95 +#: netbox/dcim/forms/bulk_import.py:96 msgid "Name of parent site group" msgstr "Nome del gruppo del sito principale" -#: netbox/dcim/forms/bulk_import.py:114 +#: netbox/dcim/forms/bulk_import.py:115 msgid "Assigned region" msgstr "Regione assegnata" -#: netbox/dcim/forms/bulk_import.py:121 netbox/tenancy/forms/bulk_import.py:50 +#: netbox/dcim/forms/bulk_import.py:122 netbox/tenancy/forms/bulk_import.py:50 #: netbox/wireless/forms/bulk_import.py:41 msgid "Assigned group" msgstr "Gruppo assegnato" -#: netbox/dcim/forms/bulk_import.py:140 +#: netbox/dcim/forms/bulk_import.py:141 msgid "available options" msgstr "opzioni disponibili" -#: netbox/dcim/forms/bulk_import.py:151 netbox/dcim/forms/bulk_import.py:659 -#: netbox/dcim/forms/bulk_import.py:1732 netbox/ipam/forms/bulk_import.py:519 +#: netbox/dcim/forms/bulk_import.py:152 netbox/dcim/forms/bulk_import.py:660 +#: netbox/dcim/forms/bulk_import.py:1820 netbox/ipam/forms/bulk_import.py:519 #: netbox/virtualization/forms/bulk_import.py:66 msgid "Assigned site" msgstr "Sito assegnato" -#: netbox/dcim/forms/bulk_import.py:158 +#: netbox/dcim/forms/bulk_import.py:159 msgid "Parent location" msgstr "Sede del genitore" -#: netbox/dcim/forms/bulk_import.py:160 +#: netbox/dcim/forms/bulk_import.py:161 msgid "Location not found." msgstr "Posizione non trovata." -#: netbox/dcim/forms/bulk_import.py:211 +#: netbox/dcim/forms/bulk_import.py:212 msgid "The manufacturer of this rack type" msgstr "Il produttore di questo tipo di rack" -#: netbox/dcim/forms/bulk_import.py:222 +#: netbox/dcim/forms/bulk_import.py:223 msgid "The lowest-numbered position in the rack" msgstr "La posizione con il numero più basso nel rack" -#: netbox/dcim/forms/bulk_import.py:227 netbox/dcim/forms/bulk_import.py:309 +#: netbox/dcim/forms/bulk_import.py:228 netbox/dcim/forms/bulk_import.py:310 msgid "Rail-to-rail width (in inches)" msgstr "Larghezza da rotaia a rotaia (in pollici)" -#: netbox/dcim/forms/bulk_import.py:233 netbox/dcim/forms/bulk_import.py:319 +#: netbox/dcim/forms/bulk_import.py:234 netbox/dcim/forms/bulk_import.py:320 msgid "Unit for outer dimensions" msgstr "Unità per dimensioni esterne" -#: netbox/dcim/forms/bulk_import.py:239 netbox/dcim/forms/bulk_import.py:331 +#: netbox/dcim/forms/bulk_import.py:240 netbox/dcim/forms/bulk_import.py:332 msgid "Unit for rack weights" msgstr "Unità per pesi a scaffale" -#: netbox/dcim/forms/bulk_import.py:271 +#: netbox/dcim/forms/bulk_import.py:272 msgid "Name of assigned tenant" msgstr "Nome dell'inquilino assegnato" -#: netbox/dcim/forms/bulk_import.py:274 netbox/dcim/forms/filtersets.py:410 +#: netbox/dcim/forms/bulk_import.py:275 netbox/dcim/forms/filtersets.py:410 #: netbox/dcim/forms/filtersets.py:515 netbox/dcim/ui/panels.py:47 #: netbox/ipam/forms/filtersets.py:497 msgid "Rack group" msgstr "Gruppo Rack" -#: netbox/dcim/forms/bulk_import.py:278 +#: netbox/dcim/forms/bulk_import.py:279 msgid "Name of assigned group" msgstr "Nome del gruppo assegnato" -#: netbox/dcim/forms/bulk_import.py:290 +#: netbox/dcim/forms/bulk_import.py:291 msgid "Name of assigned role" msgstr "Nome del ruolo assegnato" -#: netbox/dcim/forms/bulk_import.py:297 +#: netbox/dcim/forms/bulk_import.py:298 msgid "Rack type model" msgstr "Modello tipo rack" -#: netbox/dcim/forms/bulk_import.py:325 netbox/dcim/forms/bulk_import.py:490 -#: netbox/dcim/forms/bulk_import.py:699 +#: netbox/dcim/forms/bulk_import.py:326 netbox/dcim/forms/bulk_import.py:491 +#: netbox/dcim/forms/bulk_import.py:700 msgid "Airflow direction" msgstr "Direzione del flusso d'aria" -#: netbox/dcim/forms/bulk_import.py:358 +#: netbox/dcim/forms/bulk_import.py:359 msgid "Width must be set if not specifying a rack type." msgstr "" "La larghezza deve essere impostata se non si specifica un tipo di rack." -#: netbox/dcim/forms/bulk_import.py:360 +#: netbox/dcim/forms/bulk_import.py:361 msgid "U height must be set if not specifying a rack type." msgstr "" "L'altezza U deve essere impostata se non si specifica un tipo di rack." -#: netbox/dcim/forms/bulk_import.py:368 +#: netbox/dcim/forms/bulk_import.py:369 msgid "Parent site" msgstr "Sito principale" -#: netbox/dcim/forms/bulk_import.py:375 netbox/dcim/forms/bulk_import.py:1745 +#: netbox/dcim/forms/bulk_import.py:376 netbox/dcim/forms/bulk_import.py:1833 msgid "Rack's location (if any)" msgstr "Posizione del rack (se presente)" -#: netbox/dcim/forms/bulk_import.py:384 netbox/dcim/forms/model_forms.py:376 +#: netbox/dcim/forms/bulk_import.py:385 netbox/dcim/forms/model_forms.py:376 #: netbox/dcim/tables/racks.py:242 #: netbox/templates/dcim/rackreservation.html:7 msgid "Units" msgstr "Unità" -#: netbox/dcim/forms/bulk_import.py:387 +#: netbox/dcim/forms/bulk_import.py:388 msgid "Comma-separated list of individual unit numbers" msgstr "Elenco separato da virgole di numeri di unità individuali" -#: netbox/dcim/forms/bulk_import.py:435 +#: netbox/dcim/forms/bulk_import.py:436 msgid "The manufacturer which produces this device type" msgstr "Il produttore che produce questo tipo di dispositivo" -#: netbox/dcim/forms/bulk_import.py:442 +#: netbox/dcim/forms/bulk_import.py:443 msgid "The default platform for devices of this type (optional)" msgstr "La piattaforma predefinita per dispositivi di questo tipo (opzionale)" -#: netbox/dcim/forms/bulk_import.py:447 +#: netbox/dcim/forms/bulk_import.py:448 msgid "Device weight" msgstr "Peso del dispositivo" -#: netbox/dcim/forms/bulk_import.py:453 +#: netbox/dcim/forms/bulk_import.py:454 msgid "Unit for device weight" msgstr "Unità per il peso del dispositivo" -#: netbox/dcim/forms/bulk_import.py:495 +#: netbox/dcim/forms/bulk_import.py:496 msgid "Module weight" msgstr "Peso del modulo" -#: netbox/dcim/forms/bulk_import.py:501 +#: netbox/dcim/forms/bulk_import.py:502 msgid "Unit for module weight" msgstr "Unità per il peso del modulo" -#: netbox/dcim/forms/bulk_import.py:506 +#: netbox/dcim/forms/bulk_import.py:507 msgid "Attribute values for the assigned profile, passed as a dictionary" msgstr "" "Valori degli attributi per il profilo assegnato, passati come dizionario" -#: netbox/dcim/forms/bulk_import.py:521 +#: netbox/dcim/forms/bulk_import.py:522 msgid "Profile must be specified if attribute data is provided." msgstr "" "Il profilo deve essere specificato se vengono forniti i dati degli " "attributi." -#: netbox/dcim/forms/bulk_import.py:534 +#: netbox/dcim/forms/bulk_import.py:535 msgid "Parent Device Role" msgstr "Ruolo del dispositivo principale" -#: netbox/dcim/forms/bulk_import.py:536 +#: netbox/dcim/forms/bulk_import.py:537 msgid "Device role not found." msgstr "Ruolo del dispositivo non trovato." -#: netbox/dcim/forms/bulk_import.py:560 +#: netbox/dcim/forms/bulk_import.py:561 msgid "Parent platform" msgstr "Piattaforma principale" -#: netbox/dcim/forms/bulk_import.py:562 +#: netbox/dcim/forms/bulk_import.py:563 msgid "Platform not found." msgstr "Piattaforma non trovata." -#: netbox/dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:571 msgid "Limit platform assignments to this manufacturer" msgstr "Limita le assegnazioni delle piattaforme a questo produttore" -#: netbox/dcim/forms/bulk_import.py:592 netbox/dcim/forms/bulk_import.py:1814 +#: netbox/dcim/forms/bulk_import.py:593 netbox/dcim/forms/bulk_import.py:1902 #: netbox/tenancy/forms/bulk_import.py:116 msgid "Assigned role" msgstr "Ruolo assegnato" -#: netbox/dcim/forms/bulk_import.py:605 +#: netbox/dcim/forms/bulk_import.py:606 msgid "Device type manufacturer" msgstr "Produttore del tipo di dispositivo" -#: netbox/dcim/forms/bulk_import.py:611 +#: netbox/dcim/forms/bulk_import.py:612 msgid "Device type model" msgstr "Tipo di dispositivo modello" -#: netbox/dcim/forms/bulk_import.py:618 +#: netbox/dcim/forms/bulk_import.py:619 #: netbox/virtualization/forms/bulk_import.py:165 msgid "Assigned platform" msgstr "Piattaforma assegnata" -#: netbox/dcim/forms/bulk_import.py:626 netbox/dcim/forms/bulk_import.py:630 +#: netbox/dcim/forms/bulk_import.py:627 netbox/dcim/forms/bulk_import.py:631 #: netbox/dcim/forms/model_forms.py:697 msgid "Virtual chassis" msgstr "Chassis virtuale" -#: netbox/dcim/forms/bulk_import.py:637 +#: netbox/dcim/forms/bulk_import.py:638 msgid "Virtualization cluster" msgstr "Cluster di virtualizzazione" -#: netbox/dcim/forms/bulk_import.py:666 +#: netbox/dcim/forms/bulk_import.py:667 msgid "Assigned location (if any)" msgstr "Posizione assegnata (se presente)" -#: netbox/dcim/forms/bulk_import.py:673 +#: netbox/dcim/forms/bulk_import.py:674 msgid "Assigned rack (if any)" msgstr "Rack assegnato (se presente)" -#: netbox/dcim/forms/bulk_import.py:676 netbox/dcim/forms/model_forms.py:653 +#: netbox/dcim/forms/bulk_import.py:677 netbox/dcim/forms/model_forms.py:653 msgid "Face" msgstr "Viso" -#: netbox/dcim/forms/bulk_import.py:679 +#: netbox/dcim/forms/bulk_import.py:680 msgid "Mounted rack face" msgstr "Faccia del rack montata" -#: netbox/dcim/forms/bulk_import.py:686 +#: netbox/dcim/forms/bulk_import.py:687 msgid "Parent device (for child devices)" msgstr "Dispositivo principale (per dispositivi per bambini)" -#: netbox/dcim/forms/bulk_import.py:689 +#: netbox/dcim/forms/bulk_import.py:690 msgid "Device bay" msgstr "Alloggiamento per dispositivi" -#: netbox/dcim/forms/bulk_import.py:693 +#: netbox/dcim/forms/bulk_import.py:694 msgid "Device bay in which this device is installed (for child devices)" msgstr "" "Alloggiamento del dispositivo in cui è installato questo dispositivo (per " "dispositivi per bambini)" -#: netbox/dcim/forms/bulk_import.py:766 +#: netbox/dcim/forms/bulk_import.py:767 msgid "The device in which this module is installed" msgstr "Il dispositivo in cui è installato questo modulo" -#: netbox/dcim/forms/bulk_import.py:769 netbox/dcim/forms/model_forms.py:801 +#: netbox/dcim/forms/bulk_import.py:770 netbox/dcim/forms/model_forms.py:801 msgid "Module bay" msgstr "alloggiamento per moduli" -#: netbox/dcim/forms/bulk_import.py:772 +#: netbox/dcim/forms/bulk_import.py:773 msgid "The module bay in which this module is installed" msgstr "L'alloggiamento del modulo in cui è installato questo modulo" -#: netbox/dcim/forms/bulk_import.py:778 +#: netbox/dcim/forms/bulk_import.py:779 msgid "The type of module" msgstr "Il tipo di modulo" -#: netbox/dcim/forms/bulk_import.py:788 +#: netbox/dcim/forms/bulk_import.py:789 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" @@ -5131,88 +5131,88 @@ msgstr "" "Compila automaticamente i componenti associati a questo tipo di modulo " "(abilitato per impostazione predefinita)" -#: netbox/dcim/forms/bulk_import.py:832 netbox/dcim/forms/bulk_import.py:858 -#: netbox/dcim/forms/bulk_import.py:884 +#: netbox/dcim/forms/bulk_import.py:833 netbox/dcim/forms/bulk_import.py:859 +#: netbox/dcim/forms/bulk_import.py:885 msgid "Port type" msgstr "Tipo di porta" -#: netbox/dcim/forms/bulk_import.py:840 netbox/dcim/forms/bulk_import.py:866 +#: netbox/dcim/forms/bulk_import.py:841 netbox/dcim/forms/bulk_import.py:867 msgid "Port speed in bps" msgstr "Velocità della porta in bps" -#: netbox/dcim/forms/bulk_import.py:905 +#: netbox/dcim/forms/bulk_import.py:906 msgid "Outlet type" msgstr "Tipo di presa" -#: netbox/dcim/forms/bulk_import.py:912 +#: netbox/dcim/forms/bulk_import.py:913 msgid "Local power port which feeds this outlet" msgstr "Porta di alimentazione locale che alimenta questa presa" -#: netbox/dcim/forms/bulk_import.py:918 +#: netbox/dcim/forms/bulk_import.py:919 msgid "Electrical phase (for three-phase circuits)" msgstr "Fase elettrica (per circuiti trifase)" -#: netbox/dcim/forms/bulk_import.py:962 netbox/dcim/forms/model_forms.py:1547 +#: netbox/dcim/forms/bulk_import.py:963 netbox/dcim/forms/model_forms.py:1547 #: netbox/virtualization/forms/bulk_import.py:195 #: netbox/virtualization/forms/model_forms.py:400 msgid "Parent interface" msgstr "Interfaccia principale" -#: netbox/dcim/forms/bulk_import.py:969 netbox/dcim/forms/model_forms.py:1555 +#: netbox/dcim/forms/bulk_import.py:970 netbox/dcim/forms/model_forms.py:1555 #: netbox/virtualization/forms/bulk_import.py:202 #: netbox/virtualization/forms/model_forms.py:408 msgid "Bridged interface" msgstr "Interfaccia con ponte" -#: netbox/dcim/forms/bulk_import.py:972 +#: netbox/dcim/forms/bulk_import.py:973 msgid "Lag" msgstr "Ritardo" -#: netbox/dcim/forms/bulk_import.py:976 +#: netbox/dcim/forms/bulk_import.py:977 msgid "Parent LAG interface" msgstr "Interfaccia LAG principale" -#: netbox/dcim/forms/bulk_import.py:979 +#: netbox/dcim/forms/bulk_import.py:980 msgid "Vdcs" msgstr "Vdc" -#: netbox/dcim/forms/bulk_import.py:984 +#: netbox/dcim/forms/bulk_import.py:985 msgid "VDC names separated by commas, encased with double quotes. Example:" msgstr "" "Nomi VDC separati da virgole, racchiusi tra virgolette doppie. Esempio:" -#: netbox/dcim/forms/bulk_import.py:990 +#: netbox/dcim/forms/bulk_import.py:991 msgid "Physical medium" msgstr "Supporto fisico" -#: netbox/dcim/forms/bulk_import.py:993 netbox/dcim/forms/filtersets.py:1682 +#: netbox/dcim/forms/bulk_import.py:994 netbox/dcim/forms/filtersets.py:1682 msgid "Duplex" msgstr "Duplex" -#: netbox/dcim/forms/bulk_import.py:998 +#: netbox/dcim/forms/bulk_import.py:999 msgid "Poe mode" msgstr "modalità Poe" -#: netbox/dcim/forms/bulk_import.py:1004 +#: netbox/dcim/forms/bulk_import.py:1005 msgid "Poe type" msgstr "Tipo Poe" -#: netbox/dcim/forms/bulk_import.py:1013 +#: netbox/dcim/forms/bulk_import.py:1014 #: netbox/virtualization/forms/bulk_import.py:208 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "Modalità operativa IEEE 802.1Q (per interfacce L2)" -#: netbox/dcim/forms/bulk_import.py:1020 +#: netbox/dcim/forms/bulk_import.py:1021 #: netbox/virtualization/forms/bulk_import.py:215 msgid "Filter VLANs available for assignment by group" msgstr "Filtra le VLAN disponibili per l'assegnazione per gruppo" -#: netbox/dcim/forms/bulk_import.py:1027 +#: netbox/dcim/forms/bulk_import.py:1028 #: netbox/virtualization/forms/bulk_import.py:222 msgid "Assigned untagged VLAN ID (filtered by VLAN group)" msgstr "ID VLAN assegnato senza tag (filtrato per gruppo VLAN)" -#: netbox/dcim/forms/bulk_import.py:1036 +#: netbox/dcim/forms/bulk_import.py:1037 #: netbox/virtualization/forms/bulk_import.py:231 msgid "" "Assigned tagged VLAN IDs separated by commas, encased with double quotes " @@ -5221,12 +5221,12 @@ msgstr "" "ID VLAN contrassegnati con tag separati da virgole, racchiusi tra virgolette" " doppie (filtrati per gruppo VLAN). Esempio:" -#: netbox/dcim/forms/bulk_import.py:1047 +#: netbox/dcim/forms/bulk_import.py:1048 #: netbox/virtualization/forms/bulk_import.py:242 msgid "Assigned Q-in-Q Service VLAN ID (filtered by VLAN group)" msgstr "ID VLAN del servizio Q-in-Q assegnato (filtrato per gruppo VLAN)" -#: netbox/dcim/forms/bulk_import.py:1054 netbox/ipam/forms/bulk_import.py:174 +#: netbox/dcim/forms/bulk_import.py:1055 netbox/ipam/forms/bulk_import.py:174 #: netbox/ipam/forms/bulk_import.py:259 netbox/ipam/forms/bulk_import.py:295 #: netbox/ipam/forms/filtersets.py:230 netbox/ipam/forms/filtersets.py:314 #: netbox/ipam/forms/filtersets.py:383 @@ -5234,79 +5234,115 @@ msgstr "ID VLAN del servizio Q-in-Q assegnato (filtrato per gruppo VLAN)" msgid "Assigned VRF" msgstr "VRF assegnato" -#: netbox/dcim/forms/bulk_import.py:1057 +#: netbox/dcim/forms/bulk_import.py:1058 msgid "Rf role" msgstr "Ruolo Rf" -#: netbox/dcim/forms/bulk_import.py:1060 +#: netbox/dcim/forms/bulk_import.py:1061 msgid "Wireless role (AP/station)" msgstr "Ruolo wireless (AP/stazione)" -#: netbox/dcim/forms/bulk_import.py:1103 +#: netbox/dcim/forms/bulk_import.py:1104 #, python-brace-format msgid "VDC {vdc} is not assigned to device {device}" msgstr "VDC {vdc} non è assegnato al dispositivo {device}" -#: netbox/dcim/forms/bulk_import.py:1119 netbox/dcim/forms/bulk_import.py:1137 -#: netbox/dcim/forms/bulk_import.py:1518 +#: netbox/dcim/forms/bulk_import.py:1120 netbox/dcim/forms/bulk_import.py:1225 +#: netbox/dcim/forms/bulk_import.py:1606 msgid "Physical medium classification" msgstr "Classificazione del mezzo fisico" -#: netbox/dcim/forms/bulk_import.py:1173 +#: netbox/dcim/forms/bulk_import.py:1123 netbox/dcim/forms/model_forms.py:1846 +#: netbox/dcim/forms/object_import.py:145 +msgid "Rear port" +msgstr "Porta posteriore" + +#: netbox/dcim/forms/bulk_import.py:1126 +msgid "Corresponding rear port (mapped to the front port's first position)" +msgstr "" +"Porta posteriore corrispondente (mappata sulla prima posizione della porta " +"anteriore)" + +#: netbox/dcim/forms/bulk_import.py:1129 +msgid "Rear port position" +msgstr "Posizione della porta posteriore" + +#: netbox/dcim/forms/bulk_import.py:1131 +msgid "Mapped position on the corresponding rear port (defaults to 1)" +msgstr "" +"Posizione mappata sulla porta posteriore corrispondente (il valore " +"predefinito è 1)" + +#: netbox/dcim/forms/bulk_import.py:1175 netbox/dcim/models/base.py:59 +#, python-brace-format +msgid "" +"Invalid rear port position ({rear_port_position}): Rear port {name} has only" +" {positions} positions." +msgstr "" +"Posizione della porta posteriore non valida ({rear_port_position}): Porta " +"posteriore {name} ha solo {positions} posizioni." + +#: netbox/dcim/forms/bulk_import.py:1193 +#, python-brace-format +msgid "Rear port {name} position {rear_port_position} is already occupied." +msgstr "" +"Porta posteriore {name} posizione {rear_port_position} è già occupato." + +#: netbox/dcim/forms/bulk_import.py:1261 msgid "Installed device" msgstr "Dispositivo installato" -#: netbox/dcim/forms/bulk_import.py:1177 +#: netbox/dcim/forms/bulk_import.py:1265 msgid "Child device installed within this bay" msgstr "" "Dispositivo per bambini installato all'interno di questo alloggiamento" -#: netbox/dcim/forms/bulk_import.py:1179 +#: netbox/dcim/forms/bulk_import.py:1267 msgid "Child device not found." msgstr "Dispositivo secondario non trovato." -#: netbox/dcim/forms/bulk_import.py:1243 +#: netbox/dcim/forms/bulk_import.py:1331 msgid "Parent inventory item" msgstr "Articolo di inventario principale" -#: netbox/dcim/forms/bulk_import.py:1246 +#: netbox/dcim/forms/bulk_import.py:1334 msgid "Component type" msgstr "Tipo di componente" -#: netbox/dcim/forms/bulk_import.py:1250 +#: netbox/dcim/forms/bulk_import.py:1338 msgid "Component Type" msgstr "Tipo di componente" -#: netbox/dcim/forms/bulk_import.py:1253 +#: netbox/dcim/forms/bulk_import.py:1341 msgid "Component name" msgstr "Nome del componente" -#: netbox/dcim/forms/bulk_import.py:1255 +#: netbox/dcim/forms/bulk_import.py:1343 msgid "Component Name" msgstr "Nome del componente" -#: netbox/dcim/forms/bulk_import.py:1298 netbox/dcim/forms/bulk_import.py:1316 +#: netbox/dcim/forms/bulk_import.py:1386 netbox/dcim/forms/bulk_import.py:1404 msgid "Component name must be specified when component type is specified" msgstr "" "Il nome del componente deve essere specificato quando viene specificato il " "tipo di componente" -#: netbox/dcim/forms/bulk_import.py:1308 +#: netbox/dcim/forms/bulk_import.py:1396 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "Componente non trovato: {device} - {component_name}" -#: netbox/dcim/forms/bulk_import.py:1321 +#: netbox/dcim/forms/bulk_import.py:1409 msgid "Component type must be specified when component name is specified" msgstr "" "Il tipo di componente deve essere specificato quando viene specificato il " "nome del componente" -#: netbox/dcim/forms/bulk_import.py:1348 netbox/ipam/forms/bulk_import.py:320 +#: netbox/dcim/forms/bulk_import.py:1436 netbox/ipam/forms/bulk_import.py:320 msgid "Parent device of assigned interface (if any)" msgstr "Dispositivo principale dell'interfaccia assegnata (se presente)" -#: netbox/dcim/forms/bulk_import.py:1351 netbox/ipam/forms/bulk_import.py:323 +#: netbox/dcim/forms/bulk_import.py:1439 netbox/ipam/forms/bulk_import.py:323 #: netbox/virtualization/filtersets.py:354 #: netbox/virtualization/filtersets.py:412 #: netbox/virtualization/forms/bulk_edit.py:219 @@ -5320,136 +5356,136 @@ msgstr "Dispositivo principale dell'interfaccia assegnata (se presente)" msgid "Virtual machine" msgstr "Macchina virtuale" -#: netbox/dcim/forms/bulk_import.py:1355 netbox/ipam/forms/bulk_import.py:327 +#: netbox/dcim/forms/bulk_import.py:1443 netbox/ipam/forms/bulk_import.py:327 msgid "Parent VM of assigned interface (if any)" msgstr "VM principale dell'interfaccia assegnata (se presente)" -#: netbox/dcim/forms/bulk_import.py:1362 netbox/ipam/filtersets.py:1111 +#: netbox/dcim/forms/bulk_import.py:1450 netbox/ipam/filtersets.py:1111 #: netbox/ipam/forms/bulk_import.py:334 msgid "Assigned interface" msgstr "Interfaccia assegnata" -#: netbox/dcim/forms/bulk_import.py:1366 +#: netbox/dcim/forms/bulk_import.py:1454 msgid "Make this the primary MAC address for the assigned interface" msgstr "Imposta questo indirizzo MAC primario per l'interfaccia assegnata" -#: netbox/dcim/forms/bulk_import.py:1404 +#: netbox/dcim/forms/bulk_import.py:1492 msgid "Must specify the parent device or VM when assigning an interface" msgstr "" "È necessario specificare il dispositivo o la VM principale quando si assegna" " un'interfaccia" -#: netbox/dcim/forms/bulk_import.py:1437 +#: netbox/dcim/forms/bulk_import.py:1525 msgid "Side A site" msgstr "Sito Lato A" -#: netbox/dcim/forms/bulk_import.py:1441 +#: netbox/dcim/forms/bulk_import.py:1529 #: netbox/wireless/forms/bulk_import.py:93 msgid "Site of parent device A (if any)" msgstr "Sito del dispositivo principale A (se presente)" -#: netbox/dcim/forms/bulk_import.py:1444 +#: netbox/dcim/forms/bulk_import.py:1532 msgid "Side A device" msgstr "Dispositivo lato A" -#: netbox/dcim/forms/bulk_import.py:1448 netbox/dcim/forms/bulk_import.py:1481 +#: netbox/dcim/forms/bulk_import.py:1536 netbox/dcim/forms/bulk_import.py:1569 msgid "Device name (for device component terminations)" msgstr "" "Nome del dispositivo (per le terminazioni dei componenti del dispositivo)" -#: netbox/dcim/forms/bulk_import.py:1451 +#: netbox/dcim/forms/bulk_import.py:1539 msgid "Side A power panel" msgstr "Pannello di alimentazione Lato A" -#: netbox/dcim/forms/bulk_import.py:1455 netbox/dcim/forms/bulk_import.py:1488 +#: netbox/dcim/forms/bulk_import.py:1543 netbox/dcim/forms/bulk_import.py:1576 msgid "Power panel name (for power feed terminations)" msgstr "" "Nome del pannello di alimentazione (per le terminazioni di alimentazione)" -#: netbox/dcim/forms/bulk_import.py:1458 +#: netbox/dcim/forms/bulk_import.py:1546 msgid "Side A type" msgstr "Tipo Lato A" -#: netbox/dcim/forms/bulk_import.py:1464 +#: netbox/dcim/forms/bulk_import.py:1552 msgid "Side A name" msgstr "Nome del lato A" -#: netbox/dcim/forms/bulk_import.py:1465 netbox/dcim/forms/bulk_import.py:1498 +#: netbox/dcim/forms/bulk_import.py:1553 netbox/dcim/forms/bulk_import.py:1586 msgid "Termination name" msgstr "Nome della cessazione" -#: netbox/dcim/forms/bulk_import.py:1470 +#: netbox/dcim/forms/bulk_import.py:1558 msgid "Side B site" msgstr "Sito Lato B" -#: netbox/dcim/forms/bulk_import.py:1474 +#: netbox/dcim/forms/bulk_import.py:1562 #: netbox/wireless/forms/bulk_import.py:114 msgid "Site of parent device B (if any)" msgstr "Sito del dispositivo principale B (se presente)" -#: netbox/dcim/forms/bulk_import.py:1477 +#: netbox/dcim/forms/bulk_import.py:1565 msgid "Side B device" msgstr "Dispositivo lato B" -#: netbox/dcim/forms/bulk_import.py:1484 +#: netbox/dcim/forms/bulk_import.py:1572 msgid "Side B power panel" msgstr "Pannello di alimentazione Lato B" -#: netbox/dcim/forms/bulk_import.py:1491 +#: netbox/dcim/forms/bulk_import.py:1579 msgid "Side B type" msgstr "Tipo B laterale" -#: netbox/dcim/forms/bulk_import.py:1497 +#: netbox/dcim/forms/bulk_import.py:1585 msgid "Side B name" msgstr "Nome lato B" -#: netbox/dcim/forms/bulk_import.py:1506 +#: netbox/dcim/forms/bulk_import.py:1594 #: netbox/templates/dcim/panels/connection.html:60 #: netbox/wireless/forms/bulk_import.py:133 msgid "Connection status" msgstr "Stato della connessione" -#: netbox/dcim/forms/bulk_import.py:1512 +#: netbox/dcim/forms/bulk_import.py:1600 msgid "Cable connection profile" msgstr "Profilo di collegamento via cavo" -#: netbox/dcim/forms/bulk_import.py:1532 +#: netbox/dcim/forms/bulk_import.py:1620 msgid "Cable bundle name" msgstr "Nome del pacchetto di cavi" -#: netbox/dcim/forms/bulk_import.py:1544 +#: netbox/dcim/forms/bulk_import.py:1632 msgid "Color name (e.g. \"Red\") or hex code (e.g. \"f44336\")" msgstr "" "Nome del colore (ad esempio «Rosso») o codice esadecimale (ad esempio " "«f44336\")" -#: netbox/dcim/forms/bulk_import.py:1587 +#: netbox/dcim/forms/bulk_import.py:1675 #, python-brace-format msgid "Invalid side designation: {side}" msgstr "Designazione laterale non valida: {side}" -#: netbox/dcim/forms/bulk_import.py:1606 +#: netbox/dcim/forms/bulk_import.py:1694 #, python-brace-format msgid "" "Side {side_upper}: {power_panel} {termination_object} is already connected" msgstr "Lato {side_upper}: {power_panel} {termination_object} è già connesso" -#: netbox/dcim/forms/bulk_import.py:1612 +#: netbox/dcim/forms/bulk_import.py:1700 #, python-brace-format msgid "{side_upper} side termination not found: {power_panel} {name}" msgstr "{side_upper} terminazione laterale non trovata: {power_panel} {name}" -#: netbox/dcim/forms/bulk_import.py:1630 +#: netbox/dcim/forms/bulk_import.py:1718 #, python-brace-format msgid "Side {side_upper}: {device} {termination_object} is already connected" msgstr "Lato {side_upper}: {device} {termination_object} è già connesso" -#: netbox/dcim/forms/bulk_import.py:1636 +#: netbox/dcim/forms/bulk_import.py:1724 #, python-brace-format msgid "{side_upper} side termination not found: {device} {name}" msgstr "{side_upper} terminazione laterale non trovata: {device} {name}" -#: netbox/dcim/forms/bulk_import.py:1658 +#: netbox/dcim/forms/bulk_import.py:1746 #, python-brace-format msgid "" "{color} did not match any used color name and was longer than six " @@ -5458,53 +5494,53 @@ msgstr "" "{color} non corrispondeva a nessun nome di colore usato ed era più lungo di " "sei caratteri: esadecimale non valido." -#: netbox/dcim/forms/bulk_import.py:1683 netbox/dcim/forms/model_forms.py:962 +#: netbox/dcim/forms/bulk_import.py:1771 netbox/dcim/forms/model_forms.py:962 #: netbox/dcim/tables/devices.py:1154 #: netbox/templates/dcim/panels/virtual_chassis_members.html:10 msgid "Master" msgstr "Maestro" -#: netbox/dcim/forms/bulk_import.py:1687 +#: netbox/dcim/forms/bulk_import.py:1775 msgid "Master device" msgstr "Dispositivo master" -#: netbox/dcim/forms/bulk_import.py:1704 +#: netbox/dcim/forms/bulk_import.py:1792 msgid "Name of parent site" msgstr "Nome del sito principale" -#: netbox/dcim/forms/bulk_import.py:1738 +#: netbox/dcim/forms/bulk_import.py:1826 msgid "Upstream power panel" msgstr "Pannello di alimentazione upstream" -#: netbox/dcim/forms/bulk_import.py:1768 +#: netbox/dcim/forms/bulk_import.py:1856 msgid "Primary or redundant" msgstr "Primario o ridondante" -#: netbox/dcim/forms/bulk_import.py:1773 +#: netbox/dcim/forms/bulk_import.py:1861 msgid "Supply type (AC/DC)" msgstr "Tipo di alimentazione (AC/DC)" -#: netbox/dcim/forms/bulk_import.py:1778 +#: netbox/dcim/forms/bulk_import.py:1866 msgid "Single or three-phase" msgstr "Monofase o trifase" -#: netbox/dcim/forms/bulk_import.py:1828 netbox/dcim/forms/model_forms.py:1939 +#: netbox/dcim/forms/bulk_import.py:1916 netbox/dcim/forms/model_forms.py:1939 #: netbox/dcim/ui/panels.py:111 netbox/dcim/ui/panels.py:371 #: netbox/virtualization/ui/panels.py:55 msgid "Primary IPv4" msgstr "IPv4 primario" -#: netbox/dcim/forms/bulk_import.py:1832 +#: netbox/dcim/forms/bulk_import.py:1920 msgid "IPv4 address with mask, e.g. 1.2.3.4/24" msgstr "Indirizzo IPv4 con maschera, ad esempio 1.2.3.4/24" -#: netbox/dcim/forms/bulk_import.py:1835 netbox/dcim/forms/model_forms.py:1948 +#: netbox/dcim/forms/bulk_import.py:1923 netbox/dcim/forms/model_forms.py:1948 #: netbox/dcim/ui/panels.py:116 netbox/dcim/ui/panels.py:376 #: netbox/virtualization/ui/panels.py:60 msgid "Primary IPv6" msgstr "IPv6 primario" -#: netbox/dcim/forms/bulk_import.py:1839 +#: netbox/dcim/forms/bulk_import.py:1927 msgid "IPv6 address with prefix length, e.g. 2001:db8::1/64" msgstr "Indirizzo IPv6 con lunghezza del prefisso, ad esempio 2001:db8: :1/64" @@ -5998,11 +6034,6 @@ msgstr "Porta anteriore" msgid "Power outlet" msgstr "Presa di corrente" -#: netbox/dcim/forms/model_forms.py:1846 -#: netbox/dcim/forms/object_import.py:145 -msgid "Rear port" -msgstr "Porta posteriore" - #: netbox/dcim/forms/model_forms.py:1852 msgid "Inventory Item" msgstr "Articolo di inventario" @@ -6054,7 +6085,7 @@ msgstr "" #: netbox/dcim/forms/object_create.py:312 netbox/dcim/tables/devices.py:1160 #: netbox/ipam/tables/fhrp.py:31 netbox/ipam/ui/panels.py:185 -#: netbox/ipam/views.py:1589 netbox/templates/dcim/virtualchassis_edit.html:59 +#: netbox/ipam/views.py:1594 netbox/templates/dcim/virtualchassis_edit.html:59 #: netbox/users/views.py:375 msgid "Members" msgstr "Membri" @@ -6079,15 +6110,6 @@ msgstr "Dispositivi per i membri" msgid "A position must be specified for the first VC member." msgstr "È necessario specificare una posizione per il primo membro VC." -#: netbox/dcim/models/base.py:59 -#, python-brace-format -msgid "" -"Invalid rear port position ({rear_port_position}): Rear port {name} has only" -" {positions} positions." -msgstr "" -"Posizione della porta posteriore non valida ({rear_port_position}): Porta " -"posteriore {name} ha solo {positions} posizioni." - #: netbox/dcim/models/cables.py:62 msgid "cable bundle" msgstr "fascio di cavi" @@ -8063,8 +8085,8 @@ msgstr "Pareggio assegnato (W)" #: netbox/dcim/tables/devices.py:597 netbox/dcim/views.py:3402 #: netbox/ipam/forms/model_forms.py:834 netbox/ipam/tables/fhrp.py:28 -#: netbox/ipam/ui/panels.py:252 netbox/ipam/views.py:922 -#: netbox/ipam/views.py:1047 netbox/netbox/navigation/menu.py:175 +#: netbox/ipam/ui/panels.py:252 netbox/ipam/views.py:924 +#: netbox/ipam/views.py:1052 netbox/netbox/navigation/menu.py:175 #: netbox/netbox/navigation/menu.py:177 netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "Indirizzi IP" @@ -8494,7 +8516,7 @@ msgstr "Contesti dei dispositivi virtuali" #: netbox/dcim/views.py:3414 netbox/ipam/forms/filtersets.py:469 #: netbox/ipam/models/vlans.py:308 netbox/ipam/tables/ip.py:121 -#: netbox/ipam/tables/vlans.py:52 netbox/ipam/views.py:1381 +#: netbox/ipam/tables/vlans.py:52 netbox/ipam/views.py:1386 #: netbox/netbox/navigation/menu.py:210 netbox/netbox/navigation/menu.py:212 msgid "VLANs" msgstr "VLAN" @@ -11497,11 +11519,11 @@ msgstr "Politica" msgid "Ports" msgstr "Porte" -#: netbox/ipam/forms/bulk_import.py:55 netbox/ipam/views.py:72 +#: netbox/ipam/forms/bulk_import.py:55 netbox/ipam/views.py:73 msgid "Import route targets" msgstr "Importa gli obiettivi del percorso" -#: netbox/ipam/forms/bulk_import.py:61 netbox/ipam/views.py:75 +#: netbox/ipam/forms/bulk_import.py:61 netbox/ipam/views.py:76 msgid "Export route targets" msgstr "Obiettivi del percorso di esportazione" @@ -12371,8 +12393,8 @@ msgid "Added" msgstr "Aggiunto" #: netbox/ipam/tables/ip.py:76 netbox/ipam/tables/ip.py:111 -#: netbox/ipam/tables/vlans.py:125 netbox/ipam/views.py:621 -#: netbox/ipam/views.py:1731 netbox/netbox/navigation/menu.py:182 +#: netbox/ipam/tables/vlans.py:125 netbox/ipam/views.py:623 +#: netbox/ipam/views.py:1736 netbox/netbox/navigation/menu.py:182 #: netbox/netbox/navigation/menu.py:184 msgid "Prefixes" msgstr "Prefissi" @@ -12577,77 +12599,77 @@ msgstr "" "Nei nomi DNS sono consentiti solo caratteri alfanumerici, asterischi, " "trattini, punti e trattini bassi" -#: netbox/ipam/views.py:106 netbox/ipam/views.py:1761 +#: netbox/ipam/views.py:107 netbox/ipam/views.py:1766 msgid "Device Interfaces" msgstr "Interfacce dei dispositivi" -#: netbox/ipam/views.py:111 netbox/ipam/views.py:1779 +#: netbox/ipam/views.py:112 netbox/ipam/views.py:1784 msgid "VM Interfaces" msgstr "Interfacce VM" -#: netbox/ipam/views.py:196 +#: netbox/ipam/views.py:197 msgid "Importing VRFs" msgstr "Importazione di VRF" -#: netbox/ipam/views.py:203 +#: netbox/ipam/views.py:204 msgid "Exporting VRFs" msgstr "Esportazione di VRF" -#: netbox/ipam/views.py:212 +#: netbox/ipam/views.py:213 msgid "Importing L2VPNs" msgstr "Importazione di VPN L2" -#: netbox/ipam/views.py:219 +#: netbox/ipam/views.py:220 msgid "Exporting L2VPNs" msgstr "Esportazione di VPN L2" -#: netbox/ipam/views.py:798 +#: netbox/ipam/views.py:800 msgid "Duplicate prefixes" msgstr "Prefissi duplicati" -#: netbox/ipam/views.py:799 netbox/ipam/views.py:1012 -#: netbox/ipam/views.py:1120 +#: netbox/ipam/views.py:801 netbox/ipam/views.py:1017 +#: netbox/ipam/views.py:1125 msgid "Parent prefixes" msgstr "Prefissi principali" -#: netbox/ipam/views.py:851 +#: netbox/ipam/views.py:853 msgid "Child Prefixes" msgstr "Prefissi per bambini" -#: netbox/ipam/views.py:895 +#: netbox/ipam/views.py:897 msgid "Child Ranges" msgstr "Gamme per bambini" -#: netbox/ipam/views.py:1121 +#: netbox/ipam/views.py:1126 msgid "Duplicate IPs" msgstr "IP duplicati" -#: netbox/ipam/views.py:1125 +#: netbox/ipam/views.py:1130 msgid "Application services" msgstr "Servizi applicativi" -#: netbox/ipam/views.py:1291 +#: netbox/ipam/views.py:1296 msgid "Related IPs" msgstr "IP correlati" -#: netbox/ipam/views.py:1432 +#: netbox/ipam/views.py:1437 msgid "VLAN translation rules" msgstr "Regole di traduzione VLAN" -#: netbox/ipam/views.py:1438 +#: netbox/ipam/views.py:1443 msgid "Add Rule" msgstr "Aggiungi regola" -#: netbox/ipam/views.py:1580 +#: netbox/ipam/views.py:1585 msgid "Virtual IP addresses" msgstr "Indirizzi IP virtuali" -#: netbox/ipam/views.py:1585 netbox/templates/ipam/iprange/ip_addresses.html:8 +#: netbox/ipam/views.py:1590 netbox/templates/ipam/iprange/ip_addresses.html:8 #: netbox/templates/ipam/prefix/ip_addresses.html:7 msgid "Add IP Address" msgstr "Aggiungi indirizzo IP" -#: netbox/ipam/views.py:1744 +#: netbox/ipam/views.py:1749 msgid "Add a Prefix" msgstr "Aggiungere un prefisso" @@ -14083,7 +14105,7 @@ msgstr "Dati sincronizzati per {object_type} {object}." msgid "Synced {count} {object_type}" msgstr "Sincronizzato {count} {object_type}" -#: netbox/netbox/views/generic/object_views.py:118 +#: netbox/netbox/views/generic/object_views.py:120 #, python-brace-format msgid "{class_name} must implement get_children()" msgstr "{class_name} deve implementare get_children ()" @@ -16062,7 +16084,7 @@ msgstr "Per pagina" msgid "Data is out of sync with upstream file" msgstr "I dati non sono sincronizzati con il file upstream" -#: netbox/templates/inc/table_controls_htmx.html:11 +#: netbox/templates/inc/table_controls_htmx.html:10 #: netbox/templates/inc/table_controls_htmx.html:12 msgid "Quick search" msgstr "Ricerca rapida" diff --git a/netbox/translations/ja/LC_MESSAGES/django.mo b/netbox/translations/ja/LC_MESSAGES/django.mo index 0d93e7e133101ffca42e9d7c8cbc06c3ad15f3dd..62f2549d86a183c2f3bf4757e3cef99e5f5d5ea5 100644 GIT binary patch delta 77808 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 Hck%xNf-?RY delta 77328 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 diff --git a/netbox/translations/ko/LC_MESSAGES/django.po b/netbox/translations/ko/LC_MESSAGES/django.po index 38c1ea976..65e4040e1 100644 --- a/netbox/translations/ko/LC_MESSAGES/django.po +++ b/netbox/translations/ko/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-24 05:56+0000\n" +"POT-Creation-Date: 2026-07-30 05:52+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" "Last-Translator: Jeremy Stretch, 2026\n" "Language-Team: Korean (https://app.transifex.com/netbox-community/teams/178115/ko/)\n" @@ -175,10 +175,10 @@ msgstr "사이트 그룹 (slug)" #: netbox/circuits/forms/filtersets.py:249 #: netbox/circuits/tables/circuits.py:125 netbox/dcim/forms/bulk_edit.py:176 #: netbox/dcim/forms/bulk_edit.py:339 netbox/dcim/forms/bulk_edit.py:696 -#: netbox/dcim/forms/bulk_edit.py:906 netbox/dcim/forms/bulk_import.py:148 -#: netbox/dcim/forms/bulk_import.py:256 netbox/dcim/forms/bulk_import.py:365 -#: netbox/dcim/forms/bulk_import.py:656 netbox/dcim/forms/bulk_import.py:1701 -#: netbox/dcim/forms/bulk_import.py:1729 netbox/dcim/forms/filtersets.py:108 +#: netbox/dcim/forms/bulk_edit.py:906 netbox/dcim/forms/bulk_import.py:149 +#: netbox/dcim/forms/bulk_import.py:257 netbox/dcim/forms/bulk_import.py:366 +#: netbox/dcim/forms/bulk_import.py:657 netbox/dcim/forms/bulk_import.py:1789 +#: netbox/dcim/forms/bulk_import.py:1817 netbox/dcim/forms/filtersets.py:108 #: netbox/dcim/forms/filtersets.py:258 netbox/dcim/forms/filtersets.py:390 #: netbox/dcim/forms/filtersets.py:500 netbox/dcim/forms/filtersets.py:895 #: netbox/dcim/forms/filtersets.py:1117 netbox/dcim/forms/filtersets.py:1198 @@ -305,7 +305,7 @@ msgstr "종단 A (ID)" #: netbox/extras/filtersets.py:503 netbox/extras/filtersets.py:562 #: netbox/extras/filtersets.py:623 netbox/extras/filtersets.py:662 #: netbox/extras/filtersets.py:695 netbox/extras/filtersets.py:869 -#: netbox/ipam/forms/model_forms.py:523 netbox/netbox/filtersets.py:319 +#: netbox/ipam/forms/model_forms.py:523 netbox/netbox/filtersets.py:324 #: netbox/netbox/forms/filtersets.py:32 netbox/netbox/forms/search.py:20 #: netbox/templates/htmx/object_selector.html:28 #: netbox/templates/inc/filter_list.html:43 @@ -406,7 +406,7 @@ msgstr "인터페이스 (ID)" #: netbox/dcim/forms/bulk_edit.py:142 netbox/dcim/forms/filtersets.py:227 #: netbox/dcim/forms/model_forms.py:144 netbox/dcim/tables/sites.py:74 #: netbox/ipam/models/asns.py:164 netbox/ipam/tables/asn.py:37 -#: netbox/ipam/tables/ip.py:126 netbox/ipam/views.py:383 +#: netbox/ipam/tables/ip.py:126 netbox/ipam/views.py:384 #: netbox/netbox/navigation/menu.py:189 netbox/netbox/navigation/menu.py:192 msgid "ASNs" msgstr "ASN" @@ -454,7 +454,7 @@ msgstr "서비스 ID" #: netbox/dcim/forms/bulk_edit.py:628 netbox/dcim/forms/bulk_edit.py:849 #: netbox/dcim/forms/bulk_edit.py:1103 netbox/dcim/forms/bulk_edit.py:1202 #: netbox/dcim/forms/bulk_edit.py:1229 netbox/dcim/forms/bulk_edit.py:1773 -#: netbox/dcim/forms/bulk_import.py:1541 netbox/dcim/forms/filtersets.py:1283 +#: netbox/dcim/forms/bulk_import.py:1629 netbox/dcim/forms/filtersets.py:1283 #: netbox/dcim/forms/filtersets.py:1613 netbox/dcim/forms/filtersets.py:1829 #: netbox/dcim/forms/filtersets.py:1848 netbox/dcim/forms/filtersets.py:1872 #: netbox/dcim/forms/filtersets.py:1891 netbox/dcim/tables/devices.py:804 @@ -483,12 +483,12 @@ msgstr "색상" #: netbox/dcim/forms/bulk_edit.py:1033 netbox/dcim/forms/bulk_edit.py:1056 #: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_edit.py:1146 #: netbox/dcim/forms/bulk_edit.py:1197 netbox/dcim/forms/bulk_edit.py:1224 -#: netbox/dcim/forms/bulk_import.py:214 netbox/dcim/forms/bulk_import.py:300 -#: netbox/dcim/forms/bulk_import.py:829 netbox/dcim/forms/bulk_import.py:855 -#: netbox/dcim/forms/bulk_import.py:881 netbox/dcim/forms/bulk_import.py:902 -#: netbox/dcim/forms/bulk_import.py:988 netbox/dcim/forms/bulk_import.py:1117 -#: netbox/dcim/forms/bulk_import.py:1136 netbox/dcim/forms/bulk_import.py:1515 -#: netbox/dcim/forms/bulk_import.py:1766 netbox/dcim/forms/filtersets.py:1155 +#: netbox/dcim/forms/bulk_import.py:215 netbox/dcim/forms/bulk_import.py:301 +#: netbox/dcim/forms/bulk_import.py:830 netbox/dcim/forms/bulk_import.py:856 +#: netbox/dcim/forms/bulk_import.py:882 netbox/dcim/forms/bulk_import.py:903 +#: netbox/dcim/forms/bulk_import.py:989 netbox/dcim/forms/bulk_import.py:1118 +#: netbox/dcim/forms/bulk_import.py:1224 netbox/dcim/forms/bulk_import.py:1603 +#: netbox/dcim/forms/bulk_import.py:1854 netbox/dcim/forms/filtersets.py:1155 #: netbox/dcim/forms/filtersets.py:1268 netbox/dcim/forms/filtersets.py:1401 #: netbox/dcim/forms/filtersets.py:1492 netbox/dcim/forms/filtersets.py:1512 #: netbox/dcim/forms/filtersets.py:1532 netbox/dcim/forms/filtersets.py:1552 @@ -547,11 +547,11 @@ msgstr "프로바이더 계정" #: netbox/dcim/forms/bulk_edit.py:719 netbox/dcim/forms/bulk_edit.py:778 #: netbox/dcim/forms/bulk_edit.py:822 netbox/dcim/forms/bulk_edit.py:942 #: netbox/dcim/forms/bulk_edit.py:1747 netbox/dcim/forms/bulk_edit.py:1791 -#: netbox/dcim/forms/bulk_import.py:105 netbox/dcim/forms/bulk_import.py:164 -#: netbox/dcim/forms/bulk_import.py:281 netbox/dcim/forms/bulk_import.py:390 -#: netbox/dcim/forms/bulk_import.py:621 netbox/dcim/forms/bulk_import.py:781 -#: netbox/dcim/forms/bulk_import.py:1258 netbox/dcim/forms/bulk_import.py:1503 -#: netbox/dcim/forms/bulk_import.py:1761 netbox/dcim/forms/bulk_import.py:1824 +#: netbox/dcim/forms/bulk_import.py:106 netbox/dcim/forms/bulk_import.py:165 +#: netbox/dcim/forms/bulk_import.py:282 netbox/dcim/forms/bulk_import.py:391 +#: netbox/dcim/forms/bulk_import.py:622 netbox/dcim/forms/bulk_import.py:782 +#: netbox/dcim/forms/bulk_import.py:1346 netbox/dcim/forms/bulk_import.py:1591 +#: netbox/dcim/forms/bulk_import.py:1849 netbox/dcim/forms/bulk_import.py:1912 #: netbox/dcim/forms/filtersets.py:210 netbox/dcim/forms/filtersets.py:270 #: netbox/dcim/forms/filtersets.py:413 netbox/dcim/forms/filtersets.py:528 #: netbox/dcim/forms/filtersets.py:941 netbox/dcim/forms/filtersets.py:1064 @@ -610,10 +610,10 @@ msgstr "상태" #: netbox/dcim/forms/bulk_edit.py:195 netbox/dcim/forms/bulk_edit.py:361 #: netbox/dcim/forms/bulk_edit.py:486 netbox/dcim/forms/bulk_edit.py:709 #: netbox/dcim/forms/bulk_edit.py:834 netbox/dcim/forms/bulk_edit.py:1796 -#: netbox/dcim/forms/bulk_import.py:124 netbox/dcim/forms/bulk_import.py:169 -#: netbox/dcim/forms/bulk_import.py:267 netbox/dcim/forms/bulk_import.py:395 -#: netbox/dcim/forms/bulk_import.py:595 netbox/dcim/forms/bulk_import.py:1521 -#: netbox/dcim/forms/bulk_import.py:1817 netbox/dcim/forms/filtersets.py:145 +#: netbox/dcim/forms/bulk_import.py:125 netbox/dcim/forms/bulk_import.py:170 +#: netbox/dcim/forms/bulk_import.py:268 netbox/dcim/forms/bulk_import.py:396 +#: netbox/dcim/forms/bulk_import.py:596 netbox/dcim/forms/bulk_import.py:1609 +#: netbox/dcim/forms/bulk_import.py:1905 netbox/dcim/forms/filtersets.py:145 #: netbox/dcim/forms/filtersets.py:204 netbox/dcim/forms/filtersets.py:237 #: netbox/dcim/forms/filtersets.py:374 netbox/dcim/forms/filtersets.py:459 #: netbox/dcim/forms/filtersets.py:480 netbox/dcim/forms/filtersets.py:863 @@ -704,7 +704,7 @@ msgstr "서비스 매개변수" #: netbox/circuits/forms/filtersets.py:325 #: netbox/circuits/forms/filtersets.py:341 netbox/core/forms/filtersets.py:78 #: netbox/core/forms/filtersets.py:150 netbox/dcim/forms/bulk_edit.py:867 -#: netbox/dcim/forms/bulk_import.py:504 netbox/dcim/forms/filtersets.py:203 +#: netbox/dcim/forms/bulk_import.py:505 netbox/dcim/forms/filtersets.py:203 #: netbox/dcim/forms/filtersets.py:236 netbox/dcim/forms/filtersets.py:1054 #: netbox/dcim/forms/filtersets.py:1207 netbox/dcim/forms/filtersets.py:1219 #: netbox/dcim/forms/filtersets.py:1355 netbox/dcim/forms/filtersets.py:1482 @@ -800,7 +800,7 @@ msgstr "설명" #: netbox/circuits/forms/bulk_edit.py:192 #: netbox/circuits/forms/model_forms.py:198 -#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/bulk_import.py:1494 +#: netbox/dcim/forms/bulk_import.py:1549 netbox/dcim/forms/bulk_import.py:1582 msgid "Termination type" msgstr "종단 유형" @@ -874,7 +874,7 @@ msgstr "프로바이더 네트워크" #: netbox/circuits/forms/filtersets.py:393 #: netbox/circuits/forms/model_forms.py:399 netbox/dcim/forms/bulk_edit.py:372 #: netbox/dcim/forms/bulk_edit.py:1301 netbox/dcim/forms/bulk_edit.py:1737 -#: netbox/dcim/forms/bulk_import.py:286 netbox/dcim/forms/bulk_import.py:1227 +#: netbox/dcim/forms/bulk_import.py:287 netbox/dcim/forms/bulk_import.py:1315 #: netbox/dcim/forms/filtersets.py:421 netbox/dcim/forms/filtersets.py:919 #: netbox/dcim/forms/filtersets.py:1990 netbox/dcim/forms/filtersets.py:2030 #: netbox/dcim/forms/model_forms.py:312 netbox/dcim/forms/model_forms.py:1298 @@ -931,10 +931,10 @@ msgstr "회선 유형" #: netbox/circuits/forms/bulk_import.py:102 #: netbox/circuits/forms/bulk_import.py:228 -#: netbox/dcim/forms/bulk_import.py:107 netbox/dcim/forms/bulk_import.py:166 -#: netbox/dcim/forms/bulk_import.py:283 netbox/dcim/forms/bulk_import.py:392 -#: netbox/dcim/forms/bulk_import.py:623 netbox/dcim/forms/bulk_import.py:783 -#: netbox/dcim/forms/bulk_import.py:1260 netbox/dcim/forms/bulk_import.py:1763 +#: netbox/dcim/forms/bulk_import.py:108 netbox/dcim/forms/bulk_import.py:167 +#: netbox/dcim/forms/bulk_import.py:284 netbox/dcim/forms/bulk_import.py:393 +#: netbox/dcim/forms/bulk_import.py:624 netbox/dcim/forms/bulk_import.py:784 +#: netbox/dcim/forms/bulk_import.py:1348 netbox/dcim/forms/bulk_import.py:1851 #: netbox/ipam/forms/bulk_import.py:207 netbox/ipam/forms/bulk_import.py:271 #: netbox/ipam/forms/bulk_import.py:307 netbox/ipam/forms/bulk_import.py:538 #: netbox/ipam/forms/bulk_import.py:551 @@ -948,10 +948,10 @@ msgstr "운영 상태" #: netbox/circuits/forms/bulk_import.py:115 #: netbox/circuits/forms/bulk_import.py:174 #: netbox/circuits/forms/bulk_import.py:235 -#: netbox/dcim/forms/bulk_import.py:128 netbox/dcim/forms/bulk_import.py:173 -#: netbox/dcim/forms/bulk_import.py:399 netbox/dcim/forms/bulk_import.py:599 -#: netbox/dcim/forms/bulk_import.py:1525 netbox/dcim/forms/bulk_import.py:1758 -#: netbox/dcim/forms/bulk_import.py:1821 netbox/ipam/forms/bulk_import.py:49 +#: netbox/dcim/forms/bulk_import.py:129 netbox/dcim/forms/bulk_import.py:174 +#: netbox/dcim/forms/bulk_import.py:400 netbox/dcim/forms/bulk_import.py:600 +#: netbox/dcim/forms/bulk_import.py:1613 netbox/dcim/forms/bulk_import.py:1846 +#: netbox/dcim/forms/bulk_import.py:1909 netbox/ipam/forms/bulk_import.py:49 #: netbox/ipam/forms/bulk_import.py:78 netbox/ipam/forms/bulk_import.py:106 #: netbox/ipam/forms/bulk_import.py:126 netbox/ipam/forms/bulk_import.py:153 #: netbox/ipam/forms/bulk_import.py:181 netbox/ipam/forms/bulk_import.py:266 @@ -996,7 +996,7 @@ msgstr "운영 역할" #: netbox/circuits/forms/bulk_import.py:258 #: netbox/circuits/forms/model_forms.py:402 #: netbox/circuits/tables/virtual_circuits.py:109 -#: netbox/circuits/ui/panels.py:179 netbox/dcim/forms/bulk_import.py:1358 +#: netbox/circuits/ui/panels.py:179 netbox/dcim/forms/bulk_import.py:1446 #: netbox/dcim/forms/model_forms.py:1372 netbox/dcim/forms/model_forms.py:1641 #: netbox/dcim/forms/model_forms.py:1822 netbox/dcim/forms/model_forms.py:1857 #: netbox/dcim/forms/model_forms.py:1982 netbox/dcim/tables/connections.py:66 @@ -1024,9 +1024,9 @@ msgstr "인터페이스" #: netbox/circuits/tables/circuits.py:140 netbox/dcim/forms/bulk_edit.py:348 #: netbox/dcim/forms/bulk_edit.py:462 netbox/dcim/forms/bulk_edit.py:701 #: netbox/dcim/forms/bulk_edit.py:750 netbox/dcim/forms/bulk_edit.py:915 -#: netbox/dcim/forms/bulk_import.py:261 netbox/dcim/forms/bulk_import.py:371 -#: netbox/dcim/forms/bulk_import.py:662 netbox/dcim/forms/bulk_import.py:1707 -#: netbox/dcim/forms/bulk_import.py:1741 netbox/dcim/forms/filtersets.py:116 +#: netbox/dcim/forms/bulk_import.py:262 netbox/dcim/forms/bulk_import.py:372 +#: netbox/dcim/forms/bulk_import.py:663 netbox/dcim/forms/bulk_import.py:1795 +#: netbox/dcim/forms/bulk_import.py:1829 netbox/dcim/forms/filtersets.py:116 #: netbox/dcim/forms/filtersets.py:369 netbox/dcim/forms/filtersets.py:404 #: netbox/dcim/forms/filtersets.py:455 netbox/dcim/forms/filtersets.py:508 #: netbox/dcim/forms/filtersets.py:860 netbox/dcim/forms/filtersets.py:904 @@ -1148,7 +1148,7 @@ msgstr "담당자" #: netbox/circuits/forms/filtersets.py:239 #: netbox/circuits/tables/circuits.py:135 netbox/dcim/forms/bulk_edit.py:121 #: netbox/dcim/forms/bulk_edit.py:323 netbox/dcim/forms/bulk_edit.py:890 -#: netbox/dcim/forms/bulk_import.py:110 netbox/dcim/forms/filtersets.py:94 +#: netbox/dcim/forms/bulk_import.py:111 netbox/dcim/forms/filtersets.py:94 #: netbox/dcim/forms/filtersets.py:171 netbox/dcim/forms/filtersets.py:217 #: netbox/dcim/forms/filtersets.py:244 netbox/dcim/forms/filtersets.py:382 #: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:881 @@ -1212,7 +1212,7 @@ msgstr "할당" #: netbox/circuits/forms/filtersets.py:311 #: netbox/circuits/forms/model_forms.py:289 #: netbox/circuits/tables/circuits.py:187 netbox/dcim/forms/bulk_edit.py:126 -#: netbox/dcim/forms/bulk_edit.py:356 netbox/dcim/forms/bulk_import.py:117 +#: netbox/dcim/forms/bulk_edit.py:356 netbox/dcim/forms/bulk_import.py:118 #: netbox/dcim/forms/model_forms.py:137 netbox/dcim/tables/racks.py:139 #: netbox/dcim/tables/racks.py:232 netbox/dcim/tables/sites.py:69 #: netbox/extras/forms/filtersets.py:612 netbox/ipam/filtersets.py:1049 @@ -1707,13 +1707,13 @@ msgstr "종단" #: netbox/circuits/tables/virtual_circuits.py:106 #: netbox/dcim/forms/bulk_edit.py:749 netbox/dcim/forms/bulk_edit.py:1320 #: netbox/dcim/forms/bulk_edit.py:1732 netbox/dcim/forms/bulk_edit.py:1786 -#: netbox/dcim/forms/bulk_import.py:763 netbox/dcim/forms/bulk_import.py:824 -#: netbox/dcim/forms/bulk_import.py:850 netbox/dcim/forms/bulk_import.py:876 -#: netbox/dcim/forms/bulk_import.py:897 netbox/dcim/forms/bulk_import.py:953 -#: netbox/dcim/forms/bulk_import.py:1112 netbox/dcim/forms/bulk_import.py:1131 -#: netbox/dcim/forms/bulk_import.py:1150 netbox/dcim/forms/bulk_import.py:1168 -#: netbox/dcim/forms/bulk_import.py:1222 netbox/dcim/forms/bulk_import.py:1344 -#: netbox/dcim/forms/bulk_import.py:1811 netbox/dcim/forms/connections.py:34 +#: netbox/dcim/forms/bulk_import.py:764 netbox/dcim/forms/bulk_import.py:825 +#: netbox/dcim/forms/bulk_import.py:851 netbox/dcim/forms/bulk_import.py:877 +#: netbox/dcim/forms/bulk_import.py:898 netbox/dcim/forms/bulk_import.py:954 +#: netbox/dcim/forms/bulk_import.py:1113 netbox/dcim/forms/bulk_import.py:1219 +#: netbox/dcim/forms/bulk_import.py:1238 netbox/dcim/forms/bulk_import.py:1256 +#: netbox/dcim/forms/bulk_import.py:1310 netbox/dcim/forms/bulk_import.py:1432 +#: netbox/dcim/forms/bulk_import.py:1899 netbox/dcim/forms/connections.py:34 #: netbox/dcim/forms/filtersets.py:158 netbox/dcim/forms/filtersets.py:1061 #: netbox/dcim/forms/filtersets.py:1098 netbox/dcim/forms/filtersets.py:1265 #: netbox/dcim/forms/filtersets.py:1486 netbox/dcim/forms/filtersets.py:1509 @@ -1787,7 +1787,7 @@ msgid "Connection" msgstr "연결" #: netbox/circuits/ui/panels.py:99 netbox/dcim/forms/bulk_edit.py:1480 -#: netbox/dcim/forms/bulk_import.py:835 netbox/dcim/forms/bulk_import.py:861 +#: netbox/dcim/forms/bulk_import.py:836 netbox/dcim/forms/bulk_import.py:862 #: netbox/dcim/forms/filtersets.py:1497 netbox/dcim/forms/filtersets.py:1537 #: netbox/dcim/forms/filtersets.py:1675 netbox/dcim/tables/devices.py:662 #: netbox/dcim/ui/panels.py:488 @@ -1988,7 +1988,7 @@ msgstr "정보" msgid "Warning" msgstr "경고" -#: netbox/core/constants.py:33 netbox/netbox/tables/columns.py:597 +#: netbox/core/constants.py:33 netbox/netbox/tables/columns.py:625 msgid "Error" msgstr "오류" @@ -2958,7 +2958,7 @@ msgid "Position (U)" msgstr "위치 (U)" #: netbox/dcim/api/serializers_/devices.py:193 -#: netbox/dcim/forms/bulk_import.py:786 netbox/dcim/forms/model_forms.py:819 +#: netbox/dcim/forms/bulk_import.py:787 netbox/dcim/forms/model_forms.py:819 msgid "Replicate components" msgstr "구성 요소 복제" @@ -2969,12 +2969,12 @@ msgid "" msgstr "이 모듈 유형과 연관된 구성 요소를 자동으로 채우기 (기본값: true)" #: netbox/dcim/api/serializers_/devices.py:200 -#: netbox/dcim/forms/bulk_import.py:791 netbox/dcim/forms/model_forms.py:825 +#: netbox/dcim/forms/bulk_import.py:792 netbox/dcim/forms/model_forms.py:825 msgid "Adopt components" msgstr "구성 요소 재할당" #: netbox/dcim/api/serializers_/devices.py:201 -#: netbox/dcim/forms/bulk_import.py:793 netbox/dcim/forms/model_forms.py:828 +#: netbox/dcim/forms/bulk_import.py:794 netbox/dcim/forms/model_forms.py:828 msgid "Adopt already existing components" msgstr "기존 구성 요소를 재할당" @@ -3105,11 +3105,11 @@ msgstr "오래됨" #: netbox/dcim/choices.py:170 netbox/dcim/forms/bulk_edit.py:87 #: netbox/dcim/forms/bulk_edit.py:101 netbox/dcim/forms/bulk_edit.py:181 #: netbox/dcim/forms/bulk_edit.py:623 netbox/dcim/forms/bulk_edit.py:651 -#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/bulk_import.py:77 -#: netbox/dcim/forms/bulk_import.py:91 netbox/dcim/forms/bulk_import.py:154 -#: netbox/dcim/forms/bulk_import.py:530 netbox/dcim/forms/bulk_import.py:556 -#: netbox/dcim/forms/bulk_import.py:682 netbox/dcim/forms/bulk_import.py:958 -#: netbox/dcim/forms/bulk_import.py:1239 netbox/dcim/forms/filtersets.py:267 +#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/bulk_import.py:78 +#: netbox/dcim/forms/bulk_import.py:92 netbox/dcim/forms/bulk_import.py:155 +#: netbox/dcim/forms/bulk_import.py:531 netbox/dcim/forms/bulk_import.py:557 +#: netbox/dcim/forms/bulk_import.py:683 netbox/dcim/forms/bulk_import.py:959 +#: netbox/dcim/forms/bulk_import.py:1327 netbox/dcim/forms/filtersets.py:267 #: netbox/dcim/forms/filtersets.py:820 netbox/dcim/forms/filtersets.py:836 #: netbox/dcim/forms/model_forms.py:95 netbox/dcim/forms/model_forms.py:113 #: netbox/dcim/forms/model_forms.py:216 netbox/dcim/forms/model_forms.py:559 @@ -3249,7 +3249,7 @@ msgid "Virtual interfaces" msgstr "가상 인터페이스" #: netbox/dcim/choices.py:1164 netbox/dcim/forms/bulk_edit.py:1455 -#: netbox/dcim/forms/bulk_import.py:965 netbox/dcim/forms/model_forms.py:1171 +#: netbox/dcim/forms/bulk_import.py:966 netbox/dcim/forms/model_forms.py:1171 #: netbox/dcim/tables/devices.py:761 #: netbox/virtualization/forms/bulk_edit.py:231 #: netbox/virtualization/forms/bulk_import.py:198 @@ -4023,7 +4023,7 @@ msgstr "VM 인터페이스 (ID)" msgid "Is assigned" msgstr "할당 여부" -#: netbox/dcim/filtersets.py:2080 netbox/dcim/forms/bulk_import.py:1365 +#: netbox/dcim/filtersets.py:2080 netbox/dcim/forms/bulk_import.py:1453 #: netbox/ipam/forms/bulk_import.py:344 msgid "Is primary" msgstr "기본 여부" @@ -4044,7 +4044,7 @@ msgid "Assigned VID" msgstr "할당된 VID" #: netbox/dcim/filtersets.py:2158 netbox/dcim/forms/bulk_edit.py:1568 -#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/forms/filtersets.py:1755 +#: netbox/dcim/forms/bulk_import.py:1051 netbox/dcim/forms/filtersets.py:1755 #: netbox/dcim/forms/model_forms.py:1619 #: netbox/dcim/models/device_components.py:958 #: netbox/dcim/tables/devices.py:678 netbox/dcim/ui/panels.py:521 @@ -4267,7 +4267,7 @@ msgstr "연락처 전화번호" msgid "Contact E-mail" msgstr "연락처 이메일" -#: netbox/dcim/forms/bulk_edit.py:160 netbox/dcim/forms/bulk_import.py:140 +#: netbox/dcim/forms/bulk_edit.py:160 netbox/dcim/forms/bulk_import.py:141 #: netbox/dcim/forms/model_forms.py:159 msgid "Time zone" msgstr "시간대" @@ -4276,9 +4276,9 @@ msgstr "시간대" #: netbox/dcim/forms/bulk_edit.py:584 netbox/dcim/forms/bulk_edit.py:656 #: netbox/dcim/forms/bulk_edit.py:675 netbox/dcim/forms/bulk_edit.py:762 #: netbox/dcim/forms/bulk_edit.py:1306 netbox/dcim/forms/bulk_edit.py:1742 -#: netbox/dcim/forms/bulk_import.py:208 netbox/dcim/forms/bulk_import.py:432 -#: netbox/dcim/forms/bulk_import.py:482 netbox/dcim/forms/bulk_import.py:566 -#: netbox/dcim/forms/bulk_import.py:602 netbox/dcim/forms/bulk_import.py:1233 +#: netbox/dcim/forms/bulk_import.py:209 netbox/dcim/forms/bulk_import.py:433 +#: netbox/dcim/forms/bulk_import.py:483 netbox/dcim/forms/bulk_import.py:567 +#: netbox/dcim/forms/bulk_import.py:603 netbox/dcim/forms/bulk_import.py:1321 #: netbox/dcim/forms/filtersets.py:355 netbox/dcim/forms/filtersets.py:426 #: netbox/dcim/forms/filtersets.py:578 netbox/dcim/forms/filtersets.py:728 #: netbox/dcim/forms/filtersets.py:841 netbox/dcim/forms/filtersets.py:924 @@ -4297,21 +4297,21 @@ msgid "Manufacturer" msgstr "제조사" #: netbox/dcim/forms/bulk_edit.py:240 netbox/dcim/forms/bulk_edit.py:392 -#: netbox/dcim/forms/bulk_import.py:217 netbox/dcim/forms/bulk_import.py:303 +#: netbox/dcim/forms/bulk_import.py:218 netbox/dcim/forms/bulk_import.py:304 #: netbox/dcim/forms/filtersets.py:301 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "폼 팩터" #: netbox/dcim/forms/bulk_edit.py:245 netbox/dcim/forms/bulk_edit.py:397 -#: netbox/dcim/forms/bulk_import.py:225 netbox/dcim/forms/bulk_import.py:306 +#: netbox/dcim/forms/bulk_import.py:226 netbox/dcim/forms/bulk_import.py:307 #: netbox/dcim/forms/filtersets.py:306 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "너비" #: netbox/dcim/forms/bulk_edit.py:251 netbox/dcim/forms/bulk_edit.py:403 -#: netbox/dcim/forms/bulk_import.py:313 +#: netbox/dcim/forms/bulk_import.py:314 msgid "Height (U)" msgstr "높이 (U)" @@ -4333,7 +4333,7 @@ msgid "Outer depth" msgstr "외형 깊이" #: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:426 -#: netbox/dcim/forms/bulk_import.py:230 netbox/dcim/forms/bulk_import.py:316 +#: netbox/dcim/forms/bulk_import.py:231 netbox/dcim/forms/bulk_import.py:317 msgid "Outer unit" msgstr "외형 단위" @@ -4345,7 +4345,7 @@ msgstr "장착 깊이" #: netbox/dcim/forms/bulk_edit.py:441 netbox/dcim/forms/bulk_edit.py:465 #: netbox/dcim/forms/bulk_edit.py:542 netbox/dcim/forms/bulk_edit.py:559 #: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/bulk_edit.py:614 -#: netbox/dcim/forms/bulk_import.py:445 netbox/dcim/forms/bulk_import.py:493 +#: netbox/dcim/forms/bulk_import.py:446 netbox/dcim/forms/bulk_import.py:494 #: netbox/dcim/forms/filtersets.py:326 netbox/dcim/forms/filtersets.py:348 #: netbox/dcim/forms/filtersets.py:373 netbox/dcim/forms/filtersets.py:458 #: netbox/dcim/forms/filtersets.py:571 netbox/dcim/forms/filtersets.py:683 @@ -4370,8 +4370,8 @@ msgstr "최대 무게" #: netbox/dcim/forms/bulk_edit.py:298 netbox/dcim/forms/bulk_edit.py:451 #: netbox/dcim/forms/bulk_edit.py:547 netbox/dcim/forms/bulk_edit.py:603 -#: netbox/dcim/forms/bulk_import.py:236 netbox/dcim/forms/bulk_import.py:328 -#: netbox/dcim/forms/bulk_import.py:450 netbox/dcim/forms/bulk_import.py:498 +#: netbox/dcim/forms/bulk_import.py:237 netbox/dcim/forms/bulk_import.py:329 +#: netbox/dcim/forms/bulk_import.py:451 netbox/dcim/forms/bulk_import.py:499 #: netbox/dcim/forms/filtersets.py:336 netbox/dcim/forms/filtersets.py:687 #: netbox/dcim/forms/filtersets.py:799 msgid "Weight unit" @@ -4403,7 +4403,7 @@ msgstr "치수" msgid "Numbering" msgstr "번호 지정" -#: netbox/dcim/forms/bulk_edit.py:377 netbox/dcim/forms/bulk_import.py:293 +#: netbox/dcim/forms/bulk_edit.py:377 netbox/dcim/forms/bulk_import.py:294 #: netbox/dcim/forms/filtersets.py:434 msgid "Rack type" msgstr "랙 유형" @@ -4421,17 +4421,17 @@ msgstr "자산 태그" #: netbox/dcim/forms/bulk_edit.py:436 netbox/dcim/forms/bulk_edit.py:537 #: netbox/dcim/forms/bulk_edit.py:593 netbox/dcim/forms/bulk_edit.py:724 -#: netbox/dcim/forms/bulk_import.py:322 netbox/dcim/forms/bulk_import.py:487 -#: netbox/dcim/forms/bulk_import.py:696 netbox/dcim/forms/filtersets.py:437 +#: netbox/dcim/forms/bulk_import.py:323 netbox/dcim/forms/bulk_import.py:488 +#: netbox/dcim/forms/bulk_import.py:697 netbox/dcim/forms/filtersets.py:437 #: netbox/dcim/forms/filtersets.py:600 netbox/dcim/forms/filtersets.py:790 #: netbox/dcim/forms/filtersets.py:946 msgid "Airflow" msgstr "공기 흐름" #: netbox/dcim/forms/bulk_edit.py:460 netbox/dcim/forms/bulk_edit.py:937 -#: netbox/dcim/forms/bulk_import.py:378 netbox/dcim/forms/bulk_import.py:381 -#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/bulk_import.py:1748 -#: netbox/dcim/forms/bulk_import.py:1752 netbox/dcim/forms/filtersets.py:125 +#: netbox/dcim/forms/bulk_import.py:379 netbox/dcim/forms/bulk_import.py:382 +#: netbox/dcim/forms/bulk_import.py:670 netbox/dcim/forms/bulk_import.py:1836 +#: netbox/dcim/forms/bulk_import.py:1840 netbox/dcim/forms/filtersets.py:125 #: netbox/dcim/forms/filtersets.py:370 netbox/dcim/forms/filtersets.py:465 #: netbox/dcim/forms/filtersets.py:479 netbox/dcim/forms/filtersets.py:525 #: netbox/dcim/forms/filtersets.py:914 netbox/dcim/forms/filtersets.py:1130 @@ -4457,7 +4457,7 @@ msgstr "랙" msgid "Hardware" msgstr "하드웨어" -#: netbox/dcim/forms/bulk_edit.py:513 netbox/dcim/forms/bulk_import.py:438 +#: netbox/dcim/forms/bulk_edit.py:513 netbox/dcim/forms/bulk_import.py:439 #: netbox/dcim/forms/filtersets.py:583 netbox/dcim/forms/model_forms.py:416 #: netbox/virtualization/forms/bulk_edit.py:85 #: netbox/virtualization/forms/bulk_import.py:89 @@ -4496,8 +4496,8 @@ msgid "Schema" msgstr "스키마" #: netbox/dcim/forms/bulk_edit.py:572 netbox/dcim/forms/bulk_edit.py:579 -#: netbox/dcim/forms/bulk_edit.py:828 netbox/dcim/forms/bulk_import.py:476 -#: netbox/dcim/forms/bulk_import.py:1509 netbox/dcim/forms/filtersets.py:723 +#: netbox/dcim/forms/bulk_edit.py:828 netbox/dcim/forms/bulk_import.py:477 +#: netbox/dcim/forms/bulk_import.py:1597 netbox/dcim/forms/filtersets.py:723 #: netbox/dcim/forms/filtersets.py:1146 netbox/dcim/forms/filtersets.py:1278 #: netbox/dcim/forms/model_forms.py:463 netbox/dcim/forms/model_forms.py:476 #: netbox/dcim/tables/modules.py:43 netbox/dcim/tables/modules.py:97 @@ -4530,10 +4530,10 @@ msgid "VM role" msgstr "VM 역할" #: netbox/dcim/forms/bulk_edit.py:637 netbox/dcim/forms/bulk_edit.py:661 -#: netbox/dcim/forms/bulk_edit.py:734 netbox/dcim/forms/bulk_import.py:540 -#: netbox/dcim/forms/bulk_import.py:544 netbox/dcim/forms/bulk_import.py:573 -#: netbox/dcim/forms/bulk_import.py:577 netbox/dcim/forms/bulk_import.py:702 -#: netbox/dcim/forms/bulk_import.py:706 netbox/dcim/forms/filtersets.py:815 +#: netbox/dcim/forms/bulk_edit.py:734 netbox/dcim/forms/bulk_import.py:541 +#: netbox/dcim/forms/bulk_import.py:545 netbox/dcim/forms/bulk_import.py:574 +#: netbox/dcim/forms/bulk_import.py:578 netbox/dcim/forms/bulk_import.py:703 +#: netbox/dcim/forms/bulk_import.py:707 netbox/dcim/forms/filtersets.py:815 #: netbox/dcim/forms/filtersets.py:846 netbox/dcim/forms/filtersets.py:965 #: netbox/dcim/forms/model_forms.py:554 netbox/dcim/forms/model_forms.py:591 #: netbox/dcim/forms/model_forms.py:716 @@ -4545,19 +4545,19 @@ msgid "Config template" msgstr "설정 템플릿" #: netbox/dcim/forms/bulk_edit.py:680 netbox/dcim/forms/bulk_edit.py:1086 -#: netbox/dcim/forms/bulk_import.py:608 netbox/dcim/forms/filtersets.py:135 +#: netbox/dcim/forms/bulk_import.py:609 netbox/dcim/forms/filtersets.py:135 #: netbox/dcim/forms/filtersets.py:1438 netbox/dcim/forms/model_forms.py:661 #: netbox/dcim/forms/model_forms.py:1048 netbox/dcim/forms/model_forms.py:1065 #: netbox/extras/filtersets.py:756 msgid "Device type" msgstr "장비 유형" -#: netbox/dcim/forms/bulk_edit.py:691 netbox/dcim/forms/bulk_import.py:589 +#: netbox/dcim/forms/bulk_edit.py:691 netbox/dcim/forms/bulk_import.py:590 #: netbox/dcim/forms/filtersets.py:140 netbox/dcim/forms/model_forms.py:669 msgid "Device role" msgstr "장비 역할" -#: netbox/dcim/forms/bulk_edit.py:714 netbox/dcim/forms/bulk_import.py:614 +#: netbox/dcim/forms/bulk_edit.py:714 netbox/dcim/forms/bulk_import.py:615 #: netbox/dcim/forms/filtersets.py:829 netbox/dcim/forms/filtersets.py:938 #: netbox/dcim/forms/model_forms.py:602 netbox/dcim/forms/model_forms.py:674 #: netbox/dcim/tables/devices.py:191 netbox/extras/filtersets.py:772 @@ -4569,7 +4569,7 @@ msgstr "장비 역할" msgid "Platform" msgstr "플랫폼" -#: netbox/dcim/forms/bulk_edit.py:739 netbox/dcim/forms/bulk_import.py:633 +#: netbox/dcim/forms/bulk_edit.py:739 netbox/dcim/forms/bulk_import.py:634 #: netbox/dcim/forms/filtersets.py:870 netbox/dcim/forms/filtersets.py:1040 #: netbox/dcim/forms/model_forms.py:683 netbox/dcim/tables/devices.py:211 #: netbox/extras/filtersets.py:805 netbox/extras/forms/filtersets.py:411 @@ -4598,12 +4598,12 @@ msgstr "설정" msgid "Virtualization" msgstr "가상화" -#: netbox/dcim/forms/bulk_edit.py:767 netbox/dcim/forms/bulk_import.py:775 +#: netbox/dcim/forms/bulk_edit.py:767 netbox/dcim/forms/bulk_import.py:776 #: netbox/dcim/forms/model_forms.py:811 netbox/dcim/forms/model_forms.py:1073 msgid "Module type" msgstr "모듈 유형" -#: netbox/dcim/forms/bulk_edit.py:839 netbox/dcim/forms/bulk_import.py:1528 +#: netbox/dcim/forms/bulk_edit.py:839 netbox/dcim/forms/bulk_import.py:1616 #: netbox/dcim/forms/filtersets.py:1305 netbox/dcim/forms/model_forms.py:888 #: netbox/dcim/tables/cables.py:124 msgid "Bundle" @@ -4627,8 +4627,8 @@ msgstr "레이블" msgid "Length" msgstr "길이" -#: netbox/dcim/forms/bulk_edit.py:858 netbox/dcim/forms/bulk_import.py:1535 -#: netbox/dcim/forms/bulk_import.py:1538 netbox/dcim/forms/filtersets.py:1291 +#: netbox/dcim/forms/bulk_edit.py:858 netbox/dcim/forms/bulk_import.py:1623 +#: netbox/dcim/forms/bulk_import.py:1626 netbox/dcim/forms/filtersets.py:1291 msgid "Length unit" msgstr "길이 단위" @@ -4636,17 +4636,17 @@ msgstr "길이 단위" msgid "Domain" msgstr "도메인" -#: netbox/dcim/forms/bulk_edit.py:932 netbox/dcim/forms/bulk_import.py:1735 +#: netbox/dcim/forms/bulk_edit.py:932 netbox/dcim/forms/bulk_import.py:1823 #: netbox/dcim/forms/filtersets.py:1384 netbox/dcim/forms/model_forms.py:927 msgid "Power panel" msgstr "배전반" -#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/bulk_import.py:1771 +#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/bulk_import.py:1859 #: netbox/dcim/forms/filtersets.py:1406 msgid "Supply" msgstr "공급 전원" -#: netbox/dcim/forms/bulk_edit.py:960 netbox/dcim/forms/bulk_import.py:1776 +#: netbox/dcim/forms/bulk_edit.py:960 netbox/dcim/forms/bulk_import.py:1864 #: netbox/dcim/forms/filtersets.py:1411 msgid "Phase" msgstr "상(위상)" @@ -4683,13 +4683,13 @@ msgstr "할당된 소비 전력" msgid "Allocated power draw (watts)" msgstr "할당된 소비 전력 (와트)" -#: netbox/dcim/forms/bulk_edit.py:1107 netbox/dcim/forms/bulk_import.py:908 +#: netbox/dcim/forms/bulk_edit.py:1107 netbox/dcim/forms/bulk_import.py:909 #: netbox/dcim/forms/model_forms.py:1144 netbox/dcim/forms/model_forms.py:1509 #: netbox/dcim/forms/model_forms.py:1838 netbox/dcim/forms/object_import.py:56 msgid "Power port" msgstr "전원 포트" -#: netbox/dcim/forms/bulk_edit.py:1112 netbox/dcim/forms/bulk_import.py:915 +#: netbox/dcim/forms/bulk_edit.py:1112 netbox/dcim/forms/bulk_import.py:916 msgid "Feed leg" msgstr "피드 레그" @@ -4699,7 +4699,7 @@ msgid "Management only" msgstr "관리 전용" #: netbox/dcim/forms/bulk_edit.py:1168 netbox/dcim/forms/bulk_edit.py:1495 -#: netbox/dcim/forms/bulk_import.py:1001 netbox/dcim/forms/filtersets.py:1711 +#: netbox/dcim/forms/bulk_import.py:1002 netbox/dcim/forms/filtersets.py:1711 #: netbox/dcim/forms/filtersets.py:1796 netbox/dcim/forms/object_import.py:91 #: netbox/dcim/models/device_component_templates.py:473 #: netbox/dcim/models/device_components.py:930 netbox/dcim/ui/panels.py:494 @@ -4707,7 +4707,7 @@ msgid "PoE mode" msgstr "PoE 모드" #: netbox/dcim/forms/bulk_edit.py:1174 netbox/dcim/forms/bulk_edit.py:1501 -#: netbox/dcim/forms/bulk_import.py:1007 netbox/dcim/forms/filtersets.py:1716 +#: netbox/dcim/forms/bulk_import.py:1008 netbox/dcim/forms/filtersets.py:1716 #: netbox/dcim/forms/filtersets.py:1801 netbox/dcim/forms/object_import.py:96 #: netbox/dcim/models/device_component_templates.py:480 #: netbox/dcim/models/device_components.py:937 netbox/dcim/ui/panels.py:495 @@ -4733,7 +4733,7 @@ msgstr "LAG" msgid "Virtual device contexts" msgstr "가상 장비 컨텍스트" -#: netbox/dcim/forms/bulk_edit.py:1509 netbox/dcim/forms/bulk_import.py:1010 +#: netbox/dcim/forms/bulk_edit.py:1509 netbox/dcim/forms/bulk_import.py:1011 #: netbox/virtualization/forms/bulk_edit.py:252 #: netbox/virtualization/forms/bulk_import.py:205 #: netbox/vpn/forms/bulk_edit.py:128 netbox/vpn/forms/bulk_edit.py:196 @@ -4744,7 +4744,7 @@ msgstr "가상 장비 컨텍스트" msgid "Mode" msgstr "모드" -#: netbox/dcim/forms/bulk_edit.py:1517 netbox/dcim/forms/bulk_import.py:1016 +#: netbox/dcim/forms/bulk_edit.py:1517 netbox/dcim/forms/bulk_import.py:1017 #: netbox/dcim/forms/model_forms.py:1585 netbox/ipam/forms/bulk_import.py:184 #: netbox/ipam/forms/filtersets.py:603 netbox/ipam/models/vlans.py:99 #: netbox/virtualization/forms/bulk_edit.py:259 @@ -4753,7 +4753,7 @@ msgstr "모드" msgid "VLAN group" msgstr "VLAN 그룹" -#: netbox/dcim/forms/bulk_edit.py:1526 netbox/dcim/forms/bulk_import.py:1023 +#: netbox/dcim/forms/bulk_edit.py:1526 netbox/dcim/forms/bulk_import.py:1024 #: netbox/dcim/forms/model_forms.py:1591 netbox/dcim/tables/devices.py:627 #: netbox/dcim/ui/panels.py:498 netbox/virtualization/forms/bulk_edit.py:267 #: netbox/virtualization/forms/bulk_import.py:218 @@ -4761,7 +4761,7 @@ msgstr "VLAN 그룹" msgid "Untagged VLAN" msgstr "태그 없는 VLAN" -#: netbox/dcim/forms/bulk_edit.py:1535 netbox/dcim/forms/bulk_import.py:1030 +#: netbox/dcim/forms/bulk_edit.py:1535 netbox/dcim/forms/bulk_import.py:1031 #: netbox/dcim/forms/model_forms.py:1600 netbox/dcim/tables/devices.py:633 #: netbox/virtualization/forms/bulk_edit.py:275 #: netbox/virtualization/forms/bulk_import.py:225 @@ -4777,7 +4777,7 @@ msgstr "태그된 VLAN 추가" msgid "Remove tagged VLANs" msgstr "태그된 VLAN 제거" -#: netbox/dcim/forms/bulk_edit.py:1558 netbox/dcim/forms/bulk_import.py:1043 +#: netbox/dcim/forms/bulk_edit.py:1558 netbox/dcim/forms/bulk_import.py:1044 #: netbox/dcim/forms/model_forms.py:1609 #: netbox/virtualization/forms/bulk_import.py:238 #: netbox/virtualization/forms/model_forms.py:439 @@ -4845,336 +4845,336 @@ msgstr "VLAN을 할당하려면 인터페이스 모드를 지정해야 합니다 msgid "An access interface cannot have tagged VLANs assigned." msgstr "액세스 인터페이스에는 태그된 VLAN을 할당할 수 없습니다." -#: netbox/dcim/forms/bulk_import.py:81 +#: netbox/dcim/forms/bulk_import.py:82 msgid "Name of parent region" msgstr "상위 지역 이름" -#: netbox/dcim/forms/bulk_import.py:95 +#: netbox/dcim/forms/bulk_import.py:96 msgid "Name of parent site group" msgstr "상위 사이트 그룹 이름" -#: netbox/dcim/forms/bulk_import.py:114 +#: netbox/dcim/forms/bulk_import.py:115 msgid "Assigned region" msgstr "할당된 지역" -#: netbox/dcim/forms/bulk_import.py:121 netbox/tenancy/forms/bulk_import.py:50 +#: netbox/dcim/forms/bulk_import.py:122 netbox/tenancy/forms/bulk_import.py:50 #: netbox/wireless/forms/bulk_import.py:41 msgid "Assigned group" msgstr "할당된 그룹" -#: netbox/dcim/forms/bulk_import.py:140 +#: netbox/dcim/forms/bulk_import.py:141 msgid "available options" msgstr "사용 가능한 옵션" -#: netbox/dcim/forms/bulk_import.py:151 netbox/dcim/forms/bulk_import.py:659 -#: netbox/dcim/forms/bulk_import.py:1732 netbox/ipam/forms/bulk_import.py:519 +#: netbox/dcim/forms/bulk_import.py:152 netbox/dcim/forms/bulk_import.py:660 +#: netbox/dcim/forms/bulk_import.py:1820 netbox/ipam/forms/bulk_import.py:519 #: netbox/virtualization/forms/bulk_import.py:66 msgid "Assigned site" msgstr "할당된 사이트" -#: netbox/dcim/forms/bulk_import.py:158 +#: netbox/dcim/forms/bulk_import.py:159 msgid "Parent location" msgstr "상위 구역" -#: netbox/dcim/forms/bulk_import.py:160 +#: netbox/dcim/forms/bulk_import.py:161 msgid "Location not found." msgstr "구역을 찾을 수 없습니다." -#: netbox/dcim/forms/bulk_import.py:211 +#: netbox/dcim/forms/bulk_import.py:212 msgid "The manufacturer of this rack type" msgstr "이 랙 유형의 제조사" -#: netbox/dcim/forms/bulk_import.py:222 +#: netbox/dcim/forms/bulk_import.py:223 msgid "The lowest-numbered position in the rack" msgstr "랙에서 가장 낮은 번호의 위치" -#: netbox/dcim/forms/bulk_import.py:227 netbox/dcim/forms/bulk_import.py:309 +#: netbox/dcim/forms/bulk_import.py:228 netbox/dcim/forms/bulk_import.py:310 msgid "Rail-to-rail width (in inches)" msgstr "레일 간 너비 (인치)" -#: netbox/dcim/forms/bulk_import.py:233 netbox/dcim/forms/bulk_import.py:319 +#: netbox/dcim/forms/bulk_import.py:234 netbox/dcim/forms/bulk_import.py:320 msgid "Unit for outer dimensions" msgstr "외형 치수 단위" -#: netbox/dcim/forms/bulk_import.py:239 netbox/dcim/forms/bulk_import.py:331 +#: netbox/dcim/forms/bulk_import.py:240 netbox/dcim/forms/bulk_import.py:332 msgid "Unit for rack weights" msgstr "랙 무게 단위" -#: netbox/dcim/forms/bulk_import.py:271 +#: netbox/dcim/forms/bulk_import.py:272 msgid "Name of assigned tenant" msgstr "할당된 테넌트 이름" -#: netbox/dcim/forms/bulk_import.py:274 netbox/dcim/forms/filtersets.py:410 +#: netbox/dcim/forms/bulk_import.py:275 netbox/dcim/forms/filtersets.py:410 #: netbox/dcim/forms/filtersets.py:515 netbox/dcim/ui/panels.py:47 #: netbox/ipam/forms/filtersets.py:497 msgid "Rack group" msgstr "랙 그룹" -#: netbox/dcim/forms/bulk_import.py:278 +#: netbox/dcim/forms/bulk_import.py:279 msgid "Name of assigned group" msgstr "할당된 그룹 이름" -#: netbox/dcim/forms/bulk_import.py:290 +#: netbox/dcim/forms/bulk_import.py:291 msgid "Name of assigned role" msgstr "할당된 역할 이름" -#: netbox/dcim/forms/bulk_import.py:297 +#: netbox/dcim/forms/bulk_import.py:298 msgid "Rack type model" msgstr "랙 유형 모델" -#: netbox/dcim/forms/bulk_import.py:325 netbox/dcim/forms/bulk_import.py:490 -#: netbox/dcim/forms/bulk_import.py:699 +#: netbox/dcim/forms/bulk_import.py:326 netbox/dcim/forms/bulk_import.py:491 +#: netbox/dcim/forms/bulk_import.py:700 msgid "Airflow direction" msgstr "공기 흐름 방향" -#: netbox/dcim/forms/bulk_import.py:358 +#: netbox/dcim/forms/bulk_import.py:359 msgid "Width must be set if not specifying a rack type." msgstr "랙 유형을 지정하지 않으면 너비를 설정해야 합니다." -#: netbox/dcim/forms/bulk_import.py:360 +#: netbox/dcim/forms/bulk_import.py:361 msgid "U height must be set if not specifying a rack type." msgstr "랙 유형을 지정하지 않으면 U 높이를 설정해야 합니다." -#: netbox/dcim/forms/bulk_import.py:368 +#: netbox/dcim/forms/bulk_import.py:369 msgid "Parent site" msgstr "상위 사이트" -#: netbox/dcim/forms/bulk_import.py:375 netbox/dcim/forms/bulk_import.py:1745 +#: netbox/dcim/forms/bulk_import.py:376 netbox/dcim/forms/bulk_import.py:1833 msgid "Rack's location (if any)" msgstr "랙의 구역 (있는 경우)" -#: netbox/dcim/forms/bulk_import.py:384 netbox/dcim/forms/model_forms.py:376 +#: netbox/dcim/forms/bulk_import.py:385 netbox/dcim/forms/model_forms.py:376 #: netbox/dcim/tables/racks.py:242 #: netbox/templates/dcim/rackreservation.html:7 msgid "Units" msgstr "단위" -#: netbox/dcim/forms/bulk_import.py:387 +#: netbox/dcim/forms/bulk_import.py:388 msgid "Comma-separated list of individual unit numbers" msgstr "쉼표로 구분된 개별 유닛 번호 목록" -#: netbox/dcim/forms/bulk_import.py:435 +#: netbox/dcim/forms/bulk_import.py:436 msgid "The manufacturer which produces this device type" msgstr "이 장비 유형을 생산하는 제조사" -#: netbox/dcim/forms/bulk_import.py:442 +#: netbox/dcim/forms/bulk_import.py:443 msgid "The default platform for devices of this type (optional)" msgstr "이 유형 장비의 기본 플랫폼 (선택)" -#: netbox/dcim/forms/bulk_import.py:447 +#: netbox/dcim/forms/bulk_import.py:448 msgid "Device weight" msgstr "장비 무게" -#: netbox/dcim/forms/bulk_import.py:453 +#: netbox/dcim/forms/bulk_import.py:454 msgid "Unit for device weight" msgstr "장비 무게 단위" -#: netbox/dcim/forms/bulk_import.py:495 +#: netbox/dcim/forms/bulk_import.py:496 msgid "Module weight" msgstr "모듈 무게" -#: netbox/dcim/forms/bulk_import.py:501 +#: netbox/dcim/forms/bulk_import.py:502 msgid "Unit for module weight" msgstr "모듈 무게 단위" -#: netbox/dcim/forms/bulk_import.py:506 +#: netbox/dcim/forms/bulk_import.py:507 msgid "Attribute values for the assigned profile, passed as a dictionary" msgstr "딕셔너리로 전달되는 할당된 프로필의 속성 값" -#: netbox/dcim/forms/bulk_import.py:521 +#: netbox/dcim/forms/bulk_import.py:522 msgid "Profile must be specified if attribute data is provided." msgstr "속성 데이터를 제공하려면 프로필을 지정해야 합니다." -#: netbox/dcim/forms/bulk_import.py:534 +#: netbox/dcim/forms/bulk_import.py:535 msgid "Parent Device Role" msgstr "상위 장비 역할" -#: netbox/dcim/forms/bulk_import.py:536 +#: netbox/dcim/forms/bulk_import.py:537 msgid "Device role not found." msgstr "장비 역할을 찾을 수 없습니다." -#: netbox/dcim/forms/bulk_import.py:560 +#: netbox/dcim/forms/bulk_import.py:561 msgid "Parent platform" msgstr "상위 플랫폼" -#: netbox/dcim/forms/bulk_import.py:562 +#: netbox/dcim/forms/bulk_import.py:563 msgid "Platform not found." msgstr "플랫폼을 찾을 수 없습니다." -#: netbox/dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:571 msgid "Limit platform assignments to this manufacturer" msgstr "플랫폼 할당을 이 제조사로 제한" -#: netbox/dcim/forms/bulk_import.py:592 netbox/dcim/forms/bulk_import.py:1814 +#: netbox/dcim/forms/bulk_import.py:593 netbox/dcim/forms/bulk_import.py:1902 #: netbox/tenancy/forms/bulk_import.py:116 msgid "Assigned role" msgstr "할당된 역할" -#: netbox/dcim/forms/bulk_import.py:605 +#: netbox/dcim/forms/bulk_import.py:606 msgid "Device type manufacturer" msgstr "장비 유형 제조사" -#: netbox/dcim/forms/bulk_import.py:611 +#: netbox/dcim/forms/bulk_import.py:612 msgid "Device type model" msgstr "장비 유형 모델" -#: netbox/dcim/forms/bulk_import.py:618 +#: netbox/dcim/forms/bulk_import.py:619 #: netbox/virtualization/forms/bulk_import.py:165 msgid "Assigned platform" msgstr "할당된 플랫폼" -#: netbox/dcim/forms/bulk_import.py:626 netbox/dcim/forms/bulk_import.py:630 +#: netbox/dcim/forms/bulk_import.py:627 netbox/dcim/forms/bulk_import.py:631 #: netbox/dcim/forms/model_forms.py:697 msgid "Virtual chassis" msgstr "가상 섀시" -#: netbox/dcim/forms/bulk_import.py:637 +#: netbox/dcim/forms/bulk_import.py:638 msgid "Virtualization cluster" msgstr "가상화 클러스터" -#: netbox/dcim/forms/bulk_import.py:666 +#: netbox/dcim/forms/bulk_import.py:667 msgid "Assigned location (if any)" msgstr "할당된 구역 (있는 경우)" -#: netbox/dcim/forms/bulk_import.py:673 +#: netbox/dcim/forms/bulk_import.py:674 msgid "Assigned rack (if any)" msgstr "할당된 랙 (있는 경우)" -#: netbox/dcim/forms/bulk_import.py:676 netbox/dcim/forms/model_forms.py:653 +#: netbox/dcim/forms/bulk_import.py:677 netbox/dcim/forms/model_forms.py:653 msgid "Face" msgstr "면" -#: netbox/dcim/forms/bulk_import.py:679 +#: netbox/dcim/forms/bulk_import.py:680 msgid "Mounted rack face" msgstr "랙 장착 면" -#: netbox/dcim/forms/bulk_import.py:686 +#: netbox/dcim/forms/bulk_import.py:687 msgid "Parent device (for child devices)" msgstr "상위 장비 (하위 장비용)" -#: netbox/dcim/forms/bulk_import.py:689 +#: netbox/dcim/forms/bulk_import.py:690 msgid "Device bay" msgstr "장비 베이" -#: netbox/dcim/forms/bulk_import.py:693 +#: netbox/dcim/forms/bulk_import.py:694 msgid "Device bay in which this device is installed (for child devices)" msgstr "이 장비가 설치된 장비 베이 (하위 장비용)" -#: netbox/dcim/forms/bulk_import.py:766 +#: netbox/dcim/forms/bulk_import.py:767 msgid "The device in which this module is installed" msgstr "이 모듈이 설치된 장비" -#: netbox/dcim/forms/bulk_import.py:769 netbox/dcim/forms/model_forms.py:801 +#: netbox/dcim/forms/bulk_import.py:770 netbox/dcim/forms/model_forms.py:801 msgid "Module bay" msgstr "모듈 베이" -#: netbox/dcim/forms/bulk_import.py:772 +#: netbox/dcim/forms/bulk_import.py:773 msgid "The module bay in which this module is installed" msgstr "이 모듈이 설치된 모듈 베이" -#: netbox/dcim/forms/bulk_import.py:778 +#: netbox/dcim/forms/bulk_import.py:779 msgid "The type of module" msgstr "모듈 유형" -#: netbox/dcim/forms/bulk_import.py:788 +#: netbox/dcim/forms/bulk_import.py:789 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" msgstr "이 모듈 유형과 연관된 구성 요소를 자동으로 채우기 (기본 활성화)" -#: netbox/dcim/forms/bulk_import.py:832 netbox/dcim/forms/bulk_import.py:858 -#: netbox/dcim/forms/bulk_import.py:884 +#: netbox/dcim/forms/bulk_import.py:833 netbox/dcim/forms/bulk_import.py:859 +#: netbox/dcim/forms/bulk_import.py:885 msgid "Port type" msgstr "포트 유형" -#: netbox/dcim/forms/bulk_import.py:840 netbox/dcim/forms/bulk_import.py:866 +#: netbox/dcim/forms/bulk_import.py:841 netbox/dcim/forms/bulk_import.py:867 msgid "Port speed in bps" msgstr "포트 속도 (bps)" -#: netbox/dcim/forms/bulk_import.py:905 +#: netbox/dcim/forms/bulk_import.py:906 msgid "Outlet type" msgstr "콘센트 유형" -#: netbox/dcim/forms/bulk_import.py:912 +#: netbox/dcim/forms/bulk_import.py:913 msgid "Local power port which feeds this outlet" msgstr "이 콘센트에 전원을 공급하는 로컬 전원 포트" -#: netbox/dcim/forms/bulk_import.py:918 +#: netbox/dcim/forms/bulk_import.py:919 msgid "Electrical phase (for three-phase circuits)" msgstr "전기 상 (3상 회로용)" -#: netbox/dcim/forms/bulk_import.py:962 netbox/dcim/forms/model_forms.py:1547 +#: netbox/dcim/forms/bulk_import.py:963 netbox/dcim/forms/model_forms.py:1547 #: netbox/virtualization/forms/bulk_import.py:195 #: netbox/virtualization/forms/model_forms.py:400 msgid "Parent interface" msgstr "상위 인터페이스" -#: netbox/dcim/forms/bulk_import.py:969 netbox/dcim/forms/model_forms.py:1555 +#: netbox/dcim/forms/bulk_import.py:970 netbox/dcim/forms/model_forms.py:1555 #: netbox/virtualization/forms/bulk_import.py:202 #: netbox/virtualization/forms/model_forms.py:408 msgid "Bridged interface" msgstr "브리지된 인터페이스" -#: netbox/dcim/forms/bulk_import.py:972 +#: netbox/dcim/forms/bulk_import.py:973 msgid "Lag" msgstr "LAG" -#: netbox/dcim/forms/bulk_import.py:976 +#: netbox/dcim/forms/bulk_import.py:977 msgid "Parent LAG interface" msgstr "상위 LAG 인터페이스" -#: netbox/dcim/forms/bulk_import.py:979 +#: netbox/dcim/forms/bulk_import.py:980 msgid "Vdcs" msgstr "VDC" -#: netbox/dcim/forms/bulk_import.py:984 +#: netbox/dcim/forms/bulk_import.py:985 msgid "VDC names separated by commas, encased with double quotes. Example:" msgstr "큰따옴표로 감싼 쉼표 구분 VDC 이름. 예:" -#: netbox/dcim/forms/bulk_import.py:990 +#: netbox/dcim/forms/bulk_import.py:991 msgid "Physical medium" msgstr "물리 매체" -#: netbox/dcim/forms/bulk_import.py:993 netbox/dcim/forms/filtersets.py:1682 +#: netbox/dcim/forms/bulk_import.py:994 netbox/dcim/forms/filtersets.py:1682 msgid "Duplex" msgstr "듀플렉스" -#: netbox/dcim/forms/bulk_import.py:998 +#: netbox/dcim/forms/bulk_import.py:999 msgid "Poe mode" msgstr "PoE 모드" -#: netbox/dcim/forms/bulk_import.py:1004 +#: netbox/dcim/forms/bulk_import.py:1005 msgid "Poe type" msgstr "PoE 유형" -#: netbox/dcim/forms/bulk_import.py:1013 +#: netbox/dcim/forms/bulk_import.py:1014 #: netbox/virtualization/forms/bulk_import.py:208 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "IEEE 802.1Q 운영 모드 (L2 인터페이스용)" -#: netbox/dcim/forms/bulk_import.py:1020 +#: netbox/dcim/forms/bulk_import.py:1021 #: netbox/virtualization/forms/bulk_import.py:215 msgid "Filter VLANs available for assignment by group" msgstr "할당 가능한 VLAN을 그룹별로 필터링" -#: netbox/dcim/forms/bulk_import.py:1027 +#: netbox/dcim/forms/bulk_import.py:1028 #: netbox/virtualization/forms/bulk_import.py:222 msgid "Assigned untagged VLAN ID (filtered by VLAN group)" msgstr "할당된 태그 없는 VLAN ID (VLAN 그룹으로 필터링)" -#: netbox/dcim/forms/bulk_import.py:1036 +#: netbox/dcim/forms/bulk_import.py:1037 #: netbox/virtualization/forms/bulk_import.py:231 msgid "" "Assigned tagged VLAN IDs separated by commas, encased with double quotes " "(filtered by VLAN group). Example:" msgstr "큰따옴표로 감싼 쉼표 구분 할당 태그 VLAN ID (VLAN 그룹으로 필터링). 예:" -#: netbox/dcim/forms/bulk_import.py:1047 +#: netbox/dcim/forms/bulk_import.py:1048 #: netbox/virtualization/forms/bulk_import.py:242 msgid "Assigned Q-in-Q Service VLAN ID (filtered by VLAN group)" msgstr "할당된 Q-in-Q 서비스 VLAN ID (VLAN 그룹으로 필터링)" -#: netbox/dcim/forms/bulk_import.py:1054 netbox/ipam/forms/bulk_import.py:174 +#: netbox/dcim/forms/bulk_import.py:1055 netbox/ipam/forms/bulk_import.py:174 #: netbox/ipam/forms/bulk_import.py:259 netbox/ipam/forms/bulk_import.py:295 #: netbox/ipam/forms/filtersets.py:230 netbox/ipam/forms/filtersets.py:314 #: netbox/ipam/forms/filtersets.py:383 @@ -5182,74 +5182,104 @@ msgstr "할당된 Q-in-Q 서비스 VLAN ID (VLAN 그룹으로 필터링)" msgid "Assigned VRF" msgstr "할당된 VRF" -#: netbox/dcim/forms/bulk_import.py:1057 +#: netbox/dcim/forms/bulk_import.py:1058 msgid "Rf role" msgstr "RF 역할" -#: netbox/dcim/forms/bulk_import.py:1060 +#: netbox/dcim/forms/bulk_import.py:1061 msgid "Wireless role (AP/station)" msgstr "무선 역할 (AP/스테이션)" -#: netbox/dcim/forms/bulk_import.py:1103 +#: netbox/dcim/forms/bulk_import.py:1104 #, python-brace-format msgid "VDC {vdc} is not assigned to device {device}" msgstr "VDC {vdc}은(는) 장비 {device}에 할당되어 있지 않습니다" -#: netbox/dcim/forms/bulk_import.py:1119 netbox/dcim/forms/bulk_import.py:1137 -#: netbox/dcim/forms/bulk_import.py:1518 +#: netbox/dcim/forms/bulk_import.py:1120 netbox/dcim/forms/bulk_import.py:1225 +#: netbox/dcim/forms/bulk_import.py:1606 msgid "Physical medium classification" msgstr "물리 매체 분류" -#: netbox/dcim/forms/bulk_import.py:1173 +#: netbox/dcim/forms/bulk_import.py:1123 netbox/dcim/forms/model_forms.py:1846 +#: netbox/dcim/forms/object_import.py:145 +msgid "Rear port" +msgstr "후면 포트" + +#: netbox/dcim/forms/bulk_import.py:1126 +msgid "Corresponding rear port (mapped to the front port's first position)" +msgstr "해당 후면 포트 (전면 포트의 첫 번째 위치에 매핑됨)" + +#: netbox/dcim/forms/bulk_import.py:1129 +msgid "Rear port position" +msgstr "후면 포트 위치" + +#: netbox/dcim/forms/bulk_import.py:1131 +msgid "Mapped position on the corresponding rear port (defaults to 1)" +msgstr "해당 후면 포트의 매핑된 위치 (기본값 1)" + +#: netbox/dcim/forms/bulk_import.py:1175 netbox/dcim/models/base.py:59 +#, python-brace-format +msgid "" +"Invalid rear port position ({rear_port_position}): Rear port {name} has only" +" {positions} positions." +msgstr "" +"잘못된 후면 포트 위치({rear_port_position}): 후면 포트 {name}에는 {positions}개 위치만 있습니다." + +#: netbox/dcim/forms/bulk_import.py:1193 +#, python-brace-format +msgid "Rear port {name} position {rear_port_position} is already occupied." +msgstr "후면 포트 {name} 위치를 지정합니다 {rear_port_position} 이미 점령됐어." + +#: netbox/dcim/forms/bulk_import.py:1261 msgid "Installed device" msgstr "설치된 장비" -#: netbox/dcim/forms/bulk_import.py:1177 +#: netbox/dcim/forms/bulk_import.py:1265 msgid "Child device installed within this bay" msgstr "이 베이에 설치된 하위 장비" -#: netbox/dcim/forms/bulk_import.py:1179 +#: netbox/dcim/forms/bulk_import.py:1267 msgid "Child device not found." msgstr "하위 장비를 찾을 수 없습니다." -#: netbox/dcim/forms/bulk_import.py:1243 +#: netbox/dcim/forms/bulk_import.py:1331 msgid "Parent inventory item" msgstr "상위 인벤토리 항목" -#: netbox/dcim/forms/bulk_import.py:1246 +#: netbox/dcim/forms/bulk_import.py:1334 msgid "Component type" msgstr "구성 요소 유형" -#: netbox/dcim/forms/bulk_import.py:1250 +#: netbox/dcim/forms/bulk_import.py:1338 msgid "Component Type" msgstr "구성 요소 유형" -#: netbox/dcim/forms/bulk_import.py:1253 +#: netbox/dcim/forms/bulk_import.py:1341 msgid "Component name" msgstr "구성 요소 이름" -#: netbox/dcim/forms/bulk_import.py:1255 +#: netbox/dcim/forms/bulk_import.py:1343 msgid "Component Name" msgstr "구성 요소 이름" -#: netbox/dcim/forms/bulk_import.py:1298 netbox/dcim/forms/bulk_import.py:1316 +#: netbox/dcim/forms/bulk_import.py:1386 netbox/dcim/forms/bulk_import.py:1404 msgid "Component name must be specified when component type is specified" msgstr "구성 요소 유형을 지정할 때는 구성 요소 이름을 지정해야 합니다" -#: netbox/dcim/forms/bulk_import.py:1308 +#: netbox/dcim/forms/bulk_import.py:1396 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "구성 요소를 찾을 수 없음: {device} - {component_name}" -#: netbox/dcim/forms/bulk_import.py:1321 +#: netbox/dcim/forms/bulk_import.py:1409 msgid "Component type must be specified when component name is specified" msgstr "구성 요소 이름을 지정할 때는 구성 요소 유형을 지정해야 합니다" -#: netbox/dcim/forms/bulk_import.py:1348 netbox/ipam/forms/bulk_import.py:320 +#: netbox/dcim/forms/bulk_import.py:1436 netbox/ipam/forms/bulk_import.py:320 msgid "Parent device of assigned interface (if any)" msgstr "할당된 인터페이스의 상위 장비 (있는 경우)" -#: netbox/dcim/forms/bulk_import.py:1351 netbox/ipam/forms/bulk_import.py:323 +#: netbox/dcim/forms/bulk_import.py:1439 netbox/ipam/forms/bulk_import.py:323 #: netbox/virtualization/filtersets.py:354 #: netbox/virtualization/filtersets.py:412 #: netbox/virtualization/forms/bulk_edit.py:219 @@ -5263,183 +5293,183 @@ msgstr "할당된 인터페이스의 상위 장비 (있는 경우)" msgid "Virtual machine" msgstr "가상 머신" -#: netbox/dcim/forms/bulk_import.py:1355 netbox/ipam/forms/bulk_import.py:327 +#: netbox/dcim/forms/bulk_import.py:1443 netbox/ipam/forms/bulk_import.py:327 msgid "Parent VM of assigned interface (if any)" msgstr "할당된 인터페이스의 상위 VM (있는 경우)" -#: netbox/dcim/forms/bulk_import.py:1362 netbox/ipam/filtersets.py:1111 +#: netbox/dcim/forms/bulk_import.py:1450 netbox/ipam/filtersets.py:1111 #: netbox/ipam/forms/bulk_import.py:334 msgid "Assigned interface" msgstr "할당된 인터페이스" -#: netbox/dcim/forms/bulk_import.py:1366 +#: netbox/dcim/forms/bulk_import.py:1454 msgid "Make this the primary MAC address for the assigned interface" msgstr "이 MAC 주소를 할당된 인터페이스의 기본 MAC 주소로 설정" -#: netbox/dcim/forms/bulk_import.py:1404 +#: netbox/dcim/forms/bulk_import.py:1492 msgid "Must specify the parent device or VM when assigning an interface" msgstr "인터페이스를 할당할 때는 상위 장비 또는 VM을 지정해야 합니다" -#: netbox/dcim/forms/bulk_import.py:1437 +#: netbox/dcim/forms/bulk_import.py:1525 msgid "Side A site" msgstr "A측 사이트" -#: netbox/dcim/forms/bulk_import.py:1441 +#: netbox/dcim/forms/bulk_import.py:1529 #: netbox/wireless/forms/bulk_import.py:93 msgid "Site of parent device A (if any)" msgstr "상위 장비 A의 사이트 (있는 경우)" -#: netbox/dcim/forms/bulk_import.py:1444 +#: netbox/dcim/forms/bulk_import.py:1532 msgid "Side A device" msgstr "A측 장비" -#: netbox/dcim/forms/bulk_import.py:1448 netbox/dcim/forms/bulk_import.py:1481 +#: netbox/dcim/forms/bulk_import.py:1536 netbox/dcim/forms/bulk_import.py:1569 msgid "Device name (for device component terminations)" msgstr "장비 이름 (장비 구성 요소 종단용)" -#: netbox/dcim/forms/bulk_import.py:1451 +#: netbox/dcim/forms/bulk_import.py:1539 msgid "Side A power panel" msgstr "A측 배전반" -#: netbox/dcim/forms/bulk_import.py:1455 netbox/dcim/forms/bulk_import.py:1488 +#: netbox/dcim/forms/bulk_import.py:1543 netbox/dcim/forms/bulk_import.py:1576 msgid "Power panel name (for power feed terminations)" msgstr "배전반 이름 (전원 피드 종단용)" -#: netbox/dcim/forms/bulk_import.py:1458 +#: netbox/dcim/forms/bulk_import.py:1546 msgid "Side A type" msgstr "A측 유형" -#: netbox/dcim/forms/bulk_import.py:1464 +#: netbox/dcim/forms/bulk_import.py:1552 msgid "Side A name" msgstr "A측 이름" -#: netbox/dcim/forms/bulk_import.py:1465 netbox/dcim/forms/bulk_import.py:1498 +#: netbox/dcim/forms/bulk_import.py:1553 netbox/dcim/forms/bulk_import.py:1586 msgid "Termination name" msgstr "종단 이름" -#: netbox/dcim/forms/bulk_import.py:1470 +#: netbox/dcim/forms/bulk_import.py:1558 msgid "Side B site" msgstr "B측 사이트" -#: netbox/dcim/forms/bulk_import.py:1474 +#: netbox/dcim/forms/bulk_import.py:1562 #: netbox/wireless/forms/bulk_import.py:114 msgid "Site of parent device B (if any)" msgstr "상위 장비 B의 사이트 (있는 경우)" -#: netbox/dcim/forms/bulk_import.py:1477 +#: netbox/dcim/forms/bulk_import.py:1565 msgid "Side B device" msgstr "B측 장비" -#: netbox/dcim/forms/bulk_import.py:1484 +#: netbox/dcim/forms/bulk_import.py:1572 msgid "Side B power panel" msgstr "B측 배전반" -#: netbox/dcim/forms/bulk_import.py:1491 +#: netbox/dcim/forms/bulk_import.py:1579 msgid "Side B type" msgstr "B측 유형" -#: netbox/dcim/forms/bulk_import.py:1497 +#: netbox/dcim/forms/bulk_import.py:1585 msgid "Side B name" msgstr "B측 이름" -#: netbox/dcim/forms/bulk_import.py:1506 +#: netbox/dcim/forms/bulk_import.py:1594 #: netbox/templates/dcim/panels/connection.html:60 #: netbox/wireless/forms/bulk_import.py:133 msgid "Connection status" msgstr "연결 상태" -#: netbox/dcim/forms/bulk_import.py:1512 +#: netbox/dcim/forms/bulk_import.py:1600 msgid "Cable connection profile" msgstr "케이블 연결 프로필" -#: netbox/dcim/forms/bulk_import.py:1532 +#: netbox/dcim/forms/bulk_import.py:1620 msgid "Cable bundle name" msgstr "케이블 번들 이름" -#: netbox/dcim/forms/bulk_import.py:1544 +#: netbox/dcim/forms/bulk_import.py:1632 msgid "Color name (e.g. \"Red\") or hex code (e.g. \"f44336\")" msgstr "색상 이름 (예: \"Red\") 또는 16진수 코드 (예: \"f44336\")" -#: netbox/dcim/forms/bulk_import.py:1587 +#: netbox/dcim/forms/bulk_import.py:1675 #, python-brace-format msgid "Invalid side designation: {side}" msgstr "잘못된 측 지정: {side}" -#: netbox/dcim/forms/bulk_import.py:1606 +#: netbox/dcim/forms/bulk_import.py:1694 #, python-brace-format msgid "" "Side {side_upper}: {power_panel} {termination_object} is already connected" msgstr "{side_upper}측: {power_panel} {termination_object}은(는) 이미 연결되어 있습니다" -#: netbox/dcim/forms/bulk_import.py:1612 +#: netbox/dcim/forms/bulk_import.py:1700 #, python-brace-format msgid "{side_upper} side termination not found: {power_panel} {name}" msgstr "{side_upper}측 종단을 찾을 수 없음: {power_panel} {name}" -#: netbox/dcim/forms/bulk_import.py:1630 +#: netbox/dcim/forms/bulk_import.py:1718 #, python-brace-format msgid "Side {side_upper}: {device} {termination_object} is already connected" msgstr "{side_upper}측: {device} {termination_object}은(는) 이미 연결되어 있습니다" -#: netbox/dcim/forms/bulk_import.py:1636 +#: netbox/dcim/forms/bulk_import.py:1724 #, python-brace-format msgid "{side_upper} side termination not found: {device} {name}" msgstr "{side_upper}측 종단을 찾을 수 없음: {device} {name}" -#: netbox/dcim/forms/bulk_import.py:1658 +#: netbox/dcim/forms/bulk_import.py:1746 #, python-brace-format msgid "" "{color} did not match any used color name and was longer than six " "characters: invalid hex." msgstr "{color}은(는) 어떤 색상 이름과도 일치하지 않고 6자를 초과합니다: 잘못된 16진수." -#: netbox/dcim/forms/bulk_import.py:1683 netbox/dcim/forms/model_forms.py:962 +#: netbox/dcim/forms/bulk_import.py:1771 netbox/dcim/forms/model_forms.py:962 #: netbox/dcim/tables/devices.py:1154 #: netbox/templates/dcim/panels/virtual_chassis_members.html:10 msgid "Master" msgstr "마스터" -#: netbox/dcim/forms/bulk_import.py:1687 +#: netbox/dcim/forms/bulk_import.py:1775 msgid "Master device" msgstr "마스터 장비" -#: netbox/dcim/forms/bulk_import.py:1704 +#: netbox/dcim/forms/bulk_import.py:1792 msgid "Name of parent site" msgstr "상위 사이트 이름" -#: netbox/dcim/forms/bulk_import.py:1738 +#: netbox/dcim/forms/bulk_import.py:1826 msgid "Upstream power panel" msgstr "업스트림 배전반" -#: netbox/dcim/forms/bulk_import.py:1768 +#: netbox/dcim/forms/bulk_import.py:1856 msgid "Primary or redundant" msgstr "기본 또는 이중화" -#: netbox/dcim/forms/bulk_import.py:1773 +#: netbox/dcim/forms/bulk_import.py:1861 msgid "Supply type (AC/DC)" msgstr "공급 전원 유형 (AC/DC)" -#: netbox/dcim/forms/bulk_import.py:1778 +#: netbox/dcim/forms/bulk_import.py:1866 msgid "Single or three-phase" msgstr "단상 또는 3상" -#: netbox/dcim/forms/bulk_import.py:1828 netbox/dcim/forms/model_forms.py:1939 +#: netbox/dcim/forms/bulk_import.py:1916 netbox/dcim/forms/model_forms.py:1939 #: netbox/dcim/ui/panels.py:111 netbox/dcim/ui/panels.py:371 #: netbox/virtualization/ui/panels.py:55 msgid "Primary IPv4" msgstr "기본 IPv4" -#: netbox/dcim/forms/bulk_import.py:1832 +#: netbox/dcim/forms/bulk_import.py:1920 msgid "IPv4 address with mask, e.g. 1.2.3.4/24" msgstr "마스크가 있는 IPv4 주소 (예: 1.2.3.4/24)" -#: netbox/dcim/forms/bulk_import.py:1835 netbox/dcim/forms/model_forms.py:1948 +#: netbox/dcim/forms/bulk_import.py:1923 netbox/dcim/forms/model_forms.py:1948 #: netbox/dcim/ui/panels.py:116 netbox/dcim/ui/panels.py:376 #: netbox/virtualization/ui/panels.py:60 msgid "Primary IPv6" msgstr "기본 IPv6" -#: netbox/dcim/forms/bulk_import.py:1839 +#: netbox/dcim/forms/bulk_import.py:1927 msgid "IPv6 address with prefix length, e.g. 2001:db8::1/64" msgstr "프리픽스 길이가 있는 IPv6 주소 (예: 2001:db8::1/64)" @@ -5911,11 +5941,6 @@ msgstr "전면 포트" msgid "Power outlet" msgstr "전원 콘센트" -#: netbox/dcim/forms/model_forms.py:1846 -#: netbox/dcim/forms/object_import.py:145 -msgid "Rear port" -msgstr "후면 포트" - #: netbox/dcim/forms/model_forms.py:1852 msgid "Inventory Item" msgstr "인벤토리 항목" @@ -5963,7 +5988,7 @@ msgstr "제공된 패턴은 {value_count}개 값을 지정하지만 {pattern_cou #: netbox/dcim/forms/object_create.py:312 netbox/dcim/tables/devices.py:1160 #: netbox/ipam/tables/fhrp.py:31 netbox/ipam/ui/panels.py:185 -#: netbox/ipam/views.py:1589 netbox/templates/dcim/virtualchassis_edit.html:59 +#: netbox/ipam/views.py:1594 netbox/templates/dcim/virtualchassis_edit.html:59 #: netbox/users/views.py:375 msgid "Members" msgstr "멤버" @@ -5986,14 +6011,6 @@ msgstr "멤버 장비" msgid "A position must be specified for the first VC member." msgstr "첫 번째 VC 멤버의 위치를 지정해야 합니다." -#: netbox/dcim/models/base.py:59 -#, python-brace-format -msgid "" -"Invalid rear port position ({rear_port_position}): Rear port {name} has only" -" {positions} positions." -msgstr "" -"잘못된 후면 포트 위치({rear_port_position}): 후면 포트 {name}에는 {positions}개 위치만 있습니다." - #: netbox/dcim/models/cables.py:62 msgid "cable bundle" msgstr "케이블 번들" @@ -7817,8 +7834,8 @@ msgstr "할당된 소비 전력 (W)" #: netbox/dcim/tables/devices.py:597 netbox/dcim/views.py:3402 #: netbox/ipam/forms/model_forms.py:834 netbox/ipam/tables/fhrp.py:28 -#: netbox/ipam/ui/panels.py:252 netbox/ipam/views.py:922 -#: netbox/ipam/views.py:1047 netbox/netbox/navigation/menu.py:175 +#: netbox/ipam/ui/panels.py:252 netbox/ipam/views.py:924 +#: netbox/ipam/views.py:1052 netbox/netbox/navigation/menu.py:175 #: netbox/netbox/navigation/menu.py:177 netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "IP 주소" @@ -8246,7 +8263,7 @@ msgstr "가상 장비 컨텍스트" #: netbox/dcim/views.py:3414 netbox/ipam/forms/filtersets.py:469 #: netbox/ipam/models/vlans.py:308 netbox/ipam/tables/ip.py:121 -#: netbox/ipam/tables/vlans.py:52 netbox/ipam/views.py:1381 +#: netbox/ipam/tables/vlans.py:52 netbox/ipam/views.py:1386 #: netbox/netbox/navigation/menu.py:210 netbox/netbox/navigation/menu.py:212 msgid "VLANs" msgstr "VLAN" @@ -11113,11 +11130,11 @@ msgstr "정책" msgid "Ports" msgstr "포트" -#: netbox/ipam/forms/bulk_import.py:55 netbox/ipam/views.py:72 +#: netbox/ipam/forms/bulk_import.py:55 netbox/ipam/views.py:73 msgid "Import route targets" msgstr "가져오기 라우트 타깃" -#: netbox/ipam/forms/bulk_import.py:61 netbox/ipam/views.py:75 +#: netbox/ipam/forms/bulk_import.py:61 netbox/ipam/views.py:76 msgid "Export route targets" msgstr "내보내기 라우트 타깃" @@ -11931,8 +11948,8 @@ msgid "Added" msgstr "추가일" #: netbox/ipam/tables/ip.py:76 netbox/ipam/tables/ip.py:111 -#: netbox/ipam/tables/vlans.py:125 netbox/ipam/views.py:621 -#: netbox/ipam/views.py:1731 netbox/netbox/navigation/menu.py:182 +#: netbox/ipam/tables/vlans.py:125 netbox/ipam/views.py:623 +#: netbox/ipam/views.py:1736 netbox/netbox/navigation/menu.py:182 #: netbox/netbox/navigation/menu.py:184 msgid "Prefixes" msgstr "프리픽스" @@ -12133,77 +12150,77 @@ msgid "" "are allowed in DNS names" msgstr "DNS 이름에는 영숫자, 별표, 하이픈, 마침표, 밑줄만 사용할 수 있습니다" -#: netbox/ipam/views.py:106 netbox/ipam/views.py:1761 +#: netbox/ipam/views.py:107 netbox/ipam/views.py:1766 msgid "Device Interfaces" msgstr "장비 인터페이스" -#: netbox/ipam/views.py:111 netbox/ipam/views.py:1779 +#: netbox/ipam/views.py:112 netbox/ipam/views.py:1784 msgid "VM Interfaces" msgstr "VM 인터페이스" -#: netbox/ipam/views.py:196 +#: netbox/ipam/views.py:197 msgid "Importing VRFs" msgstr "가져오는 VRF" -#: netbox/ipam/views.py:203 +#: netbox/ipam/views.py:204 msgid "Exporting VRFs" msgstr "내보내는 VRF" -#: netbox/ipam/views.py:212 +#: netbox/ipam/views.py:213 msgid "Importing L2VPNs" msgstr "가져오는 L2VPN" -#: netbox/ipam/views.py:219 +#: netbox/ipam/views.py:220 msgid "Exporting L2VPNs" msgstr "내보내는 L2VPN" -#: netbox/ipam/views.py:798 +#: netbox/ipam/views.py:800 msgid "Duplicate prefixes" msgstr "중복 프리픽스" -#: netbox/ipam/views.py:799 netbox/ipam/views.py:1012 -#: netbox/ipam/views.py:1120 +#: netbox/ipam/views.py:801 netbox/ipam/views.py:1017 +#: netbox/ipam/views.py:1125 msgid "Parent prefixes" msgstr "상위 프리픽스" -#: netbox/ipam/views.py:851 +#: netbox/ipam/views.py:853 msgid "Child Prefixes" msgstr "하위 프리픽스" -#: netbox/ipam/views.py:895 +#: netbox/ipam/views.py:897 msgid "Child Ranges" msgstr "하위 범위" -#: netbox/ipam/views.py:1121 +#: netbox/ipam/views.py:1126 msgid "Duplicate IPs" msgstr "중복 IP" -#: netbox/ipam/views.py:1125 +#: netbox/ipam/views.py:1130 msgid "Application services" msgstr "애플리케이션 서비스" -#: netbox/ipam/views.py:1291 +#: netbox/ipam/views.py:1296 msgid "Related IPs" msgstr "관련 IP" -#: netbox/ipam/views.py:1432 +#: netbox/ipam/views.py:1437 msgid "VLAN translation rules" msgstr "VLAN 변환 규칙" -#: netbox/ipam/views.py:1438 +#: netbox/ipam/views.py:1443 msgid "Add Rule" msgstr "규칙 추가" -#: netbox/ipam/views.py:1580 +#: netbox/ipam/views.py:1585 msgid "Virtual IP addresses" msgstr "가상 IP 주소" -#: netbox/ipam/views.py:1585 netbox/templates/ipam/iprange/ip_addresses.html:8 +#: netbox/ipam/views.py:1590 netbox/templates/ipam/iprange/ip_addresses.html:8 #: netbox/templates/ipam/prefix/ip_addresses.html:7 msgid "Add IP Address" msgstr "IP 주소 추가" -#: netbox/ipam/views.py:1744 +#: netbox/ipam/views.py:1749 msgid "Add a Prefix" msgstr "프리픽스 추가" @@ -13584,7 +13601,7 @@ msgstr "{object_type} {object}의 데이터가 동기화되었습니다." msgid "Synced {count} {object_type}" msgstr "{count}개 {object_type} 동기화됨" -#: netbox/netbox/views/generic/object_views.py:118 +#: netbox/netbox/views/generic/object_views.py:120 #, python-brace-format msgid "{class_name} must implement get_children()" msgstr "{class_name}은(는) get_children()을 구현해야 합니다" @@ -15514,7 +15531,7 @@ msgstr "페이지당" msgid "Data is out of sync with upstream file" msgstr "데이터가 업스트림 파일과 동기화되지 않았습니다" -#: netbox/templates/inc/table_controls_htmx.html:11 +#: netbox/templates/inc/table_controls_htmx.html:10 #: netbox/templates/inc/table_controls_htmx.html:12 msgid "Quick search" msgstr "빠른 검색" diff --git a/netbox/translations/lv/LC_MESSAGES/django.mo b/netbox/translations/lv/LC_MESSAGES/django.mo index 7a0e3dc889078ef38daec8a1303f97a0e1866f77..541d070f9c5b6ca5f8bc68c9d96159a6f4da40e6 100644 GIT binary patch delta 77752 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 C#t^9h delta 77323 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 delta 77344 zcmXWkci_!cAHebZv$B$%2tRx8J+k-A9wl2wL?|magpiCALq{#QI#B5^I|pO8qL%9}{! z{L<1y;+`sLiIcbhTjR*8X^E=%ESAI1F*|0imX@f2xv@UBz{WToJK{^|dzq@IB?e6B_W& z_4k_yaD+IknRgZ81-sv_uo^hpy#Htbku*UCdQCEzuBLV-~y%>*4%Z z{yH`#|2Ou;hV{}CJ#b0Av}9r|iLWSVgWc+(Y>8#g*6+cC7R<1Y==+c4fso=WLlyFiO!AF64h}fI->p2#C2g;*Ncuq zJ6IF_0G){|nuOC(BiauwpB3GLEy#a_22!YLTA~d0Pm-|1yU-=riC5rW%!cowyZb0+ z#81%Oe=314W5j<5sTP#3g;KIriq zj&9be(YffUS%!{m9XbOqpaJg25_k}O?;KkH5<0-_Ej;#|zpF|3LPfMfLv)SXqYWm} zfEGsYk3JlqZ$gjTRWKqG60j;J#l`9L&~ zG4c8B=*-N)Yj7D_ZwuPdPPG2}Xh6r%0KY{8`YS$9wBr1`xpI(jx8^}-pb=KY4(Low zMz7E<(bupu`46xG7H=IkaX+j^ere3_!OGXn>8{aQJZwQ8C{+v zVMC8cU&cqsAHcWM5{c0r(-Pgu*XSIs&b!gmasr*P)947lMemVw=%;DfE+Ib@y$M&x z{0a0b&fPUFaWy8dC*c~8MEAg>SQg(!r|cX$l@+c}OANp&=vpp9XXJh?gioL|um_9c z=P`c?9eJT{!76CrEs%>TnP^ACUEdieV1I0f2XHVJ=$@A7k9VL;@gchVKZ~A?v(evo%{l7Q{ z8}teFHlZ`P9c$tt^th(=4ejSdM_v|fw`O0?e;E=jV!_Dh6m-h&K^u4&UBf4^IX)lD ze~ab+qBE1VUkKo8bcU*!vig9KsEdxYF&b%e^o6eI zNcy5{J_H@XBWV2>(2jPZ@4Xg15X(P7+xa5q&!QL5FTrG@#!X?w6VOv|H#+iV=q7wD z=3hZ0K7hsXLv#s#MLYgC=5r1V0T)7_myA|LzwtCgPfb58?)je{3)Y|`*^LJBCVIX< zz>1iCP$;hxZGkq_6%Aklrlu6#v~$sRmd59gpaE?`+uMnG=s)o#33uo37GT!FVHX$1 z>f~#oFAPHiT7us3@1g-`9umxnKF^2lnNH}`4?y?U2sE&9(W#iU!rdfnXfe9h4`5Av z6#Z2E04w2DL&MkZM(7=X2X@01*bKkJvRHmt_}bkSJ>GNBdu4O<0Jb83ZW!mk1&P|j z!wYwy9dE%JcoIuv?hzqh2k#(%GkVNUVF#>tbNJ#h8~reQ0ej&Y?1xQ8h95XqqBHj+ z`tw7DQOUGK7ZSrqg#fl;J@RL;DyEMP-|M?Z??A8AwP>Knum@%v6W$+y&ge39tyiOa z;Bjgi~^^J4x1EaCZIOTvn8pvP@LR>r^4wJJ9uJgwd>oy@AJBd>PUQT1#daWJLxa%3(zAyR#+VLrLCVoZhUok1PTW}KR-w~Fgz>(EK8*Yz|un*etAT+>{ zn3`gAsitBNd@~YE3ME9*z7BEQiO?CHohhiJa3y{o-hcb`hJUO*ZBNK^Pd0FvEYvA-01!2 zl&(hu+lDr@KR!Q(&dAqjK!2i}Hv64n_vb@rvNO7reb51oL}y?;CT(yg36ISpwBmAf zsvg7Q_%ixk?*!W6NvwkB(c@HXW_Z6e8fYc7-DYTqozV_^VLcp*&di#boPXE$DGH2y zd#v~xx;qb`fqacF$=~sL7LKhQ%_VZ*!8 ziu=)TxyP^?=D926o1-7cGq4W6ihk()g3d_pSz!Pr(T*#jUoaY?9o>%3;N9qqEx-)8 zBuT=NFOL=0#QeJGX0*W<&==o8NBBDyp72P~jn9Xp$Ma6~ z=Y?f4{~}iR{J%rOsk(q}x*YSvOf-tN$B~rxK_lOTZoVVvl%7MsUSEj$BKL$psws^P zC?Ac^+(vZoJcqWk1CyT5w@DcJA@qCwDQu1Zpu4^0g0w_BPK~Zc8+b5fifho3J&DcmMYN&caRMgp4NG(zdTKUApF`Jp zSA2d1{lO)%IQ+t~4BAe6G>~5Cl8;D|@bh?Ttgtjzco=Q)8MNXXSO|}zBmD^t;6HRE zIqyqL48g+avAq*r+WFWDm!JbXif-mpSRIpp#Ruh=ge9njHrNn7M(xlgn1?p71PyF8 zdTgJK9`fU;s;m;ODqe4v_&`B zTr{8u&<-9!-`^6S??gB6+h`y;mxm?DgYL09=+)d9Q@{V4Lc*z>g^uVxbfizk^6lu0 zd(oR~KictS^mJsuKm5Y78Ky2GwEQ)!gukOpnEpUoqBqvU8n_U%dj5Bj@YuYC-eB*e zk!M{II=T`Ks0cdpvgj06!*r~N{(R6E?QkMme=XYXQ?Yz2`r-B&w!y0(TNVe9zXuKETXaT#Mn7IJNAs)<9hOCZDK!{fs^Ms0 z6IOEmUDG=#@TQuFeQ*ytRfSfC-Fz#0rA|escnR9kn`i(hqFKHHk`Gi0ANoPQg9i30rz>te}=!&3A^1A7pg;Sp?sc^(N3_QXl#=b!;!K-=m1 zXqdUX(UGpfbX|V@|pCn0m<(@;&_mykIh{~dyt}0rw4mtxJ&@Zcl(D&{{*Ln>) zwU0+%h~=-v{C+f$k7E8)bjgz6k?_L!0}bFmEQ^KKg`bF;qEoyY4QK<};bt_jZRis2 zN3Y)F=w3P#^B2*2+17^+i=p|-$a~2|a}vIIeRL2y!trQBi_u6QMLT*LE90wZAZO6` ze?vEK#tmU63ZTzRpwBC#GuRm2)ZH;h>ia(lkK1H)^Gr)UU`^2xFF^x&5M8?`&>49h zozi#EdI#h4qcQ&@+TL%`%V9#gpO7(Ety|=O@sHPsZopp&eh0X5SK~z6dgt$wUPbHq;ay zc{g;VqtV?u4PCnh=pJ|^K7SQG$M2)>e;LbvM?VcSJsm#Ii=zW*gbuU?dI5FDOrHNC zBpkubXvK->8c#zv$x^g~N70dQjqXMReh;0Quh1Dg6Z5~Kd*UxFgQcGd?RP+rYd6g3 z=l|U#GT=Sf6c?c*eIKji_vnpS_}LIpJv5Nk=!m+<@&U1YOe~**&g2|)0Qbk|n_~G3 zm~@1DNjL*X&;~z4JNOP=%iqzF{S%*G@my#)FIul8`hGREej~JgD|Dn?V)-m|rWT@0 zyW}~}zYRP}fq`s^4_-zie>dijV=5qYB)_A3BFonBUSaf}D37jfBea9-qXW_R#-Z)r z70Z`y<^20#Z7g^m?Pw2{!-JTPf1nK)d_Mf>RSB)v0c&F)w4Hm=uUL;_Sv-MtF!4h8 z5?dGDW0PuM?c1Vj_qM{7C{59kG|g? zeXkE1$Otr$ThST09ocKi#M31F%C$2TBz{J(%!}v?X*HvMYQ+jiV)>V7L%*S)|JiniPs&SAC3dnNmdEXAU?@p^C&b|JqO+u+aG9_#E$hATI@CrsVz=+yiV zdtmN2g2T`kUc#Z6VQ=`g`v`PTJc;SJ2R;8^pvUdneIdXa=-%j$2EGv8^dBcbuor#tBzm5IKs&yOZnms%2lJu3y%>5N%c6IDWwgB-SP`$o-8d5KW7&67n=_dh zNWu|}L^s8q=y$@k=#=lp*_iWP>ZNgR(XUn;_lLlq#8lvDV0+Q_4#wwS#^>kJ?**69 zkzf6udxrB@i-ZrlqsM0~`o&@vI+B%G2OmL4`ag84KgHC{plf~+y`pQsACB!E=#p(g zkKt}~N!~^SJ%X7$|DTeu;%W58`_%_{5uMV1(HAlu2upGmx_PceKlOT`?~jQ2DQNvg zXnPN$Gxi8NQ|r;dpTVRJyh_5&b_ne--@#Dv8uZ07=m;vH4cCnM>tenQ+Hf~?&kR6E zIyyd|6!S^6-U77Vii7dz{|yv4wa=rGy^J2KchC`>!V35;rep3yp`jXRz}KPgw?qT% z7@zl!`61|xjzy2*Z85*$5a-`r{X{I-fqvC`6>aD^y4GKzBl-=UiGR>toaJ!nxGB1a z+M@3bK?56${@gGTi{oOnooCR2?o7rCZ{aWsPGLH>Iub69;b?>Rp}Te!8o+k6f!ELg z51{ovi++cd$^VLO>f#@SUsBb=TI6S-fh4z*a0XsM*Lpv?MhDTUKY>o|X|%&L=<)h9 zmgo2|tYtp5emWXpIdlf9V`r?3wtF|)&eD)iCLSeGnu4d$iicx`qW=p4RYD`J7HtsA zTcT^)7Tv_1(9ijSSP93YH|fJz5f5VOQxBb~I!B#3&R?@sf=@AYR}Mmt(^z!sl2``s zMK|Do;X`Y4naL1(ZcrvCnKQxdM>^=OBK(2wOw=#(wQ z)H#m%N6Ax z4`4a+pP=VB!-;UmUyIGi4@5g$hi=Bl(POs-E8y|?Ji{kpfLYN2ta z#Ro0WDer(kJ0vMC8S-Suck z!_Xa5}op$X#F?Pf$T?b#!t|h&G%XOJz`mOQ_n&Jd#hUmQR>KQe3Co`h-;#TxQ#}v8*|wtJA-_h?|Fx&Wx8}~+ zoBVXNpAWH?=Reo!@E3<#U^5;(ioSRXosryMgmYdDosp7gd9|3oF6KL+BkPOK$VhZa z#-pcVIy%q?(V5wVsn7qHNVrRPqf>Mg{q#E<^BKMjOH>Hmgq6{ewn5i)8rs28H1Kn1 zN9kXMcB`RF+y>nf{n3Gpz@!~bB;gB-qN~x7Y(^`-jPCNc(Hrjo+Tam%Z+wjg{wKO8 za(*2~UNBk$-Sw5xQ&J19SO06ye+CjQV#U^IAlIXtX&~Ccc=WsBY^;MD(UE?Fl`+RR zp?-aAM!r4Pz=h~k@50)67=16(x1pap-zLLIT2bH#`o;(2&^5jj-HeOS^9W;Q(G2aetrz;xxfaon~z3K7!{E+A0|HTLE(MX>`UwkFHA1jbQj(!8ma5gkl z480F3qHEe8eQy!k&gz(d0$su#=&?M3p8qc}_2+*@e+av}ELx!=x?5|a5jQ|LX=`*z z+F=Lmfo{r2aRlzcPFU{85YQy_3&$p`iCf^RCK8Ug z;Q6r2i=um=Cc5^G&?%jZ)?1F=2diR!EgId@ zLO0J@bd%)#J^U)AB335f1={`LFPP0rdTf z*c6*%D?k5dr4oF)p$+A@5MI0n%~wDhtcM2D0S#~<+Ta-UW}F>egAQmLTJJDAL!V+< z`~#h#YcH~y=|53{gcWO`9bV@H?1*;QBRVpAXLLEb+n+!`?Y5$8{AJAN_&eMy*P$~r z15@_{x>=vYq`Pw)2?N-N<`1Kr@?gcAt1ATuc+VDd3V|xi& ze?1!LX0+WG(52aZiSzG^2PvqEC$Ju7y&S&bG(*qvBy>|wi}{skgO8$1@B|w8Yv>3M zq8*$=e=qnSx`f642?5rK*8PX`?=fpcfwo2??uvHM2VIguXoKU>KxU%5`r(-0ioSm+ z=8t13@_(YIr|`dF#@eC*--iagDM`X(v<*As0W^TZ|Ahuhq8CgXG@uUA9?=`4!_lP} z7oChQ#fwrK`|2?1grCBO2*=w85D%zZjkR zHP{z7VtM=rtyeZvhSVvlgLTP|MVD|R`rgxMyW27K_y6{haK!Ip8$5Il(a)B>=+vJ?FSOs$K(b}Y5Pts8nF_-yF+l$MXBpfH$K7y@m$Kx&~g*aB_0cYHnqyZHG(frJh2L0@{|88T zOjctR+<{K{*H{}bVOgx6D>T>#o$|ra5wUy>Is=nq{w{Pt3(zYi`W zKL)4ZKj^@3&lk`CtbC!PrRWGAL#O;HbR-|3pN^lSGjs{OmJN3b6q=|^Y-U!rUL0~**b=pIPBI&_=^ zy>RlO0W^r^t;+QAll*0=shqI-CTFa^3}2Y@mRhy zmLEiC@B}*2Khcg$7Y?VUB08|DF<%Q)zyGgif(Pwlg?{L+zX=Uw0@lPk(UERNN4h)a z-$&~m$BOuM^r|9Zqz%y}XodFE6McU;CS9|Mv0xRtc2A%Uy?}1A&(TfuH9De9*M>cj z9j%`)S}a-t{rs42dL(Mmj2-ZQ=!lDz3iZmO$F&Mtza_T8>(PK8iscVuHqZZN5=Q(Y+R^LLx6vs) z7(I^G`zq$op=lV}oda^z=+e1DSWi4#~0&!O*^DjTeTsek`pjf5T6M;mS$ zE3`%TMCX|Ajjr*H(b3T<=((PUzP}-sKZWk0m+(4#2c4PBN`dIE_aBBl;=$EBf(yMfuQS8FTzXdv^@_ZFe;uRz~>3_VRx zB}r5v@ebPYAF;we=nI)DhPBU&&O}M{D_B)@MrxwFygpjLH5yP4bO1M_n|KB`!TD$a zZ=>xb55@`~plkRUcEby3#SWE12i?$JeiJ&C<70Ueo#K1Z5wDGIMEA~SG_V)274AVl z8!}f;&15oBjD%BE4V{4oXvfXb5w}Ad=!uSW2pY((=tyV9=PTm#$Kvy?@%i5P{1}#@ z{@2m$RqT)RSDl0b)JHpPfp*vh9odaBe=FMIo#+fKLjzfd?&=q!`=UqV^KWAQFZ8Qg z)~aD3##f(I-pZI5e;Yx_QbpKEj)oWaBa2lUGW3-9>`ZcLt-9w#=dwI zJxx_=g!+TfC0LFf@ncN7=A~+ej+^2l@*{CI{*I}yQnkYK_t1`i!}?gJcKA5G2_GT9 z2&-a+IvG-byS*=Zy!YV>%v?7-UxSUvzgL&@Uz|jidSPnHq7Af0e-Ahbosp-}`{5%j ziJ9w%PqXsq^L{Zu8x8P9bhm$l1F>|245>f+y&G>L|0(vuh7CFYek?9+7&?9fYm+~Z zPF`!OAlqV@m4Qh4=sVE~QLKyONt=uKiN zx^~~8H`}--VNLHv8+aRU$1~Uo2R6-+xD}tq?s#pp45`0AbSq9Fe-ztd=jLIpS72-M zU!djXT7*57yp@D6yotl`x|SJI|I%>-4kw?#Rfg0rCa0mB>|J#2GPDlgXqwh~ zDVm~z4ZwZ41ZSpk#dZllR)5$vd?U(seTKw1o>xZ$U5jqwFR?im?iP;Ujo6a>dh9~~ ziEl`Z!rI-#d4Ck`_$l-rco)5(4x%^Y$LOX#g_$vTk8sBq#H+}ci1`}m^Tz01-y)W` zK`*#&n6%-6B)ri^p;zpbn4gO-%>!sdPoNz<6QA!!KV%M|Gx!Cj<3;qn!ac)hKoxW# zbps;AM>}O0p5vTz4Ory*P!*bVjkQbpC3lA;;+z|`aOCX z4Iopm@Lo1_AO(AI{!Nsnpc&RhM{);d#U;^|=pI;)weWvv;8*kxQ=bo=;$rw8mPD7Z zWS_7(o1xF=M;D<3TaqNvgTyKvgFj&v?AJGJp84qJc^$o&()xwtR~K(1e;Zo=n`plN zA+YA?=YD6bfPK*^pN$T90XlQZRU{nI7EEm_^s86y8-nG~pNyKIUncvaYd8+maS|HX z3M_~3p{M9qw4JMN3^P#{?WYx%z$r+3$;4_B%_!K4uH7%_hf;tQc_0bNdqMK?Kx|Z|MhL@sK{4jc|o<;+C6%Ft}e0~B`|NifL625o|ZRm_E8fW4h%zzn&hI*N!d7?!z_22)kK*EOWpf^(! zbOvUlBYY0sz1z@D^%DA7urEIU2Ms*Ku+ULXbOs8c^~=Y6Ep*ehL<8?NjPvhQ4yGV= z0il6RK^vTf&cGsc6F!WNbO*Z04xxME2Xu30A09ScI@)nPw7dn{VPEvKVHmpPuMSU! z4vtV@2VbBaTtZ*WHzG7x0nIlC5({V9&!)MVYNQ?^QMbTr~1Z(0=Xu!+Rkv@p28Hwf3 zA_Gh&UW^ZRp(8zj26PO4@f_ha0GnkJ5pi5C~Y`7WgqXG6r1G@#Cfn@Y4bZtLE z+s!#Hw0AAqaSgPec9?X^ZX!_~SEJwe-^Xg0<<{_GT{M7>=+!(NE8r~j!)FV6d{3Yq zoI#iFzvva?!^p2f>(xgCZ#$mz@09eXz*8^>9r=88Gd&zD?n3YI!)U`lp@=x2VMK6XoHWVBixP7!29TCJB4nx%jk?0zB3*_bRdn;c3UP% z_+oFgq0wl>Q_v3Q$MOfz8QBosf;O}b4SW|`{~$WTPtcq2SG3(6GeZE^p!Le2GnTAL z!YONveqOhY4?4y2-Z4KI-ArT92JVQ@?~dh5qHEB0oz2D~2$ESdNu z7MwvlxQMP@W|qdla-uVIH9D1*(0a|HozQ^##=KwY%zL%l@l3S6d1!l!(EwLs>fir9 zLc*zi8l9@`=+x~)U;Hfk6*{7`Xub1j2mi)=mb*d+`O!d&qZd_eG~oK^l(&k{yI=?I zpTtlSZl-6^JNYfNqf^mu(8zy48~PKy^E1o}ffhvrsf%vrCg>D*!IC%-9pG&A{Y5eV z5T^e7|LaJ&HjkqbZjZi>PUU_yfMaL_U&Q=R=+az3N1StZcwPd1uS&EbI-s^_Af3_n zde7$kJH>-3@K}vR1DT1g(c)NfdGryq;V01%Zbxsnw`2KnwBc{iK+mHya~U02ra8e} z=<`BzSUVG?Deyd2M@Q5WZKw|#@enkyG4c5{bj0_e$L%q6&%BB*!BNbBU!xs=7ySht zz@=!`$C@_EsEMbP)k#C#2; zKmPweNEm55H1giz0smRPP(Bfz`dQJXv3xCB{~2_b?~eJ?=+d3X)KsJGXPp-UDTodz z9aF#mFGs=()zFb#hfYxov|>B7!LI1u=#Q@bICMmFqD$iQHSzg#XaH}boA3j4ASa?{ zF!k?${vu%qm(fjg#r*JMc63u-jdolS4YWzL6WU;ZG>}nfhm+AMpB>BZjpZxR`kP|; zHcWl~?;&9T2jhd|=nQ-v^Jme9|3qgb<2|8%_Gkh0IHse4)<8$x8V#&-EboWT@K`j! z+wS4~+wqK8aX#Ad{n1ru!)wuVz7>6OFS^+d#QaBSV5iVPzeVf+hStlxAe86A)MiB6 zEwh00Zvb^EFw*9+VrTS1>W^N{l=bd_FFE2Rfp=(2*~T`Nv{@8~WbcXuwC% zrAU4nADoU4&Z3e3fi{@7C^VQCZJ;#TK-HLU5c4h3rR#z=+%rD!hi>Ab=)i7A-(QH# z1poergd==7KG=w^*>mX6crT$1{)KjM8Eq)TyyHLLCO#jJ&g^t_ zAoG3h=l^08xI8|12;CEp#Qale09&K4p)+J3z&p^HdJUbS z{r7SHZRisUZ0Hmk+4ty8cn)pw*I0fr=Kn*FS(YW?c@gyel4!@3(SRDDo3AapXZoXo zj6?gqeF^8^4yRM#3$xI3za&=Jgf{#X8u2!CbH0VXcL)viDEhtsV;qgY$MS(o!;j-b z(E2mccJ4-x>5620@B|v!Gw6k}J^B{<^ZZ9>2fv^r&$TQBS_*Bj0eVq&K);X-MrUFw zrj`b6_W|_%jp#s=FO#r=!)O4fqi4{Oo=2D9BDx0>%R>V>(GitEJ1U1xb!~L2+oB!c zfVMv>=BJ^j>zsMJ)V4_zg&F z^!aowk56EKJc7ls(uy$hj@ZxhKbS-}9=wW!@yZ9opKjlZ^~gVoZSgcV!}1S>r5F{R zhovZg3`^rX=x^12#G9?ZGQ77GhmijOYhvwH==r~ygvVkv_Qg%u0RP2wtiL+^5~?58 zC;u>BhaaJV=UWqguZMe1sJ+@o@P0q9Tq<;|CE;{zLhTkA%NU_57pZ zcRZJ|9OaePhPCa1Ud4mZ0M=q-JdQoFz`F2z!_hdN{3e`)1=oi^8(M^J%01{_IF9cA z@7HtwEw~g5a&8Eltr(V}ybQX@I!3#pd!!F~es4fG-5_+cPK@~(F~20{SH}F7nBRtO z(swo_L*i2kjOZL1P}*Z*6Xr#CYsqMhXfyQtepmEZj*R7VqYt0~J%+aXG}_^7X!{?= z@~@I4?BI`Rri~$=5AC32%r}a5KpW^6pN~d6n1dd}6=+8rVtxnO{yyA}AL0Xe&!+I_ zj>)2rXGs0uZB4*lJa`3bVD2ZvCToE$$lrzD1N*QYzK5QQd{2hGa|7N){&DPvnKy?& z_wR$F$e%^EI9c=lw2h zP5BONg_qF|n?D;i=N9xdC7ufdX&Ai|8ynJ|RDxf#V>9YC+!~yYj(iu|@qg&CYw~>f zlgt@doBUR6iQk}sR(K(7-YMv5c@#a~AESHXOY}442Tc9_|365$t1rb0|DkJ{^~JCW z3!qnTnV7E;^UcxI(HXt_dth-KjkdQCufY4zJ@O#h?vrRB+cEX;e_kWumHRe&oQ}o( z_c4DFeIe(z&|v|zUJpXgjs_fwWdpw%#2$6M0 z^8?Tdx1b%~8GRs@Z$azrLVp$We)QY;JZ)$A*v^ao9yWScN;pmI3Y6*X#~6Gz`0t zpNOfy|G$@nQ*#iV>Mzhu`5X4e9Iu6s;UVZ=n1iq5YJ3y>zaGkq?+NeKMMu~LZEslg zc6^2WJ(!W9w|s-YIpvkuc3=1_R9n$wbIqG!gz4y%mPOa9HhRNN!1lNUJ7eOl@OQkr zpkF*zV`)5w&cG#fMq0id{N0L3f~bcVLJJ~Xn)D6B#dw&I-*r* z!<+F={286HTMmanljz6k!{}$iF?8xrp-b^6+Hl4r;d?}W^nz*=9f;PSf-H41v4n)1 zW(~SIHlb^G4jtLwXka-%2vd438c=O?rrM(QZj8^zp))WKt+yJj_Y7KZFM7(3V(P#D z`zeX?6r7G``!GaU6WdVU9{b`_9Ejheo3#D^Lc_h#wH}SG>1?!vhtbXW7<#I59SzS5 zqDxgBQ~&;_4GAOdgN}4`%uhpKT#U7G1^T)E9y;}ha14HocG&Wx@ZGKh`ur4nQ=W3-=Boe)Pj%W=l^3A80o9%u73l)`MyIt{sWCX^YKt#5S_8oXv6i;Q_%*? z;u!SPb2+-SJJ5lgLP!2R8tCuGIsfkF`X@p|w?${64J}1C(@r$N_t6GEKxghVbl0Cj z1Ns9iVb)JVz_rox*67UkMQ30<+V9+COuUZmD7c7SvBjrhYL}x^y#~FrH=qH1g9dUD zovBQpg#qM6XRHJoSPgWEnxFxiK_ygpnM>N3rl1;V%%sj0RBU z%kabHJakjNfs-)fSK;S_DL8`suju{J@9Xe4q#r|nAUTg-W z{n7WvqfmG0CvYc=t%PY7QWS9 zgEll6i{NPV`8@Q;^m}n4zK8CqCclRz+=d4DI_CBKzfZ!cI~n~0{hZJFM`-vKbR_qn zFRns6-W2oCqF3%K=m6eBm-HyQMCao3%zuV_0qjC~CG79{pGKlKeuSMd`(L5KzSy7q zNVMa9=oNZ6=JQ?%Q(6q2flAS~=ntJk(Sgm1ilhL2h1}~#~CO_Yio!W}%3^YdD>xA`j0M@|= zv6JWj0EuQ4T$7eDb#e4ZPsK{~#aGZNd>`HIAK-QPH9E4A8N%}_XucL^z$WO-HOEZY zA?CYA`(j?t|6mfX?Id){XQCa>MR)6>=tJmCJr?s@(GGW^9le8&_y}6>bj<&Re%<~D z8{*X&L%r^pbTbSgQ33Bjr*b{k#h0-oo<|#OoGDCgdvw#@fR*r8G=Mc|2OF^|o&S!jpfMbD#q;vyPo z)+@q{7C`qxakS$aSO(jpd*#+El3{A*Qs4}%MPJyDsS5>t@y}SED{IEoxlTv#g?i{r zT#prT7+QY`*25>zV|EH_HrxfB+P>)K zycsv_IE5lNaM9=>Obdx5L=luL168zV1LPwj>O|uQ1fg|XM zzCfq^653(@T%n;7=<^!r^N#2e3_}B-fp)wI4QLf!j~i3voWDOv%%vdXRT)!XpBJDV ze~8}UU!kYuZ*+HGl{@T}4(QBHLZ7cg1KExa;4r$Uen0~$kS8ofX|&z?Sitk&H5Lp< zr*;M!@e*`IkKh2@fjKaL-mo<3*oAyW^fXLG>(9m-xCULqgXoNXjLyv0*ai_?z zeZDY)KIrkd1yeshqgU<@^vCPh&^_=Kx`t=bhW|#_{)+q|kS^Gnd>?cmn=l<;#NK!m zt74@Bod4D&`WFaOvJUNVC)&a5=!g%a4SkC3@OyMEYZeSseH|KDKkR^m(C1swso#O= z_*Tq+i?;ViLC(J;$ar-)X1USh(h6PczUWBqN6+sU=!ZwaLSY1*(6yhA9;>D3)SpG~ z{A;fXfs{c145>1@RAbORFeypG2p6FduZ|TqVM+4OqBqqC=w|y4osoQn!xdT_tB@~) zZLtRq#x-~|{)2AD;YC7+v(WrX^ny!nBT<&bVVsJ8;y4_CZJ3!;Xoo+dGjk!DvuK!^ zbj(coICM%Up_^`Y^j>rZAH=cvHM$477fZF9Ol&4$B-_y|^9Z_2vlb6)nvTv;IdrP) z;#b%a8)3EduvBBvC3qZXV4_6E)UR0XMBCko{^sKxy5}mFbT4uKZX?l(f>+T8iBjRy zuMOT$_D=K{33*C~j>e<+!xnUncVSI@1Iy#@=si%hO!!Qwhb71lLF?a*Zq@~u-}Aqe zgloJB)A3a-gP)RveiGW=J?Q3s6n$?CR>ZwH2!F!V z&;MP@h0WI+9ob;?h1<}M7N8xiL6_jUn12(kcN{&g=g|89Me~#o&r6~0HblQec0@0_ zQRO-RuI-FiVG+8f52L5yINI=6Xv4puBg$MMJkN_hFNy|O1>HN%(R%&R`(y;#-Z-?s zsj>W?3dt~4ODQn2$797e(KR|8D;`6y)|0XPFSO%-qq!=EwJnBzH!Ot)JQ(e8B06)k z(bMq|x);_bNf_DV=q7qT=D$V*IES9=KhcpisT8KN4LZU;=n@Qz<x*K)b5pioG7)bZgM5Uyp9O?dT2n zK32n{SQ#@_%b5DbW({<}vyk_aiF-+S)2%}r+=q^AKibeS^o3Js2WMkGQ9Vp;4)p#g zj4nwXbgEmU0ryAS8G>%YF__wODLH?ONcc0`YP6x3(HD=R4St4I@kg|QA~iB5GGb-4 z;p%AM4Wdo)cJi&!dtevZ-ZAv*J&CUU-(LPnK#$cem|9!3{sL@;58y~V5udlH70-Vs5=PV$y~F#VBfS~zXi9uO7aj3JERFZ0 zGxiet8S+2$y}!{LFGuY#uqtT17BN2nt#?~(&cACqhk_co3LU}w=nE&&&2&o;Y5I^Ix3Ac?vv6x$A}i%3(VB zhG;`KpbZU*`CG6$`3YDFH=t{L2%F(CbdOwJFMO*mg5Aj%!*ra0p1S2p5?(xSqigsz zI+EX_|Du~PTm4XeO|&#xUJboynxae9E#_~E&&Q+f-GwgQB6J`RU}}%7iv>@`3Omp} z@Omsi7(Ic$@J-C0Lob+1Xv57LgqiAq2GTWpBii05G~heXfaizj$;7IVNIV`Nyoj#( zTj+}?&^_@TdP@FA8@j4tn6ct${id}h%8-=T~I2u4d9DuiADSQv>;gTxF4OmLQTSEEQ5}$F?yV?M?1a^ZRo-1dUW$Xjn2S6^u3SJ_P&qL|3qix%BG=S zQB3+mH4-+^9KDMBqUUoux;gJfBYp}U(eC*C0J`>{qsQ=DtcyRP0hVqSet%F6-8<9K zQ!*E=zqlFa---`V;I3SYMz|$bcr}*qMFTp7ehi;NkL?BY92aUH22dS+-WHvKL9u*N z%rA=hwdi|0nkU1BaEJmw1Af2;n7u`~t6QOKI|wV|W=!4XXuv1Yk)1_n=65vEj4i|S z{Lyr@!^+qYTVYE~CP~yHu@9ZPzpxcnZ57sNB058J(GQcQm|6;S>UU#vd^?)8b@)-N z1A5afLj!*nE8wSC4Kue1H)ygBiHZ~qKxg2d_}~fjW;={s@e;ZhI=0Q2Sc;?2EBJ3L zk0slMweEC(sX-v<~41hO%g+ldvjo#4`9l z?0^@sBev?8F>xa<#rF6U_QHCd!UeS$-3$Li>wky+uvTZUWX|7W5`8E*jT5ncmoSA- zqnqhBbhG8`8qRTLbS>{fr*tLO!@bxa|3-h%=yiSgMztKPlRttkaay-9!1|co^FNP- zn`Rlhi8i30e$Ph_pdyO@~!_a};hTaRyF=@kV zNq7&uh;FvG&=-$HKZ$;gej5IacJv$8!vF9j*6I;{%FWv|obPUE`+d>9a0`0B+=rd; z`JSBr`$_yuLFY6g>J>UT-8%&I4I1fRXhWI$gi}xm&DTU{t_`|Wed6=+=q6l z^gH2v^g>&V)_Vl)`0@CBOOk{yJdbv`3*Ain(NDXy{^7hAMDrEU`c2S_s6F~cqZ_(p zz0kEDh~5)pkzS-gb4Sn|fOiE5xzS0C-Dd9+is z5Bgy;1Z&_Zw8J%MJL_WpIrIkI7RwK%@|?fVW5HkO$g&IwcXUB?2D+igW+1xRl4yrZ zu{=J6ZniyWfTz%o&&KB$aVGhaH-&+&$ExHHV(P#DbD2ab3UUn$Yg!ZC3k}hR+M;XQ zJ30t!k{^wJY(IisaT_`VnFfU!tBXEwitd%(=&89WKEDl9|NXD&@xfelldVEW_-xE? zN0;Ee=>O0){0wi#(`bP02FFu_<_DrPGz#5>%j5IY==(nn=KNdn7Yg)Je2{raSi@}S zl;=X1rZ{?qRzrVJFam4g2K353h6bK*XjrG$m;96m059exs6d%G;cnOqTy5?`8d*;(veij|zg_uufzCG;je9>$E-_+e&TQwlTGxwyAA9wQburzqQ`yGk53r&w9^Vx6e8IY+uY|k|t1wNueGbxu6m& z2j#ehv72!)R7WNngP>Zw5UR5qp`H(0p*nOF%Kt6M?dx`ZV4{m6TyLkstgsO4ZZHGf z2xWK&Hh~{uby%&B)57Jj2J3xL7nxsQ=ae*sO1vM`DVPpb&}OKFj=>DN|F1LAIq~l2 ze1VY+>fDrpI=79X66gcvU;@;&u*mkeKvi@GD&QlS3jQ&9ivG^EkPoUeg`rMKCFuG3 zzo7}bn!;dPPlgJ#04ne%sB?D|>UnSp>VCchb!whK1^8s^FawY+VGp z+aoB)M44}cdRe^y^(2ct(7CAmpw>yD9=WNZDkucyumaS@*9atw*-L zyw^oo2C7r#p$e%E<)@z86k0)L+zwWSgJ5!a0gi{Cp*l5qu=CaI8(5BYvLVjJ+8*k* zT?MYOfzfp8;KCrS=?o|G-%RMu;tDlR<2@mC7Ut}bi>-OZV(6-S_2cmc}bCRFPlK(+b_ z)T#Ljm7w=XXB`Xb;!9@hEKrFSG&X@LSr51URZ#x6L+p6}&qNNdIRe*nsE&Mr%JdJ^ zxeqtWS;v7&)E_EvI;fWBfzm4j)wxXkLfvJZp$Z$TeV#wAX-ssrE|35& zgL1qP>h=35ROUB~pG+QkjPuz}QdpS%3Q!4*gLM$))N4i9vCdaoDWN+r zg7QrC2p(=+2c>uo`ok}98jLf}NpKBR%eO;Sb_}Z3H=tVo4(i1z%y`E>39QJv2$cQ= zDE$TFz1^P5wjq$gc~};{hH6#L3C_h?8LE={Fd6I*)uDM%9olT`qp$+&Td)dDGtqg! z&W!MEOu`y7mYN^RLz$~m!nEX4` z-Qqpj@gE(^pFh;aofE191>H8OW^7{|1QlQ!%nuj99Pk#@DT_MAX=xd#mQIH{g)5*g z(hE?J>MKwkdTr~!P#1gbsgB&8f=OuvxuG%}2=$~J0hPc>mcA*gHO0#v{cPzicXcjyasn?-`Mj}28|a;P}zq38Gi01skKVmdt$qO0zz8#(%CbSV+-;lz^~PfztOid(1x_5~eEpCba{cr17!zgM07{{i ztvlPgFH}c{LOmzOKvg=)_NPHz8}n@cBGff;9qKN533b=}wYC3DCtfb-`TJi*n5Z=Y zwo%R24WO>l7EtH5AIu3y!s>80)Ljv6mJ={7RATv|5-wsa4R!Tbgi5R_RL8r|qJB9Z zhCt_Z64VoHo++#~`5s%Jvi)1OehFp&1L_GGcDCauDU_c~P=O1=;;@SC2SQ!ci)M5G z>%p@Xfik)PbYBL?b=5zE>PXJH z&NWg1s^DsFCTejLsB_f|>KYga8^dW(4*!EnF!?;^!{qERH|yq5*UoIH08619uYo$H zJE00V2rI!$wx4Xi-TzsbC~$Eo!`imd(&T-hZl4KI=WaICRlXLgLx*ks2+Ge7sLG=* za1x3Sm54voep)Dhg&?QM?FwL00YP1;%9lf((+yCHyP?k23ERJId;*p5Td2oY8!K)uG)35KHLMToB>-dalRS-8_MrL=+?y-eyQ`KkpyZZIh5lJP!;BeYIQ-VQxO2A z*AVK(rj@PRK?Uv(W#=}IfU+M4bt+~-`Cqk^`(Lfuia_V)pefvha`X}^&=;uA{DpE9 zWtrn3A=I1A)KHECOkNK*XWbIY{v?#$B`CcIQ1L!2b2}{!zuftuvE)!23t$fz470+F zE1cJchAgle* zL;-q0J-dfMUF{>G?$^ms6)rQbfl6!>l-(X!0iJ}aD9#$^es2i%=xqtF!M?C2tg_ZA zWI3b|w`&IzWpn}R!SWdDqWo#{=qJzp%SmS=(4VNs~JV%?!SwifCd z*ben%ykzo^Q2u^FB_3^)a|#&#WA4d z@u9Av6j1tAVRhISmV{@a5{kLSId$2f?uLTU^ZUO7nCLdC4OKxCs00Q;o$Jw1w^<;R zVX(=MLS1YZU}5+Qu7>HhI*DC@dLrI~I;Bsco)^EM;{Dso{jUJww>gS_P#0kWsH-g!w>zgQoiRUD!17RjYd~Fd&9~eA-^(^8L!GMy zP?c?g3Var-12>^s{Rir<$PnyQlnpBJT(-^+b?p>3R)XPJH-dWhw=(%KH(~e3_G1K z2D3vYP!}p-d#DFZPpFPefO5PD>Ka)O<=_-l0vBOw_yDR?;dVJcDV+hzZ&RozX?H05 zrH}&Lt^-Wu=meCb^TvBnt$zzu=?|zxymmVY#)h&>3Z<7C=7HIvu7!3m2V4Y|*j1>) zej9!Fs59LE(V5g`BLy4+2SNq<2eU!Hz0Q-X6x97c2j+rnq2BvFf~DXus8$!-=OkPM z>b7oR><)Db#=@L15PJUq?+GTV;F9s4@fB2{uTXbM#{G`tJW%T*P^}GsSzrUG4vvSa zd=6CS&O=>{*P)(-&!KL|-_Uda$2{P?swIVLRVk>exdT*-yFxkWV;l{2cg%#kCN@JA zupdhQG?e}&<0B~jPqvPH(9utHko#W-X%XmR%L0qSGEglY4b`%9P=T&Poth^m{|U^*pEz)$)c=iL`|3WOt}j*2mVvpb8u9W+KHYP#G>TE{By_uY)z=AJ_?2KjPd* zhoC-)_zZQ`M?LB|EDe=NWn0&T3fu^)6K$a$!9Afm;qJ>s2E(8#8v|u93+j|Cg=yg) zsLGx~IeH7F{{xnU5so=_m7rQ*7Y4vqP_GS}Z2bZ1t|)NaqwjWAW1<8aLY>>@P>;yo zPywewb!IM9E0>sjCDc{C5h~GRP`B?rsLGn0a5~ZsDxvOBeg;F`wxc|9?*D~MWUvnE z_6UYLH)o&%T!p${Uqii&`k!=8SrMqf6^$*Su9bl>HJk`_YPLaLOK+hH`VG|qpHue! zKOqyfG$+)#DGJq*lF)O1Lp@j;*t)Z=huC@=EX)3KsKnnx`S}i2`ERJt10$UF_WY)V zG*F$G2;ItTIuo^IDO3e}q2%YFPRU&;gO53cI0cpP6)63?P#5o;v)uox=r;nrDup}eD5QWg$PN{-0Msd{2z5;~vHe~qcSC>V zQ=tNEvHe3(ojnbe;1j4*8~eOdP(nA876{V9yKn;3`}y`4oKGxP!2+z`z(DC;biT6L z11qxjzvQqJEX#TitOUbeb`q)q)sdcXGF$=Iz`R!+|L!MD@*+rc)!S79Hi1fDDU{(O zxC_R*=DZl4hwWI0z3zO$(FM+Cy%{ReiZ`5>-!U*5>jN+ad<6ADrteM1e=*42;dZ&1 zlx8Cs>MH#UGr~l-oW#mO-F`!%S{Mwgz!$Iy%y--A;B2VG{=rtT-5uv=LM}oj7WJ+Z zH~{K_G#cj7>;G{k`D6&wzV^GPr{@m-IZtc1RgoM-+9DEU9AXTSTgx92w+UWKDs7kT0& zbOLHW{!?e&8R|9T0F*rXGw1)7wt}r$zlD8a&F9{(h44Id*Jje?g>&vtK%M)@FP)1c z01jY10qX9E_{#ZiSZbJ#^%l4t-i5jtr@i)eO@NPJ7TD#DbDJ%Mxma(6x(1%XDKObv z?*C~_w!C$IhO_KD=b~B$mB@3bYa`Wr`#}Ta1K1LIjStR)XBT|HI?hL@(r>Uj>&Bm) zN9`7*-?i|LlB~S`lva;>+#-oF6>6`o%Gf{ndGK$puTH9}M-X z_Xp~(DgMnl1tXz4aUH6&slGd(BMgLk5PgEF;BTlGv*hj{&Vwe6F)P%?m=A`9-Ju>p zeW5ZQXX}-=zYEIo0jMY1DX15hTTpf%VO;3_(|OTK2(?ZJrSC4rM1iV88PtY)6t{(X z;`M^MYRACza3$2E_cGKI@;Ou`AD|NX0`=(q2lb5i{pAFX3AOgObw-H3o8QUc1S$!Y zS#2oA&M-RcZ~Nn+GF||~!3|J}2SX*W7s~Dsi~`RY@4#xTUqN-I&~GR48Xj_=HDscz zvlXlW=R!Gn3Dt>j&>Q;v;eSMNZG?x(SU3LbTx3I__OBXmLcONkg^l0~I2e}s=Um(; zpiXf_(ypNUyd)D{L{p4cq3+Z8UOt|$b^~D^*0-TL;uprp^F}2l)G5ga)rl5R`|XVV zp`Lu>VL^BTrh{Rpl++lP@R}=`wO6M!!=NWciZ|HR0pm>-8C)NAXtEhgLeFym#z)>6%JCSe*3W?oydA2=2cZJqfPLUosE##?=Cr&! zl>ec|=}`Vw!UTGq-Ni(Y)~iq#%O|KOSk&l_Q#G z*b?e)S_<{Ddj{$*3m4P5{W3szW&~B4=!rHMc7cnb6#e{sJg?( zqSMEAu8rPMc2i(VxESi%ISzHo?n4#!5vGQIah&HxeyIKWak&3A>4-oVjoUa4%JC|w zgmytWz5u2F!uEgKex$h06EhjqDXape-vY|d0H}*~0+hd{Fg@JmW}=ong}Mk`@th13 zLpdr8v%zXG3mgthz^zb@ze72U5Z?)y6zUyL9#|SyfqM1_L3Qv7)H|z02^>3jJtj(^ z3seH*U{1Ia=7D#iuKL&soergdx;XPfox|cV7c38TDu+N_3zJR01nTO)36u7a8grhy`^wUDbuYyj^; zy?Pc%>2#_dl;f6Ar=}fLf<2%L><{&z8xIwCYD(^ZDNIM8R?mg1U4);R^ zJOy=?UWdAvotC{pd99g@>2xLz6|s{+Mx<*Zt~7h`U4;ZyImtpFb*n# zX|`Sfb@i{b^6|y0DWNJY4z*tws(_wQr)VnFHMPRC=KkBu zL=G=O1-uXSF7+o=1@Y25m8XIJtP4N|YyjoR4W&07ssl@*PRUxRj_rZ+e*sGGE>xj! zpy%&@eq*9mhRxty196}f5?*t!zbGrkqn#p#9$Fa>%pW~i%ut;x4Twfrzt zVrQW2?m*A)|9Hnl4!)X#cSa{6KVwR$mga)GNGm`&tOgaRK9s|j#@Qo-i$o;R|0Qdi{jXNvG{F<7%w9tU{AO#P%uc}QP!%PB>O>}!=YX;+1eI_( zSO+$RDrgr>3(rA4A-_TC|8_HxLHI1r#pe%oZVN!QyarTd?V%iXhpJ!{Oatda6>!Al z=b<|C1S-&5s8jI?Dxh~($37ZVf$o${WRMNYQGR17sJo#GR4dy<8H|Fu$fiN*FNQi5 z>x{urr|2M5;+LTcybW~pv5<)DOyWYN%@>r?C=LN7~qWh;a^7fNfBB z$6lyJ&OlXq&G-l^p?6SmT-lw({a|>#{wHA~2Wg-x&TXs;by0SJdX*asbqZENy?X71 z3UmN^0z>(^2Gyyjw*Lt#(Z9Cuo5MLJv0*s9{-eQ-i(~w|H^E!DQ-2z<517+t1u7zWc%rJ zIjt)MWmgF*P!p)cyFex6hDvZWRN%=_1ma$Dy&mVrvFhOrq`hq^#@%-xrXS~(iZ@ocDoOHIB3%JD&{ zSG$`~0pCL<{u}B+6*;f-t~mvipEOVjXM;+h5L8FXLnTlJ;>Yc(%S0DRE2xb6n!;$P zM5aKUySY$-mq0xMH$t`YC{&=cw!R6~!H2f~2|XRl=jcU->TEoiNcVqsCd#lfR00j5 zD(ztMp-@l2$xzRMwNRCxhPp^^Lv`poRHD)II~B%-^6PKR4Atp^P=!^3zPkVGGEpT> zpektt)uJB8flvWQLOsi8*m?z&!(gZiPeOI(GE}QyKo#;9Dxh}(r-Mm)>VOekkp2%tUXjh18qG9>ROotWw#!x<=bI;xEJb^j~B2gOjF3&Zv&NZXQ)#$ z0Lp%BA?|+#n2JChm=EP}1(bX}ROY*&430uMIt$g}TTm6WkaQP}h?CITN+yJCuQM5vK$3pejoWl}I|1=eBhrsB;|vm2h3CLYhL^b%3h87gT5Z zLv?nP$tOY*;P*c;QN~M6VKr37n{0gq%He4!M^~W|ehBqQeh;M|v8aS;jf$B(W zsB_%QO} z=Q!wXoD7p9Uj@^^ldvfK2z$fq0nSG=tKl%#A7C-qqrCG;%66!0=>=>CKf`>mRt3l3 zWH*yC2zEeyF6XM~d>B<2)?_&Z=785>3K*%9^CFZ5W@KFnW`_NtUe#7ZFIYt9kC9T* zZ9L>6=+CXuk@XjDxsu!l?&&OI%YqS!lQxx&0w~VXCC#X>dxuA2)>8yT7ti@7U+T{dzd(V@pYXe0d^TZiE{rf zv2pmWjBt#a?B+VKPuuGAJ~t<{wsnVNAeLrD-?xsnZ1xv2%Ucv zIuK?+I3D{T=1qA1xQbdud#FaE4%wcE5pj?eXOGYc8N*4S0sF70Y#_oBW~2Q_1gOnk zUu-s85(fxW1OH{M191p?5!);5SA_0K*8X#*Fds)530%}FOiH!IY_Ag4oh9H%*6qzs zfkVauoOVXO%xopkgMG+o$UKD=)7J6ncJVc)>kNx{b_zn2eW>&|4nLA*1>4JoYz@^U zLVkfn#|YAiF-L>X1F2l&fpsiAHud!WdlG`07;B6{$sY$J%yC(h zZ)3gRWQUM-Bms?JD$Qk`n96>7I=7eoarn?!$KE(}+l0CnDx=p2S$AaTbW!!;2#2Go z2)c*LJQ8w^AQBuzVh>mk$2g%m`)z^SAiG2d&$E8RycON5icJl=F&n#D9DA_ojBkD_ z!&N6#rvp2@i0*D=)x_dOyaCEzaCQ?1F>?PPQd<-=C8A~b_wh!3vWd4&8_p$Q~Qj!>HvP87K9sx84uwNJBPdGh*UPhd>Ca^{obEtPnanU)* z{sYKQXSrs=wx(Cg^hS~BE)I8kb6%c>MtOo?A!sw^jZn@`6+NwG<8T^!jKO(fWarqw z!NCu^xJtvX1bm1OA8aENxSa)U#@?1t4m$B3)K!Im=c)ENM?xHEoWkIi&8M>;4QHp} zKA4W`f8%%*^S>lL4!w8iC*cClLor>EFTqCx5?jMM4!Tze+!*>Q5t3`pq4$;@_!%_U zVhnh1=;Ft@TwgHChSFBn`~;qBA?xT+VZ<%WhGRD!navP&z6H?4TwCv1BqOVbh2s0?}ENR~&l8?!=v0j1hVB);Q z|8s0lq5no7n(8g-Re}t_ARWd@Q3x4xNG>|H7Q|6y9B4!(NIP_QAs>TdjZ)a%K(0{- zUyTT~kFv91-vgbo?AK-;GJ;58JnQ%R&@>$ZqoY_FrLQP=GsPVQm}<$K$Kh>~7;l}5 zLo!o2&XUMwZ0q59EAvQ}kOHN|o^Qvvs+f-$=!J}EBzu!2rs|?Cj& z;}Zn@18*ZghVd!uKsjUq9343>aNHtjY3%&rCiG^buP^pA;^FH!ek#%xege`Jm3See z8ZoJ#4shhO;2m%f%#qpJSqKN62(kj_zewPq>3zrHE*xuA#OY3)?`A!kBRoe;d}On3 ztzo|)`vKUDH2YZuf9Lt5xj0D3#nlU?6)4r>;IC4-$`N=YN>Px{wYFwLo{c1?BOig@ z0FI^v(#VgzIqTNgMJ32jlE`ie#9=-Ly$P@wx|x_?WZpUq^*2K~C&B_$oEc#b*8FI* zXRN~MFJ`rI^clyiOrC&*S0n#viEYJp0qeimR;Nl0{XLAr9DT4WhTrn|>d27+A6K#4 zCR_Et8b@x9$5f?Ji|iUvb$RB#C>4bnaMT)xj7B;oR$Yip?1{V?$2ChV90|o{-rsbq z;`$tA54g&1n9?NFD&cVIDLxEE@X+-4FYQvAo&Fx+wmV4 zoBJe}6r0G%D(VG01&XsRPlm+yjRjI2xfG7r91606gH1k=Vf;GO9aE5SPf4K-S4CBWbono^H2AeoEqLJJZ zjwHw*BIECJxl+-s#RLhqATO~G8AF)YU{7Nyc0ULb2fb|^XGr1)al){_hjl^rp6CTT zBH3#!MqvZOWX#i=ld#5R$O{v^Bu;}!gg>jPKMLaNfx{hE`83wEtja+INQ=%sd~HOw znizGk4H^7T2+vsR`OwUyMdcLdeJr6#B&3mps?uVRgT3UTs=dMd2npslXAMbGqk!2J zX5EnW4w4CnZ;doo5T9y$hI=g89We)zguKk>#z`x?f={9Ign3+ypX2B`e1KDp>^M3` zWjR@|WbTLVU*s#T2#=Ee^PK{|aU{Xl27HtV$KQpRZNd3diLU4hMAp|(ieQ;0M}A*& zc!WbEfpIMzXo~(K_A_EL9LK{*CVgPGAAW)UUwz!(q!gD_-cim_Jl28nsd1^IVlg{Z zKkG4%iKo2m{e``Wl7zDO$spHs?CxN)!%kvTHo%BbT$6rPop(!{;PuPH;Gkb zeIB1fN#;JuYJ|n-^e}-jzIuKy+#90AAf>}Z(1?KcEj(SuIu4$O6X`!nYRX!pk7e2# zo2SSRz|kDB(JP0q4|vzuNi=@Y!c`4M9b#aV|TaAxMG zu+0Yj^cJHpPSzm^8KVg{j-+;>TpH@r&ZBf849R@5DyHBpH}fuV9QO0sABo)!^h1wm zBtL>c$H->Uj8Yfp!*6_lS7ZoLD-Uo;I(3?-Y zzaYPcQ~slaYqC{5jQM>6)WW%sJtnqUwH{~u(*qxC(9u|9#klulkk*{cgLkYG7Z)-}C5tOM}JC-|-?=0BHJ-i!4gYzydrYFwlP zEeWD;Jfu@qY&Ov&!hIjN1I*+VS{2Z^$6DWdctm=8v6^dj{9wNr`YSCZR9v0#6qo&b z$Tg0kud$yf8e{15eCG2=aSpnlNIm)g^^8{^MiEnvN>dwBcNY>!gVI&cE;k-BX}%_b z!UStdkU+C3Ysrnod0w19=cveD4|K0vqLa-}26TJl_ZzwzY4nj*EOX#X1>P9{!FU1z z^j)91$PS~N6uCwMIuagzKlYCjpa|9Rp9lXp8X|v>j;^>U%zrZ1*hc{xNAOjH1e)2p zlinh0WIzxB$9FL(hVg9Xd2pZ+pLq}DKar0!eaR0~U2hzwFj+Nonu_jC!nQSu{bAl6 zd;UnYXY3<*BlKD!({LBXDc>q{jiQn=mhDjH_mOK1W4;;X1?a3M&<&hUVxE@Z>v39! z{io9%&f@jS$KBtEXd0{XaWDA}~P^Ry5njZP@Eq2)O(p<9mF zm4+ZuG1Lf$T^R!GVttAr{^-`jel$s>zLY2fb0~??bkmednqIVeR}r zMwp3edLX;ZQPx_U6i0(S2E6x2eiZp0)@^Y1mVg=s=)`yeR7Q3ce=P`F8NH)cR21|Q znQlkqJJ6}%#^@!JvTPi;YBw{Vi^4(VmmJ@&R5<>D!&Pv(otiBKnuhc3@D#^EY?@#* z6WJk>TgZ`u^%B^Fz1Z0OXa4vp2G4N+wCtX+EQ_+nBFj?q^t9?34%U)rPv&va|49Dghu1N$9{T7Kv$X_AbjqL%Gx4~~2_W16q>lpr* z5lf>x#|d;!>lbjwvQD0%rt>JQ#b_;#G-_D_pG?P*^4d#~&|`o(PHog)UUVuE{4%}0 zjJzuAhE}@vyLe*oG)+flhftcu=0Iy^OBl_P_=9mjYxoKhYDqPBVSXw&hTaqQJ6Oe2 z=um3r@h!m@q0UDO{FSoxIBd33)C_%=RK>DNg|I)yYb@9~vW!Ns_vXBU8E>?!V;sS^ zAJ;LrN4TL#SJdU$OFddG1qw^KRodn8+F8_(xwc0xK0==QgHC7@&NbpDIQ?eH} zKZ~z^?CrzPb!a#mFDW^O#S=c{GehSb;gviN^b)j=AHE;c6mO2Y)bkiwcl2_R7k^1!!|f_!4zwDM;sc!QK&B6a=8!}S zl=r|s?0bMlOpksmNwG@s^=?+RHN{)Lr**7MY_7b@#XZ6BLjY zzcsOohmYG7w}rj#`2K~T;yUMy68c@zT~X+dLOc{+VOSic=s0|hEErb6z;bi-!mu>^ z8R0Xyoc+nnd%-QHbOE_W3KHihkX*AY*fJP|P8|G&wW6cwW3e$DIdCwNmTF`&1I@$o zNZ5}2A5K@JHwp)V+F-1rx(3#%q1Ze^HjpBkBd?9FH$nc8z*Y*;7>%D|>}|%z&+Odu z5op9SZVM?D*&}2Na5BrXJ%IBqX4nDQZq{80yo_KWV>R|WDP}xDCvbG7T8*&CYoJ>X zSqIjS@e@YBOZYok^p;JR4qp%xJjK#zn#lD6=KTGGDgK$wOr-7^^SVhZlR$G}n`mTut$bjx{94}!0 z9`4~-giU9-iD2^xoC6z;bk@~^mS8w^Fmoj%fd<%AsA(Hx3G|brIGg;Uj{l9J1dET8 zEL55w#}hab$phmNPS$c9Vf~*K5Dp*yzWOxG^QjQWG^jX{l*H~=& zquZS%=3A1}@f(1CD|9;`Ux1(7%xCC62|X^ekssqrIJslNzA%4*WBj|G!!#uG#m<=pd&l}MdWV^7L?qx<*5f(iQ``lT`=pnhEI9m*gUN6KM?lb~$Xa60cnPXK!(J5R_bsrtcVqXGy|GFz!>)PojYyRL#Zm88coRd8OJ4aI>U^cQ&9tCGuYFpN`Q9OnUm;TXa39zX++{l*w4zL zkrH`kY*U8w{ND*48U(*#n;n@a!#D+wS5i%B0`0{hD^+Ub!&y}JJCb0spn=hN7xu&A z#zW+1XKt9~)ydp`!R;@ORk$oj?1&IShj^cI# z&SH~|6jrg{5_t~}hOg^68(D+8dUHQz#{Mz3S+Ge+J`v4!uk|lEsx{cxNUSFu<^AP& zk6jOPzrtMO8ajQ6GauPQ^6J7m5S__p8)S9*;qQj|uA=WGdEuZqg|@+ozdSMikmxrQ z7toB^7%Hda9D@lkm-TBBJ;YvJbXpK3fFl*h0Q~fWzwnuf!2Jlc99@k)$g^9M2VghI zlQ`G&5H=rSIE0`v*qFwA6q_pv@DR4O3Oru;XC68llaO~~e*})NkXS3`(JX-WbI2Ea z8o4<7lK3%_;V1ZAepIv)-GGpfilwv!Cowrnve}8u>vDWT>4UYdFbP!)IX%oT%EdM!;`tWHs@#NW~Q7h|K06oHS;hoB3lLEoAcvfmcz*YD?fK@?0{q@h#|~A9rwP z3Vh4f5>yxBHzPUJN9`SImn_F2=!`_+4uXV?a1=ernkLy9_R3ogop4f)xt9ggel7E}ksumH z(J6%wjSnPn%Y3DUyNH{^^ZS9=>_S!fI4Xv6CZmEl=wJyg#lb^!ti9SexJ$so$h(>2 zl*o5$lMw~E#!mEdJt!=pnu}z6h(!K|QtE{RjdBiL30N0L z|1J90Ic?FAKjc(JW?l{ZA0!!wk3o=M{O5X0BHsz#gJkP+T(W{DV8<2A`9x_v&OTvu zm~}0y@)L>m!D%6m*h&uLYZ#wn{|95tT%PO$@sXYN3yw-8-xpsAU=T+>*`wDH zoiq51Vg&EDuv4G8x-C%wf{mK;5PUm0U2xKE3Nkk;rWab+0F}#NIM>~&qm{)PO z{`c<`+q*(i2T67tJ3}eJ2iv*q9YOw*V7*MQAA9#nZZXtY@74x^&w7?T+No3{55Z27 z$Tu?#hm)ur?VW8`CG_&yUJ)Etv~#NMm(0r(IAk^Em` zuO(MJg1&~ORZB6_D8;<7&8J`(nLsgcQp|$w$7xs`1cyp6Q_#A2UJ2_S#s3aW*06oY zT*NT7n7Fu!ycqK9&JX0Zu;XQKl795h8|1svk|$*ICK&-KgN+4dyQMPI2rSz*6Jhp ze6PpkMe^^4LS{CTv3U%>C6LBZjuae`%&}z8aDE5lRm>BR#4qbb9&GaCYbNr~98Z~7 zVDBh89nAg#^x}wYHf21&*a_vHIMnbZflesgC7Bo18U3G)ezo=x; z*Z70Hy5}8a(8dH_KJGarm4UrQ7H|yfELPlEbPwX|A3n3e?f8jD%!$l3#^C!uiY>|h zb@r;DpNG92>|HP&>Gi^QTk;zQyC5%vZXx6aLw?>eJWjr|(G*8tnQPqOa5JxpVL^gs zV6P2{=7ssKxIOH}v}E6qOiUbWY+(Nae1zR`Wc;dA*L`HI(A~tbh2xw@mxs`J7EkT6 z?Ppz_M5ZGM_6eo8obDm)|HI)6_P4W_21epCeWR}8{0B*mAc1J;cSDv1*-7+5hBt`> zSkf8b0qk!R*VTlhHvxPJa0Ed<6g8Gnxj#-c{=>kJ;}8xv5JV#groiqCvfk{S$KfG- zti^5@YYi{_O$nNk$jh(LGKo9|dv-kk1Yw?%a5KrhE5|q6|AecPxKEE(LTXta^bi;B zyS5z;uh~)2NKVB0HjjZxDWacYT>-ZP*&7}z^HX2(K*hZ zMl(`6LUonVtD)Z-{2qmnk({?#wrMS?C|n%%(LIQ~ z9gZ5AvzK(_EBaZm(}-;yN@aGJ>0AWnsj!QO&O~%>k=P4;GqsDga4#G2NG1uqhvEs7 zr(@le`62ec+J)2$2U%4C$-P!Y#sdO0pfi1t6~pgj>ryz9xo90Kjo(4|yTo2iI_cht z6O9j+aYQzEQ&mgWYi#d~qvC3dd^wKYBoht?(OIu%{*wJDrkkGq5+u@{BMd&q6HsFn ziC087ICI!ZI=9MV09?5&Lmr6>Tf<7koO5uKtyf=A#wyr&5o|PjpImKsBBN6lY z6x0Wu2v)G?u*n2}>VMs-kn8PaXCk3?{d&**7!2<%6WvLBQE@(!V5ytC^dfgXhMahMh-8v6;Vk^27& zBH1mn9ftfgRaM2=aMMYQ{31cthDx9e`-iZ}gx{RZdttMUPBmbC(qioO=%ab}id zxDlO+?5#mZBMbhDFfW1Z3$|Cy|8i_{Vw2ZV^ZZ(+SH3jr2!)0o1u*ujVC)vmRwW?=ruQ>^J(;^!3eA9L^+= zj~U9i08V?8eM1XW%@WbxX!c&R*M<2alAXj}H*4+#I}6h5V1?C2cN#GgL&S2t{B}t7cumK#2|K6zAvtqPYlDz=@7hqnFSgWyJj4U!b z+c>t8-v!pE$#pvQbcGrTjsKD7RCMa#`vh{gJ~v8DkZ)|vK~Ndv$pp}d&)gTMlVAgk z0!gx-6%>QDMhom_glfcMY*%rdV81R!Uqe41c7=&?i*-8o>a#w^ItB^G)PJz>#lcf` zh%u9Z^Vk?i#?c5o8wcHSrf>La3}R2Co+YrH1O~I72=m~>o6DjMoteV?0yfJDrZL2r zgjj{q)hLXQ7y8_AC!0+OHk^4+j*!uS;5Sivi=#K}FJQjZs-15M|H4_IB_+FRtY@p)Z*i znO%A2w{e==I`x4Jxg_rb1%qUhu%sfoUx|DVaZv8t0%xKXGIlcAfSaV4Xq4kxmr!5@ElDxV0m@d|mG;rfX29v|b6_3$4NTi7}D=ka0tP zI1VFEiLa@c1TlYT@oS;`ig_C3zpT$SSZ~F_Z;tcCT#mj*7Ias_^sK`$k6^uQ8i{+T zFG*^2BA7-c3*du;xg=LM)Jg140~VuKk7E*hPtfsV9@BIZVLO7O1pQ9Vq45vB1O#kM zqq?wn#o`^t&hx#rvl!>bk;Z5;EYC*B=!;=H90g)L3%%d$Rbu`hPG_MMo%L3ZaM;f? zqes}ZK{mjWdXM}DHaRSz1tjqk{XmY!dM|tpfkq|_&*S(aElOeu-9x@XmxUQi?*v^4 z#-WBjyZwfbu-G)EvK{Evx4=iyxq!bD6txi_h0LZFvfSuvxR0_COaf6b+=AoK<2MFb zajucWIK|rc5LpS&4sWapFb_Xl*{j4nhbqM1Ns73~TH`Ce`r*Gc499)78h`8c(-?V8 zVFgD1%(s($dJOxbycwrS?I!GH9Y}?a7yE?>Hi7;2bgjPmXp8L+WHqU7I$TJw*Z94N z&Nq@s&bkoQYpi2`nEsP;Ato8D-P%ZOtw~9STae%6$c2tZbd3M9E`uYD{>Ja-v@uCt z=jclEZtG@j3YbCi_wW}RKlib#Pg1K$YG*-nFw)v9r^79QCn$uBUCg&pU3d#5d6}R; z8F-pJv*JTk%b7|rE;qCHkC;u!Md|dxb+%BoRzY~5d@tkvvZd0IT&v<^2KqhNzrt~z z{WJJFhOgU}Rz&nig?#KW-Heq)XKR+`?+EtA0wzMf1ZPW;4?({h^)!P$t=^aH`yiW( z&P0M0#qK$CS18}b)C2U-vbT~%yLo;$CpsT7m_TN0=&Z&TstOseah%Sa+{9r{jv?qL zLO(I`(>Q8`>}06sHe`JoUyX3$CTNg3OM*>F^VLv^=j6zWz}tk&304f}8rL|Y;^-ZY z%MxTK##@+g4nCU6t7DbmUW2?o)Cyj9)hlQIpf}ON#0)MTJxs#)!R!Bp>EANAUrX=I nrQ=s`*R)xO&Ye5?_v+lan}5^hZF;oq)`e-0;P`93_b>f_8Pa^v diff --git a/netbox/translations/nl/LC_MESSAGES/django.po b/netbox/translations/nl/LC_MESSAGES/django.po index 8b7451297..ddc5d49e0 100644 --- a/netbox/translations/nl/LC_MESSAGES/django.po +++ b/netbox/translations/nl/LC_MESSAGES/django.po @@ -16,7 +16,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-24 05:56+0000\n" +"POT-Creation-Date: 2026-07-30 05:52+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" "Last-Translator: Jeremy Stretch, 2026\n" "Language-Team: Dutch (https://app.transifex.com/netbox-community/teams/178115/nl/)\n" @@ -181,10 +181,10 @@ msgstr "Sitegroep (slug)" #: netbox/circuits/forms/filtersets.py:249 #: netbox/circuits/tables/circuits.py:125 netbox/dcim/forms/bulk_edit.py:176 #: netbox/dcim/forms/bulk_edit.py:339 netbox/dcim/forms/bulk_edit.py:696 -#: netbox/dcim/forms/bulk_edit.py:906 netbox/dcim/forms/bulk_import.py:148 -#: netbox/dcim/forms/bulk_import.py:256 netbox/dcim/forms/bulk_import.py:365 -#: netbox/dcim/forms/bulk_import.py:656 netbox/dcim/forms/bulk_import.py:1701 -#: netbox/dcim/forms/bulk_import.py:1729 netbox/dcim/forms/filtersets.py:108 +#: netbox/dcim/forms/bulk_edit.py:906 netbox/dcim/forms/bulk_import.py:149 +#: netbox/dcim/forms/bulk_import.py:257 netbox/dcim/forms/bulk_import.py:366 +#: netbox/dcim/forms/bulk_import.py:657 netbox/dcim/forms/bulk_import.py:1789 +#: netbox/dcim/forms/bulk_import.py:1817 netbox/dcim/forms/filtersets.py:108 #: netbox/dcim/forms/filtersets.py:258 netbox/dcim/forms/filtersets.py:390 #: netbox/dcim/forms/filtersets.py:500 netbox/dcim/forms/filtersets.py:895 #: netbox/dcim/forms/filtersets.py:1117 netbox/dcim/forms/filtersets.py:1198 @@ -311,7 +311,7 @@ msgstr "Eindpunt A (ID)" #: netbox/extras/filtersets.py:503 netbox/extras/filtersets.py:562 #: netbox/extras/filtersets.py:623 netbox/extras/filtersets.py:662 #: netbox/extras/filtersets.py:695 netbox/extras/filtersets.py:869 -#: netbox/ipam/forms/model_forms.py:523 netbox/netbox/filtersets.py:319 +#: netbox/ipam/forms/model_forms.py:523 netbox/netbox/filtersets.py:324 #: netbox/netbox/forms/filtersets.py:32 netbox/netbox/forms/search.py:20 #: netbox/templates/htmx/object_selector.html:28 #: netbox/templates/inc/filter_list.html:43 @@ -412,7 +412,7 @@ msgstr "Interface (ID)" #: netbox/dcim/forms/bulk_edit.py:142 netbox/dcim/forms/filtersets.py:227 #: netbox/dcim/forms/model_forms.py:144 netbox/dcim/tables/sites.py:74 #: netbox/ipam/models/asns.py:164 netbox/ipam/tables/asn.py:37 -#: netbox/ipam/tables/ip.py:126 netbox/ipam/views.py:383 +#: netbox/ipam/tables/ip.py:126 netbox/ipam/views.py:384 #: netbox/netbox/navigation/menu.py:189 netbox/netbox/navigation/menu.py:192 msgid "ASNs" msgstr "ASN's" @@ -460,7 +460,7 @@ msgstr "Service-ID" #: netbox/dcim/forms/bulk_edit.py:628 netbox/dcim/forms/bulk_edit.py:849 #: netbox/dcim/forms/bulk_edit.py:1103 netbox/dcim/forms/bulk_edit.py:1202 #: netbox/dcim/forms/bulk_edit.py:1229 netbox/dcim/forms/bulk_edit.py:1773 -#: netbox/dcim/forms/bulk_import.py:1541 netbox/dcim/forms/filtersets.py:1283 +#: netbox/dcim/forms/bulk_import.py:1629 netbox/dcim/forms/filtersets.py:1283 #: netbox/dcim/forms/filtersets.py:1613 netbox/dcim/forms/filtersets.py:1829 #: netbox/dcim/forms/filtersets.py:1848 netbox/dcim/forms/filtersets.py:1872 #: netbox/dcim/forms/filtersets.py:1891 netbox/dcim/tables/devices.py:804 @@ -489,12 +489,12 @@ msgstr "Kleur" #: netbox/dcim/forms/bulk_edit.py:1033 netbox/dcim/forms/bulk_edit.py:1056 #: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_edit.py:1146 #: netbox/dcim/forms/bulk_edit.py:1197 netbox/dcim/forms/bulk_edit.py:1224 -#: netbox/dcim/forms/bulk_import.py:214 netbox/dcim/forms/bulk_import.py:300 -#: netbox/dcim/forms/bulk_import.py:829 netbox/dcim/forms/bulk_import.py:855 -#: netbox/dcim/forms/bulk_import.py:881 netbox/dcim/forms/bulk_import.py:902 -#: netbox/dcim/forms/bulk_import.py:988 netbox/dcim/forms/bulk_import.py:1117 -#: netbox/dcim/forms/bulk_import.py:1136 netbox/dcim/forms/bulk_import.py:1515 -#: netbox/dcim/forms/bulk_import.py:1766 netbox/dcim/forms/filtersets.py:1155 +#: netbox/dcim/forms/bulk_import.py:215 netbox/dcim/forms/bulk_import.py:301 +#: netbox/dcim/forms/bulk_import.py:830 netbox/dcim/forms/bulk_import.py:856 +#: netbox/dcim/forms/bulk_import.py:882 netbox/dcim/forms/bulk_import.py:903 +#: netbox/dcim/forms/bulk_import.py:989 netbox/dcim/forms/bulk_import.py:1118 +#: netbox/dcim/forms/bulk_import.py:1224 netbox/dcim/forms/bulk_import.py:1603 +#: netbox/dcim/forms/bulk_import.py:1854 netbox/dcim/forms/filtersets.py:1155 #: netbox/dcim/forms/filtersets.py:1268 netbox/dcim/forms/filtersets.py:1401 #: netbox/dcim/forms/filtersets.py:1492 netbox/dcim/forms/filtersets.py:1512 #: netbox/dcim/forms/filtersets.py:1532 netbox/dcim/forms/filtersets.py:1552 @@ -553,11 +553,11 @@ msgstr "Provideraccount" #: netbox/dcim/forms/bulk_edit.py:719 netbox/dcim/forms/bulk_edit.py:778 #: netbox/dcim/forms/bulk_edit.py:822 netbox/dcim/forms/bulk_edit.py:942 #: netbox/dcim/forms/bulk_edit.py:1747 netbox/dcim/forms/bulk_edit.py:1791 -#: netbox/dcim/forms/bulk_import.py:105 netbox/dcim/forms/bulk_import.py:164 -#: netbox/dcim/forms/bulk_import.py:281 netbox/dcim/forms/bulk_import.py:390 -#: netbox/dcim/forms/bulk_import.py:621 netbox/dcim/forms/bulk_import.py:781 -#: netbox/dcim/forms/bulk_import.py:1258 netbox/dcim/forms/bulk_import.py:1503 -#: netbox/dcim/forms/bulk_import.py:1761 netbox/dcim/forms/bulk_import.py:1824 +#: netbox/dcim/forms/bulk_import.py:106 netbox/dcim/forms/bulk_import.py:165 +#: netbox/dcim/forms/bulk_import.py:282 netbox/dcim/forms/bulk_import.py:391 +#: netbox/dcim/forms/bulk_import.py:622 netbox/dcim/forms/bulk_import.py:782 +#: netbox/dcim/forms/bulk_import.py:1346 netbox/dcim/forms/bulk_import.py:1591 +#: netbox/dcim/forms/bulk_import.py:1849 netbox/dcim/forms/bulk_import.py:1912 #: netbox/dcim/forms/filtersets.py:210 netbox/dcim/forms/filtersets.py:270 #: netbox/dcim/forms/filtersets.py:413 netbox/dcim/forms/filtersets.py:528 #: netbox/dcim/forms/filtersets.py:941 netbox/dcim/forms/filtersets.py:1064 @@ -616,10 +616,10 @@ msgstr "Status" #: netbox/dcim/forms/bulk_edit.py:195 netbox/dcim/forms/bulk_edit.py:361 #: netbox/dcim/forms/bulk_edit.py:486 netbox/dcim/forms/bulk_edit.py:709 #: netbox/dcim/forms/bulk_edit.py:834 netbox/dcim/forms/bulk_edit.py:1796 -#: netbox/dcim/forms/bulk_import.py:124 netbox/dcim/forms/bulk_import.py:169 -#: netbox/dcim/forms/bulk_import.py:267 netbox/dcim/forms/bulk_import.py:395 -#: netbox/dcim/forms/bulk_import.py:595 netbox/dcim/forms/bulk_import.py:1521 -#: netbox/dcim/forms/bulk_import.py:1817 netbox/dcim/forms/filtersets.py:145 +#: netbox/dcim/forms/bulk_import.py:125 netbox/dcim/forms/bulk_import.py:170 +#: netbox/dcim/forms/bulk_import.py:268 netbox/dcim/forms/bulk_import.py:396 +#: netbox/dcim/forms/bulk_import.py:596 netbox/dcim/forms/bulk_import.py:1609 +#: netbox/dcim/forms/bulk_import.py:1905 netbox/dcim/forms/filtersets.py:145 #: netbox/dcim/forms/filtersets.py:204 netbox/dcim/forms/filtersets.py:237 #: netbox/dcim/forms/filtersets.py:374 netbox/dcim/forms/filtersets.py:459 #: netbox/dcim/forms/filtersets.py:480 netbox/dcim/forms/filtersets.py:863 @@ -710,7 +710,7 @@ msgstr "Serviceparameters" #: netbox/circuits/forms/filtersets.py:325 #: netbox/circuits/forms/filtersets.py:341 netbox/core/forms/filtersets.py:78 #: netbox/core/forms/filtersets.py:150 netbox/dcim/forms/bulk_edit.py:867 -#: netbox/dcim/forms/bulk_import.py:504 netbox/dcim/forms/filtersets.py:203 +#: netbox/dcim/forms/bulk_import.py:505 netbox/dcim/forms/filtersets.py:203 #: netbox/dcim/forms/filtersets.py:236 netbox/dcim/forms/filtersets.py:1054 #: netbox/dcim/forms/filtersets.py:1207 netbox/dcim/forms/filtersets.py:1219 #: netbox/dcim/forms/filtersets.py:1355 netbox/dcim/forms/filtersets.py:1482 @@ -806,7 +806,7 @@ msgstr "Omschrijving" #: netbox/circuits/forms/bulk_edit.py:192 #: netbox/circuits/forms/model_forms.py:198 -#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/bulk_import.py:1494 +#: netbox/dcim/forms/bulk_import.py:1549 netbox/dcim/forms/bulk_import.py:1582 msgid "Termination type" msgstr "Soort beëindiging" @@ -880,7 +880,7 @@ msgstr "Netwerkprovider" #: netbox/circuits/forms/filtersets.py:393 #: netbox/circuits/forms/model_forms.py:399 netbox/dcim/forms/bulk_edit.py:372 #: netbox/dcim/forms/bulk_edit.py:1301 netbox/dcim/forms/bulk_edit.py:1737 -#: netbox/dcim/forms/bulk_import.py:286 netbox/dcim/forms/bulk_import.py:1227 +#: netbox/dcim/forms/bulk_import.py:287 netbox/dcim/forms/bulk_import.py:1315 #: netbox/dcim/forms/filtersets.py:421 netbox/dcim/forms/filtersets.py:919 #: netbox/dcim/forms/filtersets.py:1990 netbox/dcim/forms/filtersets.py:2030 #: netbox/dcim/forms/model_forms.py:312 netbox/dcim/forms/model_forms.py:1298 @@ -937,10 +937,10 @@ msgstr "Soort circuit" #: netbox/circuits/forms/bulk_import.py:102 #: netbox/circuits/forms/bulk_import.py:228 -#: netbox/dcim/forms/bulk_import.py:107 netbox/dcim/forms/bulk_import.py:166 -#: netbox/dcim/forms/bulk_import.py:283 netbox/dcim/forms/bulk_import.py:392 -#: netbox/dcim/forms/bulk_import.py:623 netbox/dcim/forms/bulk_import.py:783 -#: netbox/dcim/forms/bulk_import.py:1260 netbox/dcim/forms/bulk_import.py:1763 +#: netbox/dcim/forms/bulk_import.py:108 netbox/dcim/forms/bulk_import.py:167 +#: netbox/dcim/forms/bulk_import.py:284 netbox/dcim/forms/bulk_import.py:393 +#: netbox/dcim/forms/bulk_import.py:624 netbox/dcim/forms/bulk_import.py:784 +#: netbox/dcim/forms/bulk_import.py:1348 netbox/dcim/forms/bulk_import.py:1851 #: netbox/ipam/forms/bulk_import.py:207 netbox/ipam/forms/bulk_import.py:271 #: netbox/ipam/forms/bulk_import.py:307 netbox/ipam/forms/bulk_import.py:538 #: netbox/ipam/forms/bulk_import.py:551 @@ -954,10 +954,10 @@ msgstr "Operationele status" #: netbox/circuits/forms/bulk_import.py:115 #: netbox/circuits/forms/bulk_import.py:174 #: netbox/circuits/forms/bulk_import.py:235 -#: netbox/dcim/forms/bulk_import.py:128 netbox/dcim/forms/bulk_import.py:173 -#: netbox/dcim/forms/bulk_import.py:399 netbox/dcim/forms/bulk_import.py:599 -#: netbox/dcim/forms/bulk_import.py:1525 netbox/dcim/forms/bulk_import.py:1758 -#: netbox/dcim/forms/bulk_import.py:1821 netbox/ipam/forms/bulk_import.py:49 +#: netbox/dcim/forms/bulk_import.py:129 netbox/dcim/forms/bulk_import.py:174 +#: netbox/dcim/forms/bulk_import.py:400 netbox/dcim/forms/bulk_import.py:600 +#: netbox/dcim/forms/bulk_import.py:1613 netbox/dcim/forms/bulk_import.py:1846 +#: netbox/dcim/forms/bulk_import.py:1909 netbox/ipam/forms/bulk_import.py:49 #: netbox/ipam/forms/bulk_import.py:78 netbox/ipam/forms/bulk_import.py:106 #: netbox/ipam/forms/bulk_import.py:126 netbox/ipam/forms/bulk_import.py:153 #: netbox/ipam/forms/bulk_import.py:181 netbox/ipam/forms/bulk_import.py:266 @@ -1002,7 +1002,7 @@ msgstr "Operationele rol" #: netbox/circuits/forms/bulk_import.py:258 #: netbox/circuits/forms/model_forms.py:402 #: netbox/circuits/tables/virtual_circuits.py:109 -#: netbox/circuits/ui/panels.py:179 netbox/dcim/forms/bulk_import.py:1358 +#: netbox/circuits/ui/panels.py:179 netbox/dcim/forms/bulk_import.py:1446 #: netbox/dcim/forms/model_forms.py:1372 netbox/dcim/forms/model_forms.py:1641 #: netbox/dcim/forms/model_forms.py:1822 netbox/dcim/forms/model_forms.py:1857 #: netbox/dcim/forms/model_forms.py:1982 netbox/dcim/tables/connections.py:66 @@ -1030,9 +1030,9 @@ msgstr "Interface" #: netbox/circuits/tables/circuits.py:140 netbox/dcim/forms/bulk_edit.py:348 #: netbox/dcim/forms/bulk_edit.py:462 netbox/dcim/forms/bulk_edit.py:701 #: netbox/dcim/forms/bulk_edit.py:750 netbox/dcim/forms/bulk_edit.py:915 -#: netbox/dcim/forms/bulk_import.py:261 netbox/dcim/forms/bulk_import.py:371 -#: netbox/dcim/forms/bulk_import.py:662 netbox/dcim/forms/bulk_import.py:1707 -#: netbox/dcim/forms/bulk_import.py:1741 netbox/dcim/forms/filtersets.py:116 +#: netbox/dcim/forms/bulk_import.py:262 netbox/dcim/forms/bulk_import.py:372 +#: netbox/dcim/forms/bulk_import.py:663 netbox/dcim/forms/bulk_import.py:1795 +#: netbox/dcim/forms/bulk_import.py:1829 netbox/dcim/forms/filtersets.py:116 #: netbox/dcim/forms/filtersets.py:369 netbox/dcim/forms/filtersets.py:404 #: netbox/dcim/forms/filtersets.py:455 netbox/dcim/forms/filtersets.py:508 #: netbox/dcim/forms/filtersets.py:860 netbox/dcim/forms/filtersets.py:904 @@ -1154,7 +1154,7 @@ msgstr "Contacten" #: netbox/circuits/forms/filtersets.py:239 #: netbox/circuits/tables/circuits.py:135 netbox/dcim/forms/bulk_edit.py:121 #: netbox/dcim/forms/bulk_edit.py:323 netbox/dcim/forms/bulk_edit.py:890 -#: netbox/dcim/forms/bulk_import.py:110 netbox/dcim/forms/filtersets.py:94 +#: netbox/dcim/forms/bulk_import.py:111 netbox/dcim/forms/filtersets.py:94 #: netbox/dcim/forms/filtersets.py:171 netbox/dcim/forms/filtersets.py:217 #: netbox/dcim/forms/filtersets.py:244 netbox/dcim/forms/filtersets.py:382 #: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:881 @@ -1218,7 +1218,7 @@ msgstr "Opdracht" #: netbox/circuits/forms/filtersets.py:311 #: netbox/circuits/forms/model_forms.py:289 #: netbox/circuits/tables/circuits.py:187 netbox/dcim/forms/bulk_edit.py:126 -#: netbox/dcim/forms/bulk_edit.py:356 netbox/dcim/forms/bulk_import.py:117 +#: netbox/dcim/forms/bulk_edit.py:356 netbox/dcim/forms/bulk_import.py:118 #: netbox/dcim/forms/model_forms.py:137 netbox/dcim/tables/racks.py:139 #: netbox/dcim/tables/racks.py:232 netbox/dcim/tables/sites.py:69 #: netbox/extras/forms/filtersets.py:612 netbox/ipam/filtersets.py:1049 @@ -1714,13 +1714,13 @@ msgstr "Beëindigingen" #: netbox/circuits/tables/virtual_circuits.py:106 #: netbox/dcim/forms/bulk_edit.py:749 netbox/dcim/forms/bulk_edit.py:1320 #: netbox/dcim/forms/bulk_edit.py:1732 netbox/dcim/forms/bulk_edit.py:1786 -#: netbox/dcim/forms/bulk_import.py:763 netbox/dcim/forms/bulk_import.py:824 -#: netbox/dcim/forms/bulk_import.py:850 netbox/dcim/forms/bulk_import.py:876 -#: netbox/dcim/forms/bulk_import.py:897 netbox/dcim/forms/bulk_import.py:953 -#: netbox/dcim/forms/bulk_import.py:1112 netbox/dcim/forms/bulk_import.py:1131 -#: netbox/dcim/forms/bulk_import.py:1150 netbox/dcim/forms/bulk_import.py:1168 -#: netbox/dcim/forms/bulk_import.py:1222 netbox/dcim/forms/bulk_import.py:1344 -#: netbox/dcim/forms/bulk_import.py:1811 netbox/dcim/forms/connections.py:34 +#: netbox/dcim/forms/bulk_import.py:764 netbox/dcim/forms/bulk_import.py:825 +#: netbox/dcim/forms/bulk_import.py:851 netbox/dcim/forms/bulk_import.py:877 +#: netbox/dcim/forms/bulk_import.py:898 netbox/dcim/forms/bulk_import.py:954 +#: netbox/dcim/forms/bulk_import.py:1113 netbox/dcim/forms/bulk_import.py:1219 +#: netbox/dcim/forms/bulk_import.py:1238 netbox/dcim/forms/bulk_import.py:1256 +#: netbox/dcim/forms/bulk_import.py:1310 netbox/dcim/forms/bulk_import.py:1432 +#: netbox/dcim/forms/bulk_import.py:1899 netbox/dcim/forms/connections.py:34 #: netbox/dcim/forms/filtersets.py:158 netbox/dcim/forms/filtersets.py:1061 #: netbox/dcim/forms/filtersets.py:1098 netbox/dcim/forms/filtersets.py:1265 #: netbox/dcim/forms/filtersets.py:1486 netbox/dcim/forms/filtersets.py:1509 @@ -1794,7 +1794,7 @@ msgid "Connection" msgstr "Verbinding" #: netbox/circuits/ui/panels.py:99 netbox/dcim/forms/bulk_edit.py:1480 -#: netbox/dcim/forms/bulk_import.py:835 netbox/dcim/forms/bulk_import.py:861 +#: netbox/dcim/forms/bulk_import.py:836 netbox/dcim/forms/bulk_import.py:862 #: netbox/dcim/forms/filtersets.py:1497 netbox/dcim/forms/filtersets.py:1537 #: netbox/dcim/forms/filtersets.py:1675 netbox/dcim/tables/devices.py:662 #: netbox/dcim/ui/panels.py:488 @@ -1997,7 +1997,7 @@ msgstr "Informatie" msgid "Warning" msgstr "Waarschuwing" -#: netbox/core/constants.py:33 netbox/netbox/tables/columns.py:597 +#: netbox/core/constants.py:33 netbox/netbox/tables/columns.py:625 msgid "Error" msgstr "Fout" @@ -2984,7 +2984,7 @@ msgid "Position (U)" msgstr "Positie (U)" #: netbox/dcim/api/serializers_/devices.py:193 -#: netbox/dcim/forms/bulk_import.py:786 netbox/dcim/forms/model_forms.py:819 +#: netbox/dcim/forms/bulk_import.py:787 netbox/dcim/forms/model_forms.py:819 msgid "Replicate components" msgstr "Componenten repliceren" @@ -2997,12 +2997,12 @@ msgstr "" "(standaard: true)" #: netbox/dcim/api/serializers_/devices.py:200 -#: netbox/dcim/forms/bulk_import.py:791 netbox/dcim/forms/model_forms.py:825 +#: netbox/dcim/forms/bulk_import.py:792 netbox/dcim/forms/model_forms.py:825 msgid "Adopt components" msgstr "Componenten adopteren" #: netbox/dcim/api/serializers_/devices.py:201 -#: netbox/dcim/forms/bulk_import.py:793 netbox/dcim/forms/model_forms.py:828 +#: netbox/dcim/forms/bulk_import.py:794 netbox/dcim/forms/model_forms.py:828 msgid "Adopt already existing components" msgstr "Reeds bestaande componenten adopteren" @@ -3139,11 +3139,11 @@ msgstr "Muf" #: netbox/dcim/choices.py:170 netbox/dcim/forms/bulk_edit.py:87 #: netbox/dcim/forms/bulk_edit.py:101 netbox/dcim/forms/bulk_edit.py:181 #: netbox/dcim/forms/bulk_edit.py:623 netbox/dcim/forms/bulk_edit.py:651 -#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/bulk_import.py:77 -#: netbox/dcim/forms/bulk_import.py:91 netbox/dcim/forms/bulk_import.py:154 -#: netbox/dcim/forms/bulk_import.py:530 netbox/dcim/forms/bulk_import.py:556 -#: netbox/dcim/forms/bulk_import.py:682 netbox/dcim/forms/bulk_import.py:958 -#: netbox/dcim/forms/bulk_import.py:1239 netbox/dcim/forms/filtersets.py:267 +#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/bulk_import.py:78 +#: netbox/dcim/forms/bulk_import.py:92 netbox/dcim/forms/bulk_import.py:155 +#: netbox/dcim/forms/bulk_import.py:531 netbox/dcim/forms/bulk_import.py:557 +#: netbox/dcim/forms/bulk_import.py:683 netbox/dcim/forms/bulk_import.py:959 +#: netbox/dcim/forms/bulk_import.py:1327 netbox/dcim/forms/filtersets.py:267 #: netbox/dcim/forms/filtersets.py:820 netbox/dcim/forms/filtersets.py:836 #: netbox/dcim/forms/model_forms.py:95 netbox/dcim/forms/model_forms.py:113 #: netbox/dcim/forms/model_forms.py:216 netbox/dcim/forms/model_forms.py:559 @@ -3283,7 +3283,7 @@ msgid "Virtual interfaces" msgstr "Virtuele interfaces" #: netbox/dcim/choices.py:1164 netbox/dcim/forms/bulk_edit.py:1455 -#: netbox/dcim/forms/bulk_import.py:965 netbox/dcim/forms/model_forms.py:1171 +#: netbox/dcim/forms/bulk_import.py:966 netbox/dcim/forms/model_forms.py:1171 #: netbox/dcim/tables/devices.py:761 #: netbox/virtualization/forms/bulk_edit.py:231 #: netbox/virtualization/forms/bulk_import.py:198 @@ -4057,7 +4057,7 @@ msgstr "VM-interface (ID)" msgid "Is assigned" msgstr "Is toegewezen" -#: netbox/dcim/filtersets.py:2080 netbox/dcim/forms/bulk_import.py:1365 +#: netbox/dcim/filtersets.py:2080 netbox/dcim/forms/bulk_import.py:1453 #: netbox/ipam/forms/bulk_import.py:344 msgid "Is primary" msgstr "Is primair" @@ -4078,7 +4078,7 @@ msgid "Assigned VID" msgstr "Toegewezen VID" #: netbox/dcim/filtersets.py:2158 netbox/dcim/forms/bulk_edit.py:1568 -#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/forms/filtersets.py:1755 +#: netbox/dcim/forms/bulk_import.py:1051 netbox/dcim/forms/filtersets.py:1755 #: netbox/dcim/forms/model_forms.py:1619 #: netbox/dcim/models/device_components.py:958 #: netbox/dcim/tables/devices.py:678 netbox/dcim/ui/panels.py:521 @@ -4305,7 +4305,7 @@ msgstr "Telefoonnummer contacteren" msgid "Contact E-mail" msgstr "E-mailadres voor contact" -#: netbox/dcim/forms/bulk_edit.py:160 netbox/dcim/forms/bulk_import.py:140 +#: netbox/dcim/forms/bulk_edit.py:160 netbox/dcim/forms/bulk_import.py:141 #: netbox/dcim/forms/model_forms.py:159 msgid "Time zone" msgstr "Tijdzone" @@ -4314,9 +4314,9 @@ msgstr "Tijdzone" #: netbox/dcim/forms/bulk_edit.py:584 netbox/dcim/forms/bulk_edit.py:656 #: netbox/dcim/forms/bulk_edit.py:675 netbox/dcim/forms/bulk_edit.py:762 #: netbox/dcim/forms/bulk_edit.py:1306 netbox/dcim/forms/bulk_edit.py:1742 -#: netbox/dcim/forms/bulk_import.py:208 netbox/dcim/forms/bulk_import.py:432 -#: netbox/dcim/forms/bulk_import.py:482 netbox/dcim/forms/bulk_import.py:566 -#: netbox/dcim/forms/bulk_import.py:602 netbox/dcim/forms/bulk_import.py:1233 +#: netbox/dcim/forms/bulk_import.py:209 netbox/dcim/forms/bulk_import.py:433 +#: netbox/dcim/forms/bulk_import.py:483 netbox/dcim/forms/bulk_import.py:567 +#: netbox/dcim/forms/bulk_import.py:603 netbox/dcim/forms/bulk_import.py:1321 #: netbox/dcim/forms/filtersets.py:355 netbox/dcim/forms/filtersets.py:426 #: netbox/dcim/forms/filtersets.py:578 netbox/dcim/forms/filtersets.py:728 #: netbox/dcim/forms/filtersets.py:841 netbox/dcim/forms/filtersets.py:924 @@ -4335,21 +4335,21 @@ msgid "Manufacturer" msgstr "Fabrikant" #: netbox/dcim/forms/bulk_edit.py:240 netbox/dcim/forms/bulk_edit.py:392 -#: netbox/dcim/forms/bulk_import.py:217 netbox/dcim/forms/bulk_import.py:303 +#: netbox/dcim/forms/bulk_import.py:218 netbox/dcim/forms/bulk_import.py:304 #: netbox/dcim/forms/filtersets.py:301 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "Vormfactor" #: netbox/dcim/forms/bulk_edit.py:245 netbox/dcim/forms/bulk_edit.py:397 -#: netbox/dcim/forms/bulk_import.py:225 netbox/dcim/forms/bulk_import.py:306 +#: netbox/dcim/forms/bulk_import.py:226 netbox/dcim/forms/bulk_import.py:307 #: netbox/dcim/forms/filtersets.py:306 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "Breedte" #: netbox/dcim/forms/bulk_edit.py:251 netbox/dcim/forms/bulk_edit.py:403 -#: netbox/dcim/forms/bulk_import.py:313 +#: netbox/dcim/forms/bulk_import.py:314 msgid "Height (U)" msgstr "Hoogte (U)" @@ -4371,7 +4371,7 @@ msgid "Outer depth" msgstr "Buitendiepte" #: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:426 -#: netbox/dcim/forms/bulk_import.py:230 netbox/dcim/forms/bulk_import.py:316 +#: netbox/dcim/forms/bulk_import.py:231 netbox/dcim/forms/bulk_import.py:317 msgid "Outer unit" msgstr "Buitenste eenheid" @@ -4383,7 +4383,7 @@ msgstr "Inbouwdiepte" #: netbox/dcim/forms/bulk_edit.py:441 netbox/dcim/forms/bulk_edit.py:465 #: netbox/dcim/forms/bulk_edit.py:542 netbox/dcim/forms/bulk_edit.py:559 #: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/bulk_edit.py:614 -#: netbox/dcim/forms/bulk_import.py:445 netbox/dcim/forms/bulk_import.py:493 +#: netbox/dcim/forms/bulk_import.py:446 netbox/dcim/forms/bulk_import.py:494 #: netbox/dcim/forms/filtersets.py:326 netbox/dcim/forms/filtersets.py:348 #: netbox/dcim/forms/filtersets.py:373 netbox/dcim/forms/filtersets.py:458 #: netbox/dcim/forms/filtersets.py:571 netbox/dcim/forms/filtersets.py:683 @@ -4408,8 +4408,8 @@ msgstr "Maximaal gewicht" #: netbox/dcim/forms/bulk_edit.py:298 netbox/dcim/forms/bulk_edit.py:451 #: netbox/dcim/forms/bulk_edit.py:547 netbox/dcim/forms/bulk_edit.py:603 -#: netbox/dcim/forms/bulk_import.py:236 netbox/dcim/forms/bulk_import.py:328 -#: netbox/dcim/forms/bulk_import.py:450 netbox/dcim/forms/bulk_import.py:498 +#: netbox/dcim/forms/bulk_import.py:237 netbox/dcim/forms/bulk_import.py:329 +#: netbox/dcim/forms/bulk_import.py:451 netbox/dcim/forms/bulk_import.py:499 #: netbox/dcim/forms/filtersets.py:336 netbox/dcim/forms/filtersets.py:687 #: netbox/dcim/forms/filtersets.py:799 msgid "Weight unit" @@ -4441,7 +4441,7 @@ msgstr "Dimensies" msgid "Numbering" msgstr "Nummering" -#: netbox/dcim/forms/bulk_edit.py:377 netbox/dcim/forms/bulk_import.py:293 +#: netbox/dcim/forms/bulk_edit.py:377 netbox/dcim/forms/bulk_import.py:294 #: netbox/dcim/forms/filtersets.py:434 msgid "Rack type" msgstr "Racktype" @@ -4459,17 +4459,17 @@ msgstr "Tag voor bedrijfsmiddelen" #: netbox/dcim/forms/bulk_edit.py:436 netbox/dcim/forms/bulk_edit.py:537 #: netbox/dcim/forms/bulk_edit.py:593 netbox/dcim/forms/bulk_edit.py:724 -#: netbox/dcim/forms/bulk_import.py:322 netbox/dcim/forms/bulk_import.py:487 -#: netbox/dcim/forms/bulk_import.py:696 netbox/dcim/forms/filtersets.py:437 +#: netbox/dcim/forms/bulk_import.py:323 netbox/dcim/forms/bulk_import.py:488 +#: netbox/dcim/forms/bulk_import.py:697 netbox/dcim/forms/filtersets.py:437 #: netbox/dcim/forms/filtersets.py:600 netbox/dcim/forms/filtersets.py:790 #: netbox/dcim/forms/filtersets.py:946 msgid "Airflow" msgstr "Luchtstroom" #: netbox/dcim/forms/bulk_edit.py:460 netbox/dcim/forms/bulk_edit.py:937 -#: netbox/dcim/forms/bulk_import.py:378 netbox/dcim/forms/bulk_import.py:381 -#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/bulk_import.py:1748 -#: netbox/dcim/forms/bulk_import.py:1752 netbox/dcim/forms/filtersets.py:125 +#: netbox/dcim/forms/bulk_import.py:379 netbox/dcim/forms/bulk_import.py:382 +#: netbox/dcim/forms/bulk_import.py:670 netbox/dcim/forms/bulk_import.py:1836 +#: netbox/dcim/forms/bulk_import.py:1840 netbox/dcim/forms/filtersets.py:125 #: netbox/dcim/forms/filtersets.py:370 netbox/dcim/forms/filtersets.py:465 #: netbox/dcim/forms/filtersets.py:479 netbox/dcim/forms/filtersets.py:525 #: netbox/dcim/forms/filtersets.py:914 netbox/dcim/forms/filtersets.py:1130 @@ -4495,7 +4495,7 @@ msgstr "Rek" msgid "Hardware" msgstr "Hardware" -#: netbox/dcim/forms/bulk_edit.py:513 netbox/dcim/forms/bulk_import.py:438 +#: netbox/dcim/forms/bulk_edit.py:513 netbox/dcim/forms/bulk_import.py:439 #: netbox/dcim/forms/filtersets.py:583 netbox/dcim/forms/model_forms.py:416 #: netbox/virtualization/forms/bulk_edit.py:85 #: netbox/virtualization/forms/bulk_import.py:89 @@ -4534,8 +4534,8 @@ msgid "Schema" msgstr "Schema" #: netbox/dcim/forms/bulk_edit.py:572 netbox/dcim/forms/bulk_edit.py:579 -#: netbox/dcim/forms/bulk_edit.py:828 netbox/dcim/forms/bulk_import.py:476 -#: netbox/dcim/forms/bulk_import.py:1509 netbox/dcim/forms/filtersets.py:723 +#: netbox/dcim/forms/bulk_edit.py:828 netbox/dcim/forms/bulk_import.py:477 +#: netbox/dcim/forms/bulk_import.py:1597 netbox/dcim/forms/filtersets.py:723 #: netbox/dcim/forms/filtersets.py:1146 netbox/dcim/forms/filtersets.py:1278 #: netbox/dcim/forms/model_forms.py:463 netbox/dcim/forms/model_forms.py:476 #: netbox/dcim/tables/modules.py:43 netbox/dcim/tables/modules.py:97 @@ -4568,10 +4568,10 @@ msgid "VM role" msgstr "VM-rol" #: netbox/dcim/forms/bulk_edit.py:637 netbox/dcim/forms/bulk_edit.py:661 -#: netbox/dcim/forms/bulk_edit.py:734 netbox/dcim/forms/bulk_import.py:540 -#: netbox/dcim/forms/bulk_import.py:544 netbox/dcim/forms/bulk_import.py:573 -#: netbox/dcim/forms/bulk_import.py:577 netbox/dcim/forms/bulk_import.py:702 -#: netbox/dcim/forms/bulk_import.py:706 netbox/dcim/forms/filtersets.py:815 +#: netbox/dcim/forms/bulk_edit.py:734 netbox/dcim/forms/bulk_import.py:541 +#: netbox/dcim/forms/bulk_import.py:545 netbox/dcim/forms/bulk_import.py:574 +#: netbox/dcim/forms/bulk_import.py:578 netbox/dcim/forms/bulk_import.py:703 +#: netbox/dcim/forms/bulk_import.py:707 netbox/dcim/forms/filtersets.py:815 #: netbox/dcim/forms/filtersets.py:846 netbox/dcim/forms/filtersets.py:965 #: netbox/dcim/forms/model_forms.py:554 netbox/dcim/forms/model_forms.py:591 #: netbox/dcim/forms/model_forms.py:716 @@ -4583,19 +4583,19 @@ msgid "Config template" msgstr "Configuratiesjabloon" #: netbox/dcim/forms/bulk_edit.py:680 netbox/dcim/forms/bulk_edit.py:1086 -#: netbox/dcim/forms/bulk_import.py:608 netbox/dcim/forms/filtersets.py:135 +#: netbox/dcim/forms/bulk_import.py:609 netbox/dcim/forms/filtersets.py:135 #: netbox/dcim/forms/filtersets.py:1438 netbox/dcim/forms/model_forms.py:661 #: netbox/dcim/forms/model_forms.py:1048 netbox/dcim/forms/model_forms.py:1065 #: netbox/extras/filtersets.py:756 msgid "Device type" msgstr "Soort apparaat" -#: netbox/dcim/forms/bulk_edit.py:691 netbox/dcim/forms/bulk_import.py:589 +#: netbox/dcim/forms/bulk_edit.py:691 netbox/dcim/forms/bulk_import.py:590 #: netbox/dcim/forms/filtersets.py:140 netbox/dcim/forms/model_forms.py:669 msgid "Device role" msgstr "Rol van het apparaat" -#: netbox/dcim/forms/bulk_edit.py:714 netbox/dcim/forms/bulk_import.py:614 +#: netbox/dcim/forms/bulk_edit.py:714 netbox/dcim/forms/bulk_import.py:615 #: netbox/dcim/forms/filtersets.py:829 netbox/dcim/forms/filtersets.py:938 #: netbox/dcim/forms/model_forms.py:602 netbox/dcim/forms/model_forms.py:674 #: netbox/dcim/tables/devices.py:191 netbox/extras/filtersets.py:772 @@ -4607,7 +4607,7 @@ msgstr "Rol van het apparaat" msgid "Platform" msgstr "Platform" -#: netbox/dcim/forms/bulk_edit.py:739 netbox/dcim/forms/bulk_import.py:633 +#: netbox/dcim/forms/bulk_edit.py:739 netbox/dcim/forms/bulk_import.py:634 #: netbox/dcim/forms/filtersets.py:870 netbox/dcim/forms/filtersets.py:1040 #: netbox/dcim/forms/model_forms.py:683 netbox/dcim/tables/devices.py:211 #: netbox/extras/filtersets.py:805 netbox/extras/forms/filtersets.py:411 @@ -4636,12 +4636,12 @@ msgstr "Configuratie" msgid "Virtualization" msgstr "Virtualisatie" -#: netbox/dcim/forms/bulk_edit.py:767 netbox/dcim/forms/bulk_import.py:775 +#: netbox/dcim/forms/bulk_edit.py:767 netbox/dcim/forms/bulk_import.py:776 #: netbox/dcim/forms/model_forms.py:811 netbox/dcim/forms/model_forms.py:1073 msgid "Module type" msgstr "Moduletype" -#: netbox/dcim/forms/bulk_edit.py:839 netbox/dcim/forms/bulk_import.py:1528 +#: netbox/dcim/forms/bulk_edit.py:839 netbox/dcim/forms/bulk_import.py:1616 #: netbox/dcim/forms/filtersets.py:1305 netbox/dcim/forms/model_forms.py:888 #: netbox/dcim/tables/cables.py:124 msgid "Bundle" @@ -4665,8 +4665,8 @@ msgstr "Label" msgid "Length" msgstr "Lengte" -#: netbox/dcim/forms/bulk_edit.py:858 netbox/dcim/forms/bulk_import.py:1535 -#: netbox/dcim/forms/bulk_import.py:1538 netbox/dcim/forms/filtersets.py:1291 +#: netbox/dcim/forms/bulk_edit.py:858 netbox/dcim/forms/bulk_import.py:1623 +#: netbox/dcim/forms/bulk_import.py:1626 netbox/dcim/forms/filtersets.py:1291 msgid "Length unit" msgstr "Lengte-eenheid" @@ -4674,17 +4674,17 @@ msgstr "Lengte-eenheid" msgid "Domain" msgstr "Domein" -#: netbox/dcim/forms/bulk_edit.py:932 netbox/dcim/forms/bulk_import.py:1735 +#: netbox/dcim/forms/bulk_edit.py:932 netbox/dcim/forms/bulk_import.py:1823 #: netbox/dcim/forms/filtersets.py:1384 netbox/dcim/forms/model_forms.py:927 msgid "Power panel" msgstr "Voedingspaneel" -#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/bulk_import.py:1771 +#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/bulk_import.py:1859 #: netbox/dcim/forms/filtersets.py:1406 msgid "Supply" msgstr "Levering" -#: netbox/dcim/forms/bulk_edit.py:960 netbox/dcim/forms/bulk_import.py:1776 +#: netbox/dcim/forms/bulk_edit.py:960 netbox/dcim/forms/bulk_import.py:1864 #: netbox/dcim/forms/filtersets.py:1411 msgid "Phase" msgstr "Fase" @@ -4721,13 +4721,13 @@ msgstr "Toegewezen loting" msgid "Allocated power draw (watts)" msgstr "Toegewezen stroomverbruik (watt)" -#: netbox/dcim/forms/bulk_edit.py:1107 netbox/dcim/forms/bulk_import.py:908 +#: netbox/dcim/forms/bulk_edit.py:1107 netbox/dcim/forms/bulk_import.py:909 #: netbox/dcim/forms/model_forms.py:1144 netbox/dcim/forms/model_forms.py:1509 #: netbox/dcim/forms/model_forms.py:1838 netbox/dcim/forms/object_import.py:56 msgid "Power port" msgstr "Voedingspoort" -#: netbox/dcim/forms/bulk_edit.py:1112 netbox/dcim/forms/bulk_import.py:915 +#: netbox/dcim/forms/bulk_edit.py:1112 netbox/dcim/forms/bulk_import.py:916 msgid "Feed leg" msgstr "Voer de poot in" @@ -4737,7 +4737,7 @@ msgid "Management only" msgstr "Alleen voor beheer" #: netbox/dcim/forms/bulk_edit.py:1168 netbox/dcim/forms/bulk_edit.py:1495 -#: netbox/dcim/forms/bulk_import.py:1001 netbox/dcim/forms/filtersets.py:1711 +#: netbox/dcim/forms/bulk_import.py:1002 netbox/dcim/forms/filtersets.py:1711 #: netbox/dcim/forms/filtersets.py:1796 netbox/dcim/forms/object_import.py:91 #: netbox/dcim/models/device_component_templates.py:473 #: netbox/dcim/models/device_components.py:930 netbox/dcim/ui/panels.py:494 @@ -4745,7 +4745,7 @@ msgid "PoE mode" msgstr "PoE-modus" #: netbox/dcim/forms/bulk_edit.py:1174 netbox/dcim/forms/bulk_edit.py:1501 -#: netbox/dcim/forms/bulk_import.py:1007 netbox/dcim/forms/filtersets.py:1716 +#: netbox/dcim/forms/bulk_import.py:1008 netbox/dcim/forms/filtersets.py:1716 #: netbox/dcim/forms/filtersets.py:1801 netbox/dcim/forms/object_import.py:96 #: netbox/dcim/models/device_component_templates.py:480 #: netbox/dcim/models/device_components.py:937 netbox/dcim/ui/panels.py:495 @@ -4771,7 +4771,7 @@ msgstr "LAG" msgid "Virtual device contexts" msgstr "Contexten van virtuele apparaten" -#: netbox/dcim/forms/bulk_edit.py:1509 netbox/dcim/forms/bulk_import.py:1010 +#: netbox/dcim/forms/bulk_edit.py:1509 netbox/dcim/forms/bulk_import.py:1011 #: netbox/virtualization/forms/bulk_edit.py:252 #: netbox/virtualization/forms/bulk_import.py:205 #: netbox/vpn/forms/bulk_edit.py:128 netbox/vpn/forms/bulk_edit.py:196 @@ -4782,7 +4782,7 @@ msgstr "Contexten van virtuele apparaten" msgid "Mode" msgstr "Modus" -#: netbox/dcim/forms/bulk_edit.py:1517 netbox/dcim/forms/bulk_import.py:1016 +#: netbox/dcim/forms/bulk_edit.py:1517 netbox/dcim/forms/bulk_import.py:1017 #: netbox/dcim/forms/model_forms.py:1585 netbox/ipam/forms/bulk_import.py:184 #: netbox/ipam/forms/filtersets.py:603 netbox/ipam/models/vlans.py:99 #: netbox/virtualization/forms/bulk_edit.py:259 @@ -4791,7 +4791,7 @@ msgstr "Modus" msgid "VLAN group" msgstr "VLAN-groep" -#: netbox/dcim/forms/bulk_edit.py:1526 netbox/dcim/forms/bulk_import.py:1023 +#: netbox/dcim/forms/bulk_edit.py:1526 netbox/dcim/forms/bulk_import.py:1024 #: netbox/dcim/forms/model_forms.py:1591 netbox/dcim/tables/devices.py:627 #: netbox/dcim/ui/panels.py:498 netbox/virtualization/forms/bulk_edit.py:267 #: netbox/virtualization/forms/bulk_import.py:218 @@ -4799,7 +4799,7 @@ msgstr "VLAN-groep" msgid "Untagged VLAN" msgstr "VLAN zonder label" -#: netbox/dcim/forms/bulk_edit.py:1535 netbox/dcim/forms/bulk_import.py:1030 +#: netbox/dcim/forms/bulk_edit.py:1535 netbox/dcim/forms/bulk_import.py:1031 #: netbox/dcim/forms/model_forms.py:1600 netbox/dcim/tables/devices.py:633 #: netbox/virtualization/forms/bulk_edit.py:275 #: netbox/virtualization/forms/bulk_import.py:225 @@ -4815,7 +4815,7 @@ msgstr "Getagde VLAN's toevoegen" msgid "Remove tagged VLANs" msgstr "Getagde VLAN's verwijderen" -#: netbox/dcim/forms/bulk_edit.py:1558 netbox/dcim/forms/bulk_import.py:1043 +#: netbox/dcim/forms/bulk_edit.py:1558 netbox/dcim/forms/bulk_import.py:1044 #: netbox/dcim/forms/model_forms.py:1609 #: netbox/virtualization/forms/bulk_import.py:238 #: netbox/virtualization/forms/model_forms.py:439 @@ -4884,244 +4884,244 @@ msgid "An access interface cannot have tagged VLANs assigned." msgstr "" "Aan een toegangsinterface kunnen geen gelabelde VLAN's worden toegewezen." -#: netbox/dcim/forms/bulk_import.py:81 +#: netbox/dcim/forms/bulk_import.py:82 msgid "Name of parent region" msgstr "Naam van de moederregio" -#: netbox/dcim/forms/bulk_import.py:95 +#: netbox/dcim/forms/bulk_import.py:96 msgid "Name of parent site group" msgstr "Naam van de oudersitegroep" -#: netbox/dcim/forms/bulk_import.py:114 +#: netbox/dcim/forms/bulk_import.py:115 msgid "Assigned region" msgstr "Toegewezen regio" -#: netbox/dcim/forms/bulk_import.py:121 netbox/tenancy/forms/bulk_import.py:50 +#: netbox/dcim/forms/bulk_import.py:122 netbox/tenancy/forms/bulk_import.py:50 #: netbox/wireless/forms/bulk_import.py:41 msgid "Assigned group" msgstr "Toegewezen groep" -#: netbox/dcim/forms/bulk_import.py:140 +#: netbox/dcim/forms/bulk_import.py:141 msgid "available options" msgstr "beschikbare opties" -#: netbox/dcim/forms/bulk_import.py:151 netbox/dcim/forms/bulk_import.py:659 -#: netbox/dcim/forms/bulk_import.py:1732 netbox/ipam/forms/bulk_import.py:519 +#: netbox/dcim/forms/bulk_import.py:152 netbox/dcim/forms/bulk_import.py:660 +#: netbox/dcim/forms/bulk_import.py:1820 netbox/ipam/forms/bulk_import.py:519 #: netbox/virtualization/forms/bulk_import.py:66 msgid "Assigned site" msgstr "Toegewezen site" -#: netbox/dcim/forms/bulk_import.py:158 +#: netbox/dcim/forms/bulk_import.py:159 msgid "Parent location" msgstr "Locatie van de ouders" -#: netbox/dcim/forms/bulk_import.py:160 +#: netbox/dcim/forms/bulk_import.py:161 msgid "Location not found." msgstr "Locatie niet gevonden." -#: netbox/dcim/forms/bulk_import.py:211 +#: netbox/dcim/forms/bulk_import.py:212 msgid "The manufacturer of this rack type" msgstr "De fabrikant van dit racktype" -#: netbox/dcim/forms/bulk_import.py:222 +#: netbox/dcim/forms/bulk_import.py:223 msgid "The lowest-numbered position in the rack" msgstr "De positie met het laagst genummerde nummer in het rack" -#: netbox/dcim/forms/bulk_import.py:227 netbox/dcim/forms/bulk_import.py:309 +#: netbox/dcim/forms/bulk_import.py:228 netbox/dcim/forms/bulk_import.py:310 msgid "Rail-to-rail width (in inches)" msgstr "Breedte van rail tot rail (in inches)" -#: netbox/dcim/forms/bulk_import.py:233 netbox/dcim/forms/bulk_import.py:319 +#: netbox/dcim/forms/bulk_import.py:234 netbox/dcim/forms/bulk_import.py:320 msgid "Unit for outer dimensions" msgstr "Eenheid voor buitenafmetingen" -#: netbox/dcim/forms/bulk_import.py:239 netbox/dcim/forms/bulk_import.py:331 +#: netbox/dcim/forms/bulk_import.py:240 netbox/dcim/forms/bulk_import.py:332 msgid "Unit for rack weights" msgstr "Eenheid voor rackgewichten" -#: netbox/dcim/forms/bulk_import.py:271 +#: netbox/dcim/forms/bulk_import.py:272 msgid "Name of assigned tenant" msgstr "Naam van de toegewezen tenant" -#: netbox/dcim/forms/bulk_import.py:274 netbox/dcim/forms/filtersets.py:410 +#: netbox/dcim/forms/bulk_import.py:275 netbox/dcim/forms/filtersets.py:410 #: netbox/dcim/forms/filtersets.py:515 netbox/dcim/ui/panels.py:47 #: netbox/ipam/forms/filtersets.py:497 msgid "Rack group" msgstr "Rack-groep" -#: netbox/dcim/forms/bulk_import.py:278 +#: netbox/dcim/forms/bulk_import.py:279 msgid "Name of assigned group" msgstr "Naam van de toegewezen groep" -#: netbox/dcim/forms/bulk_import.py:290 +#: netbox/dcim/forms/bulk_import.py:291 msgid "Name of assigned role" msgstr "Naam van de toegewezen rol" -#: netbox/dcim/forms/bulk_import.py:297 +#: netbox/dcim/forms/bulk_import.py:298 msgid "Rack type model" msgstr "Model van het type rack" -#: netbox/dcim/forms/bulk_import.py:325 netbox/dcim/forms/bulk_import.py:490 -#: netbox/dcim/forms/bulk_import.py:699 +#: netbox/dcim/forms/bulk_import.py:326 netbox/dcim/forms/bulk_import.py:491 +#: netbox/dcim/forms/bulk_import.py:700 msgid "Airflow direction" msgstr "Richting van de luchtstroom" -#: netbox/dcim/forms/bulk_import.py:358 +#: netbox/dcim/forms/bulk_import.py:359 msgid "Width must be set if not specifying a rack type." msgstr "" "De breedte moet worden ingesteld als er geen racktype wordt gespecificeerd." -#: netbox/dcim/forms/bulk_import.py:360 +#: netbox/dcim/forms/bulk_import.py:361 msgid "U height must be set if not specifying a rack type." msgstr "" "De U-hoogte moet worden ingesteld als er geen racktype wordt gespecificeerd." -#: netbox/dcim/forms/bulk_import.py:368 +#: netbox/dcim/forms/bulk_import.py:369 msgid "Parent site" msgstr "Site voor ouders" -#: netbox/dcim/forms/bulk_import.py:375 netbox/dcim/forms/bulk_import.py:1745 +#: netbox/dcim/forms/bulk_import.py:376 netbox/dcim/forms/bulk_import.py:1833 msgid "Rack's location (if any)" msgstr "Locatie van het rek (indien aanwezig)" -#: netbox/dcim/forms/bulk_import.py:384 netbox/dcim/forms/model_forms.py:376 +#: netbox/dcim/forms/bulk_import.py:385 netbox/dcim/forms/model_forms.py:376 #: netbox/dcim/tables/racks.py:242 #: netbox/templates/dcim/rackreservation.html:7 msgid "Units" msgstr "Eenheden" -#: netbox/dcim/forms/bulk_import.py:387 +#: netbox/dcim/forms/bulk_import.py:388 msgid "Comma-separated list of individual unit numbers" msgstr "Door komma's gescheiden lijst van individuele eenheidsnummers" -#: netbox/dcim/forms/bulk_import.py:435 +#: netbox/dcim/forms/bulk_import.py:436 msgid "The manufacturer which produces this device type" msgstr "De fabrikant die dit apparaattype produceert" -#: netbox/dcim/forms/bulk_import.py:442 +#: netbox/dcim/forms/bulk_import.py:443 msgid "The default platform for devices of this type (optional)" msgstr "Het standaardplatform voor apparaten van dit type (optioneel)" -#: netbox/dcim/forms/bulk_import.py:447 +#: netbox/dcim/forms/bulk_import.py:448 msgid "Device weight" msgstr "Gewicht van het apparaat" -#: netbox/dcim/forms/bulk_import.py:453 +#: netbox/dcim/forms/bulk_import.py:454 msgid "Unit for device weight" msgstr "Eenheid voor het gewicht van het apparaat" -#: netbox/dcim/forms/bulk_import.py:495 +#: netbox/dcim/forms/bulk_import.py:496 msgid "Module weight" msgstr "Gewicht van de module" -#: netbox/dcim/forms/bulk_import.py:501 +#: netbox/dcim/forms/bulk_import.py:502 msgid "Unit for module weight" msgstr "Eenheid voor modulegewicht" -#: netbox/dcim/forms/bulk_import.py:506 +#: netbox/dcim/forms/bulk_import.py:507 msgid "Attribute values for the assigned profile, passed as a dictionary" msgstr "" "Attribuutwaarden voor het toegewezen profiel, doorgegeven als woordenboek" -#: netbox/dcim/forms/bulk_import.py:521 +#: netbox/dcim/forms/bulk_import.py:522 msgid "Profile must be specified if attribute data is provided." msgstr "" "Het profiel moet worden gespecificeerd als kenmerkgegevens worden verstrekt." -#: netbox/dcim/forms/bulk_import.py:534 +#: netbox/dcim/forms/bulk_import.py:535 msgid "Parent Device Role" msgstr "Rol van het ouderapparaat" -#: netbox/dcim/forms/bulk_import.py:536 +#: netbox/dcim/forms/bulk_import.py:537 msgid "Device role not found." msgstr "De rol van het apparaat is niet gevonden." -#: netbox/dcim/forms/bulk_import.py:560 +#: netbox/dcim/forms/bulk_import.py:561 msgid "Parent platform" msgstr "Platform voor ouders" -#: netbox/dcim/forms/bulk_import.py:562 +#: netbox/dcim/forms/bulk_import.py:563 msgid "Platform not found." msgstr "Platform niet gevonden." -#: netbox/dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:571 msgid "Limit platform assignments to this manufacturer" msgstr "Beperk de platformtoewijzingen aan deze fabrikant" -#: netbox/dcim/forms/bulk_import.py:592 netbox/dcim/forms/bulk_import.py:1814 +#: netbox/dcim/forms/bulk_import.py:593 netbox/dcim/forms/bulk_import.py:1902 #: netbox/tenancy/forms/bulk_import.py:116 msgid "Assigned role" msgstr "Toegewezen rol" -#: netbox/dcim/forms/bulk_import.py:605 +#: netbox/dcim/forms/bulk_import.py:606 msgid "Device type manufacturer" msgstr "Apparaattype fabrikant" -#: netbox/dcim/forms/bulk_import.py:611 +#: netbox/dcim/forms/bulk_import.py:612 msgid "Device type model" msgstr "Apparaattype model" -#: netbox/dcim/forms/bulk_import.py:618 +#: netbox/dcim/forms/bulk_import.py:619 #: netbox/virtualization/forms/bulk_import.py:165 msgid "Assigned platform" msgstr "Toegewezen platform" -#: netbox/dcim/forms/bulk_import.py:626 netbox/dcim/forms/bulk_import.py:630 +#: netbox/dcim/forms/bulk_import.py:627 netbox/dcim/forms/bulk_import.py:631 #: netbox/dcim/forms/model_forms.py:697 msgid "Virtual chassis" msgstr "Virtueel chassis" -#: netbox/dcim/forms/bulk_import.py:637 +#: netbox/dcim/forms/bulk_import.py:638 msgid "Virtualization cluster" msgstr "Virtualisatiecluster" -#: netbox/dcim/forms/bulk_import.py:666 +#: netbox/dcim/forms/bulk_import.py:667 msgid "Assigned location (if any)" msgstr "Toegewezen locatie (indien aanwezig)" -#: netbox/dcim/forms/bulk_import.py:673 +#: netbox/dcim/forms/bulk_import.py:674 msgid "Assigned rack (if any)" msgstr "Toegewezen rek (indien aanwezig)" -#: netbox/dcim/forms/bulk_import.py:676 netbox/dcim/forms/model_forms.py:653 +#: netbox/dcim/forms/bulk_import.py:677 netbox/dcim/forms/model_forms.py:653 msgid "Face" msgstr "Gezicht" -#: netbox/dcim/forms/bulk_import.py:679 +#: netbox/dcim/forms/bulk_import.py:680 msgid "Mounted rack face" msgstr "Gemonteerd rackfront" -#: netbox/dcim/forms/bulk_import.py:686 +#: netbox/dcim/forms/bulk_import.py:687 msgid "Parent device (for child devices)" msgstr "Ouderapparaat (voor apparaten voor kinderen)" -#: netbox/dcim/forms/bulk_import.py:689 +#: netbox/dcim/forms/bulk_import.py:690 msgid "Device bay" msgstr "Toestelvak" -#: netbox/dcim/forms/bulk_import.py:693 +#: netbox/dcim/forms/bulk_import.py:694 msgid "Device bay in which this device is installed (for child devices)" msgstr "" "Apparaatvak waarin dit apparaat is geïnstalleerd (voor onderliggende " "apparaten)" -#: netbox/dcim/forms/bulk_import.py:766 +#: netbox/dcim/forms/bulk_import.py:767 msgid "The device in which this module is installed" msgstr "Het apparaat waarop deze module is geïnstalleerd" -#: netbox/dcim/forms/bulk_import.py:769 netbox/dcim/forms/model_forms.py:801 +#: netbox/dcim/forms/bulk_import.py:770 netbox/dcim/forms/model_forms.py:801 msgid "Module bay" msgstr "Modulevak" -#: netbox/dcim/forms/bulk_import.py:772 +#: netbox/dcim/forms/bulk_import.py:773 msgid "The module bay in which this module is installed" msgstr "De moduleruimte waarin deze module is geïnstalleerd" -#: netbox/dcim/forms/bulk_import.py:778 +#: netbox/dcim/forms/bulk_import.py:779 msgid "The type of module" msgstr "Het type module" -#: netbox/dcim/forms/bulk_import.py:788 +#: netbox/dcim/forms/bulk_import.py:789 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" @@ -5129,89 +5129,89 @@ msgstr "" "Componenten die aan dit moduletype zijn gekoppeld automatisch invullen " "(standaard ingeschakeld)" -#: netbox/dcim/forms/bulk_import.py:832 netbox/dcim/forms/bulk_import.py:858 -#: netbox/dcim/forms/bulk_import.py:884 +#: netbox/dcim/forms/bulk_import.py:833 netbox/dcim/forms/bulk_import.py:859 +#: netbox/dcim/forms/bulk_import.py:885 msgid "Port type" msgstr "Poorttype" -#: netbox/dcim/forms/bulk_import.py:840 netbox/dcim/forms/bulk_import.py:866 +#: netbox/dcim/forms/bulk_import.py:841 netbox/dcim/forms/bulk_import.py:867 msgid "Port speed in bps" msgstr "Poortsnelheid in bps" -#: netbox/dcim/forms/bulk_import.py:905 +#: netbox/dcim/forms/bulk_import.py:906 msgid "Outlet type" msgstr "Type stopcontact" -#: netbox/dcim/forms/bulk_import.py:912 +#: netbox/dcim/forms/bulk_import.py:913 msgid "Local power port which feeds this outlet" msgstr "Lokale voedingspoort die dit stopcontact voedt" -#: netbox/dcim/forms/bulk_import.py:918 +#: netbox/dcim/forms/bulk_import.py:919 msgid "Electrical phase (for three-phase circuits)" msgstr "Elektrische fase (voor driefasige circuits)" -#: netbox/dcim/forms/bulk_import.py:962 netbox/dcim/forms/model_forms.py:1547 +#: netbox/dcim/forms/bulk_import.py:963 netbox/dcim/forms/model_forms.py:1547 #: netbox/virtualization/forms/bulk_import.py:195 #: netbox/virtualization/forms/model_forms.py:400 msgid "Parent interface" msgstr "Interface voor ouders" -#: netbox/dcim/forms/bulk_import.py:969 netbox/dcim/forms/model_forms.py:1555 +#: netbox/dcim/forms/bulk_import.py:970 netbox/dcim/forms/model_forms.py:1555 #: netbox/virtualization/forms/bulk_import.py:202 #: netbox/virtualization/forms/model_forms.py:408 msgid "Bridged interface" msgstr "Overbrugde interface" -#: netbox/dcim/forms/bulk_import.py:972 +#: netbox/dcim/forms/bulk_import.py:973 msgid "Lag" msgstr "Lag" -#: netbox/dcim/forms/bulk_import.py:976 +#: netbox/dcim/forms/bulk_import.py:977 msgid "Parent LAG interface" msgstr "LAG-interface voor ouders" -#: netbox/dcim/forms/bulk_import.py:979 +#: netbox/dcim/forms/bulk_import.py:980 msgid "Vdcs" msgstr "Vdcs" -#: netbox/dcim/forms/bulk_import.py:984 +#: netbox/dcim/forms/bulk_import.py:985 msgid "VDC names separated by commas, encased with double quotes. Example:" msgstr "" "VDC-namen gescheiden door komma's, tussen dubbele aanhalingstekens. " "Voorbeeld:" -#: netbox/dcim/forms/bulk_import.py:990 +#: netbox/dcim/forms/bulk_import.py:991 msgid "Physical medium" msgstr "Fysiek medium" -#: netbox/dcim/forms/bulk_import.py:993 netbox/dcim/forms/filtersets.py:1682 +#: netbox/dcim/forms/bulk_import.py:994 netbox/dcim/forms/filtersets.py:1682 msgid "Duplex" msgstr "Dubbelzijdig" -#: netbox/dcim/forms/bulk_import.py:998 +#: netbox/dcim/forms/bulk_import.py:999 msgid "Poe mode" msgstr "Poe-modus" -#: netbox/dcim/forms/bulk_import.py:1004 +#: netbox/dcim/forms/bulk_import.py:1005 msgid "Poe type" msgstr "Poe-type" -#: netbox/dcim/forms/bulk_import.py:1013 +#: netbox/dcim/forms/bulk_import.py:1014 #: netbox/virtualization/forms/bulk_import.py:208 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "IEEE 802.1Q operationele modus (voor L2-interfaces)" -#: netbox/dcim/forms/bulk_import.py:1020 +#: netbox/dcim/forms/bulk_import.py:1021 #: netbox/virtualization/forms/bulk_import.py:215 msgid "Filter VLANs available for assignment by group" msgstr "Filter-VLAN's beschikbaar voor toewijzing per groep" -#: netbox/dcim/forms/bulk_import.py:1027 +#: netbox/dcim/forms/bulk_import.py:1028 #: netbox/virtualization/forms/bulk_import.py:222 msgid "Assigned untagged VLAN ID (filtered by VLAN group)" msgstr "Toegewezen VLAN-id zonder label (gefilterd op VLAN-groep)" -#: netbox/dcim/forms/bulk_import.py:1036 +#: netbox/dcim/forms/bulk_import.py:1037 #: netbox/virtualization/forms/bulk_import.py:231 msgid "" "Assigned tagged VLAN IDs separated by commas, encased with double quotes " @@ -5220,12 +5220,12 @@ msgstr "" "Toegewezen gelabelde VLAN-ID's gescheiden door komma's, tussen dubbele " "aanhalingstekens (gefilterd op VLAN-groep). Voorbeeld:" -#: netbox/dcim/forms/bulk_import.py:1047 +#: netbox/dcim/forms/bulk_import.py:1048 #: netbox/virtualization/forms/bulk_import.py:242 msgid "Assigned Q-in-Q Service VLAN ID (filtered by VLAN group)" msgstr "Toegewezen Q-in-Q Service VLAN-ID (gefilterd op VLAN-groep)" -#: netbox/dcim/forms/bulk_import.py:1054 netbox/ipam/forms/bulk_import.py:174 +#: netbox/dcim/forms/bulk_import.py:1055 netbox/ipam/forms/bulk_import.py:174 #: netbox/ipam/forms/bulk_import.py:259 netbox/ipam/forms/bulk_import.py:295 #: netbox/ipam/forms/filtersets.py:230 netbox/ipam/forms/filtersets.py:314 #: netbox/ipam/forms/filtersets.py:383 @@ -5233,78 +5233,113 @@ msgstr "Toegewezen Q-in-Q Service VLAN-ID (gefilterd op VLAN-groep)" msgid "Assigned VRF" msgstr "Toegewezen VRF" -#: netbox/dcim/forms/bulk_import.py:1057 +#: netbox/dcim/forms/bulk_import.py:1058 msgid "Rf role" msgstr "Rf-rol" -#: netbox/dcim/forms/bulk_import.py:1060 +#: netbox/dcim/forms/bulk_import.py:1061 msgid "Wireless role (AP/station)" msgstr "Draadloze rol (AP/station)" -#: netbox/dcim/forms/bulk_import.py:1103 +#: netbox/dcim/forms/bulk_import.py:1104 #, python-brace-format msgid "VDC {vdc} is not assigned to device {device}" msgstr "VDC {vdc} is niet toegewezen aan het apparaat {device}" -#: netbox/dcim/forms/bulk_import.py:1119 netbox/dcim/forms/bulk_import.py:1137 -#: netbox/dcim/forms/bulk_import.py:1518 +#: netbox/dcim/forms/bulk_import.py:1120 netbox/dcim/forms/bulk_import.py:1225 +#: netbox/dcim/forms/bulk_import.py:1606 msgid "Physical medium classification" msgstr "Classificatie van fysieke media" -#: netbox/dcim/forms/bulk_import.py:1173 +#: netbox/dcim/forms/bulk_import.py:1123 netbox/dcim/forms/model_forms.py:1846 +#: netbox/dcim/forms/object_import.py:145 +msgid "Rear port" +msgstr "Poort aan de achterkant" + +#: netbox/dcim/forms/bulk_import.py:1126 +msgid "Corresponding rear port (mapped to the front port's first position)" +msgstr "" +"Corresponderende achterpoort (toegewezen aan de eerste positie van de " +"voorpoort)" + +#: netbox/dcim/forms/bulk_import.py:1129 +msgid "Rear port position" +msgstr "Positie van de achterpoort" + +#: netbox/dcim/forms/bulk_import.py:1131 +msgid "Mapped position on the corresponding rear port (defaults to 1)" +msgstr "" +"Toegewezen positie op de corresponderende achterpoort (standaard ingesteld " +"op 1)" + +#: netbox/dcim/forms/bulk_import.py:1175 netbox/dcim/models/base.py:59 +#, python-brace-format +msgid "" +"Invalid rear port position ({rear_port_position}): Rear port {name} has only" +" {positions} positions." +msgstr "" +"Ongeldige positie van de achterpoort ({rear_port_position}): Achterpoort " +"{name} heeft slechts {positions} posities." + +#: netbox/dcim/forms/bulk_import.py:1193 +#, python-brace-format +msgid "Rear port {name} position {rear_port_position} is already occupied." +msgstr "Achterpoort {name} positie {rear_port_position} is al bezet." + +#: netbox/dcim/forms/bulk_import.py:1261 msgid "Installed device" msgstr "Geïnstalleerd apparaat" -#: netbox/dcim/forms/bulk_import.py:1177 +#: netbox/dcim/forms/bulk_import.py:1265 msgid "Child device installed within this bay" msgstr "Kinderapparaat dat in deze bay is geïnstalleerd" -#: netbox/dcim/forms/bulk_import.py:1179 +#: netbox/dcim/forms/bulk_import.py:1267 msgid "Child device not found." msgstr "Kinderapparaat niet gevonden." -#: netbox/dcim/forms/bulk_import.py:1243 +#: netbox/dcim/forms/bulk_import.py:1331 msgid "Parent inventory item" msgstr "Onderliggend inventarisitem" -#: netbox/dcim/forms/bulk_import.py:1246 +#: netbox/dcim/forms/bulk_import.py:1334 msgid "Component type" msgstr "Soort onderdeel" -#: netbox/dcim/forms/bulk_import.py:1250 +#: netbox/dcim/forms/bulk_import.py:1338 msgid "Component Type" msgstr "Soort onderdeel" -#: netbox/dcim/forms/bulk_import.py:1253 +#: netbox/dcim/forms/bulk_import.py:1341 msgid "Component name" msgstr "Naam van de component" -#: netbox/dcim/forms/bulk_import.py:1255 +#: netbox/dcim/forms/bulk_import.py:1343 msgid "Component Name" msgstr "Naam van de component" -#: netbox/dcim/forms/bulk_import.py:1298 netbox/dcim/forms/bulk_import.py:1316 +#: netbox/dcim/forms/bulk_import.py:1386 netbox/dcim/forms/bulk_import.py:1404 msgid "Component name must be specified when component type is specified" msgstr "" "De naam van de component moet worden opgegeven wanneer het componenttype is " "gespecificeerd" -#: netbox/dcim/forms/bulk_import.py:1308 +#: netbox/dcim/forms/bulk_import.py:1396 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "Onderdeel niet gevonden: {device} - {component_name}" -#: netbox/dcim/forms/bulk_import.py:1321 +#: netbox/dcim/forms/bulk_import.py:1409 msgid "Component type must be specified when component name is specified" msgstr "" "Het componenttype moet worden gespecificeerd wanneer de naam van de " "component is opgegeven" -#: netbox/dcim/forms/bulk_import.py:1348 netbox/ipam/forms/bulk_import.py:320 +#: netbox/dcim/forms/bulk_import.py:1436 netbox/ipam/forms/bulk_import.py:320 msgid "Parent device of assigned interface (if any)" msgstr "Ouderapparaat met toegewezen interface (indien aanwezig)" -#: netbox/dcim/forms/bulk_import.py:1351 netbox/ipam/forms/bulk_import.py:323 +#: netbox/dcim/forms/bulk_import.py:1439 netbox/ipam/forms/bulk_import.py:323 #: netbox/virtualization/filtersets.py:354 #: netbox/virtualization/filtersets.py:412 #: netbox/virtualization/forms/bulk_edit.py:219 @@ -5318,134 +5353,134 @@ msgstr "Ouderapparaat met toegewezen interface (indien aanwezig)" msgid "Virtual machine" msgstr "Virtuele machine" -#: netbox/dcim/forms/bulk_import.py:1355 netbox/ipam/forms/bulk_import.py:327 +#: netbox/dcim/forms/bulk_import.py:1443 netbox/ipam/forms/bulk_import.py:327 msgid "Parent VM of assigned interface (if any)" msgstr "Bovenliggende VM van de toegewezen interface (indien aanwezig)" -#: netbox/dcim/forms/bulk_import.py:1362 netbox/ipam/filtersets.py:1111 +#: netbox/dcim/forms/bulk_import.py:1450 netbox/ipam/filtersets.py:1111 #: netbox/ipam/forms/bulk_import.py:334 msgid "Assigned interface" msgstr "Toegewezen interface" -#: netbox/dcim/forms/bulk_import.py:1366 +#: netbox/dcim/forms/bulk_import.py:1454 msgid "Make this the primary MAC address for the assigned interface" msgstr "Maak dit het primaire MAC-adres voor de toegewezen interface" -#: netbox/dcim/forms/bulk_import.py:1404 +#: netbox/dcim/forms/bulk_import.py:1492 msgid "Must specify the parent device or VM when assigning an interface" msgstr "" "Moet het ouderapparaat of de VM specificeren bij het toewijzen van een " "interface" -#: netbox/dcim/forms/bulk_import.py:1437 +#: netbox/dcim/forms/bulk_import.py:1525 msgid "Side A site" msgstr "Kant A: site" -#: netbox/dcim/forms/bulk_import.py:1441 +#: netbox/dcim/forms/bulk_import.py:1529 #: netbox/wireless/forms/bulk_import.py:93 msgid "Site of parent device A (if any)" msgstr "Site van ouderapparaat A (indien aanwezig)" -#: netbox/dcim/forms/bulk_import.py:1444 +#: netbox/dcim/forms/bulk_import.py:1532 msgid "Side A device" msgstr "Side A-apparaat" -#: netbox/dcim/forms/bulk_import.py:1448 netbox/dcim/forms/bulk_import.py:1481 +#: netbox/dcim/forms/bulk_import.py:1536 netbox/dcim/forms/bulk_import.py:1569 msgid "Device name (for device component terminations)" msgstr "Apparaatnaam (voor het beëindigen van apparaatonderdelen)" -#: netbox/dcim/forms/bulk_import.py:1451 +#: netbox/dcim/forms/bulk_import.py:1539 msgid "Side A power panel" msgstr "Voedingspaneel aan kant A" -#: netbox/dcim/forms/bulk_import.py:1455 netbox/dcim/forms/bulk_import.py:1488 +#: netbox/dcim/forms/bulk_import.py:1543 netbox/dcim/forms/bulk_import.py:1576 msgid "Power panel name (for power feed terminations)" msgstr "Naam van het stroompaneel (voor afsluitingen van de stroomtoevoer)" -#: netbox/dcim/forms/bulk_import.py:1458 +#: netbox/dcim/forms/bulk_import.py:1546 msgid "Side A type" msgstr "Type kant A" -#: netbox/dcim/forms/bulk_import.py:1464 +#: netbox/dcim/forms/bulk_import.py:1552 msgid "Side A name" msgstr "Naam van kant A" -#: netbox/dcim/forms/bulk_import.py:1465 netbox/dcim/forms/bulk_import.py:1498 +#: netbox/dcim/forms/bulk_import.py:1553 netbox/dcim/forms/bulk_import.py:1586 msgid "Termination name" msgstr "Naam van beëindiging" -#: netbox/dcim/forms/bulk_import.py:1470 +#: netbox/dcim/forms/bulk_import.py:1558 msgid "Side B site" msgstr "Site aan kant B" -#: netbox/dcim/forms/bulk_import.py:1474 +#: netbox/dcim/forms/bulk_import.py:1562 #: netbox/wireless/forms/bulk_import.py:114 msgid "Site of parent device B (if any)" msgstr "Site van ouderapparaat B (indien aanwezig)" -#: netbox/dcim/forms/bulk_import.py:1477 +#: netbox/dcim/forms/bulk_import.py:1565 msgid "Side B device" msgstr "Side B-apparaat" -#: netbox/dcim/forms/bulk_import.py:1484 +#: netbox/dcim/forms/bulk_import.py:1572 msgid "Side B power panel" msgstr "Voedingspaneel aan kant B" -#: netbox/dcim/forms/bulk_import.py:1491 +#: netbox/dcim/forms/bulk_import.py:1579 msgid "Side B type" msgstr "Type kant B" -#: netbox/dcim/forms/bulk_import.py:1497 +#: netbox/dcim/forms/bulk_import.py:1585 msgid "Side B name" msgstr "Naam van kant B" -#: netbox/dcim/forms/bulk_import.py:1506 +#: netbox/dcim/forms/bulk_import.py:1594 #: netbox/templates/dcim/panels/connection.html:60 #: netbox/wireless/forms/bulk_import.py:133 msgid "Connection status" msgstr "Status van de verbinding" -#: netbox/dcim/forms/bulk_import.py:1512 +#: netbox/dcim/forms/bulk_import.py:1600 msgid "Cable connection profile" msgstr "Kabelaansluitprofiel" -#: netbox/dcim/forms/bulk_import.py:1532 +#: netbox/dcim/forms/bulk_import.py:1620 msgid "Cable bundle name" msgstr "Naam van de kabelbundel" -#: netbox/dcim/forms/bulk_import.py:1544 +#: netbox/dcim/forms/bulk_import.py:1632 msgid "Color name (e.g. \"Red\") or hex code (e.g. \"f44336\")" msgstr "" "Kleurnaam (bijvoorbeeld „Rood”) of hexadecimale code (bijvoorbeeld " "„f44336\")" -#: netbox/dcim/forms/bulk_import.py:1587 +#: netbox/dcim/forms/bulk_import.py:1675 #, python-brace-format msgid "Invalid side designation: {side}" msgstr "Ongeldige zijaanduiding: {side}" -#: netbox/dcim/forms/bulk_import.py:1606 +#: netbox/dcim/forms/bulk_import.py:1694 #, python-brace-format msgid "" "Side {side_upper}: {power_panel} {termination_object} is already connected" msgstr "Kant {side_upper}: {power_panel} {termination_object} is al verbonden" -#: netbox/dcim/forms/bulk_import.py:1612 +#: netbox/dcim/forms/bulk_import.py:1700 #, python-brace-format msgid "{side_upper} side termination not found: {power_panel} {name}" msgstr "{side_upper} nevenbeëindiging niet gevonden: {power_panel} {name}" -#: netbox/dcim/forms/bulk_import.py:1630 +#: netbox/dcim/forms/bulk_import.py:1718 #, python-brace-format msgid "Side {side_upper}: {device} {termination_object} is already connected" msgstr "Kant {side_upper}: {device} {termination_object} is al verbonden" -#: netbox/dcim/forms/bulk_import.py:1636 +#: netbox/dcim/forms/bulk_import.py:1724 #, python-brace-format msgid "{side_upper} side termination not found: {device} {name}" msgstr "{side_upper} nevenbeëindiging niet gevonden: {device} {name}" -#: netbox/dcim/forms/bulk_import.py:1658 +#: netbox/dcim/forms/bulk_import.py:1746 #, python-brace-format msgid "" "{color} did not match any used color name and was longer than six " @@ -5454,53 +5489,53 @@ msgstr "" "{color} kwam niet overeen met een gebruikte kleurnaam en bestond uit meer " "dan zes tekens: ongeldige hexadecimale waarde." -#: netbox/dcim/forms/bulk_import.py:1683 netbox/dcim/forms/model_forms.py:962 +#: netbox/dcim/forms/bulk_import.py:1771 netbox/dcim/forms/model_forms.py:962 #: netbox/dcim/tables/devices.py:1154 #: netbox/templates/dcim/panels/virtual_chassis_members.html:10 msgid "Master" msgstr "Meester" -#: netbox/dcim/forms/bulk_import.py:1687 +#: netbox/dcim/forms/bulk_import.py:1775 msgid "Master device" msgstr "Master-apparaat" -#: netbox/dcim/forms/bulk_import.py:1704 +#: netbox/dcim/forms/bulk_import.py:1792 msgid "Name of parent site" msgstr "Naam van de moedersite" -#: netbox/dcim/forms/bulk_import.py:1738 +#: netbox/dcim/forms/bulk_import.py:1826 msgid "Upstream power panel" msgstr "Stroomopwaarts stroompaneel" -#: netbox/dcim/forms/bulk_import.py:1768 +#: netbox/dcim/forms/bulk_import.py:1856 msgid "Primary or redundant" msgstr "Primair of redundant" -#: netbox/dcim/forms/bulk_import.py:1773 +#: netbox/dcim/forms/bulk_import.py:1861 msgid "Supply type (AC/DC)" msgstr "Soort voeding (AC/DC)" -#: netbox/dcim/forms/bulk_import.py:1778 +#: netbox/dcim/forms/bulk_import.py:1866 msgid "Single or three-phase" msgstr "Enkel- of driefasig" -#: netbox/dcim/forms/bulk_import.py:1828 netbox/dcim/forms/model_forms.py:1939 +#: netbox/dcim/forms/bulk_import.py:1916 netbox/dcim/forms/model_forms.py:1939 #: netbox/dcim/ui/panels.py:111 netbox/dcim/ui/panels.py:371 #: netbox/virtualization/ui/panels.py:55 msgid "Primary IPv4" msgstr "Primaire IPv4" -#: netbox/dcim/forms/bulk_import.py:1832 +#: netbox/dcim/forms/bulk_import.py:1920 msgid "IPv4 address with mask, e.g. 1.2.3.4/24" msgstr "IPv4-adres met masker, bijvoorbeeld 1.2.3.4/24" -#: netbox/dcim/forms/bulk_import.py:1835 netbox/dcim/forms/model_forms.py:1948 +#: netbox/dcim/forms/bulk_import.py:1923 netbox/dcim/forms/model_forms.py:1948 #: netbox/dcim/ui/panels.py:116 netbox/dcim/ui/panels.py:376 #: netbox/virtualization/ui/panels.py:60 msgid "Primary IPv6" msgstr "Primaire IPv6" -#: netbox/dcim/forms/bulk_import.py:1839 +#: netbox/dcim/forms/bulk_import.py:1927 msgid "IPv6 address with prefix length, e.g. 2001:db8::1/64" msgstr "IPv6-adres met prefixlengte, bijvoorbeeld 2001:db8: :1/64" @@ -5993,11 +6028,6 @@ msgstr "Poort voor" msgid "Power outlet" msgstr "Stopcontact" -#: netbox/dcim/forms/model_forms.py:1846 -#: netbox/dcim/forms/object_import.py:145 -msgid "Rear port" -msgstr "Poort aan de achterkant" - #: netbox/dcim/forms/model_forms.py:1852 msgid "Inventory Item" msgstr "Inventarisitem" @@ -6049,7 +6079,7 @@ msgstr "" #: netbox/dcim/forms/object_create.py:312 netbox/dcim/tables/devices.py:1160 #: netbox/ipam/tables/fhrp.py:31 netbox/ipam/ui/panels.py:185 -#: netbox/ipam/views.py:1589 netbox/templates/dcim/virtualchassis_edit.html:59 +#: netbox/ipam/views.py:1594 netbox/templates/dcim/virtualchassis_edit.html:59 #: netbox/users/views.py:375 msgid "Members" msgstr "Leden" @@ -6074,15 +6104,6 @@ msgstr "Apparaten voor leden" msgid "A position must be specified for the first VC member." msgstr "Voor het eerste VC-lid moet een positie worden gespecificeerd." -#: netbox/dcim/models/base.py:59 -#, python-brace-format -msgid "" -"Invalid rear port position ({rear_port_position}): Rear port {name} has only" -" {positions} positions." -msgstr "" -"Ongeldige positie van de achterpoort ({rear_port_position}): Achterpoort " -"{name} heeft slechts {positions} posities." - #: netbox/dcim/models/cables.py:62 msgid "cable bundle" msgstr "kabelbundel" @@ -8031,8 +8052,8 @@ msgstr "Toegewezen trekking (W)" #: netbox/dcim/tables/devices.py:597 netbox/dcim/views.py:3402 #: netbox/ipam/forms/model_forms.py:834 netbox/ipam/tables/fhrp.py:28 -#: netbox/ipam/ui/panels.py:252 netbox/ipam/views.py:922 -#: netbox/ipam/views.py:1047 netbox/netbox/navigation/menu.py:175 +#: netbox/ipam/ui/panels.py:252 netbox/ipam/views.py:924 +#: netbox/ipam/views.py:1052 netbox/netbox/navigation/menu.py:175 #: netbox/netbox/navigation/menu.py:177 netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "IP-adressen" @@ -8462,7 +8483,7 @@ msgstr "Contexten van virtuele apparaten" #: netbox/dcim/views.py:3414 netbox/ipam/forms/filtersets.py:469 #: netbox/ipam/models/vlans.py:308 netbox/ipam/tables/ip.py:121 -#: netbox/ipam/tables/vlans.py:52 netbox/ipam/views.py:1381 +#: netbox/ipam/tables/vlans.py:52 netbox/ipam/views.py:1386 #: netbox/netbox/navigation/menu.py:210 netbox/netbox/navigation/menu.py:212 msgid "VLANs" msgstr "VLAN's" @@ -11460,11 +11481,11 @@ msgstr "Beleid" msgid "Ports" msgstr "Poorten" -#: netbox/ipam/forms/bulk_import.py:55 netbox/ipam/views.py:72 +#: netbox/ipam/forms/bulk_import.py:55 netbox/ipam/views.py:73 msgid "Import route targets" msgstr "Routedoelen importeren" -#: netbox/ipam/forms/bulk_import.py:61 netbox/ipam/views.py:75 +#: netbox/ipam/forms/bulk_import.py:61 netbox/ipam/views.py:76 msgid "Export route targets" msgstr "Routedoelen exporteren" @@ -12334,8 +12355,8 @@ msgid "Added" msgstr "Toegevoegd" #: netbox/ipam/tables/ip.py:76 netbox/ipam/tables/ip.py:111 -#: netbox/ipam/tables/vlans.py:125 netbox/ipam/views.py:621 -#: netbox/ipam/views.py:1731 netbox/netbox/navigation/menu.py:182 +#: netbox/ipam/tables/vlans.py:125 netbox/ipam/views.py:623 +#: netbox/ipam/views.py:1736 netbox/netbox/navigation/menu.py:182 #: netbox/netbox/navigation/menu.py:184 msgid "Prefixes" msgstr "Prefixen" @@ -12541,77 +12562,77 @@ msgstr "" "Alleen alfanumerieke tekens, sterretjes, koppeltekens, punten en " "onderstrepingstekens zijn toegestaan in DNS-namen" -#: netbox/ipam/views.py:106 netbox/ipam/views.py:1761 +#: netbox/ipam/views.py:107 netbox/ipam/views.py:1766 msgid "Device Interfaces" msgstr "Interfaces voor apparaten" -#: netbox/ipam/views.py:111 netbox/ipam/views.py:1779 +#: netbox/ipam/views.py:112 netbox/ipam/views.py:1784 msgid "VM Interfaces" msgstr "VM-interfaces" -#: netbox/ipam/views.py:196 +#: netbox/ipam/views.py:197 msgid "Importing VRFs" msgstr "VRF's importeren" -#: netbox/ipam/views.py:203 +#: netbox/ipam/views.py:204 msgid "Exporting VRFs" msgstr "VRF's exporteren" -#: netbox/ipam/views.py:212 +#: netbox/ipam/views.py:213 msgid "Importing L2VPNs" msgstr "L2VPN's importeren" -#: netbox/ipam/views.py:219 +#: netbox/ipam/views.py:220 msgid "Exporting L2VPNs" msgstr "L2VPN's exporteren" -#: netbox/ipam/views.py:798 +#: netbox/ipam/views.py:800 msgid "Duplicate prefixes" msgstr "Dubbele voorvoegsels" -#: netbox/ipam/views.py:799 netbox/ipam/views.py:1012 -#: netbox/ipam/views.py:1120 +#: netbox/ipam/views.py:801 netbox/ipam/views.py:1017 +#: netbox/ipam/views.py:1125 msgid "Parent prefixes" msgstr "Voorvoegsels voor ouders" -#: netbox/ipam/views.py:851 +#: netbox/ipam/views.py:853 msgid "Child Prefixes" msgstr "Prefixen voor kinderen" -#: netbox/ipam/views.py:895 +#: netbox/ipam/views.py:897 msgid "Child Ranges" msgstr "Ranges voor kinderen" -#: netbox/ipam/views.py:1121 +#: netbox/ipam/views.py:1126 msgid "Duplicate IPs" msgstr "Dubbele IP-adressen" -#: netbox/ipam/views.py:1125 +#: netbox/ipam/views.py:1130 msgid "Application services" msgstr "Applicatieservices" -#: netbox/ipam/views.py:1291 +#: netbox/ipam/views.py:1296 msgid "Related IPs" msgstr "Gerelateerde IP's" -#: netbox/ipam/views.py:1432 +#: netbox/ipam/views.py:1437 msgid "VLAN translation rules" msgstr "Regels voor VLAN-vertaling" -#: netbox/ipam/views.py:1438 +#: netbox/ipam/views.py:1443 msgid "Add Rule" msgstr "Regel toevoegen" -#: netbox/ipam/views.py:1580 +#: netbox/ipam/views.py:1585 msgid "Virtual IP addresses" msgstr "Virtuele IP-adressen" -#: netbox/ipam/views.py:1585 netbox/templates/ipam/iprange/ip_addresses.html:8 +#: netbox/ipam/views.py:1590 netbox/templates/ipam/iprange/ip_addresses.html:8 #: netbox/templates/ipam/prefix/ip_addresses.html:7 msgid "Add IP Address" msgstr "IP-adres toevoegen" -#: netbox/ipam/views.py:1744 +#: netbox/ipam/views.py:1749 msgid "Add a Prefix" msgstr "Een prefix toevoegen" @@ -14045,7 +14066,7 @@ msgstr "Gesynchroniseerde gegevens voor {object_type} {object}." msgid "Synced {count} {object_type}" msgstr "Gesynchroniseerd {count} {object_type}" -#: netbox/netbox/views/generic/object_views.py:118 +#: netbox/netbox/views/generic/object_views.py:120 #, python-brace-format msgid "{class_name} must implement get_children()" msgstr "{class_name} moet get_children () implementeren" @@ -16024,7 +16045,7 @@ msgstr "Per pagina" msgid "Data is out of sync with upstream file" msgstr "Gegevens lopen niet synchroon met het upstream-bestand" -#: netbox/templates/inc/table_controls_htmx.html:11 +#: netbox/templates/inc/table_controls_htmx.html:10 #: netbox/templates/inc/table_controls_htmx.html:12 msgid "Quick search" msgstr "Snel zoeken" diff --git a/netbox/translations/pl/LC_MESSAGES/django.mo b/netbox/translations/pl/LC_MESSAGES/django.mo index 8568e89d7d4316f6a2a489f2888de1170c42ea2a..9cdb223cbb93fa1099ab1a1a6e5bc8a197544cc8 100644 GIT binary patch delta 77798 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 P@7gQVwk7L*ZY}>mT4@$z delta 77345 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�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

<{ht716> zVx$uNu;xtbb z1QLdENc#r^*O9AW6Ui8tW&JJkH<^#Y`~$Ws2L0OT|0Kw%*cb@;J%g?{1o9o{-3hh< z*FH;V9D1B!oFgS7n3qa;PHe-^2T5J8N(*UB|#9}%rk=1Pk{@_ThGmMJy^C-5& zX;ft9z{ysfwiteaTsWMmO?Kd_O%N54t;)D1GUr1aGIxvq9ptN#NPzZV)d*rC5kW-5 z*;M*!A5px4@CVz+d-SV2OaJ{l+19QQ)B%Fs%F1vOh=A@~){Zj&0%yHUZUAfd32qrw zTdy~oVQ_rL8N1?;saheNogt8KrWgSu(YZP}%lt|_4wbEyz+e^IQ!T%sUj@e@tp($( z_)uGojY{Z6K}XHq2S;@+<55ifW#N-W=aJx_3@FFJU}19@kMe&uo!aKO4B4kbHw%o! z+&LWiQqAH7+7NpyvGJJomaOfw;L1kiYgivjwFD)#3iO*?Oa1<9KWz5-rjE2R) zu22DH4eFG@D{+Gp*x!N5YL;)AiMS>f4-+?-FTwnEVkkz=rI5Xgxg-|LS6s}%eFN6Q zBa;LjwZTF66Yv>v?@;yhL+u9Q=`i;k7aLINMWlzB8$f>zX8L2IDE*VjhHgu-vxRxJ zamb{Q3|C?F)oxPaH1tbYsgGmxogR}Hi9Zm5oGhkf@g#hYBef%3skow>Va+|m_&tvN_jEnPl40esT+j+Wn|VOujWO+mggO0P?tnrKJNJhm5sHf=5QS2T$bDgY#hXv zi-dB*o#-aO=LF5sMq~R6Yi00xleL=2=Vxs@YZpvLa{pkv1M!W3U74?hY!T**hWxx` zM2viAp#_G%(O0|1HHdyK6bs`tGix0Qv;Zt@$?at=o(21wVB%p|Z8PiV;Y0LJF~=`T zbvGhjOOzBAW{wF?+Lh>dmV?PaVM7JHL}Y9#TBU1T{^KAwb~CH*@a_0+hV zN$i1KKW+UJrcPo$BQnX!WmV8ZOt|mca%8OLMno+o9v4_Y7AocNewJ}%%=Tw(WGI&p zaHsY!q1?vCN7FljoDXw<(2ax4Dc00l64G(9tASh{{nGRI2!ynJEOxbVm{3l_oALn+ zMWcKPL!2PH6`hw{YBP~b<8)m$2%rn&Ggh|#B+{O|uQIPTkG048`uz=^Y8W`n;#-9J zuvmnCd)Sw8CZf$~LB-^7G)DHIjA5v$8GB8zUy#p*o?1c+KAq`ZqH>Ywr$sLbGUJiC zLtwA;&D8Ez!UHTMA()i#E`q0RJ_}=i`bSy&Y6qz&268igMsP3Xk@f%wO{q*j=1O6A zvQ;TE!CbTomBa2}>|J85E|qle!HC)?i#QsKyU3~?7f(l>}Y`**MJogI*oxqUoFI;fZV?!Y7&ROXO+?5mNhM z?8;gM46EHI>WmmW##%y~)BGQk^|RY642*&8JaDN5XxHf1B*Df6ABMFwy2-Z&ZA|W! z%Keo2KE(0as`iL}POcQhl$13!U;6V&=pSUFTEd#|Lt<)$;9z2#XK@7}lLpTTmj5?E|PTJ+(pZ6ttc7|o;LLami1?qnDmgmQIr-ih@g1UCTZ zI#y~)31Af0C))+h{ez!~=wYntnZ!sE>YSoL1qA%ry?#aArgL!`wvEm}?W)P$uG| zpq89y7r>zel@vpoUW9>1I4DnF&7Xj_;wU*r*I;y|Rb)T%Q|YHeJ}PV7Y`zEb=}0UG zbI-6}9g;ugHUaf_<0%;id=X4e{|HxjI~%Lv0oFpd%^3PY^#*Z;w4TTn;;PR?$R`V3 zLiu=O=OD2jgo!Yi86#@@ajKU7|8kaWalRo`0F_ujh)xdd z=BM8aogGxFIpdS&9kbp_3n-{EnFC z4{*E+N1=|8Xy{f9<EB}R7xFXo_02I1&csm!QKeC*2eQz!2JZ7q4+6JkZRRoV>lf9 zeGqSI$!M)KYn8EIh<+7(twwhdb1{(F!L^n6&NDtotU=_{1F9uAekRT-$kfO7apni= zbEEV)`NqO*CaR%483$?!=|{ro1lR8Y zuQ)#LFwVqUGsedm$0oqo`VSW2Fz{RzqRqkKd=@4UadaHd#z1$B4MJfH^8>lm8d(6# z31A@O39t}0!gDMtQJHDrxOA~#`tDxww-xleWuN+MH` zpeBa%{Qpe$#qUtwwOy`K0j+I;6ZfSVyKgw z3{69MrkoH!b^70MK9gZAWVdrgK!2_&Jwc~EbNwu+x6I!_C$|MOpCEoAKaI=Jjo=j~ z)N-KsFNQBtB3}#W4)Yr*zn3XX?leK{z@VBwyZwocaOn7x*$(6ynd4)~T*BUIlG=!k zVy4rOxqQg0xsS3COaReP490Ni_6LQW7+1?_&s-_b3JKs~9(J~~R+D}%?ES>v zDUx`=SnV6O24KHDjLdzt2782D+Y%qaFpcr!***-hBXDv$x0Fszrr z*?87FQ?+JhqaC_Gn5#>6)8QhVy~OTiWWEwaYQ`nVUTq!g!}On&i_*zr<<>$nD@|G= z+{*k-uDr;o#gQ^bDsZXwH~uoCEeYx-R}X?8V%1DY0zm}-0DJMUa~Hiv1htl+b`>@Q zBdxqLI?MuihCoQ$OMffbMKMR3uN1T=6Hk*DmVAh46%*No$!%K0Tq|NxIDP2n3YBYZ zCLa>-Rm@+uPy&dx4mPGE-<$PoT>r9u9$Uv0zl9YA`B5Psdjy%Xg6Lw!QvV&!zM8|N z%rD2-66S{>A4oo}U{A~U1?xV{EkI^6&Pt;9l75&_wo9-c5&3hhtt8Oy+CjC?C`=-< z)l^n3n5;tDD-35cBeyY_pKBQMzQ`wM{xpVKFn1@#yUqa_g5UP{ z`dGIh!XZ<>odY~tEj#~zjJNV{?boAY_ii$uBSY}*OI`&EMhMXkiX1&m(t^Hy1N=Jq z_y3>Gz6!3Hg5w{@b${P>-F*Ezve2rJZ|9aRdvs~%-zsZxvglzpzpYsvNk8B2fqvcm z+Xedh{x25)fbRaD{801r?c&EG2yEBMBPZL3mLFQ&*;k7m8=mC-I%Wty|0hhnHl?cn zCqa!oHUdH<|G(ZkzwmE&pDqnpXXlmoAYA6U!KpGJbrnWhZFp-Se`_p2wpKhkvMUA zB9Z%)rHRD7mD3W(@jh&g!>gnvs^Ifj7C*X`5mop>cafY!4X z4S0LJz88}g9427{C-G7I9_Qn%T4{;4n6GwPq6zjx=khTukEgK?=BbmGXn?IT8{UO= z@t#=z8a5^W7xuyib<+|(aY5a*WMT}7FDYn)-Rq?#hT~({64UAjTVoCK_eEdDhUCv; zU#!?5EV|iPoBU2R;NP$&)@YcPXpY0M9X^fM;V%u7X^9RbIyXv7RKv&69_^1N8i!R~ zH#!1sU|IA7bR;fm5_UuNXg{=kMsx$VApa2>NTH@_iPG3VNx}y2LZ@ImUV?it2fl-@ z?!%aYpP;M%c)b2i^cVE`zhgdIvyjh=F6yh%HIRt~um%>zWIGbh+0A$zB6VIro1d67JLTXk^XM9(6_| zAA|-nDqg=G9hq5p6)r;W+kiH-9lifuG@v7BfM25l{TZ((TCx9KT)9ZNTJxbJ&=4zN z2XrJRqDSb4=q~I`{sXL!#af3&+z+dgUl{Ydu@d<|(KS@6O{l*T8eqdV?0+k6LxF+x zL+5M|8u5%+z8KvNkD(8)!GZW(%;#yKsPXLK~ik4(-F}2t9)az5|=#yXYC8yM367^0=6MZCr)>(4%@phfvS- z=;9;^D|#yW60RVB0N+YWBt~{jOY|ULy>mD^XQR927&>An(H?${o+D?`w`rL!A%7Ek z5-yGTW9U(ww`*FWASSz!aE^zgYv6G#gZt1SJBtow`EF^60azKG%X#RCJcxyG9XbNL z@f!R*=Kn@}UZ{JpG8%Xb}By=i1L|6Z3(KE69 zJUTV$J;U{UXuZYI=PIFr)Ir}F9WlH6|49;VljqQ$?2P#%(XXTD&sa5g%7IeGr#RBgC_eog6SJ(`HMbCqpy~8f(fbR3_&;}-=Yi2gO zTOLINdnx)J7AF5Cx+eZbJ6QYLa9?Y5k@v@>iP0o%U^d%e#ybM}zjlS&v(j;2Mg5lB0=#bruR?E;tB#qvym{9FM!uZJ4Y!ASCLbJ#B)zu%h|sTt9?0 z@Nx95_yJbL%Wevv-3`$*eiC-ahp`!cgJrPXknq{v72V#m&~xRP=mBg+{_GI;e+v?| zhK2_wp$%`q>UbPWVcuaOUmGWpzZuGrqr&q8&=FmP&h=7s z4LpU8?2DLMW9U@8ktE?!_WT-2X>O`1<_?+hDF+Ljyg~xg3PP&&Q(` z-;XY`Rp`(^6Wxdo_15TXXkh!%hL55n_&wTA#sv1iM{EZYRx}u`;O3YgkM?vDIzqE! z{(iJaOV9?^#qw>jd~fsvwBZxzNc@W4f5~m3-Yaio|J%co6xg%cXvOW(9`->Sz5xwz zIHraeovJC=6W3!+{1=_F8WY1RuaBuUfVMLYt!F;E`X8Lg{_jCzF9rSa%G<*Oisd$1Bc2cAcJ_*E=FkB;CalY;rs)qXWvPsLc?2py3&NfK6gU36r03O1ws zUi6D+KicD5lf&z?5&GO6==FK%$Q;D#cr@m7P6;DY0KLBmI^`A7wUBHfxy{vScYpIq)l zA6SYuun~>;6|{oAXipAds^RGGXiu}>5h^YiEsd7fM4xXF?HaFNZ{GbsG8RmV-W`1q z9n#fkU|Z0N_Q&f-&=EO}26PTxv^nn#t3N+FlAY11?1Oe_I64BiVA2YwlW^P2LvLJ+ z4%HJ_3|~UO^^Tzp9>>b~GrFCMP7lwQLIbUc*4qqiuru0VZ>)8O1XJgyiz!m8A;#d~zq8%B8HZTmm&uwmfGch&AXh0j2B&>KR zdgFfdEB6Ri#e8>#d~@`5dOV^ubLr|0?>?`DH9GGApd1a_Hi%kL9ov8puSffzz?N z`~L+JS5xpMI#mBfFP$ACz8Y;X6YXiGXkBbWz6I98`_ON@UFb*a-{^?dzdJ0#rf5gn zqTBe|R5|-^7ztPX*k}@6^$XF(wFzB3Z=oY_9IYtpoKSuRx&|tt^)x}B>l&{QMYrdj z=+6s_V*W*}=Kg=1ghO>6U39tb2_w-k+8&2f-Up3*H@f%^p+kBW{k%RO^H<*+{-~xD z)~9?VI&x25`2<$O-j5Q&%Q9elrZ&9z%K6p-Xt8FCovN@VORVBOJngxA&|D{ zBD)(6=pnR$73lLD;`Qz5;(ZGZB=_Pl1^Li5RvSH<8)54Af0Ic#lrzvCJ%ILfeJtOK zKDY-xx%Q(CUqp9D&IiLUESq8KAVSM`VMY8Mox;qA(h}EVO{|V{F}wT!RT6HSH_;R9 zT{QCS4~K>>MFYAT?Rgn=2&-Zy)wQfc(8^AYY>+@)P=cy%^2+SZJ^e`b(+7=u{0w z0~`Ms``ma+e>a0dnYBi6wZ%fnRkLj!vRo8cjBf%#U13VY#g?ZKV{LQZSWa1ur25m z?njT_qv%@tHs&v&_vKg}8Z3(DD$$~ z(VlHb8{UJdg9&ZmB05rOPll<@i`G{dEiV(xYh%)(Y)YaEjz%M1hL%5x2Jk_={xMc1 zpKWb;sno$XI|Nx1DAJQHr{ ziRSyGJ)3~`XbRfU-RK-Y9Ir2p`BgE$7VW?W%#GWkd(lOF2%U;A&<-SjBjE!V(bwW7 z>%$*3wnRtZF*NcuXv5E-6+e$w^a>i_!Fc@`TJiCC{TsC53(=e#!q8uhjASxVo`e-O zMSI>I?deE#wN6Fn?ml!4tccfNLHF^y=<}yy`S0l4Fw3*ybzThZKtr^nEzkp~GiGuB z-$=q9+>G8h0iENi=ptE&Ht;yw^G(s6Xu$8FBl9IXV&BI6ujrci6H8;M=R*A*(CykC zGkpKgCXtT!VpE)l_Vit>hTowlV&UgQKy}eTTBAMc5z7a}@=>vTGCGp8&<;Epudj{e zn=xq*_mFS|4xtr(hBojGI+wqrJ^LqKzhq;m_;U2V66o_)(fb>s_qRfO+9j6HKu2mW zI<*Tnvj45%aS9A%L%i@38u`AMKZ>b<(4PE`u8C}$!gGbubD|tNw++z-x(XhT25e6FowabArETn~M| zJ^EZ9G>~CvAmh*xxgA++$;7iH{N&mm3KBn|N9G0efwXO5(PT##)um`d1<{czhu&WW z?MNMTZL~zUaUb;lG12Mhh%Uf9?*G;C!lqOKKWfDr4#o0QXhpxF@BbXz!`rerTHXyi z;xMd=o6&$yp#hyi1OF2pk+dBlpuCvN{a@S!Rz@qVkJYg&*2EcD3AbWpJcZRT?@M9T zH%GT^FSO@_&>l`ehyHGKkvl#ftbjI`=tV z3A>{lmL%T|9f8}>pP+W*RQwFfV4qim)3F2jwP-s(zsmm4Bysu95MfQMOMW=|GFpXA z@H2EfUcD;>+7df?AC|+dXkf?Dfc`wfiu1O+1a6xEtO7U!dEq$lefOb#!g?M+2XWF8Ys?F_Gtu za8$NN=XNr-!e`LM^AkF!=g~!!^UV&=MsyL5j!uc?bI_?uE{p}w zqKj}_ys!s-@Ho1kzegLsfG)P|Zw2$CtGy_?9m}9+d?mEL>R16A<4zoo^{~v_sl}O0 z3?g9XvN*pH8TM1 z>BxBfwwO<%_uYry_wd2^^ZyzO9NHJq$X-IX)!S$fPGEWb8Z$BPd!eH0Xuyrp=Ubuy zc8u4rjrkkV5gmhW!&_s1&3o*BSM|DBunqmxdIhcMC_2|)qCNTz9f^O?Rh;ep&~Q_9 z4Yfs|yAcg+4El4!1T2R0(R!XkJGwm?Z+H`jP;de>vDKk)a12E&d;ndwOV9weq802y z13ZA<_gVBCtVI4-bWs=kApDZ5Ce|c>2O3Cn6A4G)Wpu9hqjPi+9r|PF(4Isa{1)9_ z=VE!T55rvMNAJ%>11yVBUSsbBgg)0mP+szLs#Vu=yn=|4qXyU zjk1kq9xH0sDLiIT4;wFphtO|m>+-!Gy?75q@(PABV7|OY(?jC zZ_FRSvgAKO_i_5MaK;zGX5A zw4ovBkl%_{JQba@d(b&t5`7vS^6lvTucIB=kDiR5pd*|Av+#SwGU%e7fd=>}^0rJS z){(H{Gw3(p1uTKJKTk`H#=cks-^8kT9xGzGvFy zN^U`S#Wb{|kDw#77E|y49VA?(JJBIJjK2NO#C-axFhzyXMOX>#X&ZD-r=krUMgu>K zHkA2gsJALQ#cj|v(I4%|FihIe1QI?lFS-=%$usDUFQKdaE%d}YfL3@2T^py-z|Wy; zBKPUg^DCpp(N$jw-6b{A`|6!$|EH5^5pQgb2GR{(OoPw{Zb82dXJT!967A_HSP64| z74ENx&B(XM>Npo2>Q}KAzK=eaSN4Oe#y&c+4KlFQGT#|$lE(fW#_Q&==+HNawu*K^PsG0H)LkF*gV6?uq9b!FTHlPApC4VGBw-IW zpn+^d_ve1J!O!FMZ_q$~jrj}cHp}u`c<%COY4o6~hhFcD4)t|d4yU0b^(1U8dz$sn@O%OE z`3l$+n`0~A|1(kv-fn0`xz2|NuR`pkbX6~p`Az8a z@5TI4EJ^+xx_b)$8%C@x8t?;Xz-yBv+(uilGaf(#DEwcjpagorv_S*v5bYVgJ~|Yg zim}m&=v3Shug^di-`rUK0@|_UHWJR&8)(mt#Qg7QkFxRZGoZZaR1`wzuqYZ(d2~P5 zKv#7;bTRhE?syNn_>Q4da0adCA0*&pA|ovni#AXKT^p6ritD2hw~6JwV)+f| z{bOSJWVD{yG5-kq{2DaSjc7e@rmnO9{zt+HPoRtNXSBj%>FKFCuYk^V12mv6Xixg1 z`+5x8;63OXS%S{(GtnKf{B894kFgkjY2N*xk&&MI8%vj=bJ!bg@Om`TThI!p$NYSB z=$Bz%d=ksyKj?jBvZSYWQEjY4ehfN=PomE~i`KgpQ-A+&FA016F1EoV=#X8LHT0|k zx@sGtP27EC|!X8|jJv?|78bBHJ z7m@YQA?=OcHv+9_BDTfZ=yp1QHuNES-!UwWU&ZoVIYNM!M~k3=Cd-hRNTMdr#%Iv4 z-6}c5P*+Fiz5#j=b&ut}(KRy=J!nS6{8%)=Dd<$)8?P@yN9YkWz*R`V{P|xNgqH)H-I^nsJ;$ozm-^l!YLJy*!*N1wkYS`H1QCOU#G(0Z?p*N0&j-~Z!DSmAE; zfp;)=sKweW8&gVpkc3j3f#J~%oomXAV5U}DVQg?4BzdJZf>fATqm29o4{cs;tRug(`LxCy;J4(-WIbS@X64X;HT*otn`z1R$op+9;RzC7ID z2N#hag_H3gwBxtukNbZ{{?O1uvJp1P%sodaGphbupjN|M`#77&^i7d4eS?m4Wtze z4d+4+ocw42^<#M}^!`p*8LvmDVs5yeOcW^;Dkz1HKqYi_H$WR`iU!mk4WM_tejPgG zH=u#uhCV+78{h(Lh3}xxU3OI%fdXi~EikA1zY__Eu1|Cj+ThLTIWPfTT(e{O(pdgf zEZ-i>527P@4DIPTwBb^P!>*}-cC1Rw*TmHC|LdCILc4fFKXla(L<1R*HSkWfr<>58 z?u_|&(ff{K1w0+S?CQ|d2Iv&DLfh$uK0g$b&e?=mumqjEb!bJK(M9$-x@bZ@F_=W<%7h0eXbcy-F z(J|-)Q_vpXg{^TucEJCkJuX@@+*bzOu9eaITVfmRh6em-EMJZ}-2cyzFya@{hF*)l zg%07t=uz~(FJt~JI+uT;YawT;aJ>jRrR6Xa>qq;eyJs32$PB!c_7ihr!9!?ImY{*G zMjLz@ZD(Mo|0~_Pp=*VO(8|t~TEc@TLT`3A& z?ZdDJK7xJ$?MFx8BpUe-=v(kt^!0g3xzJ!~v;&pVp{*6m>!WL`IT}bWybf=|)Kr&C zhVAwi1@`O^+Job0Ltn@I-{`i?C?9%oDOy2M^d(dpt7Coi=Y&ycAal^?=ArdJj6U}S zx|`M~NmM5BHrntX@rHlU2eMQMbALHH5+%@2uqxY)v`KpX6W_U!tYABQ%0CprR)&_Gt9t9o;EZ}f1y{#DHX ziGHeOuM#>^7E}NJr&cUzjODnY13Huw(10dmFPx2U;xVj_E31ZY#ShSPAb+*=#2oC5 zeep25n<`fi_uqg{!D8%)A7j!vFIgir+!W`LAC61$cT9as)eP6)K^y)J>tX3y;dMF? zSCF5FRj_>R^wi&O?~88lz4$O@trM;d$^><3RGCVsC8Ffc@`labbhd@atHM z{Lkpnm2Mc0(!N-p{46Yv&tWrsA8jaaqwqQ16)k@dGx0Eb{~uTq3pNfNXov33pi^=N+u#))!ohVNI-<{ESIp8e%yln(lKgt?hFv>(o&CRxgpvP@p2^uehi}2s z=u|XC0~>&QaRE+G87*zb>{4X;Pffqm!!br3xvKSmer3CxOldxkUqO1zAG@tCiUUT=h+^(|s~ z8}xwdj!7#XM8Xqo1bW0yj`_RMsd)&kXdT+XbMg94^d)lu9lR6!DE<;1so$d) z(Ezga4$tL4J91@j_P>cT6g0y+Xip|#c3cpB3|#}Ou_pcx4g8X8!_enPhqx&Ihb7P{ zEYT+{&SvQKd!qBujx9)%=t*J;j=~?YGWP2m7SBEC;&}}{n9}-%?NZ0D_)2W@p5!mJ&OkN3L4;nc>Nfr{{7!~Bz*91w4zIH2(R6I z=!2c`SQ-Zq+T*%6hAC)fM4asvYRNU~jzs4;py-kkC+WbOZ{a_m_+Ln&_fyi3Z+#2>aim985v# z073(qj8-@U9f5i1B3zF4bQ`+J-b2^K_vqrxIW#P~Otj&;Xn6~?!M^CbVF)_quMACw z1`bhR17DyG{Ea@Ce^{unJeqHYK6ov<3r3-HIv(xWbaXK;L`UFpv_sFw>)SCu`Tc0e zKTncyXupbn7yS`^@E3F>{=(D=c5|p82in7H&=D#Zt&axMA?B~gs^rJS@)c;{8?g>1 zw~}zt{D4(3>+moFwa^jigk^9TX5xJ8j?bf0kQfoluR*tE6Rd#)(SR4BJ$(dIBNEG> zM>?2HycjRMiuUvX8qg8+!L#TP|A|(RWn`FwE3h>A@>l`8q8}zxu^Dbdr}9tqxywd{ zfQzA1*$DIc{_jD;lj}b^$Apuy9vWaTG_cX=2qdHH(YgHy ztvC1BP+t+W;p%8R?J(((4J1(wm!jYM?_yQVHZD9^2MwSjdNdEk@;C#1`D{S9?=iH2 zZ_%myFM7!>q34&O_tirKZ+i>--y!KwfxBQ9+VgwR#k4%$_$qpazmHb@Bl_9>N6gn6 z9~NCBbnT2och9}(nZGFd7-o`RiB93}@$CQGNgSZy9c+1P=vkf#>52X1>tPE_zb%YN zYjl@PM7PnCXhrK|ej7THucB+`M|4sDjRur;Vpz<1&=I&gNx}o6N-SuBKG-{Y6FOw$ z(M5GvEMF8|iT=XjIjoKQ&?)*iUN3xm7=dzVpjFWkY=};2vLy+7G5~G(rs#Nd=#uEv z%t3oT7oGc;(5dOY*60XzMtgWYI@H6_ksXg7RCl9+u0aFejhDLrKO$iRU!o8G zh*o?KZSY^TfgDr9;wpr0pX!)e#b`tQ(W7@Prlu<97e${yx8qiH1m48d@Ba>vu;EWI z6$o0vkLZp6q9H?$1F`%tdjAP@WPU_P;37J-d8dWIN~8DHKs(qBt*?D7?>>$FZv}%W zuqR{Vg=y#m_n~WGG5X+R(N*#K(`b)gKzsfM8u)u?509bspF|I)vuFpi-4Uju=pF2T z=cEb+4tbM!p=-$dSir&xY%%nwEv(QHg8fY=}psIxiTn`=cR`Gfl z?7;bxxQT>|>3Q@_eiLozMD!~(^6$}#&Y@?1`iv0hHE1Ap(8b&Y9pWxn0tcZToQXa^ zFXkV`)PMhf6$$6&DKx^Z(bv$S+>Zuu1g+qUnEw%-n)7InbI%Odi=)p~jy6C$)D{h- zGg{xZGui(R@n8zvR>RRirlWH-Ki;@Fx&p2EX|#u1(Ua}1Sbh|(_$xHfpV5)Ih;}T? ztY9AWdZAg&orzKuxF4&bJ!*+o)CZ0DMl`Td@%mJ>#}A;}?Fn?vyn;@_VNA!bEsED4 zMyFya8d!1_2}fW(+Q7DWVK3UyK{S9P(a+KQPoow5j5hoidjEg1Jp0`te>r;J)#!7j zW4=1l9{>LzB#g8j8u_*10{>aQP(A@2`WexMv3w2K(W(0xQ$vl`pM6dU z-c)?4~M_P+ttp}(Kx{clB|P+&zT(8#_+Pr|ckg}=t~3o-v6y3MjJ2-mMhpD%$nTnP=RKDzkY zqHCr<8pv3*-P;$i|7~y@1wJqX-S-RP4QtVg*P{_{K^Nzn=yUI(fgVP``#;8!_-y1-a246-OH?iw<=y zbg0{+4PS@WKO*L*qPy$fkWVHajThFUi|$1<((Tw3-^QtU$%EmS&NHzh`B$+zev1{b z@I&D@Ag$5s)36+_!~S>(i($owL(e;6KllG&65YA*3J%6g9|?cDJr3)Ve;V83No?w@|C>p;EtXZIxBwFCN{8!^xk)(b#i!n8Mvyn0#VQ zSoK$p09x6noSZp&^2%pJ7KY>!|oW3uI?>35DPvN z{t)VR>`eX-ybW8f54&ndFq!z7L~|~b+YlUyR{SiE!V57!^x06+X6#CN;<>O(x?vBp zbFn3Uj<;g*=R=1c!g}Pt!gg46WAJ9I=l)}X?Jw{_Cp&S6t9m!J2-g@``_Pq%!>tU(S~=R`}7_3 z;5Zrcf1|%v%eOV0cvaC|aD8+F`rKUfzEx=byJGoK^l1JGZKuLE_P=kVM%%*BbVT#l zp>MH~XhqY}hL)o}eG$Fy4K%?2MSqIdb8HW<;lfy)>ow33?uFhz0v&%4qDLy9F9w3KK<2jLgq$K#6swzs*W~P7dv1ZERTz@0ltEE;2e4YHP{)Z;UI#K-f^u!q7{{{AjziKrL-DclKe?~{<`wCHbX1u7#)D_j&bNz z%tqgy52Asr#G7yjx|WK(6V8J&=r(SI*4H0Xi|`%xzxz2!!Bw~r?fH6ik?cWNZ}xXX zMOUH^Rzd@4iZ#elgD#rR=mV3`2IoYVU}`a;BepAg7|W4A6U~1#{AIL8 zSdsD}XonV}Q}qbe$8|^9|MvU~3aqfev0z2CygAzQiRcjCjV{i)Xn+sJ>rbF-;zg{C zuc1Bt5v@1vlQ8!M(KS*9D`ER22_v~3+v6tmBlItH4(op!B5#gO$+tx-z6T9t85+o1 zbUSW|zK#a|9y&$G(fhx_HuwvA6esI_7G5H=uonfpuqx*NJbcf$#D3(T!rGWP9(F|? zbWtX;25v!n^bKB%SDZ*s{eMJ^!e-?6qvbhIhVP5PSjYYUA_;qb26thtFVYj!@He~> z$DInF*B_$iLxC^D%VaQ)CjTLh#HOeH_q-h4*am6{Qcjw zRD$2(Vh=8SfmT%OoA5WGXQ3nW2RbDkz70d&BRUA3`_a+K=upo_x9bBjzZ^Zdo#xM}gXp&X6kUWr z#q0mZeBK|z2xk7k{&%reroa!20XPKj!V<`V&ppAHx^YSTx|n=u~`)2K*)3)AKQ( zmzt8@5|P^m;|~ecu2b@}B5@ zW6>#_fxeWMpdESf+0BJI%o2c!4jhEC0F^u8r%&o`kX{yNfbGVu`^jui&MWSWV9@U7pjOD%1x9A{rM5aX_h_1%glyAYtw4eBkL|v@+XILb+ zpbzdte@6Qhjr^+fA+XYDek22*B3H6mk z%WEe|SV1Q=qM?`?x>!B~4QMGkQd_YN?m~~=tpCP}(V;CF^Oe!So1s(K0}XI6Ib3aBm5wi=lL%jLQ~&+{+elQVU~asy1D(tL*aov@4GnchhjIWq1-GKl-G>IY z9UYms&=WLgwv5#F>x$lgJ9_ZUM@M8`wv6!af1ahlp6oy)+lSro7&gNSmt>^AY(`;! z@>|dzUzR;gO#$@zYtXr`9LrmxYoH@q??5!*acDp*vL`cA2gMc&>QnGRyfIgf5NQ!~ z4b(v^>W=P$A@TYhXoHVn1$-7AiI34m_B9&V)j2a#Cu&7>5f6@zOOm*af;-V0f5l3e zo+~V#s^}+IJ#=mK$F4XS{fK-4T?;>>i}WHo*I9CBq_$llH1HDW2T5)8?b#Q7KDma3 z4Ss>?nCH@r)V|G!uHGVO4@;wqvSG}(iw;BsxDDIlT{sl?p#fFN6Ry`mr=SHIP)}qe zl8Ipw)5e?`h8sK^KQ>?({8L1yi zYoUP+K;-UFN;gjZC4o$q$Z~3 z6kSw3(X)O9&c=0Upp~u+yQ4n#CO-tr;>%aE|2vR4MS%fSE*KiDkB&eqbg}eD-)3X5 zFDB8zj-qd|FVV%CQ79u-Uv9L=ebD;`q6g22n4g6P_CO)_zc((U!2Q1l?b&DO5Pgqs zw+dHfq<(;yip|KsjMedPbVw@~&PZI3&9N>%j*i5U=t*o${tVh)xvN9RswPR;^A_j> zUC^HN#Y`NGPQ^@gjXaLtzZ2Bexzph1a1|HVNHD)A0)T|7;Sj_9bY~H)19pK!@;0bQk;+^LfjL zDak~yS4AsqijHLKc>Q{GO^reWo`^2a`FI1qiK(Ce%ajX?t}^;|s)NpTD|9yuL@OSH zRx}&!*>ZGoy@oz_IOb2G&;5x8o~?X1C$7Rw@)gkS+_60S-x~)|U{6M4ExZGr^A}?I ztLOs<&^2&8UOyAB|AC$ZSt|rfqxZE&r>Hx+tFA@c8-z~9*b2$e(}@(=qXpY?GQ(CgLF5owMF+!LLe>(GF2 zK?XHdH9)Gw~MkWv~!FigsiZ zmc;Eb|0(8i|DPgZPkuocMV6YuoYB0|E72YlLEm0wqqWe$o1=@d54t$VqCK68E%06( zgzuswT(MT%|FuatM2*lunxhr#B zVgB0TN4a|F6b-D+{`Y9Sg@S5$KlYa?}Y&Z8>ytbw!7E3OX`(p*^36 zj^v~06s|z;dk&p~EoeuN)?xp9f_)!vOw(Tf69JJv# zuq_@!*GQpy;j6j`wkKZo~8yKYXBL>Ur0(V;$#4$UvwgJd6K|mbClAL9C!;^24gH1Qn7cuEurT^S*_f}14aqk{ z*Tfy@$lQ&tiMePXkE0F0fCjiLmcNIo{r^QQ_yg@p_J(2ZGtmbdpi|TqU1Zmz6-__` zofWS?j5fGFUf&t>2hkBY89j@>WB$d`{`_CFQK+aNI_IO%2j*f+ToSK;9`k3hH03oL zXQY04-4C0RzYiUu{kRoBLhG5=BqQ~ocvy-q!k^F%{DG-||DUyKM(Ph73Zjc`7}}Gu z=#4YbMY9ME@OgB|4@QrmyX6Gh;05$$mc3cXS42m!0Xn5!V}1ap{`=pzlCZ%USPUOR z7ta>V#5d8Q{u*uIJQ~;~%|pNi(F3Iz`m!mHZpR_m4#&m(4m9w+Xh#n;Xa5_~;aG4A zZRkwQUqm0s(jo+SDSBRHqN~4Av@tU?2S0ljZG`uvA2lHtVqmI8-3 zqh(kendoBcjrL$PHo~oF&woV&Pj3}^o)>MPFxp^wbS*T9wn6LbfqsmRh^|SJs6xS~ zSQB%$4hKpTbQ|4)4&_2L;$>(LUOm==VeZHsK?-H@YTPVI_PSJ+Qt(+sW59 zymgbUNmwujUDd16fZoQ6cn-T_iFRS}-HP{;UxYQVaQkpyXY59P3VOu86a5Jd@bV79 zzSxBPk zSFsHi>=Ir=1F;MFN!SOSEA>}U+9`?(j%Od)6o2O?18^y>c9Wpwr4o`dZKea3f+cDbRVxo_wSzQ z$LQkv0X-qlql+$Uudr6GM0ZJX^uEUEqHT}X+Yfzi3a0-5f9H_ML%~Dw!V~DC+k|ev zS1>ESfu8a2pcTB2_WU#a7z^|c9~wWR&sDoN41Ilc@%2F0)E(#)Jbf+u{~;1-eOUEr z{2C2CA`kZstNc?m@*mM2{)2u<GMu&PJdXP*&SMMC`hX>F_Rpz=7&=_>2rlUiBA38D*qa(Ej-LC7< z249NhucIUSR+5Aj96%rZ7;EEcbS)IVJ_J$)%{NC6p5Ew4-GqKEw@7tpc~NDe>-~rd^GT7=zUM4_w7cf z<_H?-*RlLZwC5QEQzMp4>3t&0yh&FH=`rtftF)c<%Y8g7zPenJQ0qjB-qRhM@ z9LcTG2D+lxZ@_st7hQ~34h|izg*iEY5+g}?WKKjYUg8B@iS}$gI(OTnub~0GjrQm) zw#95WhLf}lI&ycSQ#l)*>qpTkS%$W=0aHK!zd*vC?LZgVTWG_dpbvb5PQjni#7&{6 zIdC-P`O)X^Lf6a#F~0&Uk>7yb@MyeVen<$Y-VpYG4lXpJK-(k?114HF_^PqK~5;dIsH=FAYtGUpl=@fph;47Q!6E!lEgG zmX}3)SQDMw=FuL}o6rVtLwCX4m|uf-U`OZsCNjM~@Fm)rk7_*HC z6<0tPTWj=XGzL>gD_Y@3G?1NW!0(^|e~vENU*q+^&^2_)$T0MIk$f^yf`t3CBD!j; zp%2y#Hzb;(L)$K1ABc|BP_&2R(ZJ`S0jaJJ6AsAM;P36>Y(5aXlKgh7R?g$o}_e97BPNXM8jnogZC>j>t3U5Wb8K;a)6;@1s+A z7QHX+_ONCyM@Ob0x=pL0Q`-?;yf-IFctFfRr{Xa*@|UqM{)INsb5i)+o`5d4r_c(v zqHExNbc#;L>wluFKilLGSm|ipXnQo!Kvfs`rfuZY0}iTQ>M0U+qP}DQ=3WK z)V7`SSKGF2TiXI^`XqZo}?S2Kzug$tFN$uoUVMx)&<* zr0xJV`1{&IYSExhl zw)M#{E#sw7r~eGp`-%5Zc4CipOcLJ6o!REOG<`cM^V2IZh5)PrUqRKR1Q zDij12*lMT@_dz`uu0d7mGt})FYn)Tbj8Jmrq37@aG^Znj-Js5Z+c*~LwILAdb_=rc zT&RE+LK)f!wU@`C0=Wm}@H14Yql|at50uw6Ukr6P4?%Z!Ixp$SK$3|L%RoQI z-JlLt01SXzp#m#2$qB3ul*5it6&wz=B~zg)vlJ?TJ+KhG2lX0}WU^D~G?Tgiwf9+> z(0yG57K2q`0vG^QsFLG>5bfU&1|d;ZRUTUdwjVW^5Fp6Z;T zv{04KHI@5c8I)l{d)64ra383{GYa~_Wl)(Mg{j~RD1%W0oC+m`dJ!uKb%vTl9p;Wu zay_B!53%`KPysJ;TPN6f#`p+^Mc@a_2LC~Sm@Uv5*MqqkkB7?SAk-dThI0H5>gYUR)8mAaTs@o=dR-Szv!r>jiC$T$i9S{ATOkGo4R5 z)4|Nl*MfQB2&hB57wV8+gStIm!kRGrEGMx>FeBqukn>Mz=tyA(l%rKphPK)G98~1D zpepnP>VfnYs#2d|7WfP5%w(ADR3sbJJD@VqA2zq~IH=oo8T9=A-xfN0e`j5?S6b>F9%>r@~Q zltOu^+od^_g8?=lU|elH2&I1$%E2qBO8U-o>?DACEyxC|!pczg7C>$B_Icd@esnG} zA;+Jf4q2r6PNtb*a>k9I6x~pP%`k3&a(o=BLXV(I{lUfw7C3j8Kh#!rhH~5+>QD!` z>F9o34CP=u)E=LKt>9HCg9R5l3N2v)#yyQ2q4Zxv>A4m;6^Q_~g$beVmQ=7B%m#H= z42RNl2hdSQ%WYwwEu6LahftaQf~ru2#ZF0+L*1T*q4XO;t@nmHLzAE~o&|Ll7C~*z zN~lA=8)BFL|4T;?pes-rBwpe~o*K$=7N{pzA)BubCD+i_TS1kwhjBQRd>~YYE1}NF z9-BV{b-O==adrQHrlZ>}(o#n-HPmU&ZLA2DQFACqouEoP2>B z-ww3}N1@~{K|lBe#?$@pyUZy~QmDPj2KB%w3guurR4Hde8CVQ+!L3lY+e;{i?~Pu| zoyx_8qnY=ETi{BlEoivHsbClA*6Hm_$Ma6d7J{HMUI-Py8XIqf%4j##7M!y6%TN`$ z0kyY}pepgs_!TPfKTul|ZKacF%9Y&zGMJqSmAp7qCUv0{+Ci0W090kh*nALFCaYj7 zxChGc11PyKumSX0<>)tsveyYp&JA_91+H>C3agpuz{F0dfKsn^eug6#%*=Q>Ob4$( zJrDjtIZD39*@CQ4mCOw#SIy=Jz|@R~!u)WBjUPh23Wj&Dbp$FvmAo6&UJryS@dzkK z6QL?I*T(ChGT8%*!t<~KjIqvcM=1H;P??X0x+`Yccs)$R*u9^QZnI}l4!=MJ@)yc+ zg!N9T<3k0O0cuNfK&=;rWnmRq7|w*Ua}8>X?!&9_6D$W$Zg2vNz0vc$aJy2|kzgUH z5>|zZv;)+c7y|VSp8=KO7AS}RpybPL^7i~+j}~wO-~U}gNB8eKCco&r3NvJ2~b*Qbm3;m(jF7E$Kbkgl|7V1DP^oKd%Vi*Ztg~{MU zDETnE?Y@V4a^{8#Jim>LKm}65SPSZj*aqs=vNKd*quq4M)0qyH>3yif_r}J*p#q4o z$N9=e9Ag!zQjUeX&jXB0pbT$?O5~u8UqadW4s$`Dz0O&1=ckjFiQ-TZc7O_`J5(TU z<0Rues7LNvDESLerM?dJZuvRX>5lxL^9hPS)K)fzSzvdlcg2fgIKBSwr=z_&4wcDS zsAuy%8-Im58{zgjhb;zFCTXDbvP0c1d0{qK0%nE1ptfo`)Fb;cl%20o@~-`Q?r{G_ zqSKghQaA<G*p1oVMe$dO70RY3134!$g&-D0xSu2cT_dDf(oEN z)a^O~dcOX5l#WVy4eHR`HNJ~!wet3b(jv-u%Mxc{ZFfC(L<oq8R!J7z6768^ZeHPPI3Ulbuvx>^#&yaRLRRiosC*h526830jz}zU>8)S4#HT9_%a=x z{^w9HCf}hl{tfkj@jmA`P7F294V7^fsI6!Z^#JP!<={HhR^5lP`vU64>j!KB6P$O} z2SK+^=_oof7zA|~H$y2Nh06FU)KxeV*~@;(?*GzE$Z##FM`UNHGcXkD86ITgwKhIz<7+m412Z5O=CYG{W~cxP zLRGR1%ns{79pZ7&Qz18<&P>dQmtmAE&g=6-Sd?-6tIo5%9-PTI0M>#Tt~s~YP$ZrJXIW7nPfrt>1x80KSP0xSrRLK*hHz)%>aj4REweeh7hVe<*9>%=y{8alO*pcxa*c6t3-~_Y=dIE<^EYU+}zAp6F6C;35 zIu>?81@IWEgkc^zC9MEUFrIF_0d>lgJa**sLp`wSLO(bFl9_8RtOrlRK$z-@a~tk} z`59k_e!Bl-J#~H-BPXoE_yX(-Q$KSI%z$kfzlZ%`z30xaQe1*M3&~$Nw_hKq(jJF( zVeFUA4>Wdytr$Os6JYsQ-mXFL8gw_MQ|q;J*tWysjK4u0ru=Ul!4Xh<80M|F=MN4g zfqKGCg-c;DtO*;w^Y;9y)=e-cg{3|3Er*KR92fzXG*K znLauW+QUkWr$9Ym?!xLY%O~eu^DtPS@fo-Yrv2?W+jIOiAV%WWf|0$vEUbw{Dz zkUaY0b`D$EuimZ;Qh-yuc<=YksYuXw=k~b{6{yz_=e8RR^|E^es^nfjoq#Gqot>Fb zfjxlAwBRr2d9W4wG2RFD9JueMqX)rLs27jVFgNu2?L0d3Lai5tdfBWD^#p4TWuO<- z8;k)^51Jt`CY%EG09pcL!}Tx*JY?%vU;@VO=XAo;3G>Hs5D97_CDe;XA!8$``*{%5 zqjM#c-X17NN1$F4&Ks}6NR017CGZmJQU4t(kO+T03G@3OboA&=Yb*vOSRclL9iTEF z3gvhf)QieGs0wU@s=#h2z5T`uP!)Ly%fpXQehU3_0;}yI_g`~5nONuyb?WCrZN*cM z0I&B@FU$X6ZqA0>rD2@k%g3|F&7juz827^nj1R+B@GKkvbB6KpoQ;i8x91O7N%wzs zZy(QlyoIn5<8N>ZEal_l3Fs=+UEvqj$5YBiPyu#;`CwnD(r<>U)J~|%U4XjnoMZPp ze((%b;BTSMz&9I*kLV;81M1P94(hfo1E0X*5#3HH+C}p5+{YuJ_U=5C!JANlJc2q* zAD}Y#itJ>R1nO?d0TpN^s7f}q`Mywr20#V29F~T`w*J>mCq)=u=c70R1)@0tRD{~& z+EAYjw}5ig9}a=jAZo5S(Vc+eLp|AY+PIpHJ3(#PIM@tsfO>+)h=E_|Zb?VC(`cxz zm<+X-OQCM7=TH@S19d-tgOc-(>1;`Ss0{s~_P794rK&+~RWqoHbcE6$0hQPkNX6W) zd35}k*a-E&xd0XM2dLXDZY(FmLQomjgE|Ynp(-*G%Haao0&al1&tt`Qwj?9;V_XEv zep9F|90C*T^?xoM-3~jU6fZ+PSl&Px{scW4$8m0-_)r<=fm*KswcY?~tGYr3I2wAx z8OGVh`A}zTF^r)5e+?a#dK=WEaTipnPQ&EzI#g+YLOF;Y*O~W+MHrWZnjZ@l_(G_c z@#RnzdI9r6?|4oH3qe)5K6L9ochk{rw+^<0muy@pzN6Rz>b{)^E5QR$hbLMB=j>#M z3NSy^o>zrB?G2#rijGiw?uOce2~cNlZ36Cp-CkRnP{|HLmG%NuU{7Fn7%QQV=k>od zti?D8Dzi6Gj>08!DiR-RZ}USrt_|g|9aP3+p#onIwRIN~asO-Y9x$O2euauON@B-w zLZ~y50m^VmD8o&m0`377@GzJI&VZ6X2_^psD!_lxvvo68wQadlNhoLg@O5?no7KMtq3{)VsVJX-cs`N{to{Za| z0@??4n2$qk#Z{;hzlGZSaQ=?Hq)>91G{(QH03F@;Nx*ItqSJnG}S&y(&Y!A?W~h1_Ge&id|3vUx!NM3Dg;S1LZJmHpfm9QwDC^k2`IT6P>1ssl)?8<0e^)u{1+<2XgQoGTneZF zvqEicX=8P$$~Dfx{jX9EWFj403iXUX3q2)-+N-cRoeCs_GMEFZD)AWVto(oxbpQM0a|EKoWGtkBdNC;uwH2*wemInY zB`^%!0cB`6l*6M?0bhhVE03WP`e5s>{LVNsRKkg1IKBR-qoWM7K^ZCzRl3ShhH60_ z#^z7~w1?VDH&p2ZpbphcD7kr16p@cc3cw8G3&I?++b0_9@^9M29lq z4`nzT)Ov2H$csZct_l@sZKy441f|yrD!@Ka0gr7jwfX3VWEU3(u8#mbc4yZ(qLIr#Zs!|sVa{tTWO(yj0 ze+Bho;akYr%M?(KazfqrC86XR+j>7JhvT8{l4(%#>!2L&h064xjn6^_dn(olicf+}%qD8pTi18sc_RLN&S>8*zfXs_`MQ~-CN{JLM! zQRLo59EHSChBH8wC=ZlE5vTwv*?MDRdnkv!q2$LyZBZc9UN3~Qw+5;r!B7?31G!t= zt|N4m={2a5yn<2;Q`Aw60<~uepl&Zes4d72Rf$Sa0oH-iYXxPet8p|`rt_f^*bb$C z3?|Y2|B#MOtE-qJ7z?T*8K4Z6gnqCA)SJzL&|}cnw?oOFfvUh$s0`miZNWFAZ*fO2 z4pg9-py&S2OGg@mZ)qZb6-e zm&Tva^ZmbwB^-l^pd4j{GE^9{~LJ8J^3ZMg20DWyd3d(UHl;Ootj@H0zaEtK?%)vNbDW|d( zpc1PNWxpkqUf)t~C*mPY$lz3{OlLzWEQE5n87hziP+M>gs>F|N{RLEMzeDMVFYP#p z3MCg8D)U58cGK8;UbjsYg*uhhp#tdyWw1BY?K2AMj08YcW)@UH%b^~vTcKWNPeRE( zgW8(6P+JqOj1y3DDEsN4?7OpDr#SSK23=KI_H1gH|ufU3l5sLb|31$NTr zuR&GfHI%)NP$mBjRS}=Ep33t3-*hAxA1d;sP%p!&ZCnbF^4F|xEHvb%^ zV*Cm!f#~I(=R;hm!16-PSAhzw7Svg41eHif=%?5JL3H$BnGdyR`=MThZa_u;1*#(9 zD>!dV(n8N|3AKmypbWNy((ezY9|)zt0V;rl#*JD?lG>mH+2f!kX7sKxGA(URN8a|$H!A+a6{t%6gc)J_ zI?f@k1HBj*(f-j=>E5*VfK4C3es^O0g_Bv5Q|_M5AdWO>kq9+_g#rl9(!EG)fP&gg z#tJ|!qZu8Gfi-OGLLGBjES%1^esi5L+7#B8BA*IlgEbF>upSc14AgOm8W&$#`P%O>x%}?1eQ)=PlSn`00nO zYg`G@%jgNzP4t$bobN>_r12-)T^}r)#8l=O{WfICnRB(GA07v%Ff`eMIf{%Wb zR!4TE662c2+)*xmdc&0jyUPf)GwX*v@4s0{g>noGuE1Cr%cz!Ra0COBxx(B0R4eTY z3{*q613InrtftK&utHqj=x@Yk3)XJh_6}fPXQd=_0j#N!KR-Z#!Tn79F(Z88!WAb} zB_xv{qttthX@2*VITS#T1;@~to*%)V3K**J%AAz~;1gVCK z=gW5LAHs(x|EJ&r3Tkc~ws5+x8w4_yG5-$66#-%Ws?=Amxj4GxQRYd>dJNWI;_MiD zAF#7RUTBwC3u%Rr`A4FIUg)G|y) zw#96%GTEKM;V8x(OizwO+5(JrVSbtEYCaG8A*~Vpl$K08$0oo3%fx90@ofu2gnh{L zHwHftWkp-d#oQXQNzD9t0vX4eT4|iNVy!6-;<0`)RK*+#K4~R$wfk1F@aWX{<@`@( zq87?(V-fPhz(_M(*5&sjZ=FaL+_2mkOp#Ua&go->8^J+l^IGDihGai9*A~W{e9JgieA{9Kx_%;33RI3^~ zHL1pI^lEeML8lA0`FRvq-B6Vd?D#yoyRl^xn-}$l2!FxY4GfgSKzNuFg#=_&fHgI} zQQgU01=cPS)K%n$TTp#$@53Y}v;0Q0C0Z$oxV<9(!eR2MS zg^)JT3|}F;->erRkXXnLNA5Ih@o`uYXKI&``Hak7oc+SaAe%pJLB&S*KI@&$escUi za-M-4Gz?}&F($^}T4_td85miQ;y#!b88v=rhX3>6^lLEJ6GKmt`HoCAbT(tB75$B@ z6(>kPoHjxJ1#^$7*mc(Z=&PmB_h7Cdpq81)ULvrRAV%3-V#;102WkUZuZQwSjP6G+ zBSzZbSgooV%t}8VG6z_{5Bae#*G$;X8wY?*eUoQOh@*=F+7_7UxFTw+*{<6a)9%YOgHA2V51>{tzjG&*~>U? z0(}(-!L{JhJE)G{JOdV^z$Ydye*BA{O5sHWp{Rr0EF|a8iX26@?JC8zMtu7vBklq=> zzKJIvo6p901+qi%^8)+N&^?L#YyHr)KDoYvlYuCtLpd1&A#D!9MJLyS7^;E+wWv60 zkL)hy$6{Em6nfX0SF4My#yI+qw6mb!6PasF^|8E_ek2P>j#8nY9(_JR@U$4ng|uh{dxIbX z^w18#=pBRtFrb#50M4L%9EX44E#{A+e9|gVj=Az&ow&|(-Nb2W^!(r^may7$|T7KqRFm8ihRGj=Ii0l?XT>4{?n+S^`n~DAf`fbAC zzd6D=nJhrYnVHPNn4iJ+v{e}WMXwHq^pAE|*?d9*Ud{YZ3v4U83mE@Jw+30N>Gxp@ zbM-~97!vaUei7onms1BTkbkk(jRV%dev ziM^O_&UMuS3r9e4=npX2YS=zXfH??g7W1C^??Uk{ld}+>Pqb?15xk91W+GmJ!Tqd9 zV=gv9w&Ti)!9lE*Bb&+?nnu8p%ttvhS)8N@_xJDh`!F7Tx3>_A?vJ3+c5^PvU~<1x8}2%o}D z7*#97{4~aUoT2AqYXWVC;gGhM&Pn9D+1xd3yfR0U>5B8$=u9)4HAq8b*7qoi*sGbpU35d*6=cKfh zBb2wKGYpG$VFGeoDz9kF4pq@{9u5Yiz$s6{~fCYCOt z9T!U@@bsCKnlV=EYmv4==Lz%s;TWzs$d$v^d#tPN#9KzL>dd!5POS|-x)VuGeB|PC zzu?1J1o+Jg*B=DxnellDMrJP>Gu}zx3z?-D8H&LP1b2&ZS@;i!YDKu}d3rq82%rf8 zsp-qK6&V+290tdk>7PV58;qs582vD^j){;q24~|5Y8S$#p}u5)gers~n2(mlRE*`O z-xZEWe?IG@(7TR&=oXFON8%_2a&z%<+v=Zzem&+rFR=r_Yn-X&!BFUS5+QwwJvL6F zhFWWf^Envr;xXcAY-GJVbLVl=D^x;Nk$pyR@39fcdUxB#+w}9giELviBc(BN8DTXq z40(}J68e2Hm=C%6l=}@O36^DWAjqJMi9MV3p2J0=hZNH4u|zj?l$A{*y9^zt|(?d zmu23Y@gH;x=r_PGP=QuB(KnmYDJvG6>Jj0-huMLq@)D_vNZe%{7d|Asy=cv~JbtiV z4EdE75+bh7Sc=E`UFOw}BCoa&FKT0{^L+aA2yqUw9|=9h|J96FA6gL;j!ID*k#|=D z@JHy1XO$a|IZ3`EfWkOyhLb?kDQm%v!gyYcKjW&zT2ExJS)ls1h*}0@`(XDQvTFYN zl2vRo;7bPHDE~ouA`bLTnz_s!LO2=oY6+=Gc;sWTegp?a$c|sH{9kLt{5xcH;-b+1 zNnh

PvgExudfYHs7sdW)=1`h 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 diff --git a/netbox/translations/pt/LC_MESSAGES/django.po b/netbox/translations/pt/LC_MESSAGES/django.po index f46bb0138..d91f1a353 100644 --- a/netbox/translations/pt/LC_MESSAGES/django.po +++ b/netbox/translations/pt/LC_MESSAGES/django.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-24 05:56+0000\n" +"POT-Creation-Date: 2026-07-30 05:52+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" "Last-Translator: Jeremy Stretch, 2026\n" "Language-Team: Portuguese (https://app.transifex.com/netbox-community/teams/178115/pt/)\n" @@ -179,10 +179,10 @@ msgstr "Grupo de sites (slug)" #: netbox/circuits/forms/filtersets.py:249 #: netbox/circuits/tables/circuits.py:125 netbox/dcim/forms/bulk_edit.py:176 #: netbox/dcim/forms/bulk_edit.py:339 netbox/dcim/forms/bulk_edit.py:696 -#: netbox/dcim/forms/bulk_edit.py:906 netbox/dcim/forms/bulk_import.py:148 -#: netbox/dcim/forms/bulk_import.py:256 netbox/dcim/forms/bulk_import.py:365 -#: netbox/dcim/forms/bulk_import.py:656 netbox/dcim/forms/bulk_import.py:1701 -#: netbox/dcim/forms/bulk_import.py:1729 netbox/dcim/forms/filtersets.py:108 +#: netbox/dcim/forms/bulk_edit.py:906 netbox/dcim/forms/bulk_import.py:149 +#: netbox/dcim/forms/bulk_import.py:257 netbox/dcim/forms/bulk_import.py:366 +#: netbox/dcim/forms/bulk_import.py:657 netbox/dcim/forms/bulk_import.py:1789 +#: netbox/dcim/forms/bulk_import.py:1817 netbox/dcim/forms/filtersets.py:108 #: netbox/dcim/forms/filtersets.py:258 netbox/dcim/forms/filtersets.py:390 #: netbox/dcim/forms/filtersets.py:500 netbox/dcim/forms/filtersets.py:895 #: netbox/dcim/forms/filtersets.py:1117 netbox/dcim/forms/filtersets.py:1198 @@ -309,7 +309,7 @@ msgstr "Terminação A (ID)" #: netbox/extras/filtersets.py:503 netbox/extras/filtersets.py:562 #: netbox/extras/filtersets.py:623 netbox/extras/filtersets.py:662 #: netbox/extras/filtersets.py:695 netbox/extras/filtersets.py:869 -#: netbox/ipam/forms/model_forms.py:523 netbox/netbox/filtersets.py:319 +#: netbox/ipam/forms/model_forms.py:523 netbox/netbox/filtersets.py:324 #: netbox/netbox/forms/filtersets.py:32 netbox/netbox/forms/search.py:20 #: netbox/templates/htmx/object_selector.html:28 #: netbox/templates/inc/filter_list.html:43 @@ -410,7 +410,7 @@ msgstr "Interface (ID)" #: netbox/dcim/forms/bulk_edit.py:142 netbox/dcim/forms/filtersets.py:227 #: netbox/dcim/forms/model_forms.py:144 netbox/dcim/tables/sites.py:74 #: netbox/ipam/models/asns.py:164 netbox/ipam/tables/asn.py:37 -#: netbox/ipam/tables/ip.py:126 netbox/ipam/views.py:383 +#: netbox/ipam/tables/ip.py:126 netbox/ipam/views.py:384 #: netbox/netbox/navigation/menu.py:189 netbox/netbox/navigation/menu.py:192 msgid "ASNs" msgstr "ASNs" @@ -458,7 +458,7 @@ msgstr "ID do serviço" #: netbox/dcim/forms/bulk_edit.py:628 netbox/dcim/forms/bulk_edit.py:849 #: netbox/dcim/forms/bulk_edit.py:1103 netbox/dcim/forms/bulk_edit.py:1202 #: netbox/dcim/forms/bulk_edit.py:1229 netbox/dcim/forms/bulk_edit.py:1773 -#: netbox/dcim/forms/bulk_import.py:1541 netbox/dcim/forms/filtersets.py:1283 +#: netbox/dcim/forms/bulk_import.py:1629 netbox/dcim/forms/filtersets.py:1283 #: netbox/dcim/forms/filtersets.py:1613 netbox/dcim/forms/filtersets.py:1829 #: netbox/dcim/forms/filtersets.py:1848 netbox/dcim/forms/filtersets.py:1872 #: netbox/dcim/forms/filtersets.py:1891 netbox/dcim/tables/devices.py:804 @@ -487,12 +487,12 @@ msgstr "Cor" #: netbox/dcim/forms/bulk_edit.py:1033 netbox/dcim/forms/bulk_edit.py:1056 #: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_edit.py:1146 #: netbox/dcim/forms/bulk_edit.py:1197 netbox/dcim/forms/bulk_edit.py:1224 -#: netbox/dcim/forms/bulk_import.py:214 netbox/dcim/forms/bulk_import.py:300 -#: netbox/dcim/forms/bulk_import.py:829 netbox/dcim/forms/bulk_import.py:855 -#: netbox/dcim/forms/bulk_import.py:881 netbox/dcim/forms/bulk_import.py:902 -#: netbox/dcim/forms/bulk_import.py:988 netbox/dcim/forms/bulk_import.py:1117 -#: netbox/dcim/forms/bulk_import.py:1136 netbox/dcim/forms/bulk_import.py:1515 -#: netbox/dcim/forms/bulk_import.py:1766 netbox/dcim/forms/filtersets.py:1155 +#: netbox/dcim/forms/bulk_import.py:215 netbox/dcim/forms/bulk_import.py:301 +#: netbox/dcim/forms/bulk_import.py:830 netbox/dcim/forms/bulk_import.py:856 +#: netbox/dcim/forms/bulk_import.py:882 netbox/dcim/forms/bulk_import.py:903 +#: netbox/dcim/forms/bulk_import.py:989 netbox/dcim/forms/bulk_import.py:1118 +#: netbox/dcim/forms/bulk_import.py:1224 netbox/dcim/forms/bulk_import.py:1603 +#: netbox/dcim/forms/bulk_import.py:1854 netbox/dcim/forms/filtersets.py:1155 #: netbox/dcim/forms/filtersets.py:1268 netbox/dcim/forms/filtersets.py:1401 #: netbox/dcim/forms/filtersets.py:1492 netbox/dcim/forms/filtersets.py:1512 #: netbox/dcim/forms/filtersets.py:1532 netbox/dcim/forms/filtersets.py:1552 @@ -551,11 +551,11 @@ msgstr "Conta do provedor" #: netbox/dcim/forms/bulk_edit.py:719 netbox/dcim/forms/bulk_edit.py:778 #: netbox/dcim/forms/bulk_edit.py:822 netbox/dcim/forms/bulk_edit.py:942 #: netbox/dcim/forms/bulk_edit.py:1747 netbox/dcim/forms/bulk_edit.py:1791 -#: netbox/dcim/forms/bulk_import.py:105 netbox/dcim/forms/bulk_import.py:164 -#: netbox/dcim/forms/bulk_import.py:281 netbox/dcim/forms/bulk_import.py:390 -#: netbox/dcim/forms/bulk_import.py:621 netbox/dcim/forms/bulk_import.py:781 -#: netbox/dcim/forms/bulk_import.py:1258 netbox/dcim/forms/bulk_import.py:1503 -#: netbox/dcim/forms/bulk_import.py:1761 netbox/dcim/forms/bulk_import.py:1824 +#: netbox/dcim/forms/bulk_import.py:106 netbox/dcim/forms/bulk_import.py:165 +#: netbox/dcim/forms/bulk_import.py:282 netbox/dcim/forms/bulk_import.py:391 +#: netbox/dcim/forms/bulk_import.py:622 netbox/dcim/forms/bulk_import.py:782 +#: netbox/dcim/forms/bulk_import.py:1346 netbox/dcim/forms/bulk_import.py:1591 +#: netbox/dcim/forms/bulk_import.py:1849 netbox/dcim/forms/bulk_import.py:1912 #: netbox/dcim/forms/filtersets.py:210 netbox/dcim/forms/filtersets.py:270 #: netbox/dcim/forms/filtersets.py:413 netbox/dcim/forms/filtersets.py:528 #: netbox/dcim/forms/filtersets.py:941 netbox/dcim/forms/filtersets.py:1064 @@ -614,10 +614,10 @@ msgstr "Status" #: netbox/dcim/forms/bulk_edit.py:195 netbox/dcim/forms/bulk_edit.py:361 #: netbox/dcim/forms/bulk_edit.py:486 netbox/dcim/forms/bulk_edit.py:709 #: netbox/dcim/forms/bulk_edit.py:834 netbox/dcim/forms/bulk_edit.py:1796 -#: netbox/dcim/forms/bulk_import.py:124 netbox/dcim/forms/bulk_import.py:169 -#: netbox/dcim/forms/bulk_import.py:267 netbox/dcim/forms/bulk_import.py:395 -#: netbox/dcim/forms/bulk_import.py:595 netbox/dcim/forms/bulk_import.py:1521 -#: netbox/dcim/forms/bulk_import.py:1817 netbox/dcim/forms/filtersets.py:145 +#: netbox/dcim/forms/bulk_import.py:125 netbox/dcim/forms/bulk_import.py:170 +#: netbox/dcim/forms/bulk_import.py:268 netbox/dcim/forms/bulk_import.py:396 +#: netbox/dcim/forms/bulk_import.py:596 netbox/dcim/forms/bulk_import.py:1609 +#: netbox/dcim/forms/bulk_import.py:1905 netbox/dcim/forms/filtersets.py:145 #: netbox/dcim/forms/filtersets.py:204 netbox/dcim/forms/filtersets.py:237 #: netbox/dcim/forms/filtersets.py:374 netbox/dcim/forms/filtersets.py:459 #: netbox/dcim/forms/filtersets.py:480 netbox/dcim/forms/filtersets.py:863 @@ -708,7 +708,7 @@ msgstr "Parâmetros do serviço" #: netbox/circuits/forms/filtersets.py:325 #: netbox/circuits/forms/filtersets.py:341 netbox/core/forms/filtersets.py:78 #: netbox/core/forms/filtersets.py:150 netbox/dcim/forms/bulk_edit.py:867 -#: netbox/dcim/forms/bulk_import.py:504 netbox/dcim/forms/filtersets.py:203 +#: netbox/dcim/forms/bulk_import.py:505 netbox/dcim/forms/filtersets.py:203 #: netbox/dcim/forms/filtersets.py:236 netbox/dcim/forms/filtersets.py:1054 #: netbox/dcim/forms/filtersets.py:1207 netbox/dcim/forms/filtersets.py:1219 #: netbox/dcim/forms/filtersets.py:1355 netbox/dcim/forms/filtersets.py:1482 @@ -804,7 +804,7 @@ msgstr "Descrição" #: netbox/circuits/forms/bulk_edit.py:192 #: netbox/circuits/forms/model_forms.py:198 -#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/bulk_import.py:1494 +#: netbox/dcim/forms/bulk_import.py:1549 netbox/dcim/forms/bulk_import.py:1582 msgid "Termination type" msgstr "Tipo de terminação" @@ -878,7 +878,7 @@ msgstr "Rede do provedor" #: netbox/circuits/forms/filtersets.py:393 #: netbox/circuits/forms/model_forms.py:399 netbox/dcim/forms/bulk_edit.py:372 #: netbox/dcim/forms/bulk_edit.py:1301 netbox/dcim/forms/bulk_edit.py:1737 -#: netbox/dcim/forms/bulk_import.py:286 netbox/dcim/forms/bulk_import.py:1227 +#: netbox/dcim/forms/bulk_import.py:287 netbox/dcim/forms/bulk_import.py:1315 #: netbox/dcim/forms/filtersets.py:421 netbox/dcim/forms/filtersets.py:919 #: netbox/dcim/forms/filtersets.py:1990 netbox/dcim/forms/filtersets.py:2030 #: netbox/dcim/forms/model_forms.py:312 netbox/dcim/forms/model_forms.py:1298 @@ -935,10 +935,10 @@ msgstr "Tipo de circuito" #: netbox/circuits/forms/bulk_import.py:102 #: netbox/circuits/forms/bulk_import.py:228 -#: netbox/dcim/forms/bulk_import.py:107 netbox/dcim/forms/bulk_import.py:166 -#: netbox/dcim/forms/bulk_import.py:283 netbox/dcim/forms/bulk_import.py:392 -#: netbox/dcim/forms/bulk_import.py:623 netbox/dcim/forms/bulk_import.py:783 -#: netbox/dcim/forms/bulk_import.py:1260 netbox/dcim/forms/bulk_import.py:1763 +#: netbox/dcim/forms/bulk_import.py:108 netbox/dcim/forms/bulk_import.py:167 +#: netbox/dcim/forms/bulk_import.py:284 netbox/dcim/forms/bulk_import.py:393 +#: netbox/dcim/forms/bulk_import.py:624 netbox/dcim/forms/bulk_import.py:784 +#: netbox/dcim/forms/bulk_import.py:1348 netbox/dcim/forms/bulk_import.py:1851 #: netbox/ipam/forms/bulk_import.py:207 netbox/ipam/forms/bulk_import.py:271 #: netbox/ipam/forms/bulk_import.py:307 netbox/ipam/forms/bulk_import.py:538 #: netbox/ipam/forms/bulk_import.py:551 @@ -952,10 +952,10 @@ msgstr "Status operacional" #: netbox/circuits/forms/bulk_import.py:115 #: netbox/circuits/forms/bulk_import.py:174 #: netbox/circuits/forms/bulk_import.py:235 -#: netbox/dcim/forms/bulk_import.py:128 netbox/dcim/forms/bulk_import.py:173 -#: netbox/dcim/forms/bulk_import.py:399 netbox/dcim/forms/bulk_import.py:599 -#: netbox/dcim/forms/bulk_import.py:1525 netbox/dcim/forms/bulk_import.py:1758 -#: netbox/dcim/forms/bulk_import.py:1821 netbox/ipam/forms/bulk_import.py:49 +#: netbox/dcim/forms/bulk_import.py:129 netbox/dcim/forms/bulk_import.py:174 +#: netbox/dcim/forms/bulk_import.py:400 netbox/dcim/forms/bulk_import.py:600 +#: netbox/dcim/forms/bulk_import.py:1613 netbox/dcim/forms/bulk_import.py:1846 +#: netbox/dcim/forms/bulk_import.py:1909 netbox/ipam/forms/bulk_import.py:49 #: netbox/ipam/forms/bulk_import.py:78 netbox/ipam/forms/bulk_import.py:106 #: netbox/ipam/forms/bulk_import.py:126 netbox/ipam/forms/bulk_import.py:153 #: netbox/ipam/forms/bulk_import.py:181 netbox/ipam/forms/bulk_import.py:266 @@ -1000,7 +1000,7 @@ msgstr "Função operacional" #: netbox/circuits/forms/bulk_import.py:258 #: netbox/circuits/forms/model_forms.py:402 #: netbox/circuits/tables/virtual_circuits.py:109 -#: netbox/circuits/ui/panels.py:179 netbox/dcim/forms/bulk_import.py:1358 +#: netbox/circuits/ui/panels.py:179 netbox/dcim/forms/bulk_import.py:1446 #: netbox/dcim/forms/model_forms.py:1372 netbox/dcim/forms/model_forms.py:1641 #: netbox/dcim/forms/model_forms.py:1822 netbox/dcim/forms/model_forms.py:1857 #: netbox/dcim/forms/model_forms.py:1982 netbox/dcim/tables/connections.py:66 @@ -1028,9 +1028,9 @@ msgstr "Interface" #: netbox/circuits/tables/circuits.py:140 netbox/dcim/forms/bulk_edit.py:348 #: netbox/dcim/forms/bulk_edit.py:462 netbox/dcim/forms/bulk_edit.py:701 #: netbox/dcim/forms/bulk_edit.py:750 netbox/dcim/forms/bulk_edit.py:915 -#: netbox/dcim/forms/bulk_import.py:261 netbox/dcim/forms/bulk_import.py:371 -#: netbox/dcim/forms/bulk_import.py:662 netbox/dcim/forms/bulk_import.py:1707 -#: netbox/dcim/forms/bulk_import.py:1741 netbox/dcim/forms/filtersets.py:116 +#: netbox/dcim/forms/bulk_import.py:262 netbox/dcim/forms/bulk_import.py:372 +#: netbox/dcim/forms/bulk_import.py:663 netbox/dcim/forms/bulk_import.py:1795 +#: netbox/dcim/forms/bulk_import.py:1829 netbox/dcim/forms/filtersets.py:116 #: netbox/dcim/forms/filtersets.py:369 netbox/dcim/forms/filtersets.py:404 #: netbox/dcim/forms/filtersets.py:455 netbox/dcim/forms/filtersets.py:508 #: netbox/dcim/forms/filtersets.py:860 netbox/dcim/forms/filtersets.py:904 @@ -1152,7 +1152,7 @@ msgstr "Contatos" #: netbox/circuits/forms/filtersets.py:239 #: netbox/circuits/tables/circuits.py:135 netbox/dcim/forms/bulk_edit.py:121 #: netbox/dcim/forms/bulk_edit.py:323 netbox/dcim/forms/bulk_edit.py:890 -#: netbox/dcim/forms/bulk_import.py:110 netbox/dcim/forms/filtersets.py:94 +#: netbox/dcim/forms/bulk_import.py:111 netbox/dcim/forms/filtersets.py:94 #: netbox/dcim/forms/filtersets.py:171 netbox/dcim/forms/filtersets.py:217 #: netbox/dcim/forms/filtersets.py:244 netbox/dcim/forms/filtersets.py:382 #: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:881 @@ -1216,7 +1216,7 @@ msgstr "Atribuição" #: netbox/circuits/forms/filtersets.py:311 #: netbox/circuits/forms/model_forms.py:289 #: netbox/circuits/tables/circuits.py:187 netbox/dcim/forms/bulk_edit.py:126 -#: netbox/dcim/forms/bulk_edit.py:356 netbox/dcim/forms/bulk_import.py:117 +#: netbox/dcim/forms/bulk_edit.py:356 netbox/dcim/forms/bulk_import.py:118 #: netbox/dcim/forms/model_forms.py:137 netbox/dcim/tables/racks.py:139 #: netbox/dcim/tables/racks.py:232 netbox/dcim/tables/sites.py:69 #: netbox/extras/forms/filtersets.py:612 netbox/ipam/filtersets.py:1049 @@ -1712,13 +1712,13 @@ msgstr "Terminações" #: netbox/circuits/tables/virtual_circuits.py:106 #: netbox/dcim/forms/bulk_edit.py:749 netbox/dcim/forms/bulk_edit.py:1320 #: netbox/dcim/forms/bulk_edit.py:1732 netbox/dcim/forms/bulk_edit.py:1786 -#: netbox/dcim/forms/bulk_import.py:763 netbox/dcim/forms/bulk_import.py:824 -#: netbox/dcim/forms/bulk_import.py:850 netbox/dcim/forms/bulk_import.py:876 -#: netbox/dcim/forms/bulk_import.py:897 netbox/dcim/forms/bulk_import.py:953 -#: netbox/dcim/forms/bulk_import.py:1112 netbox/dcim/forms/bulk_import.py:1131 -#: netbox/dcim/forms/bulk_import.py:1150 netbox/dcim/forms/bulk_import.py:1168 -#: netbox/dcim/forms/bulk_import.py:1222 netbox/dcim/forms/bulk_import.py:1344 -#: netbox/dcim/forms/bulk_import.py:1811 netbox/dcim/forms/connections.py:34 +#: netbox/dcim/forms/bulk_import.py:764 netbox/dcim/forms/bulk_import.py:825 +#: netbox/dcim/forms/bulk_import.py:851 netbox/dcim/forms/bulk_import.py:877 +#: netbox/dcim/forms/bulk_import.py:898 netbox/dcim/forms/bulk_import.py:954 +#: netbox/dcim/forms/bulk_import.py:1113 netbox/dcim/forms/bulk_import.py:1219 +#: netbox/dcim/forms/bulk_import.py:1238 netbox/dcim/forms/bulk_import.py:1256 +#: netbox/dcim/forms/bulk_import.py:1310 netbox/dcim/forms/bulk_import.py:1432 +#: netbox/dcim/forms/bulk_import.py:1899 netbox/dcim/forms/connections.py:34 #: netbox/dcim/forms/filtersets.py:158 netbox/dcim/forms/filtersets.py:1061 #: netbox/dcim/forms/filtersets.py:1098 netbox/dcim/forms/filtersets.py:1265 #: netbox/dcim/forms/filtersets.py:1486 netbox/dcim/forms/filtersets.py:1509 @@ -1792,7 +1792,7 @@ msgid "Connection" msgstr "Conexão" #: netbox/circuits/ui/panels.py:99 netbox/dcim/forms/bulk_edit.py:1480 -#: netbox/dcim/forms/bulk_import.py:835 netbox/dcim/forms/bulk_import.py:861 +#: netbox/dcim/forms/bulk_import.py:836 netbox/dcim/forms/bulk_import.py:862 #: netbox/dcim/forms/filtersets.py:1497 netbox/dcim/forms/filtersets.py:1537 #: netbox/dcim/forms/filtersets.py:1675 netbox/dcim/tables/devices.py:662 #: netbox/dcim/ui/panels.py:488 @@ -1993,7 +1993,7 @@ msgstr "Informações" msgid "Warning" msgstr "Aviso" -#: netbox/core/constants.py:33 netbox/netbox/tables/columns.py:597 +#: netbox/core/constants.py:33 netbox/netbox/tables/columns.py:625 msgid "Error" msgstr "Erro" @@ -2979,7 +2979,7 @@ msgid "Position (U)" msgstr "Posição (U)" #: netbox/dcim/api/serializers_/devices.py:193 -#: netbox/dcim/forms/bulk_import.py:786 netbox/dcim/forms/model_forms.py:819 +#: netbox/dcim/forms/bulk_import.py:787 netbox/dcim/forms/model_forms.py:819 msgid "Replicate components" msgstr "Replicar componentes" @@ -2992,12 +2992,12 @@ msgstr "" "(ativado por padrão)" #: netbox/dcim/api/serializers_/devices.py:200 -#: netbox/dcim/forms/bulk_import.py:791 netbox/dcim/forms/model_forms.py:825 +#: netbox/dcim/forms/bulk_import.py:792 netbox/dcim/forms/model_forms.py:825 msgid "Adopt components" msgstr "Adotar componentes" #: netbox/dcim/api/serializers_/devices.py:201 -#: netbox/dcim/forms/bulk_import.py:793 netbox/dcim/forms/model_forms.py:828 +#: netbox/dcim/forms/bulk_import.py:794 netbox/dcim/forms/model_forms.py:828 msgid "Adopt already existing components" msgstr "Adotar componentes já existentes" @@ -3134,11 +3134,11 @@ msgstr "Obsoleto" #: netbox/dcim/choices.py:170 netbox/dcim/forms/bulk_edit.py:87 #: netbox/dcim/forms/bulk_edit.py:101 netbox/dcim/forms/bulk_edit.py:181 #: netbox/dcim/forms/bulk_edit.py:623 netbox/dcim/forms/bulk_edit.py:651 -#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/bulk_import.py:77 -#: netbox/dcim/forms/bulk_import.py:91 netbox/dcim/forms/bulk_import.py:154 -#: netbox/dcim/forms/bulk_import.py:530 netbox/dcim/forms/bulk_import.py:556 -#: netbox/dcim/forms/bulk_import.py:682 netbox/dcim/forms/bulk_import.py:958 -#: netbox/dcim/forms/bulk_import.py:1239 netbox/dcim/forms/filtersets.py:267 +#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/bulk_import.py:78 +#: netbox/dcim/forms/bulk_import.py:92 netbox/dcim/forms/bulk_import.py:155 +#: netbox/dcim/forms/bulk_import.py:531 netbox/dcim/forms/bulk_import.py:557 +#: netbox/dcim/forms/bulk_import.py:683 netbox/dcim/forms/bulk_import.py:959 +#: netbox/dcim/forms/bulk_import.py:1327 netbox/dcim/forms/filtersets.py:267 #: netbox/dcim/forms/filtersets.py:820 netbox/dcim/forms/filtersets.py:836 #: netbox/dcim/forms/model_forms.py:95 netbox/dcim/forms/model_forms.py:113 #: netbox/dcim/forms/model_forms.py:216 netbox/dcim/forms/model_forms.py:559 @@ -3278,7 +3278,7 @@ msgid "Virtual interfaces" msgstr "Interfaces virtuais" #: netbox/dcim/choices.py:1164 netbox/dcim/forms/bulk_edit.py:1455 -#: netbox/dcim/forms/bulk_import.py:965 netbox/dcim/forms/model_forms.py:1171 +#: netbox/dcim/forms/bulk_import.py:966 netbox/dcim/forms/model_forms.py:1171 #: netbox/dcim/tables/devices.py:761 #: netbox/virtualization/forms/bulk_edit.py:231 #: netbox/virtualization/forms/bulk_import.py:198 @@ -4052,7 +4052,7 @@ msgstr "Interface da VM (ID)" msgid "Is assigned" msgstr "Está associado" -#: netbox/dcim/filtersets.py:2080 netbox/dcim/forms/bulk_import.py:1365 +#: netbox/dcim/filtersets.py:2080 netbox/dcim/forms/bulk_import.py:1453 #: netbox/ipam/forms/bulk_import.py:344 msgid "Is primary" msgstr "É primário" @@ -4073,7 +4073,7 @@ msgid "Assigned VID" msgstr "VLAN ID Designada " #: netbox/dcim/filtersets.py:2158 netbox/dcim/forms/bulk_edit.py:1568 -#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/forms/filtersets.py:1755 +#: netbox/dcim/forms/bulk_import.py:1051 netbox/dcim/forms/filtersets.py:1755 #: netbox/dcim/forms/model_forms.py:1619 #: netbox/dcim/models/device_components.py:958 #: netbox/dcim/tables/devices.py:678 netbox/dcim/ui/panels.py:521 @@ -4302,7 +4302,7 @@ msgstr "Telefone de Contato" msgid "Contact E-mail" msgstr "E-mail de Contato" -#: netbox/dcim/forms/bulk_edit.py:160 netbox/dcim/forms/bulk_import.py:140 +#: netbox/dcim/forms/bulk_edit.py:160 netbox/dcim/forms/bulk_import.py:141 #: netbox/dcim/forms/model_forms.py:159 msgid "Time zone" msgstr "Fuso horário" @@ -4311,9 +4311,9 @@ msgstr "Fuso horário" #: netbox/dcim/forms/bulk_edit.py:584 netbox/dcim/forms/bulk_edit.py:656 #: netbox/dcim/forms/bulk_edit.py:675 netbox/dcim/forms/bulk_edit.py:762 #: netbox/dcim/forms/bulk_edit.py:1306 netbox/dcim/forms/bulk_edit.py:1742 -#: netbox/dcim/forms/bulk_import.py:208 netbox/dcim/forms/bulk_import.py:432 -#: netbox/dcim/forms/bulk_import.py:482 netbox/dcim/forms/bulk_import.py:566 -#: netbox/dcim/forms/bulk_import.py:602 netbox/dcim/forms/bulk_import.py:1233 +#: netbox/dcim/forms/bulk_import.py:209 netbox/dcim/forms/bulk_import.py:433 +#: netbox/dcim/forms/bulk_import.py:483 netbox/dcim/forms/bulk_import.py:567 +#: netbox/dcim/forms/bulk_import.py:603 netbox/dcim/forms/bulk_import.py:1321 #: netbox/dcim/forms/filtersets.py:355 netbox/dcim/forms/filtersets.py:426 #: netbox/dcim/forms/filtersets.py:578 netbox/dcim/forms/filtersets.py:728 #: netbox/dcim/forms/filtersets.py:841 netbox/dcim/forms/filtersets.py:924 @@ -4332,21 +4332,21 @@ msgid "Manufacturer" msgstr "Fabricante" #: netbox/dcim/forms/bulk_edit.py:240 netbox/dcim/forms/bulk_edit.py:392 -#: netbox/dcim/forms/bulk_import.py:217 netbox/dcim/forms/bulk_import.py:303 +#: netbox/dcim/forms/bulk_import.py:218 netbox/dcim/forms/bulk_import.py:304 #: netbox/dcim/forms/filtersets.py:301 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "Formato físico" #: netbox/dcim/forms/bulk_edit.py:245 netbox/dcim/forms/bulk_edit.py:397 -#: netbox/dcim/forms/bulk_import.py:225 netbox/dcim/forms/bulk_import.py:306 +#: netbox/dcim/forms/bulk_import.py:226 netbox/dcim/forms/bulk_import.py:307 #: netbox/dcim/forms/filtersets.py:306 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "Largura" #: netbox/dcim/forms/bulk_edit.py:251 netbox/dcim/forms/bulk_edit.py:403 -#: netbox/dcim/forms/bulk_import.py:313 +#: netbox/dcim/forms/bulk_import.py:314 msgid "Height (U)" msgstr "Altura (U)" @@ -4368,7 +4368,7 @@ msgid "Outer depth" msgstr "Profundidade externa" #: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:426 -#: netbox/dcim/forms/bulk_import.py:230 netbox/dcim/forms/bulk_import.py:316 +#: netbox/dcim/forms/bulk_import.py:231 netbox/dcim/forms/bulk_import.py:317 msgid "Outer unit" msgstr "Unidade externa" @@ -4380,7 +4380,7 @@ msgstr "Profundidade de montagem" #: netbox/dcim/forms/bulk_edit.py:441 netbox/dcim/forms/bulk_edit.py:465 #: netbox/dcim/forms/bulk_edit.py:542 netbox/dcim/forms/bulk_edit.py:559 #: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/bulk_edit.py:614 -#: netbox/dcim/forms/bulk_import.py:445 netbox/dcim/forms/bulk_import.py:493 +#: netbox/dcim/forms/bulk_import.py:446 netbox/dcim/forms/bulk_import.py:494 #: netbox/dcim/forms/filtersets.py:326 netbox/dcim/forms/filtersets.py:348 #: netbox/dcim/forms/filtersets.py:373 netbox/dcim/forms/filtersets.py:458 #: netbox/dcim/forms/filtersets.py:571 netbox/dcim/forms/filtersets.py:683 @@ -4405,8 +4405,8 @@ msgstr "Peso máximo" #: netbox/dcim/forms/bulk_edit.py:298 netbox/dcim/forms/bulk_edit.py:451 #: netbox/dcim/forms/bulk_edit.py:547 netbox/dcim/forms/bulk_edit.py:603 -#: netbox/dcim/forms/bulk_import.py:236 netbox/dcim/forms/bulk_import.py:328 -#: netbox/dcim/forms/bulk_import.py:450 netbox/dcim/forms/bulk_import.py:498 +#: netbox/dcim/forms/bulk_import.py:237 netbox/dcim/forms/bulk_import.py:329 +#: netbox/dcim/forms/bulk_import.py:451 netbox/dcim/forms/bulk_import.py:499 #: netbox/dcim/forms/filtersets.py:336 netbox/dcim/forms/filtersets.py:687 #: netbox/dcim/forms/filtersets.py:799 msgid "Weight unit" @@ -4438,7 +4438,7 @@ msgstr "Dimensões" msgid "Numbering" msgstr "Numeração" -#: netbox/dcim/forms/bulk_edit.py:377 netbox/dcim/forms/bulk_import.py:293 +#: netbox/dcim/forms/bulk_edit.py:377 netbox/dcim/forms/bulk_import.py:294 #: netbox/dcim/forms/filtersets.py:434 msgid "Rack type" msgstr "Tipo de rack" @@ -4456,17 +4456,17 @@ msgstr "Etiqueta de ativo" #: netbox/dcim/forms/bulk_edit.py:436 netbox/dcim/forms/bulk_edit.py:537 #: netbox/dcim/forms/bulk_edit.py:593 netbox/dcim/forms/bulk_edit.py:724 -#: netbox/dcim/forms/bulk_import.py:322 netbox/dcim/forms/bulk_import.py:487 -#: netbox/dcim/forms/bulk_import.py:696 netbox/dcim/forms/filtersets.py:437 +#: netbox/dcim/forms/bulk_import.py:323 netbox/dcim/forms/bulk_import.py:488 +#: netbox/dcim/forms/bulk_import.py:697 netbox/dcim/forms/filtersets.py:437 #: netbox/dcim/forms/filtersets.py:600 netbox/dcim/forms/filtersets.py:790 #: netbox/dcim/forms/filtersets.py:946 msgid "Airflow" msgstr "Fluxo de Ar" #: netbox/dcim/forms/bulk_edit.py:460 netbox/dcim/forms/bulk_edit.py:937 -#: netbox/dcim/forms/bulk_import.py:378 netbox/dcim/forms/bulk_import.py:381 -#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/bulk_import.py:1748 -#: netbox/dcim/forms/bulk_import.py:1752 netbox/dcim/forms/filtersets.py:125 +#: netbox/dcim/forms/bulk_import.py:379 netbox/dcim/forms/bulk_import.py:382 +#: netbox/dcim/forms/bulk_import.py:670 netbox/dcim/forms/bulk_import.py:1836 +#: netbox/dcim/forms/bulk_import.py:1840 netbox/dcim/forms/filtersets.py:125 #: netbox/dcim/forms/filtersets.py:370 netbox/dcim/forms/filtersets.py:465 #: netbox/dcim/forms/filtersets.py:479 netbox/dcim/forms/filtersets.py:525 #: netbox/dcim/forms/filtersets.py:914 netbox/dcim/forms/filtersets.py:1130 @@ -4492,7 +4492,7 @@ msgstr "Rack" msgid "Hardware" msgstr "Hardware" -#: netbox/dcim/forms/bulk_edit.py:513 netbox/dcim/forms/bulk_import.py:438 +#: netbox/dcim/forms/bulk_edit.py:513 netbox/dcim/forms/bulk_import.py:439 #: netbox/dcim/forms/filtersets.py:583 netbox/dcim/forms/model_forms.py:416 #: netbox/virtualization/forms/bulk_edit.py:85 #: netbox/virtualization/forms/bulk_import.py:89 @@ -4531,8 +4531,8 @@ msgid "Schema" msgstr "Esquema" #: netbox/dcim/forms/bulk_edit.py:572 netbox/dcim/forms/bulk_edit.py:579 -#: netbox/dcim/forms/bulk_edit.py:828 netbox/dcim/forms/bulk_import.py:476 -#: netbox/dcim/forms/bulk_import.py:1509 netbox/dcim/forms/filtersets.py:723 +#: netbox/dcim/forms/bulk_edit.py:828 netbox/dcim/forms/bulk_import.py:477 +#: netbox/dcim/forms/bulk_import.py:1597 netbox/dcim/forms/filtersets.py:723 #: netbox/dcim/forms/filtersets.py:1146 netbox/dcim/forms/filtersets.py:1278 #: netbox/dcim/forms/model_forms.py:463 netbox/dcim/forms/model_forms.py:476 #: netbox/dcim/tables/modules.py:43 netbox/dcim/tables/modules.py:97 @@ -4565,10 +4565,10 @@ msgid "VM role" msgstr "Função da VM" #: netbox/dcim/forms/bulk_edit.py:637 netbox/dcim/forms/bulk_edit.py:661 -#: netbox/dcim/forms/bulk_edit.py:734 netbox/dcim/forms/bulk_import.py:540 -#: netbox/dcim/forms/bulk_import.py:544 netbox/dcim/forms/bulk_import.py:573 -#: netbox/dcim/forms/bulk_import.py:577 netbox/dcim/forms/bulk_import.py:702 -#: netbox/dcim/forms/bulk_import.py:706 netbox/dcim/forms/filtersets.py:815 +#: netbox/dcim/forms/bulk_edit.py:734 netbox/dcim/forms/bulk_import.py:541 +#: netbox/dcim/forms/bulk_import.py:545 netbox/dcim/forms/bulk_import.py:574 +#: netbox/dcim/forms/bulk_import.py:578 netbox/dcim/forms/bulk_import.py:703 +#: netbox/dcim/forms/bulk_import.py:707 netbox/dcim/forms/filtersets.py:815 #: netbox/dcim/forms/filtersets.py:846 netbox/dcim/forms/filtersets.py:965 #: netbox/dcim/forms/model_forms.py:554 netbox/dcim/forms/model_forms.py:591 #: netbox/dcim/forms/model_forms.py:716 @@ -4580,19 +4580,19 @@ msgid "Config template" msgstr "Modelo de configuração" #: netbox/dcim/forms/bulk_edit.py:680 netbox/dcim/forms/bulk_edit.py:1086 -#: netbox/dcim/forms/bulk_import.py:608 netbox/dcim/forms/filtersets.py:135 +#: netbox/dcim/forms/bulk_import.py:609 netbox/dcim/forms/filtersets.py:135 #: netbox/dcim/forms/filtersets.py:1438 netbox/dcim/forms/model_forms.py:661 #: netbox/dcim/forms/model_forms.py:1048 netbox/dcim/forms/model_forms.py:1065 #: netbox/extras/filtersets.py:756 msgid "Device type" msgstr "Tipo de dispositivo" -#: netbox/dcim/forms/bulk_edit.py:691 netbox/dcim/forms/bulk_import.py:589 +#: netbox/dcim/forms/bulk_edit.py:691 netbox/dcim/forms/bulk_import.py:590 #: netbox/dcim/forms/filtersets.py:140 netbox/dcim/forms/model_forms.py:669 msgid "Device role" msgstr "Função do dispositivo" -#: netbox/dcim/forms/bulk_edit.py:714 netbox/dcim/forms/bulk_import.py:614 +#: netbox/dcim/forms/bulk_edit.py:714 netbox/dcim/forms/bulk_import.py:615 #: netbox/dcim/forms/filtersets.py:829 netbox/dcim/forms/filtersets.py:938 #: netbox/dcim/forms/model_forms.py:602 netbox/dcim/forms/model_forms.py:674 #: netbox/dcim/tables/devices.py:191 netbox/extras/filtersets.py:772 @@ -4604,7 +4604,7 @@ msgstr "Função do dispositivo" msgid "Platform" msgstr "Plataforma" -#: netbox/dcim/forms/bulk_edit.py:739 netbox/dcim/forms/bulk_import.py:633 +#: netbox/dcim/forms/bulk_edit.py:739 netbox/dcim/forms/bulk_import.py:634 #: netbox/dcim/forms/filtersets.py:870 netbox/dcim/forms/filtersets.py:1040 #: netbox/dcim/forms/model_forms.py:683 netbox/dcim/tables/devices.py:211 #: netbox/extras/filtersets.py:805 netbox/extras/forms/filtersets.py:411 @@ -4633,12 +4633,12 @@ msgstr "Configuração" msgid "Virtualization" msgstr "Virtualização" -#: netbox/dcim/forms/bulk_edit.py:767 netbox/dcim/forms/bulk_import.py:775 +#: netbox/dcim/forms/bulk_edit.py:767 netbox/dcim/forms/bulk_import.py:776 #: netbox/dcim/forms/model_forms.py:811 netbox/dcim/forms/model_forms.py:1073 msgid "Module type" msgstr "Tipo de módulo" -#: netbox/dcim/forms/bulk_edit.py:839 netbox/dcim/forms/bulk_import.py:1528 +#: netbox/dcim/forms/bulk_edit.py:839 netbox/dcim/forms/bulk_import.py:1616 #: netbox/dcim/forms/filtersets.py:1305 netbox/dcim/forms/model_forms.py:888 #: netbox/dcim/tables/cables.py:124 msgid "Bundle" @@ -4662,8 +4662,8 @@ msgstr "Rótulo" msgid "Length" msgstr "Comprimento" -#: netbox/dcim/forms/bulk_edit.py:858 netbox/dcim/forms/bulk_import.py:1535 -#: netbox/dcim/forms/bulk_import.py:1538 netbox/dcim/forms/filtersets.py:1291 +#: netbox/dcim/forms/bulk_edit.py:858 netbox/dcim/forms/bulk_import.py:1623 +#: netbox/dcim/forms/bulk_import.py:1626 netbox/dcim/forms/filtersets.py:1291 msgid "Length unit" msgstr "Unidade de comprimento" @@ -4671,17 +4671,17 @@ msgstr "Unidade de comprimento" msgid "Domain" msgstr "Domínio" -#: netbox/dcim/forms/bulk_edit.py:932 netbox/dcim/forms/bulk_import.py:1735 +#: netbox/dcim/forms/bulk_edit.py:932 netbox/dcim/forms/bulk_import.py:1823 #: netbox/dcim/forms/filtersets.py:1384 netbox/dcim/forms/model_forms.py:927 msgid "Power panel" msgstr "Quadro de alimentação" -#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/bulk_import.py:1771 +#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/bulk_import.py:1859 #: netbox/dcim/forms/filtersets.py:1406 msgid "Supply" msgstr "Tipo de Alimentação" -#: netbox/dcim/forms/bulk_edit.py:960 netbox/dcim/forms/bulk_import.py:1776 +#: netbox/dcim/forms/bulk_edit.py:960 netbox/dcim/forms/bulk_import.py:1864 #: netbox/dcim/forms/filtersets.py:1411 msgid "Phase" msgstr "Fase" @@ -4718,13 +4718,13 @@ msgstr "Consumo alocado" msgid "Allocated power draw (watts)" msgstr "Consumo de energia alocado (Watts)" -#: netbox/dcim/forms/bulk_edit.py:1107 netbox/dcim/forms/bulk_import.py:908 +#: netbox/dcim/forms/bulk_edit.py:1107 netbox/dcim/forms/bulk_import.py:909 #: netbox/dcim/forms/model_forms.py:1144 netbox/dcim/forms/model_forms.py:1509 #: netbox/dcim/forms/model_forms.py:1838 netbox/dcim/forms/object_import.py:56 msgid "Power port" msgstr "Porta de alimentação" -#: netbox/dcim/forms/bulk_edit.py:1112 netbox/dcim/forms/bulk_import.py:915 +#: netbox/dcim/forms/bulk_edit.py:1112 netbox/dcim/forms/bulk_import.py:916 msgid "Feed leg" msgstr "Ramal de alimentação" @@ -4734,7 +4734,7 @@ msgid "Management only" msgstr "Somente gerenciamento" #: netbox/dcim/forms/bulk_edit.py:1168 netbox/dcim/forms/bulk_edit.py:1495 -#: netbox/dcim/forms/bulk_import.py:1001 netbox/dcim/forms/filtersets.py:1711 +#: netbox/dcim/forms/bulk_import.py:1002 netbox/dcim/forms/filtersets.py:1711 #: netbox/dcim/forms/filtersets.py:1796 netbox/dcim/forms/object_import.py:91 #: netbox/dcim/models/device_component_templates.py:473 #: netbox/dcim/models/device_components.py:930 netbox/dcim/ui/panels.py:494 @@ -4742,7 +4742,7 @@ msgid "PoE mode" msgstr "Modo de Operação" #: netbox/dcim/forms/bulk_edit.py:1174 netbox/dcim/forms/bulk_edit.py:1501 -#: netbox/dcim/forms/bulk_import.py:1007 netbox/dcim/forms/filtersets.py:1716 +#: netbox/dcim/forms/bulk_import.py:1008 netbox/dcim/forms/filtersets.py:1716 #: netbox/dcim/forms/filtersets.py:1801 netbox/dcim/forms/object_import.py:96 #: netbox/dcim/models/device_component_templates.py:480 #: netbox/dcim/models/device_components.py:937 netbox/dcim/ui/panels.py:495 @@ -4768,7 +4768,7 @@ msgstr "LAG" msgid "Virtual device contexts" msgstr "Contextos de dispositivos virtuais" -#: netbox/dcim/forms/bulk_edit.py:1509 netbox/dcim/forms/bulk_import.py:1010 +#: netbox/dcim/forms/bulk_edit.py:1509 netbox/dcim/forms/bulk_import.py:1011 #: netbox/virtualization/forms/bulk_edit.py:252 #: netbox/virtualization/forms/bulk_import.py:205 #: netbox/vpn/forms/bulk_edit.py:128 netbox/vpn/forms/bulk_edit.py:196 @@ -4779,7 +4779,7 @@ msgstr "Contextos de dispositivos virtuais" msgid "Mode" msgstr "Modo" -#: netbox/dcim/forms/bulk_edit.py:1517 netbox/dcim/forms/bulk_import.py:1016 +#: netbox/dcim/forms/bulk_edit.py:1517 netbox/dcim/forms/bulk_import.py:1017 #: netbox/dcim/forms/model_forms.py:1585 netbox/ipam/forms/bulk_import.py:184 #: netbox/ipam/forms/filtersets.py:603 netbox/ipam/models/vlans.py:99 #: netbox/virtualization/forms/bulk_edit.py:259 @@ -4788,7 +4788,7 @@ msgstr "Modo" msgid "VLAN group" msgstr "Grupo de VLANs" -#: netbox/dcim/forms/bulk_edit.py:1526 netbox/dcim/forms/bulk_import.py:1023 +#: netbox/dcim/forms/bulk_edit.py:1526 netbox/dcim/forms/bulk_import.py:1024 #: netbox/dcim/forms/model_forms.py:1591 netbox/dcim/tables/devices.py:627 #: netbox/dcim/ui/panels.py:498 netbox/virtualization/forms/bulk_edit.py:267 #: netbox/virtualization/forms/bulk_import.py:218 @@ -4796,7 +4796,7 @@ msgstr "Grupo de VLANs" msgid "Untagged VLAN" msgstr "VLAN Não Tagueada" -#: netbox/dcim/forms/bulk_edit.py:1535 netbox/dcim/forms/bulk_import.py:1030 +#: netbox/dcim/forms/bulk_edit.py:1535 netbox/dcim/forms/bulk_import.py:1031 #: netbox/dcim/forms/model_forms.py:1600 netbox/dcim/tables/devices.py:633 #: netbox/virtualization/forms/bulk_edit.py:275 #: netbox/virtualization/forms/bulk_import.py:225 @@ -4812,7 +4812,7 @@ msgstr "Adicionar VLANs tagueadas" msgid "Remove tagged VLANs" msgstr "Remover VLANs tagueadas" -#: netbox/dcim/forms/bulk_edit.py:1558 netbox/dcim/forms/bulk_import.py:1043 +#: netbox/dcim/forms/bulk_edit.py:1558 netbox/dcim/forms/bulk_import.py:1044 #: netbox/dcim/forms/model_forms.py:1609 #: netbox/virtualization/forms/bulk_import.py:238 #: netbox/virtualization/forms/model_forms.py:439 @@ -4880,243 +4880,243 @@ msgstr "O modo de interface deve ser especificado para atribuir VLANs" msgid "An access interface cannot have tagged VLANs assigned." msgstr "Uma interface de acesso não pode ter VLANs tagueadas." -#: netbox/dcim/forms/bulk_import.py:81 +#: netbox/dcim/forms/bulk_import.py:82 msgid "Name of parent region" msgstr "Nome da região principal" -#: netbox/dcim/forms/bulk_import.py:95 +#: netbox/dcim/forms/bulk_import.py:96 msgid "Name of parent site group" msgstr "Nome do grupo de sites principais" -#: netbox/dcim/forms/bulk_import.py:114 +#: netbox/dcim/forms/bulk_import.py:115 msgid "Assigned region" msgstr "Região designada" -#: netbox/dcim/forms/bulk_import.py:121 netbox/tenancy/forms/bulk_import.py:50 +#: netbox/dcim/forms/bulk_import.py:122 netbox/tenancy/forms/bulk_import.py:50 #: netbox/wireless/forms/bulk_import.py:41 msgid "Assigned group" msgstr "Grupo designado" -#: netbox/dcim/forms/bulk_import.py:140 +#: netbox/dcim/forms/bulk_import.py:141 msgid "available options" msgstr "opções disponíveis" -#: netbox/dcim/forms/bulk_import.py:151 netbox/dcim/forms/bulk_import.py:659 -#: netbox/dcim/forms/bulk_import.py:1732 netbox/ipam/forms/bulk_import.py:519 +#: netbox/dcim/forms/bulk_import.py:152 netbox/dcim/forms/bulk_import.py:660 +#: netbox/dcim/forms/bulk_import.py:1820 netbox/ipam/forms/bulk_import.py:519 #: netbox/virtualization/forms/bulk_import.py:66 msgid "Assigned site" msgstr "Site designado" -#: netbox/dcim/forms/bulk_import.py:158 +#: netbox/dcim/forms/bulk_import.py:159 msgid "Parent location" msgstr "Local pai" -#: netbox/dcim/forms/bulk_import.py:160 +#: netbox/dcim/forms/bulk_import.py:161 msgid "Location not found." msgstr "Local não encontrado." -#: netbox/dcim/forms/bulk_import.py:211 +#: netbox/dcim/forms/bulk_import.py:212 msgid "The manufacturer of this rack type" msgstr "Fabricante deste tipo de rack" -#: netbox/dcim/forms/bulk_import.py:222 +#: netbox/dcim/forms/bulk_import.py:223 msgid "The lowest-numbered position in the rack" msgstr "A numeração de posição mais baixa no rack" -#: netbox/dcim/forms/bulk_import.py:227 netbox/dcim/forms/bulk_import.py:309 +#: netbox/dcim/forms/bulk_import.py:228 netbox/dcim/forms/bulk_import.py:310 msgid "Rail-to-rail width (in inches)" msgstr "Largura de trilho a trilho (em polegadas)" -#: netbox/dcim/forms/bulk_import.py:233 netbox/dcim/forms/bulk_import.py:319 +#: netbox/dcim/forms/bulk_import.py:234 netbox/dcim/forms/bulk_import.py:320 msgid "Unit for outer dimensions" msgstr "Unidade para dimensões externas" -#: netbox/dcim/forms/bulk_import.py:239 netbox/dcim/forms/bulk_import.py:331 +#: netbox/dcim/forms/bulk_import.py:240 netbox/dcim/forms/bulk_import.py:332 msgid "Unit for rack weights" msgstr "Unidade de peso do rack" -#: netbox/dcim/forms/bulk_import.py:271 +#: netbox/dcim/forms/bulk_import.py:272 msgid "Name of assigned tenant" msgstr "Nome do inquilino designado" -#: netbox/dcim/forms/bulk_import.py:274 netbox/dcim/forms/filtersets.py:410 +#: netbox/dcim/forms/bulk_import.py:275 netbox/dcim/forms/filtersets.py:410 #: netbox/dcim/forms/filtersets.py:515 netbox/dcim/ui/panels.py:47 #: netbox/ipam/forms/filtersets.py:497 msgid "Rack group" msgstr "Grupo de racks" -#: netbox/dcim/forms/bulk_import.py:278 +#: netbox/dcim/forms/bulk_import.py:279 msgid "Name of assigned group" msgstr "Nome do grupo atribuído" -#: netbox/dcim/forms/bulk_import.py:290 +#: netbox/dcim/forms/bulk_import.py:291 msgid "Name of assigned role" msgstr "Nome da função designada" -#: netbox/dcim/forms/bulk_import.py:297 +#: netbox/dcim/forms/bulk_import.py:298 msgid "Rack type model" msgstr "Modelo do tipo de rack" -#: netbox/dcim/forms/bulk_import.py:325 netbox/dcim/forms/bulk_import.py:490 -#: netbox/dcim/forms/bulk_import.py:699 +#: netbox/dcim/forms/bulk_import.py:326 netbox/dcim/forms/bulk_import.py:491 +#: netbox/dcim/forms/bulk_import.py:700 msgid "Airflow direction" msgstr "Direção do fluxo de ar" -#: netbox/dcim/forms/bulk_import.py:358 +#: netbox/dcim/forms/bulk_import.py:359 msgid "Width must be set if not specifying a rack type." msgstr "A largura deve ser definida se um tipo de rack não for especificado." -#: netbox/dcim/forms/bulk_import.py:360 +#: netbox/dcim/forms/bulk_import.py:361 msgid "U height must be set if not specifying a rack type." msgstr "" "A altura em U deve ser definida se um tipo de rack não for especificado." -#: netbox/dcim/forms/bulk_import.py:368 +#: netbox/dcim/forms/bulk_import.py:369 msgid "Parent site" msgstr "Site principal" -#: netbox/dcim/forms/bulk_import.py:375 netbox/dcim/forms/bulk_import.py:1745 +#: netbox/dcim/forms/bulk_import.py:376 netbox/dcim/forms/bulk_import.py:1833 msgid "Rack's location (if any)" msgstr "Localização do rack (se houver)" -#: netbox/dcim/forms/bulk_import.py:384 netbox/dcim/forms/model_forms.py:376 +#: netbox/dcim/forms/bulk_import.py:385 netbox/dcim/forms/model_forms.py:376 #: netbox/dcim/tables/racks.py:242 #: netbox/templates/dcim/rackreservation.html:7 msgid "Units" msgstr "Unidades" -#: netbox/dcim/forms/bulk_import.py:387 +#: netbox/dcim/forms/bulk_import.py:388 msgid "Comma-separated list of individual unit numbers" msgstr "Lista separada por vírgula de unidades individuais" -#: netbox/dcim/forms/bulk_import.py:435 +#: netbox/dcim/forms/bulk_import.py:436 msgid "The manufacturer which produces this device type" msgstr "Fabricante que produz este tipo de dispositivo" -#: netbox/dcim/forms/bulk_import.py:442 +#: netbox/dcim/forms/bulk_import.py:443 msgid "The default platform for devices of this type (optional)" msgstr "A plataforma padrão para dispositivos deste tipo (opcional)" -#: netbox/dcim/forms/bulk_import.py:447 +#: netbox/dcim/forms/bulk_import.py:448 msgid "Device weight" msgstr "Peso do dispositivo" -#: netbox/dcim/forms/bulk_import.py:453 +#: netbox/dcim/forms/bulk_import.py:454 msgid "Unit for device weight" msgstr "Unidade de peso do dispositivo" -#: netbox/dcim/forms/bulk_import.py:495 +#: netbox/dcim/forms/bulk_import.py:496 msgid "Module weight" msgstr "Peso do módulo" -#: netbox/dcim/forms/bulk_import.py:501 +#: netbox/dcim/forms/bulk_import.py:502 msgid "Unit for module weight" msgstr "Unidade de peso do módulo" -#: netbox/dcim/forms/bulk_import.py:506 +#: netbox/dcim/forms/bulk_import.py:507 msgid "Attribute values for the assigned profile, passed as a dictionary" msgstr "" "Valores de atributos para o perfil atribuído, passados como um dicionário" -#: netbox/dcim/forms/bulk_import.py:521 +#: netbox/dcim/forms/bulk_import.py:522 msgid "Profile must be specified if attribute data is provided." msgstr "" "Perfil deve ser especificado se os dados do atributo forem fornecidos." -#: netbox/dcim/forms/bulk_import.py:534 +#: netbox/dcim/forms/bulk_import.py:535 msgid "Parent Device Role" msgstr "Função do dispositivo pai" -#: netbox/dcim/forms/bulk_import.py:536 +#: netbox/dcim/forms/bulk_import.py:537 msgid "Device role not found." msgstr "Função do dispositivo não encontrada." -#: netbox/dcim/forms/bulk_import.py:560 +#: netbox/dcim/forms/bulk_import.py:561 msgid "Parent platform" msgstr "Plataforma pai" -#: netbox/dcim/forms/bulk_import.py:562 +#: netbox/dcim/forms/bulk_import.py:563 msgid "Platform not found." msgstr "Plataforma não encontrada." -#: netbox/dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:571 msgid "Limit platform assignments to this manufacturer" msgstr "Limitar as atribuições de plataforma a este fabricante" -#: netbox/dcim/forms/bulk_import.py:592 netbox/dcim/forms/bulk_import.py:1814 +#: netbox/dcim/forms/bulk_import.py:593 netbox/dcim/forms/bulk_import.py:1902 #: netbox/tenancy/forms/bulk_import.py:116 msgid "Assigned role" msgstr "Função designada" -#: netbox/dcim/forms/bulk_import.py:605 +#: netbox/dcim/forms/bulk_import.py:606 msgid "Device type manufacturer" msgstr "Fabricante do tipo de dispositivo" -#: netbox/dcim/forms/bulk_import.py:611 +#: netbox/dcim/forms/bulk_import.py:612 msgid "Device type model" msgstr "Modelo do tipo de dispositivo" -#: netbox/dcim/forms/bulk_import.py:618 +#: netbox/dcim/forms/bulk_import.py:619 #: netbox/virtualization/forms/bulk_import.py:165 msgid "Assigned platform" msgstr "Plataforma designada" -#: netbox/dcim/forms/bulk_import.py:626 netbox/dcim/forms/bulk_import.py:630 +#: netbox/dcim/forms/bulk_import.py:627 netbox/dcim/forms/bulk_import.py:631 #: netbox/dcim/forms/model_forms.py:697 msgid "Virtual chassis" msgstr "Chassi virtual" -#: netbox/dcim/forms/bulk_import.py:637 +#: netbox/dcim/forms/bulk_import.py:638 msgid "Virtualization cluster" msgstr "Cluster de virtualização" -#: netbox/dcim/forms/bulk_import.py:666 +#: netbox/dcim/forms/bulk_import.py:667 msgid "Assigned location (if any)" msgstr "Local designado (se houver)" -#: netbox/dcim/forms/bulk_import.py:673 +#: netbox/dcim/forms/bulk_import.py:674 msgid "Assigned rack (if any)" msgstr "Rack designado (se houver)" -#: netbox/dcim/forms/bulk_import.py:676 netbox/dcim/forms/model_forms.py:653 +#: netbox/dcim/forms/bulk_import.py:677 netbox/dcim/forms/model_forms.py:653 msgid "Face" msgstr "Face" -#: netbox/dcim/forms/bulk_import.py:679 +#: netbox/dcim/forms/bulk_import.py:680 msgid "Mounted rack face" msgstr "Face do rack em que está montado" -#: netbox/dcim/forms/bulk_import.py:686 +#: netbox/dcim/forms/bulk_import.py:687 msgid "Parent device (for child devices)" msgstr "Dispositivo pai (para dispositivos filhos)" -#: netbox/dcim/forms/bulk_import.py:689 +#: netbox/dcim/forms/bulk_import.py:690 msgid "Device bay" msgstr "Compartimento de dispositivos" -#: netbox/dcim/forms/bulk_import.py:693 +#: netbox/dcim/forms/bulk_import.py:694 msgid "Device bay in which this device is installed (for child devices)" msgstr "" "Compartimento de dispositivos no qual este dispositivo está instalado (para " "dispositivos filhos)" -#: netbox/dcim/forms/bulk_import.py:766 +#: netbox/dcim/forms/bulk_import.py:767 msgid "The device in which this module is installed" msgstr "O dispositivo no qual este módulo está instalado" -#: netbox/dcim/forms/bulk_import.py:769 netbox/dcim/forms/model_forms.py:801 +#: netbox/dcim/forms/bulk_import.py:770 netbox/dcim/forms/model_forms.py:801 msgid "Module bay" msgstr "Baia de módulos" -#: netbox/dcim/forms/bulk_import.py:772 +#: netbox/dcim/forms/bulk_import.py:773 msgid "The module bay in which this module is installed" msgstr "A baia na qual este módulo está instalado" -#: netbox/dcim/forms/bulk_import.py:778 +#: netbox/dcim/forms/bulk_import.py:779 msgid "The type of module" msgstr "O tipo de módulo" -#: netbox/dcim/forms/bulk_import.py:788 +#: netbox/dcim/forms/bulk_import.py:789 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" @@ -5124,89 +5124,89 @@ msgstr "" "Popular automaticamente os componentes associados a este tipo de módulo " "(ativado por padrão)" -#: netbox/dcim/forms/bulk_import.py:832 netbox/dcim/forms/bulk_import.py:858 -#: netbox/dcim/forms/bulk_import.py:884 +#: netbox/dcim/forms/bulk_import.py:833 netbox/dcim/forms/bulk_import.py:859 +#: netbox/dcim/forms/bulk_import.py:885 msgid "Port type" msgstr "Tipo de porta" -#: netbox/dcim/forms/bulk_import.py:840 netbox/dcim/forms/bulk_import.py:866 +#: netbox/dcim/forms/bulk_import.py:841 netbox/dcim/forms/bulk_import.py:867 msgid "Port speed in bps" msgstr "Velocidade da porta em bps" -#: netbox/dcim/forms/bulk_import.py:905 +#: netbox/dcim/forms/bulk_import.py:906 msgid "Outlet type" msgstr "Tipo de tomada" -#: netbox/dcim/forms/bulk_import.py:912 +#: netbox/dcim/forms/bulk_import.py:913 msgid "Local power port which feeds this outlet" msgstr "Porta de alimentação local que alimenta esta tomada" -#: netbox/dcim/forms/bulk_import.py:918 +#: netbox/dcim/forms/bulk_import.py:919 msgid "Electrical phase (for three-phase circuits)" msgstr "Fase (para circuitos trifásicos)" -#: netbox/dcim/forms/bulk_import.py:962 netbox/dcim/forms/model_forms.py:1547 +#: netbox/dcim/forms/bulk_import.py:963 netbox/dcim/forms/model_forms.py:1547 #: netbox/virtualization/forms/bulk_import.py:195 #: netbox/virtualization/forms/model_forms.py:400 msgid "Parent interface" msgstr "Interface pai" -#: netbox/dcim/forms/bulk_import.py:969 netbox/dcim/forms/model_forms.py:1555 +#: netbox/dcim/forms/bulk_import.py:970 netbox/dcim/forms/model_forms.py:1555 #: netbox/virtualization/forms/bulk_import.py:202 #: netbox/virtualization/forms/model_forms.py:408 msgid "Bridged interface" msgstr "Interface em bridge" -#: netbox/dcim/forms/bulk_import.py:972 +#: netbox/dcim/forms/bulk_import.py:973 msgid "Lag" msgstr "LAG" -#: netbox/dcim/forms/bulk_import.py:976 +#: netbox/dcim/forms/bulk_import.py:977 msgid "Parent LAG interface" msgstr "Interface LAG pai" -#: netbox/dcim/forms/bulk_import.py:979 +#: netbox/dcim/forms/bulk_import.py:980 msgid "Vdcs" msgstr "Contextos de Dispositivos Virtuais" -#: netbox/dcim/forms/bulk_import.py:984 +#: netbox/dcim/forms/bulk_import.py:985 msgid "VDC names separated by commas, encased with double quotes. Example:" msgstr "" "Nomes de contextos de dispositivos virtuais separados por vírgulas, entre " "aspas duplas. Exemplo:" -#: netbox/dcim/forms/bulk_import.py:990 +#: netbox/dcim/forms/bulk_import.py:991 msgid "Physical medium" msgstr "Meio físico" -#: netbox/dcim/forms/bulk_import.py:993 netbox/dcim/forms/filtersets.py:1682 +#: netbox/dcim/forms/bulk_import.py:994 netbox/dcim/forms/filtersets.py:1682 msgid "Duplex" msgstr "Duplex" -#: netbox/dcim/forms/bulk_import.py:998 +#: netbox/dcim/forms/bulk_import.py:999 msgid "Poe mode" msgstr "Modo de operação do PoE" -#: netbox/dcim/forms/bulk_import.py:1004 +#: netbox/dcim/forms/bulk_import.py:1005 msgid "Poe type" msgstr "Tipo de PoE" -#: netbox/dcim/forms/bulk_import.py:1013 +#: netbox/dcim/forms/bulk_import.py:1014 #: netbox/virtualization/forms/bulk_import.py:208 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "Modo de operação do IEEE 802.1Q (para interfaces L2)" -#: netbox/dcim/forms/bulk_import.py:1020 +#: netbox/dcim/forms/bulk_import.py:1021 #: netbox/virtualization/forms/bulk_import.py:215 msgid "Filter VLANs available for assignment by group" msgstr "Filtrar VLANs disponíveis para atribuição por grupo" -#: netbox/dcim/forms/bulk_import.py:1027 +#: netbox/dcim/forms/bulk_import.py:1028 #: netbox/virtualization/forms/bulk_import.py:222 msgid "Assigned untagged VLAN ID (filtered by VLAN group)" msgstr "ID de VLAN não tagueada atribuído (filtrado por grupo de VLANs)" -#: netbox/dcim/forms/bulk_import.py:1036 +#: netbox/dcim/forms/bulk_import.py:1037 #: netbox/virtualization/forms/bulk_import.py:231 msgid "" "Assigned tagged VLAN IDs separated by commas, encased with double quotes " @@ -5215,12 +5215,12 @@ msgstr "" "IDs de VLAN tagueadas atribuídos, separados por vírgulas, entre aspas duplas" " (filtrados por grupo de VLAN). Exemplo:" -#: netbox/dcim/forms/bulk_import.py:1047 +#: netbox/dcim/forms/bulk_import.py:1048 #: netbox/virtualization/forms/bulk_import.py:242 msgid "Assigned Q-in-Q Service VLAN ID (filtered by VLAN group)" msgstr "ID de VLAN do serviço Q-in-Q atribuído (filtrado por grupo de VLAN)" -#: netbox/dcim/forms/bulk_import.py:1054 netbox/ipam/forms/bulk_import.py:174 +#: netbox/dcim/forms/bulk_import.py:1055 netbox/ipam/forms/bulk_import.py:174 #: netbox/ipam/forms/bulk_import.py:259 netbox/ipam/forms/bulk_import.py:295 #: netbox/ipam/forms/filtersets.py:230 netbox/ipam/forms/filtersets.py:314 #: netbox/ipam/forms/filtersets.py:383 @@ -5228,76 +5228,109 @@ msgstr "ID de VLAN do serviço Q-in-Q atribuído (filtrado por grupo de VLAN)" msgid "Assigned VRF" msgstr "VRF designado" -#: netbox/dcim/forms/bulk_import.py:1057 +#: netbox/dcim/forms/bulk_import.py:1058 msgid "Rf role" msgstr "Função RF" -#: netbox/dcim/forms/bulk_import.py:1060 +#: netbox/dcim/forms/bulk_import.py:1061 msgid "Wireless role (AP/station)" msgstr "Função do Wireless (AP/Station)" -#: netbox/dcim/forms/bulk_import.py:1103 +#: netbox/dcim/forms/bulk_import.py:1104 #, python-brace-format msgid "VDC {vdc} is not assigned to device {device}" msgstr "" "Contexto de dispositivo virtual {vdc} não está associado ao dispositivo " "{device}" -#: netbox/dcim/forms/bulk_import.py:1119 netbox/dcim/forms/bulk_import.py:1137 -#: netbox/dcim/forms/bulk_import.py:1518 +#: netbox/dcim/forms/bulk_import.py:1120 netbox/dcim/forms/bulk_import.py:1225 +#: netbox/dcim/forms/bulk_import.py:1606 msgid "Physical medium classification" msgstr "Tipo de conexão do meio físico" -#: netbox/dcim/forms/bulk_import.py:1173 +#: netbox/dcim/forms/bulk_import.py:1123 netbox/dcim/forms/model_forms.py:1846 +#: netbox/dcim/forms/object_import.py:145 +msgid "Rear port" +msgstr "Porta traseira" + +#: netbox/dcim/forms/bulk_import.py:1126 +msgid "Corresponding rear port (mapped to the front port's first position)" +msgstr "" +"Porta traseira correspondente (mapeada para a primeira posição da porta " +"frontal)" + +#: netbox/dcim/forms/bulk_import.py:1129 +msgid "Rear port position" +msgstr "Posição da porta traseira" + +#: netbox/dcim/forms/bulk_import.py:1131 +msgid "Mapped position on the corresponding rear port (defaults to 1)" +msgstr "Posição mapeada na porta traseira correspondente (o padrão é 1)" + +#: netbox/dcim/forms/bulk_import.py:1175 netbox/dcim/models/base.py:59 +#, python-brace-format +msgid "" +"Invalid rear port position ({rear_port_position}): Rear port {name} has only" +" {positions} positions." +msgstr "" +"Posição inválida da porta traseira ({rear_port_position}): Porta traseira " +"{name} tem apenas {positions} posições." + +#: netbox/dcim/forms/bulk_import.py:1193 +#, python-brace-format +msgid "Rear port {name} position {rear_port_position} is already occupied." +msgstr "Porta traseira {name} posição {rear_port_position} já está ocupado." + +#: netbox/dcim/forms/bulk_import.py:1261 msgid "Installed device" msgstr "Dispositivo instalado" -#: netbox/dcim/forms/bulk_import.py:1177 +#: netbox/dcim/forms/bulk_import.py:1265 msgid "Child device installed within this bay" msgstr "Dispositivo filho instalado neste compartimento" -#: netbox/dcim/forms/bulk_import.py:1179 +#: netbox/dcim/forms/bulk_import.py:1267 msgid "Child device not found." msgstr "Dispositivo filho não encontrado." -#: netbox/dcim/forms/bulk_import.py:1243 +#: netbox/dcim/forms/bulk_import.py:1331 msgid "Parent inventory item" msgstr "Item pai do inventário" -#: netbox/dcim/forms/bulk_import.py:1246 +#: netbox/dcim/forms/bulk_import.py:1334 msgid "Component type" msgstr "Tipo de componente" -#: netbox/dcim/forms/bulk_import.py:1250 +#: netbox/dcim/forms/bulk_import.py:1338 msgid "Component Type" msgstr "Tipo de Componente" -#: netbox/dcim/forms/bulk_import.py:1253 +#: netbox/dcim/forms/bulk_import.py:1341 msgid "Component name" msgstr "Nome do componente" -#: netbox/dcim/forms/bulk_import.py:1255 +#: netbox/dcim/forms/bulk_import.py:1343 msgid "Component Name" msgstr "Nome do Componente" -#: netbox/dcim/forms/bulk_import.py:1298 netbox/dcim/forms/bulk_import.py:1316 +#: netbox/dcim/forms/bulk_import.py:1386 netbox/dcim/forms/bulk_import.py:1404 msgid "Component name must be specified when component type is specified" msgstr "O nome do componente é requerido quando o tipo for definido." -#: netbox/dcim/forms/bulk_import.py:1308 +#: netbox/dcim/forms/bulk_import.py:1396 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "Componente não encontrado: {device} - {component_name}" -#: netbox/dcim/forms/bulk_import.py:1321 +#: netbox/dcim/forms/bulk_import.py:1409 msgid "Component type must be specified when component name is specified" msgstr "O tipo do componente é requerido quando o nome for definido." -#: netbox/dcim/forms/bulk_import.py:1348 netbox/ipam/forms/bulk_import.py:320 +#: netbox/dcim/forms/bulk_import.py:1436 netbox/ipam/forms/bulk_import.py:320 msgid "Parent device of assigned interface (if any)" msgstr "Dispositivo pai da interface associada (se houver)" -#: netbox/dcim/forms/bulk_import.py:1351 netbox/ipam/forms/bulk_import.py:323 +#: netbox/dcim/forms/bulk_import.py:1439 netbox/ipam/forms/bulk_import.py:323 #: netbox/virtualization/filtersets.py:354 #: netbox/virtualization/filtersets.py:412 #: netbox/virtualization/forms/bulk_edit.py:219 @@ -5311,136 +5344,136 @@ msgstr "Dispositivo pai da interface associada (se houver)" msgid "Virtual machine" msgstr "Máquina virtual" -#: netbox/dcim/forms/bulk_import.py:1355 netbox/ipam/forms/bulk_import.py:327 +#: netbox/dcim/forms/bulk_import.py:1443 netbox/ipam/forms/bulk_import.py:327 msgid "Parent VM of assigned interface (if any)" msgstr "VM pai da interface associada (se houver)" -#: netbox/dcim/forms/bulk_import.py:1362 netbox/ipam/filtersets.py:1111 +#: netbox/dcim/forms/bulk_import.py:1450 netbox/ipam/filtersets.py:1111 #: netbox/ipam/forms/bulk_import.py:334 msgid "Assigned interface" msgstr "Interface associada" -#: netbox/dcim/forms/bulk_import.py:1366 +#: netbox/dcim/forms/bulk_import.py:1454 msgid "Make this the primary MAC address for the assigned interface" msgstr "Torne este o endereço MAC principal para a interface atribuída." -#: netbox/dcim/forms/bulk_import.py:1404 +#: netbox/dcim/forms/bulk_import.py:1492 msgid "Must specify the parent device or VM when assigning an interface" msgstr "" "É necessário especificar o dispositivo principal ou VM ao atribuir uma " "interface" -#: netbox/dcim/forms/bulk_import.py:1437 +#: netbox/dcim/forms/bulk_import.py:1525 msgid "Side A site" msgstr "Site do lado A" -#: netbox/dcim/forms/bulk_import.py:1441 +#: netbox/dcim/forms/bulk_import.py:1529 #: netbox/wireless/forms/bulk_import.py:93 msgid "Site of parent device A (if any)" msgstr "Site do dispositivo pai A (se houver)" -#: netbox/dcim/forms/bulk_import.py:1444 +#: netbox/dcim/forms/bulk_import.py:1532 msgid "Side A device" msgstr "Dispositivo no lado A" -#: netbox/dcim/forms/bulk_import.py:1448 netbox/dcim/forms/bulk_import.py:1481 +#: netbox/dcim/forms/bulk_import.py:1536 netbox/dcim/forms/bulk_import.py:1569 msgid "Device name (for device component terminations)" msgstr "Nome do dispositivo (para terminações de componentes do dispositivo)" -#: netbox/dcim/forms/bulk_import.py:1451 +#: netbox/dcim/forms/bulk_import.py:1539 msgid "Side A power panel" msgstr "Quadro de alimentação do lado A" -#: netbox/dcim/forms/bulk_import.py:1455 netbox/dcim/forms/bulk_import.py:1488 +#: netbox/dcim/forms/bulk_import.py:1543 netbox/dcim/forms/bulk_import.py:1576 msgid "Power panel name (for power feed terminations)" msgstr "" "Nome do quadro de alimentação (para terminações de alimentação de energia)" -#: netbox/dcim/forms/bulk_import.py:1458 +#: netbox/dcim/forms/bulk_import.py:1546 msgid "Side A type" msgstr "Tipo de terminação no lado A" -#: netbox/dcim/forms/bulk_import.py:1464 +#: netbox/dcim/forms/bulk_import.py:1552 msgid "Side A name" msgstr "Nome da terminação no lado A" -#: netbox/dcim/forms/bulk_import.py:1465 netbox/dcim/forms/bulk_import.py:1498 +#: netbox/dcim/forms/bulk_import.py:1553 netbox/dcim/forms/bulk_import.py:1586 msgid "Termination name" msgstr "Nome da terminação" -#: netbox/dcim/forms/bulk_import.py:1470 +#: netbox/dcim/forms/bulk_import.py:1558 msgid "Side B site" msgstr "Site do lado B" -#: netbox/dcim/forms/bulk_import.py:1474 +#: netbox/dcim/forms/bulk_import.py:1562 #: netbox/wireless/forms/bulk_import.py:114 msgid "Site of parent device B (if any)" msgstr "Site do dispositivo pai B (se houver)" -#: netbox/dcim/forms/bulk_import.py:1477 +#: netbox/dcim/forms/bulk_import.py:1565 msgid "Side B device" msgstr "Dispositivo no lado B" -#: netbox/dcim/forms/bulk_import.py:1484 +#: netbox/dcim/forms/bulk_import.py:1572 msgid "Side B power panel" msgstr "Quadro de alimentação do lado B" -#: netbox/dcim/forms/bulk_import.py:1491 +#: netbox/dcim/forms/bulk_import.py:1579 msgid "Side B type" msgstr "Tipo de terminação no lado B" -#: netbox/dcim/forms/bulk_import.py:1497 +#: netbox/dcim/forms/bulk_import.py:1585 msgid "Side B name" msgstr "Nome da terminação no lado B" -#: netbox/dcim/forms/bulk_import.py:1506 +#: netbox/dcim/forms/bulk_import.py:1594 #: netbox/templates/dcim/panels/connection.html:60 #: netbox/wireless/forms/bulk_import.py:133 msgid "Connection status" msgstr "Status da conexão" -#: netbox/dcim/forms/bulk_import.py:1512 +#: netbox/dcim/forms/bulk_import.py:1600 msgid "Cable connection profile" msgstr "Perfil de conexão do cabo" -#: netbox/dcim/forms/bulk_import.py:1532 +#: netbox/dcim/forms/bulk_import.py:1620 msgid "Cable bundle name" msgstr "Nome do feixe de cabos" -#: netbox/dcim/forms/bulk_import.py:1544 +#: netbox/dcim/forms/bulk_import.py:1632 msgid "Color name (e.g. \"Red\") or hex code (e.g. \"f44336\")" msgstr "" "Nome da cor (por exemplo, “Vermelho”) ou código hexadecimal (por exemplo, " "“f44336\")" -#: netbox/dcim/forms/bulk_import.py:1587 +#: netbox/dcim/forms/bulk_import.py:1675 #, python-brace-format msgid "Invalid side designation: {side}" msgstr "Designação lateral inválida: {side}" -#: netbox/dcim/forms/bulk_import.py:1606 +#: netbox/dcim/forms/bulk_import.py:1694 #, python-brace-format msgid "" "Side {side_upper}: {power_panel} {termination_object} is already connected" msgstr "" "Lado {side_upper}: {power_panel} {termination_object} já está conectado" -#: netbox/dcim/forms/bulk_import.py:1612 +#: netbox/dcim/forms/bulk_import.py:1700 #, python-brace-format msgid "{side_upper} side termination not found: {power_panel} {name}" msgstr "terminação {side_upper} não encontrada: {power_panel} {name}" -#: netbox/dcim/forms/bulk_import.py:1630 +#: netbox/dcim/forms/bulk_import.py:1718 #, python-brace-format msgid "Side {side_upper}: {device} {termination_object} is already connected" msgstr "Lado {side_upper}: {device} {termination_object} já está conectado" -#: netbox/dcim/forms/bulk_import.py:1636 +#: netbox/dcim/forms/bulk_import.py:1724 #, python-brace-format msgid "{side_upper} side termination not found: {device} {name}" msgstr " Terminação {side_upper} não encontrada: {device} {name}" -#: netbox/dcim/forms/bulk_import.py:1658 +#: netbox/dcim/forms/bulk_import.py:1746 #, python-brace-format msgid "" "{color} did not match any used color name and was longer than six " @@ -5449,53 +5482,53 @@ msgstr "" "{color} não corresponde a nenhum nome de cor usado e tem mais de seis " "caracteres: hexadecimal inválido." -#: netbox/dcim/forms/bulk_import.py:1683 netbox/dcim/forms/model_forms.py:962 +#: netbox/dcim/forms/bulk_import.py:1771 netbox/dcim/forms/model_forms.py:962 #: netbox/dcim/tables/devices.py:1154 #: netbox/templates/dcim/panels/virtual_chassis_members.html:10 msgid "Master" msgstr "Mestre" -#: netbox/dcim/forms/bulk_import.py:1687 +#: netbox/dcim/forms/bulk_import.py:1775 msgid "Master device" msgstr "Dispositivo mestre" -#: netbox/dcim/forms/bulk_import.py:1704 +#: netbox/dcim/forms/bulk_import.py:1792 msgid "Name of parent site" msgstr "Nome do site principal" -#: netbox/dcim/forms/bulk_import.py:1738 +#: netbox/dcim/forms/bulk_import.py:1826 msgid "Upstream power panel" msgstr "Quadro de alimentação" -#: netbox/dcim/forms/bulk_import.py:1768 +#: netbox/dcim/forms/bulk_import.py:1856 msgid "Primary or redundant" msgstr "Primário ou redundante" -#: netbox/dcim/forms/bulk_import.py:1773 +#: netbox/dcim/forms/bulk_import.py:1861 msgid "Supply type (AC/DC)" msgstr "Tipo de alimentação (AC/DC)" -#: netbox/dcim/forms/bulk_import.py:1778 +#: netbox/dcim/forms/bulk_import.py:1866 msgid "Single or three-phase" msgstr "Monofásico ou trifásico" -#: netbox/dcim/forms/bulk_import.py:1828 netbox/dcim/forms/model_forms.py:1939 +#: netbox/dcim/forms/bulk_import.py:1916 netbox/dcim/forms/model_forms.py:1939 #: netbox/dcim/ui/panels.py:111 netbox/dcim/ui/panels.py:371 #: netbox/virtualization/ui/panels.py:55 msgid "Primary IPv4" msgstr "IPv4 Primário" -#: netbox/dcim/forms/bulk_import.py:1832 +#: netbox/dcim/forms/bulk_import.py:1920 msgid "IPv4 address with mask, e.g. 1.2.3.4/24" msgstr "Endereço IPv4 com máscara, por exemplo, 1.2.3.4/24" -#: netbox/dcim/forms/bulk_import.py:1835 netbox/dcim/forms/model_forms.py:1948 +#: netbox/dcim/forms/bulk_import.py:1923 netbox/dcim/forms/model_forms.py:1948 #: netbox/dcim/ui/panels.py:116 netbox/dcim/ui/panels.py:376 #: netbox/virtualization/ui/panels.py:60 msgid "Primary IPv6" msgstr "IPv6 Primário" -#: netbox/dcim/forms/bulk_import.py:1839 +#: netbox/dcim/forms/bulk_import.py:1927 msgid "IPv6 address with prefix length, e.g. 2001:db8::1/64" msgstr "Endereço IPv6 com tamanho de prefixo, por exemplo, 2001:db8: :1/64" @@ -5982,11 +6015,6 @@ msgstr "Porta frontal" msgid "Power outlet" msgstr "Tomada elétrica" -#: netbox/dcim/forms/model_forms.py:1846 -#: netbox/dcim/forms/object_import.py:145 -msgid "Rear port" -msgstr "Porta traseira" - #: netbox/dcim/forms/model_forms.py:1852 msgid "Inventory Item" msgstr "Item de Inventário" @@ -6038,7 +6066,7 @@ msgstr "" #: netbox/dcim/forms/object_create.py:312 netbox/dcim/tables/devices.py:1160 #: netbox/ipam/tables/fhrp.py:31 netbox/ipam/ui/panels.py:185 -#: netbox/ipam/views.py:1589 netbox/templates/dcim/virtualchassis_edit.html:59 +#: netbox/ipam/views.py:1594 netbox/templates/dcim/virtualchassis_edit.html:59 #: netbox/users/views.py:375 msgid "Members" msgstr "Membros" @@ -6064,15 +6092,6 @@ msgid "A position must be specified for the first VC member." msgstr "" "Uma posição deve ser especificada para o primeiro membro do chassi virtual." -#: netbox/dcim/models/base.py:59 -#, python-brace-format -msgid "" -"Invalid rear port position ({rear_port_position}): Rear port {name} has only" -" {positions} positions." -msgstr "" -"Posição inválida da porta traseira ({rear_port_position}): Porta traseira " -"{name} tem apenas {positions} posições." - #: netbox/dcim/models/cables.py:62 msgid "cable bundle" msgstr "feixe de cabos" @@ -8003,8 +8022,8 @@ msgstr "Consumo alocado (W)" #: netbox/dcim/tables/devices.py:597 netbox/dcim/views.py:3402 #: netbox/ipam/forms/model_forms.py:834 netbox/ipam/tables/fhrp.py:28 -#: netbox/ipam/ui/panels.py:252 netbox/ipam/views.py:922 -#: netbox/ipam/views.py:1047 netbox/netbox/navigation/menu.py:175 +#: netbox/ipam/ui/panels.py:252 netbox/ipam/views.py:924 +#: netbox/ipam/views.py:1052 netbox/netbox/navigation/menu.py:175 #: netbox/netbox/navigation/menu.py:177 netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "Endereços IP" @@ -8434,7 +8453,7 @@ msgstr "Contextos de Dispositivos Virtuais" #: netbox/dcim/views.py:3414 netbox/ipam/forms/filtersets.py:469 #: netbox/ipam/models/vlans.py:308 netbox/ipam/tables/ip.py:121 -#: netbox/ipam/tables/vlans.py:52 netbox/ipam/views.py:1381 +#: netbox/ipam/tables/vlans.py:52 netbox/ipam/views.py:1386 #: netbox/netbox/navigation/menu.py:210 netbox/netbox/navigation/menu.py:212 msgid "VLANs" msgstr "VLANs" @@ -11416,11 +11435,11 @@ msgstr "Política" msgid "Ports" msgstr "Portas" -#: netbox/ipam/forms/bulk_import.py:55 netbox/ipam/views.py:72 +#: netbox/ipam/forms/bulk_import.py:55 netbox/ipam/views.py:73 msgid "Import route targets" msgstr "Import route targets" -#: netbox/ipam/forms/bulk_import.py:61 netbox/ipam/views.py:75 +#: netbox/ipam/forms/bulk_import.py:61 netbox/ipam/views.py:76 msgid "Export route targets" msgstr "Export route targets" @@ -12277,8 +12296,8 @@ msgid "Added" msgstr "Adicionado" #: netbox/ipam/tables/ip.py:76 netbox/ipam/tables/ip.py:111 -#: netbox/ipam/tables/vlans.py:125 netbox/ipam/views.py:621 -#: netbox/ipam/views.py:1731 netbox/netbox/navigation/menu.py:182 +#: netbox/ipam/tables/vlans.py:125 netbox/ipam/views.py:623 +#: netbox/ipam/views.py:1736 netbox/netbox/navigation/menu.py:182 #: netbox/netbox/navigation/menu.py:184 msgid "Prefixes" msgstr "Prefixos" @@ -12481,77 +12500,77 @@ msgstr "" "Somente caracteres alfanuméricos, asteriscos, hífens, pontos e sublinhados " "são permitidos em nomes DNS" -#: netbox/ipam/views.py:106 netbox/ipam/views.py:1761 +#: netbox/ipam/views.py:107 netbox/ipam/views.py:1766 msgid "Device Interfaces" msgstr "Interfaces de dispositivos" -#: netbox/ipam/views.py:111 netbox/ipam/views.py:1779 +#: netbox/ipam/views.py:112 netbox/ipam/views.py:1784 msgid "VM Interfaces" msgstr "Interfaces de Máquina Virtual" -#: netbox/ipam/views.py:196 +#: netbox/ipam/views.py:197 msgid "Importing VRFs" msgstr "Importando VRFs" -#: netbox/ipam/views.py:203 +#: netbox/ipam/views.py:204 msgid "Exporting VRFs" msgstr "Exportando VRFs" -#: netbox/ipam/views.py:212 +#: netbox/ipam/views.py:213 msgid "Importing L2VPNs" msgstr "Importando L2VPNs" -#: netbox/ipam/views.py:219 +#: netbox/ipam/views.py:220 msgid "Exporting L2VPNs" msgstr "Exportando L2VPNs" -#: netbox/ipam/views.py:798 +#: netbox/ipam/views.py:800 msgid "Duplicate prefixes" msgstr "Prefixos duplicados" -#: netbox/ipam/views.py:799 netbox/ipam/views.py:1012 -#: netbox/ipam/views.py:1120 +#: netbox/ipam/views.py:801 netbox/ipam/views.py:1017 +#: netbox/ipam/views.py:1125 msgid "Parent prefixes" msgstr "Prefixos pai" -#: netbox/ipam/views.py:851 +#: netbox/ipam/views.py:853 msgid "Child Prefixes" msgstr "Prefixos Filhos" -#: netbox/ipam/views.py:895 +#: netbox/ipam/views.py:897 msgid "Child Ranges" msgstr "Intervalos Filhos" -#: netbox/ipam/views.py:1121 +#: netbox/ipam/views.py:1126 msgid "Duplicate IPs" msgstr "IPs duplicados" -#: netbox/ipam/views.py:1125 +#: netbox/ipam/views.py:1130 msgid "Application services" msgstr "Serviços de aplicativos" -#: netbox/ipam/views.py:1291 +#: netbox/ipam/views.py:1296 msgid "Related IPs" msgstr "IPs relacionados" -#: netbox/ipam/views.py:1432 +#: netbox/ipam/views.py:1437 msgid "VLAN translation rules" msgstr "Regras de tradução de VLAN" -#: netbox/ipam/views.py:1438 +#: netbox/ipam/views.py:1443 msgid "Add Rule" msgstr "Adicionar Regra" -#: netbox/ipam/views.py:1580 +#: netbox/ipam/views.py:1585 msgid "Virtual IP addresses" msgstr "Endereços IP virtuais" -#: netbox/ipam/views.py:1585 netbox/templates/ipam/iprange/ip_addresses.html:8 +#: netbox/ipam/views.py:1590 netbox/templates/ipam/iprange/ip_addresses.html:8 #: netbox/templates/ipam/prefix/ip_addresses.html:7 msgid "Add IP Address" msgstr "Adicionar Endereço IP" -#: netbox/ipam/views.py:1744 +#: netbox/ipam/views.py:1749 msgid "Add a Prefix" msgstr "Adicionar um Prefixo" @@ -13975,7 +13994,7 @@ msgstr "Dados sincronizados para {object_type} {object}." msgid "Synced {count} {object_type}" msgstr "Sincronizado(s) {count} {object_type}" -#: netbox/netbox/views/generic/object_views.py:118 +#: netbox/netbox/views/generic/object_views.py:120 #, python-brace-format msgid "{class_name} must implement get_children()" msgstr "{class_name} deve implementar get_children ()" @@ -15950,7 +15969,7 @@ msgstr "Por Página" msgid "Data is out of sync with upstream file" msgstr "Os dados não estão sincronizados com o arquivo de upstream" -#: netbox/templates/inc/table_controls_htmx.html:11 +#: netbox/templates/inc/table_controls_htmx.html:10 #: netbox/templates/inc/table_controls_htmx.html:12 msgid "Quick search" msgstr "Busca rápida" diff --git a/netbox/translations/ru/LC_MESSAGES/django.mo b/netbox/translations/ru/LC_MESSAGES/django.mo index 40ec94ddfccee7e68c829bf897cb1c60e0b6f2e5..39ad5080c2123c3bbaad40098589ecc12e302436 100644 GIT binary patch delta 77795 zcmXWkcc72eAHebNy|+kIR#J&;X79Z>**i0Pm+Y;tj6x(L6`~;{O-V8uMjNI2Nu(hv zO{G%Q@BRLs^ZV!Zob#OLjL#X*b1(Ycy(Qo4FXu~sp8JyJ3I12~%0!|7RvnW_oXDL> zwE4>1MB=S-X^GGAZES`c%BLmD<4<@a-cTVeaXB`_O4tEw;w-F-JFqqWg+AA`Vp^g< zj>Ex;L^AO)7Z$8jDJ_u)CnJ4HEW}*65_96yF})ivBYg-<;HP*gCMpNB;3Xt;L~|kI zN#u*^QZZdVl};uSjbcXgSfEEt--0=Ka17e9JJ1d-MLYBaX2-2)1YVE67yTdRCI2fl zvVX?>yj4Q^LYS5I6Q#Lu#Ffzo8=(!fLmTXiHZUeSJ$g6Vz|xprAAJFRei!D$186

+tCYHhjfM7 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 Gn*RsW<${&~ delta 77336 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%0A0OLMxRAf`%=8W9bNVB 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 %Y> z0bFYJEP-VtFo5xRm>(bEI2PqtnW^+IVzZK9YD0}lh*cO}wZiy#t-E^Bf_^Wq zkk)|UH&J?rqu0#Or@z>$U1$ma#@SR$N_N#4&t&`;y>s|YhmUX+71GWz{>Y%c72uAH z!8fX1Z%&3XxdrEq;XlbNAU#)Hbl0(jDPbzE0XSP^cID~c#%UgsRr^dKw_sdWL@f?_ zpY0qJLnj|eO$h7x{Y>`8s!m3ggHc|{q%Zv-9PY<)B@EgU@E%SAgR7+Bv-h%ykD?ON zcF@^`8-GmH&cS7{3;8!;A^tJfoAEAc8ym{*2lc$MoQvW<4|B=jL2TOMBO<&=I#JO} zg#BXT){D%SK%Xe4OYoaCUJ2ccZGj&VV?6UA?Y8`I9YdZ9U(+y|MgM`tuZ8YQ`WcY_ zwso$~cry-ub6p_jO7zvTpt~FfF!rGz#n!Tg{#IN+l2q$NFtv&nAPf%XlU(Ugo7jT| zSd3nMuF1?jMaPGJOw&n(?NF}&Snm{EYCiZ+Lck_0R43-HTfAe~dA^r+7UMiPQX4~t z6_^NV{V;5Yqp29rP!JNRO#eH>fp#TER#m{!; zs?yJnzhC$}MG+4ft9{2;fBct*k+`o`<8PyW8l!+IEW;=z{jFr55yO5cZ^CH`y9s;P z3Zz5FoB5&y8^?S{R;`iwXoKxfWHqU78eB-QSNOex&Nq@s$+#%htF2{zsD4Sg5S>i6 z+?q&YOOu)mw;;d8l?xrUSTe>*87{Sc#^2_&8A;vZ>PGT|Z8hUlKrqQa#9tiz+{3OO zNv$ENT?Nd+2wPq`9cl?YMk{+l@pVl3TUwFP9~ttoN3ac1!0Hw%~;`7)d>Mm`w*AnIujyIZ|4nfFCDADu}AD~8=G`re^@7iB&I`sbKiL84u? zgKA$em`G-;SXs4gR29-*<2Zvkxr4(zTtm_KM?Wd@(>Q91>`bV|ZNm5zz8d1hP0(O- zmK>Xs=BuF+&%u=qK^PM*BUlNXt6k-aiKCA=E<=z#7;mG$dE3xTUL7hI4GL<}rBlbi z=4}F7`3JRV66D{hV^CNBv>lps>eQmSf7g!wU0b*CZyD4vu&ZY#O&9-`ZGyUJ(4|e+ zHXQ@gZF|?x>r>5qD2IsrI|h2JnsxmDao)T|%O>60ckLqgS<`L1bJ;6zzVIQ|!I7eQ zC(h^JC$LF}7XALuXCEckNXhX(Cv-pmHeLLiv}dAuFaM6snsw{crbY9BZAqee&wLv0 z@cQ-8ys&Y~tVI$h`I~0^0~#X u3(xk68+?9%k8g0|5J^?BK delta 77332 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 z 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 delta 77350 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 diff --git a/netbox/translations/uk/LC_MESSAGES/django.po b/netbox/translations/uk/LC_MESSAGES/django.po index 2a5aaf2ef..1fc6c8b02 100644 --- a/netbox/translations/uk/LC_MESSAGES/django.po +++ b/netbox/translations/uk/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-24 05:56+0000\n" +"POT-Creation-Date: 2026-07-30 05:52+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" "Last-Translator: Jeremy Stretch, 2026\n" "Language-Team: Ukrainian (https://app.transifex.com/netbox-community/teams/178115/uk/)\n" @@ -177,10 +177,10 @@ msgstr "Група тех. майданчиків (скорочення)" #: netbox/circuits/forms/filtersets.py:249 #: netbox/circuits/tables/circuits.py:125 netbox/dcim/forms/bulk_edit.py:176 #: netbox/dcim/forms/bulk_edit.py:339 netbox/dcim/forms/bulk_edit.py:696 -#: netbox/dcim/forms/bulk_edit.py:906 netbox/dcim/forms/bulk_import.py:148 -#: netbox/dcim/forms/bulk_import.py:256 netbox/dcim/forms/bulk_import.py:365 -#: netbox/dcim/forms/bulk_import.py:656 netbox/dcim/forms/bulk_import.py:1701 -#: netbox/dcim/forms/bulk_import.py:1729 netbox/dcim/forms/filtersets.py:108 +#: netbox/dcim/forms/bulk_edit.py:906 netbox/dcim/forms/bulk_import.py:149 +#: netbox/dcim/forms/bulk_import.py:257 netbox/dcim/forms/bulk_import.py:366 +#: netbox/dcim/forms/bulk_import.py:657 netbox/dcim/forms/bulk_import.py:1789 +#: netbox/dcim/forms/bulk_import.py:1817 netbox/dcim/forms/filtersets.py:108 #: netbox/dcim/forms/filtersets.py:258 netbox/dcim/forms/filtersets.py:390 #: netbox/dcim/forms/filtersets.py:500 netbox/dcim/forms/filtersets.py:895 #: netbox/dcim/forms/filtersets.py:1117 netbox/dcim/forms/filtersets.py:1198 @@ -307,7 +307,7 @@ msgstr "Припинення A (ідентифікатор)" #: netbox/extras/filtersets.py:503 netbox/extras/filtersets.py:562 #: netbox/extras/filtersets.py:623 netbox/extras/filtersets.py:662 #: netbox/extras/filtersets.py:695 netbox/extras/filtersets.py:869 -#: netbox/ipam/forms/model_forms.py:523 netbox/netbox/filtersets.py:319 +#: netbox/ipam/forms/model_forms.py:523 netbox/netbox/filtersets.py:324 #: netbox/netbox/forms/filtersets.py:32 netbox/netbox/forms/search.py:20 #: netbox/templates/htmx/object_selector.html:28 #: netbox/templates/inc/filter_list.html:43 @@ -408,7 +408,7 @@ msgstr "Інтерфейс (ідентифікатор)" #: netbox/dcim/forms/bulk_edit.py:142 netbox/dcim/forms/filtersets.py:227 #: netbox/dcim/forms/model_forms.py:144 netbox/dcim/tables/sites.py:74 #: netbox/ipam/models/asns.py:164 netbox/ipam/tables/asn.py:37 -#: netbox/ipam/tables/ip.py:126 netbox/ipam/views.py:383 +#: netbox/ipam/tables/ip.py:126 netbox/ipam/views.py:384 #: netbox/netbox/navigation/menu.py:189 netbox/netbox/navigation/menu.py:192 msgid "ASNs" msgstr "ASNs" @@ -456,7 +456,7 @@ msgstr "Ідентифікатор служби" #: netbox/dcim/forms/bulk_edit.py:628 netbox/dcim/forms/bulk_edit.py:849 #: netbox/dcim/forms/bulk_edit.py:1103 netbox/dcim/forms/bulk_edit.py:1202 #: netbox/dcim/forms/bulk_edit.py:1229 netbox/dcim/forms/bulk_edit.py:1773 -#: netbox/dcim/forms/bulk_import.py:1541 netbox/dcim/forms/filtersets.py:1283 +#: netbox/dcim/forms/bulk_import.py:1629 netbox/dcim/forms/filtersets.py:1283 #: netbox/dcim/forms/filtersets.py:1613 netbox/dcim/forms/filtersets.py:1829 #: netbox/dcim/forms/filtersets.py:1848 netbox/dcim/forms/filtersets.py:1872 #: netbox/dcim/forms/filtersets.py:1891 netbox/dcim/tables/devices.py:804 @@ -485,12 +485,12 @@ msgstr "Колір" #: netbox/dcim/forms/bulk_edit.py:1033 netbox/dcim/forms/bulk_edit.py:1056 #: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_edit.py:1146 #: netbox/dcim/forms/bulk_edit.py:1197 netbox/dcim/forms/bulk_edit.py:1224 -#: netbox/dcim/forms/bulk_import.py:214 netbox/dcim/forms/bulk_import.py:300 -#: netbox/dcim/forms/bulk_import.py:829 netbox/dcim/forms/bulk_import.py:855 -#: netbox/dcim/forms/bulk_import.py:881 netbox/dcim/forms/bulk_import.py:902 -#: netbox/dcim/forms/bulk_import.py:988 netbox/dcim/forms/bulk_import.py:1117 -#: netbox/dcim/forms/bulk_import.py:1136 netbox/dcim/forms/bulk_import.py:1515 -#: netbox/dcim/forms/bulk_import.py:1766 netbox/dcim/forms/filtersets.py:1155 +#: netbox/dcim/forms/bulk_import.py:215 netbox/dcim/forms/bulk_import.py:301 +#: netbox/dcim/forms/bulk_import.py:830 netbox/dcim/forms/bulk_import.py:856 +#: netbox/dcim/forms/bulk_import.py:882 netbox/dcim/forms/bulk_import.py:903 +#: netbox/dcim/forms/bulk_import.py:989 netbox/dcim/forms/bulk_import.py:1118 +#: netbox/dcim/forms/bulk_import.py:1224 netbox/dcim/forms/bulk_import.py:1603 +#: netbox/dcim/forms/bulk_import.py:1854 netbox/dcim/forms/filtersets.py:1155 #: netbox/dcim/forms/filtersets.py:1268 netbox/dcim/forms/filtersets.py:1401 #: netbox/dcim/forms/filtersets.py:1492 netbox/dcim/forms/filtersets.py:1512 #: netbox/dcim/forms/filtersets.py:1532 netbox/dcim/forms/filtersets.py:1552 @@ -549,11 +549,11 @@ msgstr "Обліковий запис постачальника" #: netbox/dcim/forms/bulk_edit.py:719 netbox/dcim/forms/bulk_edit.py:778 #: netbox/dcim/forms/bulk_edit.py:822 netbox/dcim/forms/bulk_edit.py:942 #: netbox/dcim/forms/bulk_edit.py:1747 netbox/dcim/forms/bulk_edit.py:1791 -#: netbox/dcim/forms/bulk_import.py:105 netbox/dcim/forms/bulk_import.py:164 -#: netbox/dcim/forms/bulk_import.py:281 netbox/dcim/forms/bulk_import.py:390 -#: netbox/dcim/forms/bulk_import.py:621 netbox/dcim/forms/bulk_import.py:781 -#: netbox/dcim/forms/bulk_import.py:1258 netbox/dcim/forms/bulk_import.py:1503 -#: netbox/dcim/forms/bulk_import.py:1761 netbox/dcim/forms/bulk_import.py:1824 +#: netbox/dcim/forms/bulk_import.py:106 netbox/dcim/forms/bulk_import.py:165 +#: netbox/dcim/forms/bulk_import.py:282 netbox/dcim/forms/bulk_import.py:391 +#: netbox/dcim/forms/bulk_import.py:622 netbox/dcim/forms/bulk_import.py:782 +#: netbox/dcim/forms/bulk_import.py:1346 netbox/dcim/forms/bulk_import.py:1591 +#: netbox/dcim/forms/bulk_import.py:1849 netbox/dcim/forms/bulk_import.py:1912 #: netbox/dcim/forms/filtersets.py:210 netbox/dcim/forms/filtersets.py:270 #: netbox/dcim/forms/filtersets.py:413 netbox/dcim/forms/filtersets.py:528 #: netbox/dcim/forms/filtersets.py:941 netbox/dcim/forms/filtersets.py:1064 @@ -612,10 +612,10 @@ msgstr "Статус" #: netbox/dcim/forms/bulk_edit.py:195 netbox/dcim/forms/bulk_edit.py:361 #: netbox/dcim/forms/bulk_edit.py:486 netbox/dcim/forms/bulk_edit.py:709 #: netbox/dcim/forms/bulk_edit.py:834 netbox/dcim/forms/bulk_edit.py:1796 -#: netbox/dcim/forms/bulk_import.py:124 netbox/dcim/forms/bulk_import.py:169 -#: netbox/dcim/forms/bulk_import.py:267 netbox/dcim/forms/bulk_import.py:395 -#: netbox/dcim/forms/bulk_import.py:595 netbox/dcim/forms/bulk_import.py:1521 -#: netbox/dcim/forms/bulk_import.py:1817 netbox/dcim/forms/filtersets.py:145 +#: netbox/dcim/forms/bulk_import.py:125 netbox/dcim/forms/bulk_import.py:170 +#: netbox/dcim/forms/bulk_import.py:268 netbox/dcim/forms/bulk_import.py:396 +#: netbox/dcim/forms/bulk_import.py:596 netbox/dcim/forms/bulk_import.py:1609 +#: netbox/dcim/forms/bulk_import.py:1905 netbox/dcim/forms/filtersets.py:145 #: netbox/dcim/forms/filtersets.py:204 netbox/dcim/forms/filtersets.py:237 #: netbox/dcim/forms/filtersets.py:374 netbox/dcim/forms/filtersets.py:459 #: netbox/dcim/forms/filtersets.py:480 netbox/dcim/forms/filtersets.py:863 @@ -706,7 +706,7 @@ msgstr "Параметри обслуговування" #: netbox/circuits/forms/filtersets.py:325 #: netbox/circuits/forms/filtersets.py:341 netbox/core/forms/filtersets.py:78 #: netbox/core/forms/filtersets.py:150 netbox/dcim/forms/bulk_edit.py:867 -#: netbox/dcim/forms/bulk_import.py:504 netbox/dcim/forms/filtersets.py:203 +#: netbox/dcim/forms/bulk_import.py:505 netbox/dcim/forms/filtersets.py:203 #: netbox/dcim/forms/filtersets.py:236 netbox/dcim/forms/filtersets.py:1054 #: netbox/dcim/forms/filtersets.py:1207 netbox/dcim/forms/filtersets.py:1219 #: netbox/dcim/forms/filtersets.py:1355 netbox/dcim/forms/filtersets.py:1482 @@ -802,7 +802,7 @@ msgstr "Опис" #: netbox/circuits/forms/bulk_edit.py:192 #: netbox/circuits/forms/model_forms.py:198 -#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/bulk_import.py:1494 +#: netbox/dcim/forms/bulk_import.py:1549 netbox/dcim/forms/bulk_import.py:1582 msgid "Termination type" msgstr "Тип кінця" @@ -876,7 +876,7 @@ msgstr "Мережа провайдера" #: netbox/circuits/forms/filtersets.py:393 #: netbox/circuits/forms/model_forms.py:399 netbox/dcim/forms/bulk_edit.py:372 #: netbox/dcim/forms/bulk_edit.py:1301 netbox/dcim/forms/bulk_edit.py:1737 -#: netbox/dcim/forms/bulk_import.py:286 netbox/dcim/forms/bulk_import.py:1227 +#: netbox/dcim/forms/bulk_import.py:287 netbox/dcim/forms/bulk_import.py:1315 #: netbox/dcim/forms/filtersets.py:421 netbox/dcim/forms/filtersets.py:919 #: netbox/dcim/forms/filtersets.py:1990 netbox/dcim/forms/filtersets.py:2030 #: netbox/dcim/forms/model_forms.py:312 netbox/dcim/forms/model_forms.py:1298 @@ -933,10 +933,10 @@ msgstr "Тип каналу зв'язку" #: netbox/circuits/forms/bulk_import.py:102 #: netbox/circuits/forms/bulk_import.py:228 -#: netbox/dcim/forms/bulk_import.py:107 netbox/dcim/forms/bulk_import.py:166 -#: netbox/dcim/forms/bulk_import.py:283 netbox/dcim/forms/bulk_import.py:392 -#: netbox/dcim/forms/bulk_import.py:623 netbox/dcim/forms/bulk_import.py:783 -#: netbox/dcim/forms/bulk_import.py:1260 netbox/dcim/forms/bulk_import.py:1763 +#: netbox/dcim/forms/bulk_import.py:108 netbox/dcim/forms/bulk_import.py:167 +#: netbox/dcim/forms/bulk_import.py:284 netbox/dcim/forms/bulk_import.py:393 +#: netbox/dcim/forms/bulk_import.py:624 netbox/dcim/forms/bulk_import.py:784 +#: netbox/dcim/forms/bulk_import.py:1348 netbox/dcim/forms/bulk_import.py:1851 #: netbox/ipam/forms/bulk_import.py:207 netbox/ipam/forms/bulk_import.py:271 #: netbox/ipam/forms/bulk_import.py:307 netbox/ipam/forms/bulk_import.py:538 #: netbox/ipam/forms/bulk_import.py:551 @@ -950,10 +950,10 @@ msgstr "Операційний стан" #: netbox/circuits/forms/bulk_import.py:115 #: netbox/circuits/forms/bulk_import.py:174 #: netbox/circuits/forms/bulk_import.py:235 -#: netbox/dcim/forms/bulk_import.py:128 netbox/dcim/forms/bulk_import.py:173 -#: netbox/dcim/forms/bulk_import.py:399 netbox/dcim/forms/bulk_import.py:599 -#: netbox/dcim/forms/bulk_import.py:1525 netbox/dcim/forms/bulk_import.py:1758 -#: netbox/dcim/forms/bulk_import.py:1821 netbox/ipam/forms/bulk_import.py:49 +#: netbox/dcim/forms/bulk_import.py:129 netbox/dcim/forms/bulk_import.py:174 +#: netbox/dcim/forms/bulk_import.py:400 netbox/dcim/forms/bulk_import.py:600 +#: netbox/dcim/forms/bulk_import.py:1613 netbox/dcim/forms/bulk_import.py:1846 +#: netbox/dcim/forms/bulk_import.py:1909 netbox/ipam/forms/bulk_import.py:49 #: netbox/ipam/forms/bulk_import.py:78 netbox/ipam/forms/bulk_import.py:106 #: netbox/ipam/forms/bulk_import.py:126 netbox/ipam/forms/bulk_import.py:153 #: netbox/ipam/forms/bulk_import.py:181 netbox/ipam/forms/bulk_import.py:266 @@ -998,7 +998,7 @@ msgstr "Операційна роль" #: netbox/circuits/forms/bulk_import.py:258 #: netbox/circuits/forms/model_forms.py:402 #: netbox/circuits/tables/virtual_circuits.py:109 -#: netbox/circuits/ui/panels.py:179 netbox/dcim/forms/bulk_import.py:1358 +#: netbox/circuits/ui/panels.py:179 netbox/dcim/forms/bulk_import.py:1446 #: netbox/dcim/forms/model_forms.py:1372 netbox/dcim/forms/model_forms.py:1641 #: netbox/dcim/forms/model_forms.py:1822 netbox/dcim/forms/model_forms.py:1857 #: netbox/dcim/forms/model_forms.py:1982 netbox/dcim/tables/connections.py:66 @@ -1026,9 +1026,9 @@ msgstr "Інтерфейс" #: netbox/circuits/tables/circuits.py:140 netbox/dcim/forms/bulk_edit.py:348 #: netbox/dcim/forms/bulk_edit.py:462 netbox/dcim/forms/bulk_edit.py:701 #: netbox/dcim/forms/bulk_edit.py:750 netbox/dcim/forms/bulk_edit.py:915 -#: netbox/dcim/forms/bulk_import.py:261 netbox/dcim/forms/bulk_import.py:371 -#: netbox/dcim/forms/bulk_import.py:662 netbox/dcim/forms/bulk_import.py:1707 -#: netbox/dcim/forms/bulk_import.py:1741 netbox/dcim/forms/filtersets.py:116 +#: netbox/dcim/forms/bulk_import.py:262 netbox/dcim/forms/bulk_import.py:372 +#: netbox/dcim/forms/bulk_import.py:663 netbox/dcim/forms/bulk_import.py:1795 +#: netbox/dcim/forms/bulk_import.py:1829 netbox/dcim/forms/filtersets.py:116 #: netbox/dcim/forms/filtersets.py:369 netbox/dcim/forms/filtersets.py:404 #: netbox/dcim/forms/filtersets.py:455 netbox/dcim/forms/filtersets.py:508 #: netbox/dcim/forms/filtersets.py:860 netbox/dcim/forms/filtersets.py:904 @@ -1150,7 +1150,7 @@ msgstr "Контакти" #: netbox/circuits/forms/filtersets.py:239 #: netbox/circuits/tables/circuits.py:135 netbox/dcim/forms/bulk_edit.py:121 #: netbox/dcim/forms/bulk_edit.py:323 netbox/dcim/forms/bulk_edit.py:890 -#: netbox/dcim/forms/bulk_import.py:110 netbox/dcim/forms/filtersets.py:94 +#: netbox/dcim/forms/bulk_import.py:111 netbox/dcim/forms/filtersets.py:94 #: netbox/dcim/forms/filtersets.py:171 netbox/dcim/forms/filtersets.py:217 #: netbox/dcim/forms/filtersets.py:244 netbox/dcim/forms/filtersets.py:382 #: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:881 @@ -1214,7 +1214,7 @@ msgstr "Призначення" #: netbox/circuits/forms/filtersets.py:311 #: netbox/circuits/forms/model_forms.py:289 #: netbox/circuits/tables/circuits.py:187 netbox/dcim/forms/bulk_edit.py:126 -#: netbox/dcim/forms/bulk_edit.py:356 netbox/dcim/forms/bulk_import.py:117 +#: netbox/dcim/forms/bulk_edit.py:356 netbox/dcim/forms/bulk_import.py:118 #: netbox/dcim/forms/model_forms.py:137 netbox/dcim/tables/racks.py:139 #: netbox/dcim/tables/racks.py:232 netbox/dcim/tables/sites.py:69 #: netbox/extras/forms/filtersets.py:612 netbox/ipam/filtersets.py:1049 @@ -1710,13 +1710,13 @@ msgstr "Кінці" #: netbox/circuits/tables/virtual_circuits.py:106 #: netbox/dcim/forms/bulk_edit.py:749 netbox/dcim/forms/bulk_edit.py:1320 #: netbox/dcim/forms/bulk_edit.py:1732 netbox/dcim/forms/bulk_edit.py:1786 -#: netbox/dcim/forms/bulk_import.py:763 netbox/dcim/forms/bulk_import.py:824 -#: netbox/dcim/forms/bulk_import.py:850 netbox/dcim/forms/bulk_import.py:876 -#: netbox/dcim/forms/bulk_import.py:897 netbox/dcim/forms/bulk_import.py:953 -#: netbox/dcim/forms/bulk_import.py:1112 netbox/dcim/forms/bulk_import.py:1131 -#: netbox/dcim/forms/bulk_import.py:1150 netbox/dcim/forms/bulk_import.py:1168 -#: netbox/dcim/forms/bulk_import.py:1222 netbox/dcim/forms/bulk_import.py:1344 -#: netbox/dcim/forms/bulk_import.py:1811 netbox/dcim/forms/connections.py:34 +#: netbox/dcim/forms/bulk_import.py:764 netbox/dcim/forms/bulk_import.py:825 +#: netbox/dcim/forms/bulk_import.py:851 netbox/dcim/forms/bulk_import.py:877 +#: netbox/dcim/forms/bulk_import.py:898 netbox/dcim/forms/bulk_import.py:954 +#: netbox/dcim/forms/bulk_import.py:1113 netbox/dcim/forms/bulk_import.py:1219 +#: netbox/dcim/forms/bulk_import.py:1238 netbox/dcim/forms/bulk_import.py:1256 +#: netbox/dcim/forms/bulk_import.py:1310 netbox/dcim/forms/bulk_import.py:1432 +#: netbox/dcim/forms/bulk_import.py:1899 netbox/dcim/forms/connections.py:34 #: netbox/dcim/forms/filtersets.py:158 netbox/dcim/forms/filtersets.py:1061 #: netbox/dcim/forms/filtersets.py:1098 netbox/dcim/forms/filtersets.py:1265 #: netbox/dcim/forms/filtersets.py:1486 netbox/dcim/forms/filtersets.py:1509 @@ -1790,7 +1790,7 @@ msgid "Connection" msgstr "Підключення" #: netbox/circuits/ui/panels.py:99 netbox/dcim/forms/bulk_edit.py:1480 -#: netbox/dcim/forms/bulk_import.py:835 netbox/dcim/forms/bulk_import.py:861 +#: netbox/dcim/forms/bulk_import.py:836 netbox/dcim/forms/bulk_import.py:862 #: netbox/dcim/forms/filtersets.py:1497 netbox/dcim/forms/filtersets.py:1537 #: netbox/dcim/forms/filtersets.py:1675 netbox/dcim/tables/devices.py:662 #: netbox/dcim/ui/panels.py:488 @@ -1991,7 +1991,7 @@ msgstr "Інформація" msgid "Warning" msgstr "Попередження" -#: netbox/core/constants.py:33 netbox/netbox/tables/columns.py:597 +#: netbox/core/constants.py:33 netbox/netbox/tables/columns.py:625 msgid "Error" msgstr "Помилка" @@ -2970,7 +2970,7 @@ msgid "Position (U)" msgstr "Позиція (U)" #: netbox/dcim/api/serializers_/devices.py:193 -#: netbox/dcim/forms/bulk_import.py:786 netbox/dcim/forms/model_forms.py:819 +#: netbox/dcim/forms/bulk_import.py:787 netbox/dcim/forms/model_forms.py:819 msgid "Replicate components" msgstr "Повторювання компонентів" @@ -2983,12 +2983,12 @@ msgstr "" "замовчуванням: true)" #: netbox/dcim/api/serializers_/devices.py:200 -#: netbox/dcim/forms/bulk_import.py:791 netbox/dcim/forms/model_forms.py:825 +#: netbox/dcim/forms/bulk_import.py:792 netbox/dcim/forms/model_forms.py:825 msgid "Adopt components" msgstr "Прийняти компоненти" #: netbox/dcim/api/serializers_/devices.py:201 -#: netbox/dcim/forms/bulk_import.py:793 netbox/dcim/forms/model_forms.py:828 +#: netbox/dcim/forms/bulk_import.py:794 netbox/dcim/forms/model_forms.py:828 msgid "Adopt already existing components" msgstr "Прийняти вже існуючі компоненти" @@ -3126,11 +3126,11 @@ msgstr "Несвіжі" #: netbox/dcim/choices.py:170 netbox/dcim/forms/bulk_edit.py:87 #: netbox/dcim/forms/bulk_edit.py:101 netbox/dcim/forms/bulk_edit.py:181 #: netbox/dcim/forms/bulk_edit.py:623 netbox/dcim/forms/bulk_edit.py:651 -#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/bulk_import.py:77 -#: netbox/dcim/forms/bulk_import.py:91 netbox/dcim/forms/bulk_import.py:154 -#: netbox/dcim/forms/bulk_import.py:530 netbox/dcim/forms/bulk_import.py:556 -#: netbox/dcim/forms/bulk_import.py:682 netbox/dcim/forms/bulk_import.py:958 -#: netbox/dcim/forms/bulk_import.py:1239 netbox/dcim/forms/filtersets.py:267 +#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/bulk_import.py:78 +#: netbox/dcim/forms/bulk_import.py:92 netbox/dcim/forms/bulk_import.py:155 +#: netbox/dcim/forms/bulk_import.py:531 netbox/dcim/forms/bulk_import.py:557 +#: netbox/dcim/forms/bulk_import.py:683 netbox/dcim/forms/bulk_import.py:959 +#: netbox/dcim/forms/bulk_import.py:1327 netbox/dcim/forms/filtersets.py:267 #: netbox/dcim/forms/filtersets.py:820 netbox/dcim/forms/filtersets.py:836 #: netbox/dcim/forms/model_forms.py:95 netbox/dcim/forms/model_forms.py:113 #: netbox/dcim/forms/model_forms.py:216 netbox/dcim/forms/model_forms.py:559 @@ -3270,7 +3270,7 @@ msgid "Virtual interfaces" msgstr "Віртуальні інтерфейси" #: netbox/dcim/choices.py:1164 netbox/dcim/forms/bulk_edit.py:1455 -#: netbox/dcim/forms/bulk_import.py:965 netbox/dcim/forms/model_forms.py:1171 +#: netbox/dcim/forms/bulk_import.py:966 netbox/dcim/forms/model_forms.py:1171 #: netbox/dcim/tables/devices.py:761 #: netbox/virtualization/forms/bulk_edit.py:231 #: netbox/virtualization/forms/bulk_import.py:198 @@ -4044,7 +4044,7 @@ msgstr "Інтерфейс віртуальної машини (ідентифі msgid "Is assigned" msgstr "призначається" -#: netbox/dcim/filtersets.py:2080 netbox/dcim/forms/bulk_import.py:1365 +#: netbox/dcim/filtersets.py:2080 netbox/dcim/forms/bulk_import.py:1453 #: netbox/ipam/forms/bulk_import.py:344 msgid "Is primary" msgstr "Є первинним" @@ -4065,7 +4065,7 @@ msgid "Assigned VID" msgstr "Призначений VID" #: netbox/dcim/filtersets.py:2158 netbox/dcim/forms/bulk_edit.py:1568 -#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/forms/filtersets.py:1755 +#: netbox/dcim/forms/bulk_import.py:1051 netbox/dcim/forms/filtersets.py:1755 #: netbox/dcim/forms/model_forms.py:1619 #: netbox/dcim/models/device_components.py:958 #: netbox/dcim/tables/devices.py:678 netbox/dcim/ui/panels.py:521 @@ -4291,7 +4291,7 @@ msgstr "Контактний телефон" msgid "Contact E-mail" msgstr "Контактна адреса електронної пошти" -#: netbox/dcim/forms/bulk_edit.py:160 netbox/dcim/forms/bulk_import.py:140 +#: netbox/dcim/forms/bulk_edit.py:160 netbox/dcim/forms/bulk_import.py:141 #: netbox/dcim/forms/model_forms.py:159 msgid "Time zone" msgstr "Часовий пояс" @@ -4300,9 +4300,9 @@ msgstr "Часовий пояс" #: netbox/dcim/forms/bulk_edit.py:584 netbox/dcim/forms/bulk_edit.py:656 #: netbox/dcim/forms/bulk_edit.py:675 netbox/dcim/forms/bulk_edit.py:762 #: netbox/dcim/forms/bulk_edit.py:1306 netbox/dcim/forms/bulk_edit.py:1742 -#: netbox/dcim/forms/bulk_import.py:208 netbox/dcim/forms/bulk_import.py:432 -#: netbox/dcim/forms/bulk_import.py:482 netbox/dcim/forms/bulk_import.py:566 -#: netbox/dcim/forms/bulk_import.py:602 netbox/dcim/forms/bulk_import.py:1233 +#: netbox/dcim/forms/bulk_import.py:209 netbox/dcim/forms/bulk_import.py:433 +#: netbox/dcim/forms/bulk_import.py:483 netbox/dcim/forms/bulk_import.py:567 +#: netbox/dcim/forms/bulk_import.py:603 netbox/dcim/forms/bulk_import.py:1321 #: netbox/dcim/forms/filtersets.py:355 netbox/dcim/forms/filtersets.py:426 #: netbox/dcim/forms/filtersets.py:578 netbox/dcim/forms/filtersets.py:728 #: netbox/dcim/forms/filtersets.py:841 netbox/dcim/forms/filtersets.py:924 @@ -4321,21 +4321,21 @@ msgid "Manufacturer" msgstr "Виробник" #: netbox/dcim/forms/bulk_edit.py:240 netbox/dcim/forms/bulk_edit.py:392 -#: netbox/dcim/forms/bulk_import.py:217 netbox/dcim/forms/bulk_import.py:303 +#: netbox/dcim/forms/bulk_import.py:218 netbox/dcim/forms/bulk_import.py:304 #: netbox/dcim/forms/filtersets.py:301 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "Форм-фактор" #: netbox/dcim/forms/bulk_edit.py:245 netbox/dcim/forms/bulk_edit.py:397 -#: netbox/dcim/forms/bulk_import.py:225 netbox/dcim/forms/bulk_import.py:306 +#: netbox/dcim/forms/bulk_import.py:226 netbox/dcim/forms/bulk_import.py:307 #: netbox/dcim/forms/filtersets.py:306 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "Ширина" #: netbox/dcim/forms/bulk_edit.py:251 netbox/dcim/forms/bulk_edit.py:403 -#: netbox/dcim/forms/bulk_import.py:313 +#: netbox/dcim/forms/bulk_import.py:314 msgid "Height (U)" msgstr "Висота (U)" @@ -4357,7 +4357,7 @@ msgid "Outer depth" msgstr "Зовнішня глибина" #: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:426 -#: netbox/dcim/forms/bulk_import.py:230 netbox/dcim/forms/bulk_import.py:316 +#: netbox/dcim/forms/bulk_import.py:231 netbox/dcim/forms/bulk_import.py:317 msgid "Outer unit" msgstr "Зовнішній блок" @@ -4369,7 +4369,7 @@ msgstr "Глибина монтажу" #: netbox/dcim/forms/bulk_edit.py:441 netbox/dcim/forms/bulk_edit.py:465 #: netbox/dcim/forms/bulk_edit.py:542 netbox/dcim/forms/bulk_edit.py:559 #: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/bulk_edit.py:614 -#: netbox/dcim/forms/bulk_import.py:445 netbox/dcim/forms/bulk_import.py:493 +#: netbox/dcim/forms/bulk_import.py:446 netbox/dcim/forms/bulk_import.py:494 #: netbox/dcim/forms/filtersets.py:326 netbox/dcim/forms/filtersets.py:348 #: netbox/dcim/forms/filtersets.py:373 netbox/dcim/forms/filtersets.py:458 #: netbox/dcim/forms/filtersets.py:571 netbox/dcim/forms/filtersets.py:683 @@ -4394,8 +4394,8 @@ msgstr "Максимальна вага" #: netbox/dcim/forms/bulk_edit.py:298 netbox/dcim/forms/bulk_edit.py:451 #: netbox/dcim/forms/bulk_edit.py:547 netbox/dcim/forms/bulk_edit.py:603 -#: netbox/dcim/forms/bulk_import.py:236 netbox/dcim/forms/bulk_import.py:328 -#: netbox/dcim/forms/bulk_import.py:450 netbox/dcim/forms/bulk_import.py:498 +#: netbox/dcim/forms/bulk_import.py:237 netbox/dcim/forms/bulk_import.py:329 +#: netbox/dcim/forms/bulk_import.py:451 netbox/dcim/forms/bulk_import.py:499 #: netbox/dcim/forms/filtersets.py:336 netbox/dcim/forms/filtersets.py:687 #: netbox/dcim/forms/filtersets.py:799 msgid "Weight unit" @@ -4427,7 +4427,7 @@ msgstr "Габарити" msgid "Numbering" msgstr "Нумерація" -#: netbox/dcim/forms/bulk_edit.py:377 netbox/dcim/forms/bulk_import.py:293 +#: netbox/dcim/forms/bulk_edit.py:377 netbox/dcim/forms/bulk_import.py:294 #: netbox/dcim/forms/filtersets.py:434 msgid "Rack type" msgstr "Тип стійки" @@ -4445,17 +4445,17 @@ msgstr "Призначеня міток" #: netbox/dcim/forms/bulk_edit.py:436 netbox/dcim/forms/bulk_edit.py:537 #: netbox/dcim/forms/bulk_edit.py:593 netbox/dcim/forms/bulk_edit.py:724 -#: netbox/dcim/forms/bulk_import.py:322 netbox/dcim/forms/bulk_import.py:487 -#: netbox/dcim/forms/bulk_import.py:696 netbox/dcim/forms/filtersets.py:437 +#: netbox/dcim/forms/bulk_import.py:323 netbox/dcim/forms/bulk_import.py:488 +#: netbox/dcim/forms/bulk_import.py:697 netbox/dcim/forms/filtersets.py:437 #: netbox/dcim/forms/filtersets.py:600 netbox/dcim/forms/filtersets.py:790 #: netbox/dcim/forms/filtersets.py:946 msgid "Airflow" msgstr "Потік повітря" #: netbox/dcim/forms/bulk_edit.py:460 netbox/dcim/forms/bulk_edit.py:937 -#: netbox/dcim/forms/bulk_import.py:378 netbox/dcim/forms/bulk_import.py:381 -#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/bulk_import.py:1748 -#: netbox/dcim/forms/bulk_import.py:1752 netbox/dcim/forms/filtersets.py:125 +#: netbox/dcim/forms/bulk_import.py:379 netbox/dcim/forms/bulk_import.py:382 +#: netbox/dcim/forms/bulk_import.py:670 netbox/dcim/forms/bulk_import.py:1836 +#: netbox/dcim/forms/bulk_import.py:1840 netbox/dcim/forms/filtersets.py:125 #: netbox/dcim/forms/filtersets.py:370 netbox/dcim/forms/filtersets.py:465 #: netbox/dcim/forms/filtersets.py:479 netbox/dcim/forms/filtersets.py:525 #: netbox/dcim/forms/filtersets.py:914 netbox/dcim/forms/filtersets.py:1130 @@ -4481,7 +4481,7 @@ msgstr "Стійка" msgid "Hardware" msgstr "Апаратне забезпечення" -#: netbox/dcim/forms/bulk_edit.py:513 netbox/dcim/forms/bulk_import.py:438 +#: netbox/dcim/forms/bulk_edit.py:513 netbox/dcim/forms/bulk_import.py:439 #: netbox/dcim/forms/filtersets.py:583 netbox/dcim/forms/model_forms.py:416 #: netbox/virtualization/forms/bulk_edit.py:85 #: netbox/virtualization/forms/bulk_import.py:89 @@ -4520,8 +4520,8 @@ msgid "Schema" msgstr "схема" #: netbox/dcim/forms/bulk_edit.py:572 netbox/dcim/forms/bulk_edit.py:579 -#: netbox/dcim/forms/bulk_edit.py:828 netbox/dcim/forms/bulk_import.py:476 -#: netbox/dcim/forms/bulk_import.py:1509 netbox/dcim/forms/filtersets.py:723 +#: netbox/dcim/forms/bulk_edit.py:828 netbox/dcim/forms/bulk_import.py:477 +#: netbox/dcim/forms/bulk_import.py:1597 netbox/dcim/forms/filtersets.py:723 #: netbox/dcim/forms/filtersets.py:1146 netbox/dcim/forms/filtersets.py:1278 #: netbox/dcim/forms/model_forms.py:463 netbox/dcim/forms/model_forms.py:476 #: netbox/dcim/tables/modules.py:43 netbox/dcim/tables/modules.py:97 @@ -4554,10 +4554,10 @@ msgid "VM role" msgstr "Роль віртуальної машини" #: netbox/dcim/forms/bulk_edit.py:637 netbox/dcim/forms/bulk_edit.py:661 -#: netbox/dcim/forms/bulk_edit.py:734 netbox/dcim/forms/bulk_import.py:540 -#: netbox/dcim/forms/bulk_import.py:544 netbox/dcim/forms/bulk_import.py:573 -#: netbox/dcim/forms/bulk_import.py:577 netbox/dcim/forms/bulk_import.py:702 -#: netbox/dcim/forms/bulk_import.py:706 netbox/dcim/forms/filtersets.py:815 +#: netbox/dcim/forms/bulk_edit.py:734 netbox/dcim/forms/bulk_import.py:541 +#: netbox/dcim/forms/bulk_import.py:545 netbox/dcim/forms/bulk_import.py:574 +#: netbox/dcim/forms/bulk_import.py:578 netbox/dcim/forms/bulk_import.py:703 +#: netbox/dcim/forms/bulk_import.py:707 netbox/dcim/forms/filtersets.py:815 #: netbox/dcim/forms/filtersets.py:846 netbox/dcim/forms/filtersets.py:965 #: netbox/dcim/forms/model_forms.py:554 netbox/dcim/forms/model_forms.py:591 #: netbox/dcim/forms/model_forms.py:716 @@ -4569,19 +4569,19 @@ msgid "Config template" msgstr "Шаблон конфігурації" #: netbox/dcim/forms/bulk_edit.py:680 netbox/dcim/forms/bulk_edit.py:1086 -#: netbox/dcim/forms/bulk_import.py:608 netbox/dcim/forms/filtersets.py:135 +#: netbox/dcim/forms/bulk_import.py:609 netbox/dcim/forms/filtersets.py:135 #: netbox/dcim/forms/filtersets.py:1438 netbox/dcim/forms/model_forms.py:661 #: netbox/dcim/forms/model_forms.py:1048 netbox/dcim/forms/model_forms.py:1065 #: netbox/extras/filtersets.py:756 msgid "Device type" msgstr "Тип пристрою" -#: netbox/dcim/forms/bulk_edit.py:691 netbox/dcim/forms/bulk_import.py:589 +#: netbox/dcim/forms/bulk_edit.py:691 netbox/dcim/forms/bulk_import.py:590 #: netbox/dcim/forms/filtersets.py:140 netbox/dcim/forms/model_forms.py:669 msgid "Device role" msgstr "Роль пристрою" -#: netbox/dcim/forms/bulk_edit.py:714 netbox/dcim/forms/bulk_import.py:614 +#: netbox/dcim/forms/bulk_edit.py:714 netbox/dcim/forms/bulk_import.py:615 #: netbox/dcim/forms/filtersets.py:829 netbox/dcim/forms/filtersets.py:938 #: netbox/dcim/forms/model_forms.py:602 netbox/dcim/forms/model_forms.py:674 #: netbox/dcim/tables/devices.py:191 netbox/extras/filtersets.py:772 @@ -4593,7 +4593,7 @@ msgstr "Роль пристрою" msgid "Platform" msgstr "Платформа" -#: netbox/dcim/forms/bulk_edit.py:739 netbox/dcim/forms/bulk_import.py:633 +#: netbox/dcim/forms/bulk_edit.py:739 netbox/dcim/forms/bulk_import.py:634 #: netbox/dcim/forms/filtersets.py:870 netbox/dcim/forms/filtersets.py:1040 #: netbox/dcim/forms/model_forms.py:683 netbox/dcim/tables/devices.py:211 #: netbox/extras/filtersets.py:805 netbox/extras/forms/filtersets.py:411 @@ -4622,12 +4622,12 @@ msgstr "Конфігурація" msgid "Virtualization" msgstr "Віртуалізація" -#: netbox/dcim/forms/bulk_edit.py:767 netbox/dcim/forms/bulk_import.py:775 +#: netbox/dcim/forms/bulk_edit.py:767 netbox/dcim/forms/bulk_import.py:776 #: netbox/dcim/forms/model_forms.py:811 netbox/dcim/forms/model_forms.py:1073 msgid "Module type" msgstr "Тип модуля" -#: netbox/dcim/forms/bulk_edit.py:839 netbox/dcim/forms/bulk_import.py:1528 +#: netbox/dcim/forms/bulk_edit.py:839 netbox/dcim/forms/bulk_import.py:1616 #: netbox/dcim/forms/filtersets.py:1305 netbox/dcim/forms/model_forms.py:888 #: netbox/dcim/tables/cables.py:124 msgid "Bundle" @@ -4651,8 +4651,8 @@ msgstr "Етикетка" msgid "Length" msgstr "Довжина" -#: netbox/dcim/forms/bulk_edit.py:858 netbox/dcim/forms/bulk_import.py:1535 -#: netbox/dcim/forms/bulk_import.py:1538 netbox/dcim/forms/filtersets.py:1291 +#: netbox/dcim/forms/bulk_edit.py:858 netbox/dcim/forms/bulk_import.py:1623 +#: netbox/dcim/forms/bulk_import.py:1626 netbox/dcim/forms/filtersets.py:1291 msgid "Length unit" msgstr "Довжина юніта" @@ -4660,17 +4660,17 @@ msgstr "Довжина юніта" msgid "Domain" msgstr "Домен" -#: netbox/dcim/forms/bulk_edit.py:932 netbox/dcim/forms/bulk_import.py:1735 +#: netbox/dcim/forms/bulk_edit.py:932 netbox/dcim/forms/bulk_import.py:1823 #: netbox/dcim/forms/filtersets.py:1384 netbox/dcim/forms/model_forms.py:927 msgid "Power panel" msgstr "Панель живлення" -#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/bulk_import.py:1771 +#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/bulk_import.py:1859 #: netbox/dcim/forms/filtersets.py:1406 msgid "Supply" msgstr "Постачання" -#: netbox/dcim/forms/bulk_edit.py:960 netbox/dcim/forms/bulk_import.py:1776 +#: netbox/dcim/forms/bulk_edit.py:960 netbox/dcim/forms/bulk_import.py:1864 #: netbox/dcim/forms/filtersets.py:1411 msgid "Phase" msgstr "Фаза" @@ -4707,13 +4707,13 @@ msgstr "Виділена потужність" msgid "Allocated power draw (watts)" msgstr "Виділена споживана потужність (Вт)" -#: netbox/dcim/forms/bulk_edit.py:1107 netbox/dcim/forms/bulk_import.py:908 +#: netbox/dcim/forms/bulk_edit.py:1107 netbox/dcim/forms/bulk_import.py:909 #: netbox/dcim/forms/model_forms.py:1144 netbox/dcim/forms/model_forms.py:1509 #: netbox/dcim/forms/model_forms.py:1838 netbox/dcim/forms/object_import.py:56 msgid "Power port" msgstr "Порт живлення" -#: netbox/dcim/forms/bulk_edit.py:1112 netbox/dcim/forms/bulk_import.py:915 +#: netbox/dcim/forms/bulk_edit.py:1112 netbox/dcim/forms/bulk_import.py:916 msgid "Feed leg" msgstr "Фідер живлення" @@ -4723,7 +4723,7 @@ msgid "Management only" msgstr "Тільки управління" #: netbox/dcim/forms/bulk_edit.py:1168 netbox/dcim/forms/bulk_edit.py:1495 -#: netbox/dcim/forms/bulk_import.py:1001 netbox/dcim/forms/filtersets.py:1711 +#: netbox/dcim/forms/bulk_import.py:1002 netbox/dcim/forms/filtersets.py:1711 #: netbox/dcim/forms/filtersets.py:1796 netbox/dcim/forms/object_import.py:91 #: netbox/dcim/models/device_component_templates.py:473 #: netbox/dcim/models/device_components.py:930 netbox/dcim/ui/panels.py:494 @@ -4731,7 +4731,7 @@ msgid "PoE mode" msgstr "Режим PoE" #: netbox/dcim/forms/bulk_edit.py:1174 netbox/dcim/forms/bulk_edit.py:1501 -#: netbox/dcim/forms/bulk_import.py:1007 netbox/dcim/forms/filtersets.py:1716 +#: netbox/dcim/forms/bulk_import.py:1008 netbox/dcim/forms/filtersets.py:1716 #: netbox/dcim/forms/filtersets.py:1801 netbox/dcim/forms/object_import.py:96 #: netbox/dcim/models/device_component_templates.py:480 #: netbox/dcim/models/device_components.py:937 netbox/dcim/ui/panels.py:495 @@ -4757,7 +4757,7 @@ msgstr "LAG" msgid "Virtual device contexts" msgstr "Контексти віртуальних пристроїв" -#: netbox/dcim/forms/bulk_edit.py:1509 netbox/dcim/forms/bulk_import.py:1010 +#: netbox/dcim/forms/bulk_edit.py:1509 netbox/dcim/forms/bulk_import.py:1011 #: netbox/virtualization/forms/bulk_edit.py:252 #: netbox/virtualization/forms/bulk_import.py:205 #: netbox/vpn/forms/bulk_edit.py:128 netbox/vpn/forms/bulk_edit.py:196 @@ -4768,7 +4768,7 @@ msgstr "Контексти віртуальних пристроїв" msgid "Mode" msgstr "Режим" -#: netbox/dcim/forms/bulk_edit.py:1517 netbox/dcim/forms/bulk_import.py:1016 +#: netbox/dcim/forms/bulk_edit.py:1517 netbox/dcim/forms/bulk_import.py:1017 #: netbox/dcim/forms/model_forms.py:1585 netbox/ipam/forms/bulk_import.py:184 #: netbox/ipam/forms/filtersets.py:603 netbox/ipam/models/vlans.py:99 #: netbox/virtualization/forms/bulk_edit.py:259 @@ -4777,7 +4777,7 @@ msgstr "Режим" msgid "VLAN group" msgstr "Група VLAN" -#: netbox/dcim/forms/bulk_edit.py:1526 netbox/dcim/forms/bulk_import.py:1023 +#: netbox/dcim/forms/bulk_edit.py:1526 netbox/dcim/forms/bulk_import.py:1024 #: netbox/dcim/forms/model_forms.py:1591 netbox/dcim/tables/devices.py:627 #: netbox/dcim/ui/panels.py:498 netbox/virtualization/forms/bulk_edit.py:267 #: netbox/virtualization/forms/bulk_import.py:218 @@ -4785,7 +4785,7 @@ msgstr "Група VLAN" msgid "Untagged VLAN" msgstr "VLAN без міток" -#: netbox/dcim/forms/bulk_edit.py:1535 netbox/dcim/forms/bulk_import.py:1030 +#: netbox/dcim/forms/bulk_edit.py:1535 netbox/dcim/forms/bulk_import.py:1031 #: netbox/dcim/forms/model_forms.py:1600 netbox/dcim/tables/devices.py:633 #: netbox/virtualization/forms/bulk_edit.py:275 #: netbox/virtualization/forms/bulk_import.py:225 @@ -4801,7 +4801,7 @@ msgstr "Додати VLAN'и з мітками" msgid "Remove tagged VLANs" msgstr "Видалити мітки з VLAN'ів" -#: netbox/dcim/forms/bulk_edit.py:1558 netbox/dcim/forms/bulk_import.py:1043 +#: netbox/dcim/forms/bulk_edit.py:1558 netbox/dcim/forms/bulk_import.py:1044 #: netbox/dcim/forms/model_forms.py:1609 #: netbox/virtualization/forms/bulk_import.py:238 #: netbox/virtualization/forms/model_forms.py:439 @@ -4869,240 +4869,240 @@ msgstr "Для призначення VLAN'ів необхідно вказат msgid "An access interface cannot have tagged VLANs assigned." msgstr "Інтерфейс доступу не може призначити VLAN'и з мітками." -#: netbox/dcim/forms/bulk_import.py:81 +#: netbox/dcim/forms/bulk_import.py:82 msgid "Name of parent region" msgstr "Назва батьківського регіону" -#: netbox/dcim/forms/bulk_import.py:95 +#: netbox/dcim/forms/bulk_import.py:96 msgid "Name of parent site group" msgstr "Назва батьківської групи тех. майданчиків" -#: netbox/dcim/forms/bulk_import.py:114 +#: netbox/dcim/forms/bulk_import.py:115 msgid "Assigned region" msgstr "Призначений регіон" -#: netbox/dcim/forms/bulk_import.py:121 netbox/tenancy/forms/bulk_import.py:50 +#: netbox/dcim/forms/bulk_import.py:122 netbox/tenancy/forms/bulk_import.py:50 #: netbox/wireless/forms/bulk_import.py:41 msgid "Assigned group" msgstr "Призначена група" -#: netbox/dcim/forms/bulk_import.py:140 +#: netbox/dcim/forms/bulk_import.py:141 msgid "available options" msgstr "доступні опції" -#: netbox/dcim/forms/bulk_import.py:151 netbox/dcim/forms/bulk_import.py:659 -#: netbox/dcim/forms/bulk_import.py:1732 netbox/ipam/forms/bulk_import.py:519 +#: netbox/dcim/forms/bulk_import.py:152 netbox/dcim/forms/bulk_import.py:660 +#: netbox/dcim/forms/bulk_import.py:1820 netbox/ipam/forms/bulk_import.py:519 #: netbox/virtualization/forms/bulk_import.py:66 msgid "Assigned site" msgstr "Призначений тех. майданчик" -#: netbox/dcim/forms/bulk_import.py:158 +#: netbox/dcim/forms/bulk_import.py:159 msgid "Parent location" msgstr "Місцезнаходження прабатька" -#: netbox/dcim/forms/bulk_import.py:160 +#: netbox/dcim/forms/bulk_import.py:161 msgid "Location not found." msgstr "Місцезнаходження не знайдено." -#: netbox/dcim/forms/bulk_import.py:211 +#: netbox/dcim/forms/bulk_import.py:212 msgid "The manufacturer of this rack type" msgstr "Виробник даного стелажного типу" -#: netbox/dcim/forms/bulk_import.py:222 +#: netbox/dcim/forms/bulk_import.py:223 msgid "The lowest-numbered position in the rack" msgstr "Позиція з найменшою нумерованістю в стійці" -#: netbox/dcim/forms/bulk_import.py:227 netbox/dcim/forms/bulk_import.py:309 +#: netbox/dcim/forms/bulk_import.py:228 netbox/dcim/forms/bulk_import.py:310 msgid "Rail-to-rail width (in inches)" msgstr "Ширина рейки до рейки (у дюймах)" -#: netbox/dcim/forms/bulk_import.py:233 netbox/dcim/forms/bulk_import.py:319 +#: netbox/dcim/forms/bulk_import.py:234 netbox/dcim/forms/bulk_import.py:320 msgid "Unit for outer dimensions" msgstr "Блок для зовнішніх розмірів" -#: netbox/dcim/forms/bulk_import.py:239 netbox/dcim/forms/bulk_import.py:331 +#: netbox/dcim/forms/bulk_import.py:240 netbox/dcim/forms/bulk_import.py:332 msgid "Unit for rack weights" msgstr "Блок для стелажних ваг" -#: netbox/dcim/forms/bulk_import.py:271 +#: netbox/dcim/forms/bulk_import.py:272 msgid "Name of assigned tenant" msgstr "ПІБ призначеного орендаря" -#: netbox/dcim/forms/bulk_import.py:274 netbox/dcim/forms/filtersets.py:410 +#: netbox/dcim/forms/bulk_import.py:275 netbox/dcim/forms/filtersets.py:410 #: netbox/dcim/forms/filtersets.py:515 netbox/dcim/ui/panels.py:47 #: netbox/ipam/forms/filtersets.py:497 msgid "Rack group" msgstr "Стійкова група" -#: netbox/dcim/forms/bulk_import.py:278 +#: netbox/dcim/forms/bulk_import.py:279 msgid "Name of assigned group" msgstr "Назва присвоєної групи" -#: netbox/dcim/forms/bulk_import.py:290 +#: netbox/dcim/forms/bulk_import.py:291 msgid "Name of assigned role" msgstr "Назва призначеної ролі" -#: netbox/dcim/forms/bulk_import.py:297 +#: netbox/dcim/forms/bulk_import.py:298 msgid "Rack type model" msgstr "Модель типу стійки" -#: netbox/dcim/forms/bulk_import.py:325 netbox/dcim/forms/bulk_import.py:490 -#: netbox/dcim/forms/bulk_import.py:699 +#: netbox/dcim/forms/bulk_import.py:326 netbox/dcim/forms/bulk_import.py:491 +#: netbox/dcim/forms/bulk_import.py:700 msgid "Airflow direction" msgstr "Напрямок повітряного потоку" -#: netbox/dcim/forms/bulk_import.py:358 +#: netbox/dcim/forms/bulk_import.py:359 msgid "Width must be set if not specifying a rack type." msgstr "Ширина повинна бути встановлена, якщо не вказано тип стійки." -#: netbox/dcim/forms/bulk_import.py:360 +#: netbox/dcim/forms/bulk_import.py:361 msgid "U height must be set if not specifying a rack type." msgstr "Висота U повинна бути встановлена, якщо не вказано тип стійки." -#: netbox/dcim/forms/bulk_import.py:368 +#: netbox/dcim/forms/bulk_import.py:369 msgid "Parent site" msgstr "Батьківський тех. майданчик" -#: netbox/dcim/forms/bulk_import.py:375 netbox/dcim/forms/bulk_import.py:1745 +#: netbox/dcim/forms/bulk_import.py:376 netbox/dcim/forms/bulk_import.py:1833 msgid "Rack's location (if any)" msgstr "Розташування стійки (якщо є)" -#: netbox/dcim/forms/bulk_import.py:384 netbox/dcim/forms/model_forms.py:376 +#: netbox/dcim/forms/bulk_import.py:385 netbox/dcim/forms/model_forms.py:376 #: netbox/dcim/tables/racks.py:242 #: netbox/templates/dcim/rackreservation.html:7 msgid "Units" msgstr "Юніти" -#: netbox/dcim/forms/bulk_import.py:387 +#: netbox/dcim/forms/bulk_import.py:388 msgid "Comma-separated list of individual unit numbers" msgstr "Список окремих номерів юнітів, розділених комами" -#: netbox/dcim/forms/bulk_import.py:435 +#: netbox/dcim/forms/bulk_import.py:436 msgid "The manufacturer which produces this device type" msgstr "Виробник, який випускає цей тип пристрою" -#: netbox/dcim/forms/bulk_import.py:442 +#: netbox/dcim/forms/bulk_import.py:443 msgid "The default platform for devices of this type (optional)" msgstr "Платформа за замовчуванням для пристроїв такого типу (опціонально)" -#: netbox/dcim/forms/bulk_import.py:447 +#: netbox/dcim/forms/bulk_import.py:448 msgid "Device weight" msgstr "Вага пристрою" -#: netbox/dcim/forms/bulk_import.py:453 +#: netbox/dcim/forms/bulk_import.py:454 msgid "Unit for device weight" msgstr "Вага пристрою на 1 юніт" -#: netbox/dcim/forms/bulk_import.py:495 +#: netbox/dcim/forms/bulk_import.py:496 msgid "Module weight" msgstr "Вага модуля" -#: netbox/dcim/forms/bulk_import.py:501 +#: netbox/dcim/forms/bulk_import.py:502 msgid "Unit for module weight" msgstr "Вага модуля на 1 юніт" -#: netbox/dcim/forms/bulk_import.py:506 +#: netbox/dcim/forms/bulk_import.py:507 msgid "Attribute values for the assigned profile, passed as a dictionary" msgstr "Значення атрибутів для призначеного профілю, передані як словник" -#: netbox/dcim/forms/bulk_import.py:521 +#: netbox/dcim/forms/bulk_import.py:522 msgid "Profile must be specified if attribute data is provided." msgstr "Профіль повинен бути вказаний, якщо надаються дані атрибутів." -#: netbox/dcim/forms/bulk_import.py:534 +#: netbox/dcim/forms/bulk_import.py:535 msgid "Parent Device Role" msgstr "Роль батьківського пристрою" -#: netbox/dcim/forms/bulk_import.py:536 +#: netbox/dcim/forms/bulk_import.py:537 msgid "Device role not found." msgstr "Роль пристрою не знайдена." -#: netbox/dcim/forms/bulk_import.py:560 +#: netbox/dcim/forms/bulk_import.py:561 msgid "Parent platform" msgstr "Батьківська платформа" -#: netbox/dcim/forms/bulk_import.py:562 +#: netbox/dcim/forms/bulk_import.py:563 msgid "Platform not found." msgstr "Платформа не знайдена." -#: netbox/dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:571 msgid "Limit platform assignments to this manufacturer" msgstr "Обмежте призначення платформи цьому виробнику" -#: netbox/dcim/forms/bulk_import.py:592 netbox/dcim/forms/bulk_import.py:1814 +#: netbox/dcim/forms/bulk_import.py:593 netbox/dcim/forms/bulk_import.py:1902 #: netbox/tenancy/forms/bulk_import.py:116 msgid "Assigned role" msgstr "Призначена роль" -#: netbox/dcim/forms/bulk_import.py:605 +#: netbox/dcim/forms/bulk_import.py:606 msgid "Device type manufacturer" msgstr "Тип пристрою виробник" -#: netbox/dcim/forms/bulk_import.py:611 +#: netbox/dcim/forms/bulk_import.py:612 msgid "Device type model" msgstr "Модель типу пристрою" -#: netbox/dcim/forms/bulk_import.py:618 +#: netbox/dcim/forms/bulk_import.py:619 #: netbox/virtualization/forms/bulk_import.py:165 msgid "Assigned platform" msgstr "Призначена платформа" -#: netbox/dcim/forms/bulk_import.py:626 netbox/dcim/forms/bulk_import.py:630 +#: netbox/dcim/forms/bulk_import.py:627 netbox/dcim/forms/bulk_import.py:631 #: netbox/dcim/forms/model_forms.py:697 msgid "Virtual chassis" msgstr "Віртуальне шасі" -#: netbox/dcim/forms/bulk_import.py:637 +#: netbox/dcim/forms/bulk_import.py:638 msgid "Virtualization cluster" msgstr "Кластер віртуалізації" -#: netbox/dcim/forms/bulk_import.py:666 +#: netbox/dcim/forms/bulk_import.py:667 msgid "Assigned location (if any)" msgstr "Призначене місце розташування (якщо є)" -#: netbox/dcim/forms/bulk_import.py:673 +#: netbox/dcim/forms/bulk_import.py:674 msgid "Assigned rack (if any)" msgstr "Призначена стійка (якщо така є)" -#: netbox/dcim/forms/bulk_import.py:676 netbox/dcim/forms/model_forms.py:653 +#: netbox/dcim/forms/bulk_import.py:677 netbox/dcim/forms/model_forms.py:653 msgid "Face" msgstr "Лицева сторона" -#: netbox/dcim/forms/bulk_import.py:679 +#: netbox/dcim/forms/bulk_import.py:680 msgid "Mounted rack face" msgstr "Змонтована лицева сторона стійки" -#: netbox/dcim/forms/bulk_import.py:686 +#: netbox/dcim/forms/bulk_import.py:687 msgid "Parent device (for child devices)" msgstr "Батьківський пристрій (для підпорядкованих пристроїв)" -#: netbox/dcim/forms/bulk_import.py:689 +#: netbox/dcim/forms/bulk_import.py:690 msgid "Device bay" msgstr "Відсік для пристроїв" -#: netbox/dcim/forms/bulk_import.py:693 +#: netbox/dcim/forms/bulk_import.py:694 msgid "Device bay in which this device is installed (for child devices)" msgstr "" "Відсік для пристрою, в якому встановлено цей пристрій (для підпорядкованих " "пристроїв)" -#: netbox/dcim/forms/bulk_import.py:766 +#: netbox/dcim/forms/bulk_import.py:767 msgid "The device in which this module is installed" msgstr "Пристрій, в якому встановлений даний модуль" -#: netbox/dcim/forms/bulk_import.py:769 netbox/dcim/forms/model_forms.py:801 +#: netbox/dcim/forms/bulk_import.py:770 netbox/dcim/forms/model_forms.py:801 msgid "Module bay" msgstr "Відсік для модулів" -#: netbox/dcim/forms/bulk_import.py:772 +#: netbox/dcim/forms/bulk_import.py:773 msgid "The module bay in which this module is installed" msgstr "Відсік для модуля, в якому встановлений цей модуль" -#: netbox/dcim/forms/bulk_import.py:778 +#: netbox/dcim/forms/bulk_import.py:779 msgid "The type of module" msgstr "Тип модуля" -#: netbox/dcim/forms/bulk_import.py:788 +#: netbox/dcim/forms/bulk_import.py:789 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" @@ -5110,90 +5110,90 @@ msgstr "" "Автоматично заповнювати компоненти, пов'язані з цим типом модуля (увімкнено " "за замовчуванням)" -#: netbox/dcim/forms/bulk_import.py:832 netbox/dcim/forms/bulk_import.py:858 -#: netbox/dcim/forms/bulk_import.py:884 +#: netbox/dcim/forms/bulk_import.py:833 netbox/dcim/forms/bulk_import.py:859 +#: netbox/dcim/forms/bulk_import.py:885 msgid "Port type" msgstr "Тип порту" -#: netbox/dcim/forms/bulk_import.py:840 netbox/dcim/forms/bulk_import.py:866 +#: netbox/dcim/forms/bulk_import.py:841 netbox/dcim/forms/bulk_import.py:867 msgid "Port speed in bps" msgstr "Швидкість порту в біт/с" -#: netbox/dcim/forms/bulk_import.py:905 +#: netbox/dcim/forms/bulk_import.py:906 msgid "Outlet type" msgstr "Тип розетки (живлення)" -#: netbox/dcim/forms/bulk_import.py:912 +#: netbox/dcim/forms/bulk_import.py:913 msgid "Local power port which feeds this outlet" msgstr "Локальний порт живлення, який живить цю розетку" -#: netbox/dcim/forms/bulk_import.py:918 +#: netbox/dcim/forms/bulk_import.py:919 msgid "Electrical phase (for three-phase circuits)" msgstr "Електрична фаза (для трифазних ланцюгів)" -#: netbox/dcim/forms/bulk_import.py:962 netbox/dcim/forms/model_forms.py:1547 +#: netbox/dcim/forms/bulk_import.py:963 netbox/dcim/forms/model_forms.py:1547 #: netbox/virtualization/forms/bulk_import.py:195 #: netbox/virtualization/forms/model_forms.py:400 msgid "Parent interface" msgstr "Батьківський інтерфейс" -#: netbox/dcim/forms/bulk_import.py:969 netbox/dcim/forms/model_forms.py:1555 +#: netbox/dcim/forms/bulk_import.py:970 netbox/dcim/forms/model_forms.py:1555 #: netbox/virtualization/forms/bulk_import.py:202 #: netbox/virtualization/forms/model_forms.py:408 msgid "Bridged interface" msgstr "Інтерфейс типу мост" -#: netbox/dcim/forms/bulk_import.py:972 +#: netbox/dcim/forms/bulk_import.py:973 msgid "Lag" msgstr "LAG" -#: netbox/dcim/forms/bulk_import.py:976 +#: netbox/dcim/forms/bulk_import.py:977 msgid "Parent LAG interface" msgstr "Батьківський інтерфейс LAG" -#: netbox/dcim/forms/bulk_import.py:979 +#: netbox/dcim/forms/bulk_import.py:980 msgid "Vdcs" msgstr "Джерела живлення постійного струму" -#: netbox/dcim/forms/bulk_import.py:984 +#: netbox/dcim/forms/bulk_import.py:985 msgid "VDC names separated by commas, encased with double quotes. Example:" msgstr "" "Імена джерел живлення постійного струму, розділені комами, укладені " "подвійними лапками. Приклад:" -#: netbox/dcim/forms/bulk_import.py:990 +#: netbox/dcim/forms/bulk_import.py:991 msgid "Physical medium" msgstr "Фізичне середовище" -#: netbox/dcim/forms/bulk_import.py:993 netbox/dcim/forms/filtersets.py:1682 +#: netbox/dcim/forms/bulk_import.py:994 netbox/dcim/forms/filtersets.py:1682 msgid "Duplex" msgstr "Дуплекс" -#: netbox/dcim/forms/bulk_import.py:998 +#: netbox/dcim/forms/bulk_import.py:999 msgid "Poe mode" msgstr "Режим PoE" -#: netbox/dcim/forms/bulk_import.py:1004 +#: netbox/dcim/forms/bulk_import.py:1005 msgid "Poe type" msgstr "Тип PoE" -#: netbox/dcim/forms/bulk_import.py:1013 +#: netbox/dcim/forms/bulk_import.py:1014 #: netbox/virtualization/forms/bulk_import.py:208 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "Режим роботи IEEE 802.1Q (для інтерфейсів L2)" -#: netbox/dcim/forms/bulk_import.py:1020 +#: netbox/dcim/forms/bulk_import.py:1021 #: netbox/virtualization/forms/bulk_import.py:215 msgid "Filter VLANs available for assignment by group" msgstr "Фільтр VLANів, доступних для призначення за групами" -#: netbox/dcim/forms/bulk_import.py:1027 +#: netbox/dcim/forms/bulk_import.py:1028 #: netbox/virtualization/forms/bulk_import.py:222 msgid "Assigned untagged VLAN ID (filtered by VLAN group)" msgstr "" "Призначений ідентифікатор VLAN без тегів (відфільтрований за групою VLAN)" -#: netbox/dcim/forms/bulk_import.py:1036 +#: netbox/dcim/forms/bulk_import.py:1037 #: netbox/virtualization/forms/bulk_import.py:231 msgid "" "Assigned tagged VLAN IDs separated by commas, encased with double quotes " @@ -5202,14 +5202,14 @@ msgstr "" "Призначені ідентифікатори VLAN з тегами, розділені комами, укладені " "подвійними лапками (\") (відфільтровані групою VLAN). Приклад:" -#: netbox/dcim/forms/bulk_import.py:1047 +#: netbox/dcim/forms/bulk_import.py:1048 #: netbox/virtualization/forms/bulk_import.py:242 msgid "Assigned Q-in-Q Service VLAN ID (filtered by VLAN group)" msgstr "" "Призначений ідентифікатор VLAN служби Q-in-Q (відфільтрований за групою " "VLAN)" -#: netbox/dcim/forms/bulk_import.py:1054 netbox/ipam/forms/bulk_import.py:174 +#: netbox/dcim/forms/bulk_import.py:1055 netbox/ipam/forms/bulk_import.py:174 #: netbox/ipam/forms/bulk_import.py:259 netbox/ipam/forms/bulk_import.py:295 #: netbox/ipam/forms/filtersets.py:230 netbox/ipam/forms/filtersets.py:314 #: netbox/ipam/forms/filtersets.py:383 @@ -5217,76 +5217,109 @@ msgstr "" msgid "Assigned VRF" msgstr "Призначений VRF" -#: netbox/dcim/forms/bulk_import.py:1057 +#: netbox/dcim/forms/bulk_import.py:1058 msgid "Rf role" msgstr "роль RF" -#: netbox/dcim/forms/bulk_import.py:1060 +#: netbox/dcim/forms/bulk_import.py:1061 msgid "Wireless role (AP/station)" msgstr "Бездротова роль (AP/станція)" -#: netbox/dcim/forms/bulk_import.py:1103 +#: netbox/dcim/forms/bulk_import.py:1104 #, python-brace-format msgid "VDC {vdc} is not assigned to device {device}" msgstr "" "Джерело живлення постійного струму {vdc} не призначається до пристрою " "{device}" -#: netbox/dcim/forms/bulk_import.py:1119 netbox/dcim/forms/bulk_import.py:1137 -#: netbox/dcim/forms/bulk_import.py:1518 +#: netbox/dcim/forms/bulk_import.py:1120 netbox/dcim/forms/bulk_import.py:1225 +#: netbox/dcim/forms/bulk_import.py:1606 msgid "Physical medium classification" msgstr "Класифікація фізичного середовища" -#: netbox/dcim/forms/bulk_import.py:1173 +#: netbox/dcim/forms/bulk_import.py:1123 netbox/dcim/forms/model_forms.py:1846 +#: netbox/dcim/forms/object_import.py:145 +msgid "Rear port" +msgstr "Задній порт" + +#: netbox/dcim/forms/bulk_import.py:1126 +msgid "Corresponding rear port (mapped to the front port's first position)" +msgstr "" +"Відповідний задній порт (відображений на першій позиції переднього порту)" + +#: netbox/dcim/forms/bulk_import.py:1129 +msgid "Rear port position" +msgstr "Положення заднього порту" + +#: netbox/dcim/forms/bulk_import.py:1131 +msgid "Mapped position on the corresponding rear port (defaults to 1)" +msgstr "" +"Положення відображено на відповідному задньому порті (за замовчуванням 1)" + +#: netbox/dcim/forms/bulk_import.py:1175 netbox/dcim/models/base.py:59 +#, python-brace-format +msgid "" +"Invalid rear port position ({rear_port_position}): Rear port {name} has only" +" {positions} positions." +msgstr "" +"Невірна позиція порту ззаду ({rear_port_position}): порт ззаду {name} має " +"тільки {positions} позицій." + +#: netbox/dcim/forms/bulk_import.py:1193 +#, python-brace-format +msgid "Rear port {name} position {rear_port_position} is already occupied." +msgstr "Задній порт {name} позиції {rear_port_position} Він уже зайнятий." + +#: netbox/dcim/forms/bulk_import.py:1261 msgid "Installed device" msgstr "Встановлений пристрій" -#: netbox/dcim/forms/bulk_import.py:1177 +#: netbox/dcim/forms/bulk_import.py:1265 msgid "Child device installed within this bay" msgstr "Підпорядкований пристрій, встановлений у цьому відсіку" -#: netbox/dcim/forms/bulk_import.py:1179 +#: netbox/dcim/forms/bulk_import.py:1267 msgid "Child device not found." msgstr "Підпорядкований пристрій не знайдено." -#: netbox/dcim/forms/bulk_import.py:1243 +#: netbox/dcim/forms/bulk_import.py:1331 msgid "Parent inventory item" msgstr "Батьківський предмет інвентарю" -#: netbox/dcim/forms/bulk_import.py:1246 +#: netbox/dcim/forms/bulk_import.py:1334 msgid "Component type" msgstr "Тип компонента" -#: netbox/dcim/forms/bulk_import.py:1250 +#: netbox/dcim/forms/bulk_import.py:1338 msgid "Component Type" msgstr "Тип компонента" -#: netbox/dcim/forms/bulk_import.py:1253 +#: netbox/dcim/forms/bulk_import.py:1341 msgid "Component name" msgstr "Назва компонента" -#: netbox/dcim/forms/bulk_import.py:1255 +#: netbox/dcim/forms/bulk_import.py:1343 msgid "Component Name" msgstr "Назва компонента" -#: netbox/dcim/forms/bulk_import.py:1298 netbox/dcim/forms/bulk_import.py:1316 +#: netbox/dcim/forms/bulk_import.py:1386 netbox/dcim/forms/bulk_import.py:1404 msgid "Component name must be specified when component type is specified" msgstr "Ім'я компонента має бути вказано, коли вказано тип компонента" -#: netbox/dcim/forms/bulk_import.py:1308 +#: netbox/dcim/forms/bulk_import.py:1396 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "Компонент не знайдено: {device} - {component_name}" -#: netbox/dcim/forms/bulk_import.py:1321 +#: netbox/dcim/forms/bulk_import.py:1409 msgid "Component type must be specified when component name is specified" msgstr "Тип компонента повинен бути вказаний, коли вказано ім'я компонента" -#: netbox/dcim/forms/bulk_import.py:1348 netbox/ipam/forms/bulk_import.py:320 +#: netbox/dcim/forms/bulk_import.py:1436 netbox/ipam/forms/bulk_import.py:320 msgid "Parent device of assigned interface (if any)" msgstr "Батьківський пристрій призначеного інтерфейсу (якщо є)" -#: netbox/dcim/forms/bulk_import.py:1351 netbox/ipam/forms/bulk_import.py:323 +#: netbox/dcim/forms/bulk_import.py:1439 netbox/ipam/forms/bulk_import.py:323 #: netbox/virtualization/filtersets.py:354 #: netbox/virtualization/filtersets.py:412 #: netbox/virtualization/forms/bulk_edit.py:219 @@ -5300,135 +5333,135 @@ msgstr "Батьківський пристрій призначеного ін msgid "Virtual machine" msgstr "Віртуальна машина" -#: netbox/dcim/forms/bulk_import.py:1355 netbox/ipam/forms/bulk_import.py:327 +#: netbox/dcim/forms/bulk_import.py:1443 netbox/ipam/forms/bulk_import.py:327 msgid "Parent VM of assigned interface (if any)" msgstr "Батьківська віртуальна машина призначеного інтерфейсу (якщо є)" -#: netbox/dcim/forms/bulk_import.py:1362 netbox/ipam/filtersets.py:1111 +#: netbox/dcim/forms/bulk_import.py:1450 netbox/ipam/filtersets.py:1111 #: netbox/ipam/forms/bulk_import.py:334 msgid "Assigned interface" msgstr "Призначений інтерфейс" -#: netbox/dcim/forms/bulk_import.py:1366 +#: netbox/dcim/forms/bulk_import.py:1454 msgid "Make this the primary MAC address for the assigned interface" msgstr "Зробіть це основною MAC-адресою для призначеного інтерфейсу" -#: netbox/dcim/forms/bulk_import.py:1404 +#: netbox/dcim/forms/bulk_import.py:1492 msgid "Must specify the parent device or VM when assigning an interface" msgstr "" "Необхідно вказати батьківський пристрій або віртуальну машину при " "призначенні інтерфейсу" -#: netbox/dcim/forms/bulk_import.py:1437 +#: netbox/dcim/forms/bulk_import.py:1525 msgid "Side A site" msgstr "Сторона А сайту" -#: netbox/dcim/forms/bulk_import.py:1441 +#: netbox/dcim/forms/bulk_import.py:1529 #: netbox/wireless/forms/bulk_import.py:93 msgid "Site of parent device A (if any)" msgstr "Сайт батьківського пристрою А (якщо є)" -#: netbox/dcim/forms/bulk_import.py:1444 +#: netbox/dcim/forms/bulk_import.py:1532 msgid "Side A device" msgstr "Сторона А пристрою" -#: netbox/dcim/forms/bulk_import.py:1448 netbox/dcim/forms/bulk_import.py:1481 +#: netbox/dcim/forms/bulk_import.py:1536 netbox/dcim/forms/bulk_import.py:1569 msgid "Device name (for device component terminations)" msgstr "Назва пристрою (для завершення компонентів пристрою)" -#: netbox/dcim/forms/bulk_import.py:1451 +#: netbox/dcim/forms/bulk_import.py:1539 msgid "Side A power panel" msgstr "Бічна панель живлення A" -#: netbox/dcim/forms/bulk_import.py:1455 netbox/dcim/forms/bulk_import.py:1488 +#: netbox/dcim/forms/bulk_import.py:1543 netbox/dcim/forms/bulk_import.py:1576 msgid "Power panel name (for power feed terminations)" msgstr "Назва панелі живлення (для припинення подачі живлення)" -#: netbox/dcim/forms/bulk_import.py:1458 +#: netbox/dcim/forms/bulk_import.py:1546 msgid "Side A type" msgstr "Тип сторони А" -#: netbox/dcim/forms/bulk_import.py:1464 +#: netbox/dcim/forms/bulk_import.py:1552 msgid "Side A name" msgstr "Назва сторони A" -#: netbox/dcim/forms/bulk_import.py:1465 netbox/dcim/forms/bulk_import.py:1498 +#: netbox/dcim/forms/bulk_import.py:1553 netbox/dcim/forms/bulk_import.py:1586 msgid "Termination name" msgstr "Назва кінця" -#: netbox/dcim/forms/bulk_import.py:1470 +#: netbox/dcim/forms/bulk_import.py:1558 msgid "Side B site" msgstr "Сторона B сайту" -#: netbox/dcim/forms/bulk_import.py:1474 +#: netbox/dcim/forms/bulk_import.py:1562 #: netbox/wireless/forms/bulk_import.py:114 msgid "Site of parent device B (if any)" msgstr "Сайт батьківського пристрою B (якщо такий є)" -#: netbox/dcim/forms/bulk_import.py:1477 +#: netbox/dcim/forms/bulk_import.py:1565 msgid "Side B device" msgstr "Сторона Б пристрою" -#: netbox/dcim/forms/bulk_import.py:1484 +#: netbox/dcim/forms/bulk_import.py:1572 msgid "Side B power panel" msgstr "Бічна панель живлення B" -#: netbox/dcim/forms/bulk_import.py:1491 +#: netbox/dcim/forms/bulk_import.py:1579 msgid "Side B type" msgstr "Тип сторони Б" -#: netbox/dcim/forms/bulk_import.py:1497 +#: netbox/dcim/forms/bulk_import.py:1585 msgid "Side B name" msgstr "Назва сторони B" -#: netbox/dcim/forms/bulk_import.py:1506 +#: netbox/dcim/forms/bulk_import.py:1594 #: netbox/templates/dcim/panels/connection.html:60 #: netbox/wireless/forms/bulk_import.py:133 msgid "Connection status" msgstr "Статус підключення" -#: netbox/dcim/forms/bulk_import.py:1512 +#: netbox/dcim/forms/bulk_import.py:1600 msgid "Cable connection profile" msgstr "Профіль підключення кабелю" -#: netbox/dcim/forms/bulk_import.py:1532 +#: netbox/dcim/forms/bulk_import.py:1620 msgid "Cable bundle name" msgstr "Назва кабельного пакета" -#: netbox/dcim/forms/bulk_import.py:1544 +#: netbox/dcim/forms/bulk_import.py:1632 msgid "Color name (e.g. \"Red\") or hex code (e.g. \"f44336\")" msgstr "" "Назва кольору (наприклад, \"Червоний\") або шістнадцятковий код (наприклад, " "\"f44336\")" -#: netbox/dcim/forms/bulk_import.py:1587 +#: netbox/dcim/forms/bulk_import.py:1675 #, python-brace-format msgid "Invalid side designation: {side}" msgstr "Невірне позначення сторони: {side}" -#: netbox/dcim/forms/bulk_import.py:1606 +#: netbox/dcim/forms/bulk_import.py:1694 #, python-brace-format msgid "" "Side {side_upper}: {power_panel} {termination_object} is already connected" msgstr "" "Сторона {side_upper}: {power_panel} {termination_object} вже підключений" -#: netbox/dcim/forms/bulk_import.py:1612 +#: netbox/dcim/forms/bulk_import.py:1700 #, python-brace-format msgid "{side_upper} side termination not found: {power_panel} {name}" msgstr "{side_upper} бічне закінчення не знайдено: {power_panel} {name}" -#: netbox/dcim/forms/bulk_import.py:1630 +#: netbox/dcim/forms/bulk_import.py:1718 #, python-brace-format msgid "Side {side_upper}: {device} {termination_object} is already connected" msgstr "Сторона {side_upper}: {device} {termination_object} вже підключена" -#: netbox/dcim/forms/bulk_import.py:1636 +#: netbox/dcim/forms/bulk_import.py:1724 #, python-brace-format msgid "{side_upper} side termination not found: {device} {name}" msgstr "{side_upper} кінцева сторона не знайдена: {device} {name}" -#: netbox/dcim/forms/bulk_import.py:1658 +#: netbox/dcim/forms/bulk_import.py:1746 #, python-brace-format msgid "" "{color} did not match any used color name and was longer than six " @@ -5437,53 +5470,53 @@ msgstr "" "{color} не відповідав жодному використаному назві кольору і мав більше шести" " символів: недійсний шістнадцятковий." -#: netbox/dcim/forms/bulk_import.py:1683 netbox/dcim/forms/model_forms.py:962 +#: netbox/dcim/forms/bulk_import.py:1771 netbox/dcim/forms/model_forms.py:962 #: netbox/dcim/tables/devices.py:1154 #: netbox/templates/dcim/panels/virtual_chassis_members.html:10 msgid "Master" msgstr "Майстер" -#: netbox/dcim/forms/bulk_import.py:1687 +#: netbox/dcim/forms/bulk_import.py:1775 msgid "Master device" msgstr "Головний пристрій" -#: netbox/dcim/forms/bulk_import.py:1704 +#: netbox/dcim/forms/bulk_import.py:1792 msgid "Name of parent site" msgstr "Назва батьківського тех. майданчика" -#: netbox/dcim/forms/bulk_import.py:1738 +#: netbox/dcim/forms/bulk_import.py:1826 msgid "Upstream power panel" msgstr "Вища за течією панель живлення" -#: netbox/dcim/forms/bulk_import.py:1768 +#: netbox/dcim/forms/bulk_import.py:1856 msgid "Primary or redundant" msgstr "Первинний або надлишковий" -#: netbox/dcim/forms/bulk_import.py:1773 +#: netbox/dcim/forms/bulk_import.py:1861 msgid "Supply type (AC/DC)" msgstr "Тип живлення (змінній/постійний струм)" -#: netbox/dcim/forms/bulk_import.py:1778 +#: netbox/dcim/forms/bulk_import.py:1866 msgid "Single or three-phase" msgstr "Однофазний або трифазний (струм)" -#: netbox/dcim/forms/bulk_import.py:1828 netbox/dcim/forms/model_forms.py:1939 +#: netbox/dcim/forms/bulk_import.py:1916 netbox/dcim/forms/model_forms.py:1939 #: netbox/dcim/ui/panels.py:111 netbox/dcim/ui/panels.py:371 #: netbox/virtualization/ui/panels.py:55 msgid "Primary IPv4" msgstr "Первинна адреса IPv4" -#: netbox/dcim/forms/bulk_import.py:1832 +#: netbox/dcim/forms/bulk_import.py:1920 msgid "IPv4 address with mask, e.g. 1.2.3.4/24" msgstr "IPv4 адреса з маскою, наприклад 1.2.3.4/24" -#: netbox/dcim/forms/bulk_import.py:1835 netbox/dcim/forms/model_forms.py:1948 +#: netbox/dcim/forms/bulk_import.py:1923 netbox/dcim/forms/model_forms.py:1948 #: netbox/dcim/ui/panels.py:116 netbox/dcim/ui/panels.py:376 #: netbox/virtualization/ui/panels.py:60 msgid "Primary IPv6" msgstr "Первинна адреса IPv6" -#: netbox/dcim/forms/bulk_import.py:1839 +#: netbox/dcim/forms/bulk_import.py:1927 msgid "IPv6 address with prefix length, e.g. 2001:db8::1/64" msgstr "IPv6 адреса з довжиною префікса, наприклад 2001:db8::1/64" @@ -5970,11 +6003,6 @@ msgstr "Передній порт" msgid "Power outlet" msgstr "Розетка живлення" -#: netbox/dcim/forms/model_forms.py:1846 -#: netbox/dcim/forms/object_import.py:145 -msgid "Rear port" -msgstr "Задній порт" - #: netbox/dcim/forms/model_forms.py:1852 msgid "Inventory Item" msgstr "Елемент інвентаря" @@ -6026,7 +6054,7 @@ msgstr "" #: netbox/dcim/forms/object_create.py:312 netbox/dcim/tables/devices.py:1160 #: netbox/ipam/tables/fhrp.py:31 netbox/ipam/ui/panels.py:185 -#: netbox/ipam/views.py:1589 netbox/templates/dcim/virtualchassis_edit.html:59 +#: netbox/ipam/views.py:1594 netbox/templates/dcim/virtualchassis_edit.html:59 #: netbox/users/views.py:375 msgid "Members" msgstr "Члени" @@ -6051,15 +6079,6 @@ msgstr "Учасника пристроїв" msgid "A position must be specified for the first VC member." msgstr "Позиція повинна бути вказана для першого члена VC." -#: netbox/dcim/models/base.py:59 -#, python-brace-format -msgid "" -"Invalid rear port position ({rear_port_position}): Rear port {name} has only" -" {positions} positions." -msgstr "" -"Невірна позиція порту ззаду ({rear_port_position}): порт ззаду {name} має " -"тільки {positions} позицій." - #: netbox/dcim/models/cables.py:62 msgid "cable bundle" msgstr "кабельний пучок" @@ -7986,8 +8005,8 @@ msgstr "Виділена потужність (Вт)" #: netbox/dcim/tables/devices.py:597 netbox/dcim/views.py:3402 #: netbox/ipam/forms/model_forms.py:834 netbox/ipam/tables/fhrp.py:28 -#: netbox/ipam/ui/panels.py:252 netbox/ipam/views.py:922 -#: netbox/ipam/views.py:1047 netbox/netbox/navigation/menu.py:175 +#: netbox/ipam/ui/panels.py:252 netbox/ipam/views.py:924 +#: netbox/ipam/views.py:1052 netbox/netbox/navigation/menu.py:175 #: netbox/netbox/navigation/menu.py:177 netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "IP-адреси" @@ -8416,7 +8435,7 @@ msgstr "Контексти віртуальних пристроїв" #: netbox/dcim/views.py:3414 netbox/ipam/forms/filtersets.py:469 #: netbox/ipam/models/vlans.py:308 netbox/ipam/tables/ip.py:121 -#: netbox/ipam/tables/vlans.py:52 netbox/ipam/views.py:1381 +#: netbox/ipam/tables/vlans.py:52 netbox/ipam/views.py:1386 #: netbox/netbox/navigation/menu.py:210 netbox/netbox/navigation/menu.py:212 msgid "VLANs" msgstr "VLAN'и" @@ -11380,11 +11399,11 @@ msgstr "Політика" msgid "Ports" msgstr "Порти" -#: netbox/ipam/forms/bulk_import.py:55 netbox/ipam/views.py:72 +#: netbox/ipam/forms/bulk_import.py:55 netbox/ipam/views.py:73 msgid "Import route targets" msgstr "Імпортувати маршрути до цілей" -#: netbox/ipam/forms/bulk_import.py:61 netbox/ipam/views.py:75 +#: netbox/ipam/forms/bulk_import.py:61 netbox/ipam/views.py:76 msgid "Export route targets" msgstr "Експортувати маршрути до цілей" @@ -12252,8 +12271,8 @@ msgid "Added" msgstr "Додано" #: netbox/ipam/tables/ip.py:76 netbox/ipam/tables/ip.py:111 -#: netbox/ipam/tables/vlans.py:125 netbox/ipam/views.py:621 -#: netbox/ipam/views.py:1731 netbox/netbox/navigation/menu.py:182 +#: netbox/ipam/tables/vlans.py:125 netbox/ipam/views.py:623 +#: netbox/ipam/views.py:1736 netbox/netbox/navigation/menu.py:182 #: netbox/netbox/navigation/menu.py:184 msgid "Prefixes" msgstr "Мережеві префікси" @@ -12456,77 +12475,77 @@ msgstr "" "У назвах DNS дозволені лише буквено-цифрові символи, зірочки, дефіси, крапки" " та підкреслення" -#: netbox/ipam/views.py:106 netbox/ipam/views.py:1761 +#: netbox/ipam/views.py:107 netbox/ipam/views.py:1766 msgid "Device Interfaces" msgstr "Інтерфейси пристрою" -#: netbox/ipam/views.py:111 netbox/ipam/views.py:1779 +#: netbox/ipam/views.py:112 netbox/ipam/views.py:1784 msgid "VM Interfaces" msgstr "Інтерфейси віртуальної машини" -#: netbox/ipam/views.py:196 +#: netbox/ipam/views.py:197 msgid "Importing VRFs" msgstr "Імпортування VRF" -#: netbox/ipam/views.py:203 +#: netbox/ipam/views.py:204 msgid "Exporting VRFs" msgstr "Експорт VRF" -#: netbox/ipam/views.py:212 +#: netbox/ipam/views.py:213 msgid "Importing L2VPNs" msgstr "Імпорт L2VPN'ів" -#: netbox/ipam/views.py:219 +#: netbox/ipam/views.py:220 msgid "Exporting L2VPNs" msgstr "Експорт L2VPN'ів" -#: netbox/ipam/views.py:798 +#: netbox/ipam/views.py:800 msgid "Duplicate prefixes" msgstr "Дублікати префіксів" -#: netbox/ipam/views.py:799 netbox/ipam/views.py:1012 -#: netbox/ipam/views.py:1120 +#: netbox/ipam/views.py:801 netbox/ipam/views.py:1017 +#: netbox/ipam/views.py:1125 msgid "Parent prefixes" msgstr "Батьківські префікси" -#: netbox/ipam/views.py:851 +#: netbox/ipam/views.py:853 msgid "Child Prefixes" msgstr "Підпорядковані мережеві префікси" -#: netbox/ipam/views.py:895 +#: netbox/ipam/views.py:897 msgid "Child Ranges" msgstr "Підпорядковані діапазони" -#: netbox/ipam/views.py:1121 +#: netbox/ipam/views.py:1126 msgid "Duplicate IPs" msgstr "Дублювання IP-адрес" -#: netbox/ipam/views.py:1125 +#: netbox/ipam/views.py:1130 msgid "Application services" msgstr "Послуги прикладних програм" -#: netbox/ipam/views.py:1291 +#: netbox/ipam/views.py:1296 msgid "Related IPs" msgstr "Пов'язані IP-адреси" -#: netbox/ipam/views.py:1432 +#: netbox/ipam/views.py:1437 msgid "VLAN translation rules" msgstr "Правила перекладу VLAN" -#: netbox/ipam/views.py:1438 +#: netbox/ipam/views.py:1443 msgid "Add Rule" msgstr "Додати правило" -#: netbox/ipam/views.py:1580 +#: netbox/ipam/views.py:1585 msgid "Virtual IP addresses" msgstr "Віртуальні IP-адреси" -#: netbox/ipam/views.py:1585 netbox/templates/ipam/iprange/ip_addresses.html:8 +#: netbox/ipam/views.py:1590 netbox/templates/ipam/iprange/ip_addresses.html:8 #: netbox/templates/ipam/prefix/ip_addresses.html:7 msgid "Add IP Address" msgstr "Додати IP-адресу" -#: netbox/ipam/views.py:1744 +#: netbox/ipam/views.py:1749 msgid "Add a Prefix" msgstr "Додати префікс" @@ -13942,7 +13961,7 @@ msgstr "Синхронізовані дані для {object_type} {object}." msgid "Synced {count} {object_type}" msgstr "Синхронізовано {count} {object_type}" -#: netbox/netbox/views/generic/object_views.py:118 +#: netbox/netbox/views/generic/object_views.py:120 #, python-brace-format msgid "{class_name} must implement get_children()" msgstr "{class_name} повинен реалізувати get_children()" @@ -15912,7 +15931,7 @@ msgstr "На сторінку" msgid "Data is out of sync with upstream file" msgstr "Дані не синхронізуються з файлом висхідного потоку" -#: netbox/templates/inc/table_controls_htmx.html:11 +#: netbox/templates/inc/table_controls_htmx.html:10 #: netbox/templates/inc/table_controls_htmx.html:12 msgid "Quick search" msgstr "Швидкий пошук" diff --git a/netbox/translations/zh/LC_MESSAGES/django.mo b/netbox/translations/zh/LC_MESSAGES/django.mo index c34b43acc83ff8a9157ed99df0b1292697551007..569078f717218e294ce730c19b216574cf6a255a 100644 GIT binary patch delta 77711 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

xX=VE2N5e;lDo`ieQ51V2m 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 Uu6VL*#N$CjwvXx@y6?dM11$YEBme*a delta 77266 zcmXWkci@&&|G@G4`%OcoAtOmcd+$wqYlzY?BBW48XzJFGk(7waP8k_xBxIzBQZkD2 zppcM}5<>F4-}m|a{&}5qu5+F9IqSNv`-|uI{r^f%-BvRD< z{16#W=99?(5cywn`D`YW*Em%ugx+{UBbx;EBup-()qwtil8`{Ack-sFo8V&GzJPvP1 z+gXAJyfUt@#jFKeNZ7$nya#{8Svaj}UZxwCZkCs6i-Xa%oR76|7dFQd&GRy?u?rT$ z8?Xi56yHe{9_%FLNf&ZjqPGj3V(31zoXU%e>48oR6I_uT`=OHYR^d_$sy` zzZVB#oz`j7O~+>BUqb`_4Vz%&HhGy2I2^m<<9IgiYm?2(^d!;yl)OwsoR5xZeV92l z?dlfcNVJ1{!w=D!DBL!khDPCFw0uhVBz7df6%C|pySz*_9Fiqrhc}>0uo4U78axs= zpu2ku7QoNY-T!4=|1R8z-v3YJ3$;)AQs|~W5#0lo@K|h&6)@YKgll#Q9)+XPO*jed z=oU1fxp93VmL&gp_)_>TT7Mhb-dAXQ-(zk3Bl49yq)pfWX*Zi`L&6(6p(E^xHq-}g zU?6(@E=D)&`0z&b)ZBrN>>+dpo~M@Q5f zjeIB?$YpW;I&@~H;R$#LTJK4;qm^j=_t1boK?B^42J~lK&vfSeySa*yaJQC5XP^z% z#-8X*T#G(JpA28e-sC^TR#>r1+Qfsg0r@$RUyXIi|B3FQs$En2b1_I&&4#z0?RDaWgc~wpaznVO6}ZTQ)tp z-lX7E3J#$SwCXAKD zJCnn?SrRt%X!tVTPktk=%gbagJuNSD2Kh$4)1z}bdRn%lGqw{Q;coOfvKM`uR_~MY z7otzXg^}NmK8j2A&C48*+0#k5#v{-@@BmiFchM=^i%w;&)AKUtVm)*%XQDH5Czi#> z&>2{bC*c>7{|6m;*?!4-Xy6@@2U9lForJr-H(rH9usd$V3-H)8@-jnkEV>jQp}YU{ za8HyUM3*N2%yhjp+HOVkzPe~2&Cz$pX;{SbznFx_Ka^$~3_rzgzfX&WI^}3*&dS()-2XX$Zk?0r&Bf@d$l--Ora38vc zk6{OVHp+jC^26xN6d9ZXI3As$hUnX_6WZS3xIQY%XAI{2Tk*aqSQZuE#@sPOU!ObC znff;T6CKHsL(+TwSUiLLARLHKq5&5;JKc8_I)fF_rK*Rv-!V(VFOeSTv08!#^fcPx zYV=9?QIvm!j`WYn7d$83R~BngUI}w=QM7|TI1~q<&xsXy6~2xh!)(KIQ=&OK(o@h# zJD@l8MMp9SUGrh+2<}JgKZka-620&BaATBzhPLxnpRJ9Fat{b)c>qV283()6GCnuNRafCX6O zg0zdvVMFpw&>Jp71DcIKq8&epjqppXilv69d@~$N{u1<xBU1n`U<>l!V|}c2Y5K138;(UEsSl!oeu8J>k(Z_W&qZhS z4s@*-qI=*`bY`E&+#W-h;;k$RABCHvUA3My1#K3D|&q_Dm91oQ5`d2RemI(7^tOHvA(t!Qaq&HAbfq zv_W@$S9GMk&i||(TT<=Anq$RFQOK>R~_!xAmC!+1ni2Pkx+4KJ(2`j#d9=G*a7ym}rs>W66 zdVREk=4hauBi|1lz);K`FLZ{+qf0ppy>AgZGs~lVEtd8CZzJLBcOQ1eVppdQ&Oq04 zDEdCX3T^l{bdx=VPW=<%GIXj}gm0jMtw%fFhR)!RXg>wUaQ=P7_9S6L7oZJX68Wpp zk&Z=YXnN#tLr1g#?clK}e=*9}h99CG??7i_KU%-=HL2a>uHpPU!YULvvSw(*J8R?oOVS{If zmxkl9J>@r}Up(v45f>YmUZ1C+_f0~t&qQZt6E?zakuN$v&B(E6{qpFN*FpC}wj&86 z91>m{PCz5R75#*|H_D$yBYzWX;3w#k9Y$xO_=HryBHCdywEfQLQuL4O=OFE8GgqfX zW?EFZ3!TFIqWn>GWGm4%T!Svf7Ie?-L^tUHG?2WBsk|f_XchE&OLQPz(0XTM8PESn z68>_z9=%~9+QBk3;#Ft^YtfN>fVqyt1L#PLOiB$OA67%lo1pi14Ex6QbIg1GFO7n+ z;f>*)=#)N;2KEBl(E7Ok2|6RY(189xH*L}D)9x>W&SYnh8iCHhm6)}`$s{~B zGtr83(W!a_E8@%Ox88QN!!NNO{)!%_3X{|QRnb7}pzXFtJM4{iH~?GVh3L%OJDKzE z+AgKQ$X7(g*U{a%5e;M)x+H(c^+Ft5J2(ctUKwj(3v?hu(GG^A^*rXbHx+YBj0UtU zOTvaE z*2|V7;mE5;K@)69z8zZeN;H58SRHRcZ(JVvSJ98oZ=$^Xw6uq6qMNrB*2G?DAlG7J zoQ#b;|Id;*k%Di~sroNGYI=(JM6|<7=t%2^EwC&3j@T4$LBH)@M?YHsL1(PhjcF6M zLkH3gJ;rC{$~k|-Nx17rhgo#j&p|iWa&+^oLucSiw4s7CQu#6H9;l19(-yt2Z(P3^ zJ)YO2zZdR^{PWn*^ZyPBr|KZO>5AQyW};2l14mFk5RH5_y7@jpr*tp+d3`YQC*GX? zQB75BMfs)Z%q>Ru&N8%}7cuMkTt~vl-$%decVHL%7v1fhZpq73!tvokw82&3I&?-p zM5lZw+TQN)Pjm^3+?u}okHL${55AT2?}axgFtYd1{72|s_!1rAPvP%z{V+P^MQ5hX zTOQ5VLPypHZRfPOJ`fG)qA0%>ZGXzlIRCSw;=Sm|9>@0hJlfC!yb3e7r6sx=JvEEM zW#}5e8rMHSf4F33r9U`UL)+XzdbKA49lU%_Ih+_Z^F(v8y(mdbTjY3hM4^`F4UZzmY@mRU~BXkbw`(A2HL=E zG_Zx}v3(}WH=w6xEBd7S9c}0DxL#yVyp%BaPQX5%{{bYNn#EWNmt$Z25UXM3J5nIs z&`owD8qi&62lu1*KN;6oqMLUe8c6ZEX$eZBd#oAyXg&pVfBzdt!l|5sj_7uDq)VfG z1$yHe^vSgz?f4LSI*Q(z{$SZ2a}Of4{B^8@2hb&~bXQ*HENp^}@K!A1`G1v!$L4MH z3HBZud69XkqodG(PDDpu9i74kSP5I8zYhkX9gackKZv%wG|HEwFSpOJD;|G0=l={6 z=aFz%K8tRyHRvYUf^N>A&<9L`d(xj|tK+%kZ$<;zjn2p~=(NK=Hgqq2ANjw~dPhE-I;?=^>mv7MGaX2Hy)t^eE;@s!pqu&(ESCHJC*g6s7Tr7(au--rbi}jKK<-A@ z?lE*m-ax1H9kkx2xV|OwKcVgY79K+TDfmeGdM=8&zyGx);Rt)8kJdrxT3(KJFfOi7 z#@gg>Lr1m}?RX959!zKlhtQeITb!1*6xv=nw7hzhH^Zz`*^Wegyc~`AUbK8M8o-Bf z{Zni}zR;5NQfZD|$xp;va1A;$y&g@cpg-E)E$GtBMW2L=F*krmIsZOb)=*%>-=ZIr z$3B)K?t|Vi1l{eU&=Jo>XKXGS;6rGGkD?=eHuA5bYyU1fv)khOPw4#zAIqkQ3q78u zt_0dp8T3?C2y3E$qG^n7qF(68hM^r?hR)c;$Ulxg@m@k_nBo$GtvAIbYx@D5sgPXx)ELDd2xMVLOXr}ZTK0qp;c&ro8tO*wBaw~`gdr@e}zS#OjCa%GLzX% zEfO}=4jp+vbflM}yLAG(cDJB=;QqM23O&c~q4$3s_IQj`Tfjh(DlD#B$H1fLfq|bU{aSMwFi$<(EbIICLhbp#!)x zt}lu5=P>IC*N|`qK0q7%9PQvcbS)2{Bl|b57haYcJ{qleGJ1alw0;}3erI%~eWH8{ zI#aizOFMfR=ide%puj+$j0-QLk-r=HZI}xP9mxT7PZV07?kk5rCu*W=+Xn66^l&J8 z-)OYm8=`#9a?ZaO9*lx#(T-MQ4cvs4@OQM~$qw z3^UKAkJ#qu9=iq?;kt`f9C*xpR*moAGGFx1t{&_n{5!i1OX&)E`8D6CUwG z3b+co6rIufz0m>mM`vavIuqG(Bn;r@s4x#*ilvc%3B6$xdc)^vM?Xcr*ow3{PecQ5 ziQeA>y>B2I$Z#}}E6^Fa4%utj%u^)%yg_F@4osA_t{}0E7<+%cWYDI+)qWo*Lq2JK=|B)-x+p;oR zemb6p!?6KAhX(XD8qgjz@ITQR$$KdUR0@lE{wtfndT4{Kuo3pfCO8G_;tH&XUt>co z^>W(v9nfRjA07EnbcAEjslO53q_>A_(cc*dF>8m-UP-@JPs7UOuf$q77c1ebSO>pA z*Z#;=>2%b@D&$W`XW$z27u0H;fS+S^9QbN-GWI0D1nuY7S2_QcNF4oIim(Z`AU^_q z89jt;@pJSzp7?qSv=jES9@fMaXkcHW0sV{KSNVNUHwa|teNB-2vcSRfS zhwhnk(UD#n*RP3u7Oi&+T5sN_`2D|#0;l#_G_se`WAzR?f*n{3cVi_i^?quo5gPER z=>47008fkSXGMM(I-{e|V|aDs7roENUD!h#sQLqCmVdoFhgX3bf!Q0VYy8sPf z1=_&tXn-5hdY^~iVO{e3(M?_P!}Le0CfJ1hBs7rhauUwKE9hFUN7rZ*I`!MpsojZo z_&s{O{)qBoAEmV{gVwKv23P}~fri){o1^VcN86c`^4ZJ-B&t%d6s@>9DxCCj3aAbm zX@js;ly^ecv>UpKd!g_7p;!m6M4zPhVQt)mxwjrVQ_Z$GbDY2Sxdd-9bXT5_9;Z?0 z)Mc?6-ib#3GTPxg=!|`aj`+*)J9I{W4gW*iEwMF~pNP(2ZOr}qzwJo4hNq()o{zqk zuR*8mR?MB_$ls3!@N**ikdIVh41} z`r>4qfR5lVbczdonjX=|qchbSouOXnDYzP)p;>5q51}*i3|jxS$Z!6X^Y7;Rk^&>& zjgE95I)a1f^&;EST9-nv9~+hrtDrMb8{KqG(E+taALU&me=Zu(NOXW>w{iZBbWvPb zfv)A+$Zy0N|*@*Eix|^4p`l$^TNn*>)t{ zbf=>oU4%~g)o8;L&^5aWUBd<8Cu6fO@-mm>AZ(0pV*@;hb+G1_=_|QEI@L4KC);xL8*&$V{>$%3 zU(LPoEb>5!-X&0rbWl=!}&5DxLER=!~3x!gmux8c17280@}eA zH1NG>N0q)w?KVJ{xGTCRhM)r(j#)bzL&6(oh6~Y=Jb_kx8QtaU&?nwTw80P1y|D`o z{10?b6yKFbeq2}?-Su_RQ_=*j*K!x{df!J;z9ak*4fxMr zG{9AH{Y|vpjc9w@(Ez{Q z$N6^(|A-1l?oStvLo3!mJ8FVXee1Au*av+g4nmjioXB5*c6c#5GgqVSO^N)h@V+bw zNAM&X$cyOtT#t76MO^<54P<}h|3Z)15x=GTjt;A#52}{v_1@@IpN%zfB05ux(Fa-f z1ri>s_tDL>2i+va52Qb()W*8x`(QPk7(R?XH{L-T+JR&6FLdOieov3?3Fv@sL#O;9 z^a=QEGMjmagm14e(Bp9sovOxvq)6MMBkF^`B`?GdI3e<{q9gqn?cghPCikNwE%;}; z|5)_?+Sm>|U}xX|Q*sI3ZfHZr4yGGVK=ZZG23w$k^h5(3iZ*x|`ed9M-ir?C1+?B~ zbcX(i)$w<9hRXlNW~Tp4EfQ92gm!qU7w|N+!!yGX;q~EMbhkf-zU`KyYy5TOi~XIR zE2p9}GYNCg2XwP8!>qgW1ri3Z7R_%)H|3X6{sT59|2rC3&41FL(Hf$gax8lPWVGR1 z(bx8DwEn|rpiiLfK8G&NYyWWmy>Sx-^>I74z#@mz7fyTh9AATO$_bI5k2d%Kx&)7* zfxnK9a1+|WUi9yR|Dj7*;olTsqpl>09=a5DOU>52x_Gdwdq zC%hP4iqYY<=u%9I>r>FpcWabCiw-RNA_>>(Ep%j`ME(FeqC&j;45$>k6lKvhtbhho z3q8+`(Oumg-HZdUAKrv+zU}A|>_OZ47YR66ilTv(LOVDa-5d4LhFhT#ca8G? zQGPyJe^iu@L))1i`Mc5k7omYJL)&>fcb)V1F$p8wfo{TI(FQB#=jYbEHoDfW(SZ7( zBN>98>rrTjH=%oE0lKzNgfB(;JLvtNVnzJMyyw3_f&ARRu~ZUW!vScA=b({Zi8eSn z^0UyXzZVDLVyub(qV=jDk)Jz7&9FK7QRosbM(=wHZFdFc{{6qTBpmU3*cCrPr|hJH zX=Jt0U3&^zerA-PALUo0BfA9+d>;Bld;)#9tU;&#OZ0(u01f2GLiy?U|Ivj~gyql* zC!-y;Ku6RWTjH7Mjklqja~|69gXj`I8P{J8-$qCJKDsoYhd-f9cBoJ`bx@*kYTzXF zLjB0MM}{OKnJor^1q`2AIg$&1V|lXU;<(G$SKF8Vztfx>PsE^*hiRx*HAfAtYe_`Cm$8 zo<|#e1zoGRBfk~BVJA8>KcNjBj_XB=rF#zxK$2xe_QEB(LLfbt9U7~Z)=f*JfrF5<3 zp8vZ@cuW>zJ$wz|H10mutaKbAUfq2gu|o!GIR#6jrznU_Cn0t!M*Zqig&l8rVK` z59A%6IxdDjaLS+ow2Jc1X#HMT56?lD;?{IMn<-y5HBc3ufx77KZjE-(4h^UW8o+?K zel|Mg=c9pMgWf*{TjOl(j2qDVN}iBr;8?WXj#$+5-;0D(H!vKEc6bT;92kRcuIW*} zFv=f|@|97(37x_1=t%!SJFZ$TotoO{!0Jc73FiL(-@*hJx<`e<=&nBx4dg0pjMt+h zU5<|QwaCAR*4u`)aaUOK#5B^@=n`~B`{|F~e=%lVvoTSy0A0Js(1xBvH`y2HrrCv# z=!o)ZPZUM#mkBF`wb1u}Q}q7cXn_6E2i^JMr1G49kI8%r9Pv9?2R}oM}8a{&{T8=ZVB%}J6eM7jSc8#{uB*l2Rb8rup$17&P4snY2euwBy4yndSN)) z!4>EfUyrWcZRqZvkJWJnx|=^o@Ba$D?|ZcVA85zwOdXz35v0jqZh_RnztI=#tjNO4uqKf}Wmuo^)V)7BT$KuuUGv{M(tc}m0GqD|;;9m6pD%F#3bLd?~tzUcyuH9du?2)=2FfSA+BK+pa1F z?)Kr>81F{EfYzfkuoI2^C-g12AANlmu9-Tlh7O<}I<-xsycN2qI-r5{$FuQ5%q?}z zY&vf1C~#ySpd{%yu&=1|^=b=-1Wt3;pDZULI@q^)FbniTY2KF3w z#?|P%p3ijcH99Sad)(V{^&@Dp@Ce1j&w>~pBL93iR;Vb`kJ`@ z309;2uCQo5`{VpIBw+w8(GEMJ9ri&-c24B4Ks&r1oq;>hKpsMO^>g9ca7$eOHu8U> zpK3+wr-9VK+<*VmGzw0|npEhCPURRhpmEqAr{mkW9UI|;4br#bhv;*lOvC)l4D5}A za0_~x>NQIB&qtSFE}n*;V%9aU(l~Y84rh`dfeY~f=02sGr0W~dj(@|JSgmP#ot}sH zlb?z8u~xJE+`rvE2tD3waUK?Ip03}EZOCtE&iSuMqEL%8HPz7ux}bjtyat_-r_kra zRy-LCwoGrcn&|bxk)MhN_&mDXzr~?gwN-xZpZ!k9^T_`X2Vm>goPS@7b6Tg4-^8Zm ze?_ORTATDJ9fY;WPs7UiG`7dhXh)?^NuSew(egX75^h23|BhAg_*2sW+Mt1+mnCr) zi8<)neTP2TMz>9CdK=onI=l|Q$6h$JU4G^Yd&#y}Zu(e~5&U|B617i}X(4 zg4NKaXom)NF0RGdI603;Y@hVA`lG(-i|EMH^E0El-VhD+L39&;jUBLDzjXZ0!A|5K z#y<3)`If{;Y6IFGZgN@1hT=P3RNyQ*_hrz=Bxn%=C;u4oi}+9Qj7*^;6Ji zea9&8iay}_Vb+F+lJJQ(5`Dyui~Nn~(%gkM^cdQ~({cSZ^d++qox!iL68?qWSFV40 z2h>9c(j0B44dx#4{W4Qw9Pzzygr+K;wV@|-ji)zN-BV`UtNw3p2+B+;IN<>=b&Ltjey=cbAk(5Y^Z zzCL?lMZ64MqM7L4xeMJBi_o=ShPJm7U5a{nMDd<|xKpUQePVs%{sd@?xWEC3V#<;#6bN~I{4t5IW)(!_pG8NAK&326zUR#Y=HAPQ!f6zcAG+7?uuC!rcGx2eA;3Cey zQ+WXexd#v$$T+mYDd-H$L^t7m=ty5gH`)8>p7;^noJB8Ao30YtaSOD(Bii90^xbd~ zy5y@a&ZZ7Npui5kLOb{ey|K*j)L<<%-yXg3Ec6syhOX&V=*T9cn{f_00}r4BdM2)~ z#4_a9qXYjUOTwxBHvA#{8NG2IIun0m?g@5DYT!t8geRdhR5NUa2GTR~=U@Z!qoVwN zH1K8E9J4D(xM_aE`dDy8nt`V1jP%0lI2k7ZkIjOU>N-+_+w zZp_U{ls|(EFq?TkF1(74bR!zjC+LlP(JB5DZQzJY(-Itm)yUVv+SnKUFqweu@kMkg z|3vRAd07g$BD$2PU@71KXOQqobs<*43FwUvplkUe`ZjwDUHebb&GZx6@WCiAa(Qa_ zBy>rdpw~O2_w~n`I1=q|F6RFCzn&mr#WiSTAE7sVkCpIWbSWx~N>9d?Xn_6Ez%EB; zAR8`4*LEw~Zt>Bnz4BUUh<@+ChYhgM73s$2XaJ|7kLHW97EVE5 zK2M^@cRSj__vq677Z$!Ujl3jUuO%9Iw<|gSPRS4oJO$Ixk>7-Fru(AetLQU)GurUa z=x6uuk#Blc+H|L&d*=%D^xTX-^X~}fVer7%S zme>*VuSqk~1wAF#qQ_`4+R)O-zlhG{tLWbO8Qs+XpaB)UHf`n-=nR~gCE)|1eiU>> zZyXR_h)&s6=%%_M%I^ptME~IMG&aL`(Iq+@*UMd(W}qe-XajTx+n`ID?L@+noQrmR zVR#ifby;+2W}qX#6D|!`hms$Lo~kwI18XOGpGKJ5#b`%E&`0lR%q>;q?+713kK+n-2HwWp z-~Tp}u;b4#7YN$G&uGQN=o7Hugft^Zhh@?73h2_+LGN#c2Hpvskv?c(LooNez}(Ve z?tlMl1_>Lu6Me8ej5hExIumb&8>4&+T7L&RGe4sW-t6MZo4MF&`D zQd)`%lQ{pbNqq{O^0slIZ{&xf9bAb9I1OFLT6-A_$1oU3uxf4qV+eSBm4|~67EOaEjBp? zZ~|Jd8aiXy#w47wQ_%Nyx46(N%Fl}Y1?XnF3~gX+T%R80v%`DQb{<2Q?kP0T=g@(@ zf(E=E2`roWEDF9yJNOG-yMio@ffYw*=y-H0>!9`8hrQ5%21VXaI`cl-?RYZU-VC(8 zS!jUsG56p9-cQ1*eF~kb73kEhMQ{8({01G-9<<)CXa|QQU+9L^!7*r{710M(Q#9a~ z=#+Pk>wT~%&!5bNB-~8TpwHyD(T;Y6-=dNKh&J>G`pnOtk^(&m4Wv1`ncJdM+y_s_ zq38goqW8~?{5_ca-~WGzglqFC8sUoY4Rk8kqXB$^Ht<#Ce@2()AUfjWQ`7az=zaCV z*64t`p@H;9+dFG2=ie#5fC7)z2sDt%=o-z6igUyJ(S{#KN4NrgvaO5qZD_;aqJjR3 z&decnU`I?#mO!tUoyOXks7it7u^~F5PG~~|(TInkfn65YC!iy~9X)Q3pnGN&x&&J= zA9tZ0e;4jU2k=i=Bs)C?a4gzUWps1Z4qKu#)D^w4H(GB9y16cl>zAN2HX03J4BE~# zwB8+YeIB|L3(>%`50P*NmZBZJ7#G%}9c@Ab_$2%St-lLx;8(QcztQ^tMR}1MQ~qeQ z-ihda)gs>r>5u>aA0&*lI~w^}=>q?=e5rg4I`vb+IZ^%~TK{Qum%kSIo#@j2in*yq z+b=RB1#%oZph}qg`+p4*R%n2Z-Wa>WoQ6z zp_}kSbRgTq?=kn^|NKe94i2H4rtnSa#-iw^JRa@1HX3N#uov3k5HygHXouILQ$97y zZ;SHzX#FKo{sQLS|EozDz^1sc4V{5qk>7(h{0BNC1#V9Di-yOd$FUL`Xd`sQUC_XK zNBLlMhDV_RUVSs?-;O6m#hcKM?+h294L^vU^X2G`YtYTMG4fl{z;>X4?ndkXhSn>1 zODZpcxy^{STkRIkzX3F-z(_kp#op)xX$bmgz7n1Ko6vgm(2gEP?|%jz`OE0u*o4;m z8r`J7pi_Ss4fLp6Q((trN!ZXyVQsXb7E$3ebSnFY=b$6FD6WqV$D$*;0Uh}rk$)ue zFQE6WLj(Q*U5f1g;=<0jum_F&ceKI0nW@2}(FUrb4b+c(tH^gkm#z=maR0bI7~RAd zq651Qz5iBZCiw4vNI1g#;=*Ed&6c6R@m@k3{1ffq5ZX}wZE5C?LzkvXL(o7*qy1htoAYmn6Djb9Dd@SM9Tk?K4KGC_egWN_Z=?6Uj|RF0{qFx1FU12< zK6Fm{IX(=nKN)RjI(kg!W#htQXk<^L4~!Mz+vxB4t!M}P(23b)fo5MOVFR1d0CtAoqa*zlU4p;RJ&>838YqsAs50774RorT zqEp=s?f7i8{gIKMfS#_KQ$CxyCoU{OH{J7Sq${xfhC}cJtcZ2yrIDY8gFXKjkm$#SRd@j&b$9xw+gD%<@{eOT+==b6 z<~?aCMus!63gwSrReT5itJ+U^iS_5F`{v*<@*iSjY`OqF|Cf;PSS-XrxCC3_VXTBL z7p6Z#4aSz_@557ZD;jv2d()p>E=B{Hi~cF*MRaDiVlB+vmwsQ=#*uma5W(#8ls|KS z`iD%z9!QVI#aP1|(LL}lHpfB_rYS!a9l;gY8W*8IT)sf3`cFI$&v+=!;Iru7_yJwo zLy<53Fz4T6Q1RhZp%J>tI-|S&baa!A3df-5c6>M)y?7p(?stn}(gjGq4in7obx9;Wjkj-DrOY zvn1@G*dxhuVJ)mgdCSNT4o9F3jKy+z3);|Pw4;^b+u_G(`(NQq{1vC;q{V4dXY-b% ze=gSpyK~`sbnVxn$LAMpipM{iroI=t%lo05>pEhUXQ2(hi5}1WQQmrK`X{QR(NnSpt7GQL zbYG3|Y^?41pG~43*Ix<05085)1=cwn8QzWt^gQ|q{Sq7F0rZsAcslKg^U&wORP-J4 zIu^!v(NpyS=KlTv?Ie80?}!Tjpf?nFCV3PVC4YS6PY&y%_ccfN#2IKn7oktm3FxDH zGWv+V5%X~_8o)fvTH%4Huq1pgd;>iu8_{~7hu_5YJ?PB+8To3jJDel{aM}~ZGSM< z$KhzbdCNKfURWFzo(*3Q-$NVP7JiQ&vxDeJ3O$dU2G|eXLqoAHjznL>ccU}# z7zpOCPFGS4R~p~tEoy0+(`&x700DSsi{5#>c+NSmoK+D;pE?YpBN8hz0~EQj{&c6T8e#QS1DU*2!4PY-iWrxs_7Fv}?b`<)gY=+fv2)ZOUpzr%9 z(HYo)4ro7GKmXM<^);|E`A+DJT#UK%zkoz%3LZkAP~V~>`5E0@nb*=TE*mxqd!qF& z46j22z6Bk?oNyufJ+K&kBo}x+{j1v@Ug!M#$h?gLZ(NJcz=rVCa96l5JdAcw?2WW{ zjz!ON1?++K(Dufn?M+6H;Y@U97DxFDZ)8)2H!1MEz8@8Kp=*BtJx+C3r+Tf?j=Q1f zzaM(6&O!IcD71qt+Tm=p{^RJBKNr_`hksbnjtjk+DwanZsE)2_bF|?B;U(xX8jlTd z9$Noxw4JT!lKdDRMgu9mChd*d=>2D)Gm{-1iHYIO*p3VHa3pR;J7~8ybd@y_} zd^uc)&dA4+-;D@?$KvVa%c1ozL)*PN%&O=AwkTK-K8jA^^XQFhu{v&u{J!uY_NM&5$oGCH{i~Jz z(T?6k?|(ns8s(oy{s+vR|6fTorsALIOw@iiHP9Yypm*f^hZjWo=FM*z#6W4S8tx%T&J8Fe~PPdPW7ll`alf#+ed~~Lkpl{0+;kNLfu)>D4 zR2|U%PD795pbgpd2)&I0-&QNbjp*+E3O)Y?-b(?NMjtd~(T;1Nd!Pl{a0hhH^g-)Q zLT7X)TK{46I6jMR_6=DQJ^_!|nBGcl(BpSG+VE58%)E#`>tBof_i=qM+VNkJFSIG$ zS1K%r-d{EHbNn6S-57q1F4bp|--XuuF+3O+{3Jbyjz-@t)$mBq|G6Z*;SzMpu0fwzi_kS+fp)kP zt@mAcAk6zTJ$Oo>^(&z>bsAcKOkBSq%IBi(y@I*(|0W5id$0gDFwb3u3M(E6(73GsZ=ZJ|DwF~7peY<=rg`1I^$l8xwD4qf1sN$^9|?U4oZEKZa5yzS4EFgov<|)CEo-6LDC-$ z^zyhq1%1uViTtBzy%lIjnAo;tpsiWe%QpFR|3Uwmi5^cD9cwSt;25n$U z+eN=Tjak-PtEUH5{{(sx2b{hVO_NR6m%s0(3u&DP4UXeFF|MO zsmQNF2e2mG9Oa**Gx!a9EPp}U&Hfh^j^CXkuYlFL&8he{Q%44eU8| zsosn7ufly{-uLPCUK%|`r(qZ0|C31gY+i$n@mH*fRene_(g_{GS?Ck;T=aLqNHm~F z!{y;C;aliC<9$2=KaKLw(WTg}p8tI$?BGyXU{7keXn0ImA*>lTM(;Z%?1U~w&$vD? zya1iC%djp^MC(0{SvSK962AY}#f9(D*YfY^R2}nU3aAUZ+4`dQorl)DBCg+#wlg2S z?-g`OenbPv`zcu(4ZQMCoPRe-O$v;tdDsa%l0O~&TD=opqIbgI(FUsgoC2$j=9`9X z!j9;1?18p_4jRzN$Y+1%{9EBR3LMFUapCo-_#S%wtMCB2dkg=PJ}@evBWs0j!XD_% z3`1Y*V?97t5h{PT=!oGV`hv%Rpx&kZVb&Ifs=%&074fs;Dg9+FWZ;I;yUFh-p1>0k-ztRtgOVN+Z*;p4>pfm9` z_QCz=>$$_hsl z<4`o98R(Ppd2}YeLXTV7L&-W}+c4XYgll^d`XHK)r{NE1K+XP55w}A->>8elKH<)f z>o=q4dp3IC18Dun(Is1f-Ekkb!`6p$^|F}>B#dx6`T)5H-7M?SsoD|lMo0cLK8ydN zBVYDkdXjyD2L3k=#IEcJJ9+@!?O%pv^9tln(;3*@_y64_+?AWcqWJ}K$Eq7nqI@ED z#e?Y7wkuE|H?mP^fD^C^PC=gsOVF3ht5^v?iu`YA{UeV^mcnD`KXW_@Z>Wpqu_Jo? zhN4q=eRyklPq;XIHhevNFWiQ9_$}K0Pw1mQzhHsPFszEX^M4ZwE8dQFI1gQtMd<5! zMU<}%KR}n_3v|RkNBI$j7!mo>=zZ1E_L_zr(E5GQx8TKv3Z#Gk?1>9)z{IHd=l4xLOVJT<`+)+QfR#j=)jtWZP1Q8M!rwsY#QkR3hZD+T(|*! zpxhMsndm=mpBwq7(UH9nz8U53V=c* z(cODXhsIVVhg8w34pm@5mRCp5lz^RRH)>cv8D;$glI6S;EoPhQ-JtyaHCJCo>E*jaQ za9Q{&)}nkp`rZB;8rWg9gZ!gXgT=!#=mV%6`XIYH%4ed-doFtaGR*z&e?Cvbse1#B z?89(dxC6amH@bWGpn?7o`2r=<07|0e714I;q5(ERzY|Wy-gs4%zk%$3Mn=M4D4Wm@ zK0=S(m*|N1q7D6xHhe_MH08z6UpN&aUjrRT>#!I4`aTa`;;Ye_o`bgcP)W|e5ig~{ zsahEoJ_vV)zlNDosa~nD78+1T^tkmvr+8qLUxT(kG4eN~0n82`EEVT}Srn{6H`7Px zgXmk#jkt8OSa>x0EqDUf!p`W3Mq^bRhjx5F=HpWIk6BNnPsrcU<6b0tbefu0=u{6x z8yXh*%h9D6i#B+3l+Qy)@(}t+T^`rpiSjMzjO;?&-H$HSzhR*=DW5GFiLz+NmC<8W zC(2t#d8f$t4$s17)EgT4dFXu)pnK?PG~k!fK-Qr%yCwV%sh`dKO~Q&t9+NiDap+#C ziQd=&owB}Bei7Qy_2F&krn?uNk*Cr2UPC+FfY$#44eTeZiwCia@BeDYrUrVTyYy_d z;&}8M@J4isSEFn8DH>pr z{zZjG;RWbvxdYpI{@){EWW_3{k=MdA$oIv%xCrfFGx{O17f->XPfi{7#eU>xV1L|( zZLwaJv~-uF--3&=Bff&C;lJ3)^WURtdN$9(0bKYPox)nx(u|yq9=kEgjcR6joEe#}ih`Zj$9ow4oM9{;ITAe%Xt#3{9T%jMA!8o-lvQl!tJ0jvo( zqk(=N`Mu}>4xz`lc->@8w8PHm^WwsA68b=!hxW6qZZ;i<7o%Vo+ToAkLCl@kdTFyY zz!qE|j@Eksa{-6Xg)fJz(R%NoOS=V~!7tH2)qImB;e+D`^euJ({k$$zKiybAY!h}5 z2cQiMi~I<*oomq|{gz_OVJ>B3QH!7=ERR*rn5ux)r+I4Har zZTRZQk4FQT5%~pZdyhu`Mf96Q4_ZjPmQyrJNDv4~EZ$Z=-u+TjUR9N!U^07U_eb1o|8(kIq1SwBwdx7c_t~B0mfb zM_bR%%*Wo10?jvCbqg$qiC!!6`3?INs_<%h4OgM1ER$D>}kE&=D>{ z+j#~Z;Y;X!-$eOu;lG%h@zy?RIsYX{xMt1KPoutA7q3T0wiLZ#CHiQ79o;j#qr6C) zRIemjuROY`tDrMkKkN|pN87zbbMOBsm=YCkM+15|@~?!O&?VRz`TgjK3!akxKv@!P z_$>7M{=#rvl+OwmqOb4AF!%re_xZT6F8mlB$H4?49~+NFFKG(Rfxv#}ZZm688BJhpxM z_B$0_!ntSwtFbQ@>X14<3w>TpL4Q@R=#Y&k5d}uRA^alz6_294K*uz~(&(eOHoC@* z(I@7qXoCaMO*sOc!Aa=MOhenhFI*PoYqBKVrT;@83_oHkEZix5Bz8a>n1#;7qi9F( zM)`L1J-;7a(<3{lfR7EUgpI;>=pN~f2A&;4!bq`{=oPO-7{sorT{yk z`Ln_)QT`Nq-y7lPa0fb&y_oy||NR#U11Q@qO?7=V-wkcxTy!Qzg*TuL+!^`%(KTO= z{(^c74g7QT{=?`@l<1!BI~r}jym`-mm>jz*VkT$qjW8R498A^Nsk zjMjf1U8+|i{|;vTN%TGmBQ4z{ZNkcE{#0}?^hO)F2yNi9xIQktIm+jUOTy>EH^Pl* zyW7JbdT{<-^S>zYH(=$Sse^XtPpw|)+Fl>!kB2MJhSuQ8_z@c5@7M?rp-WW%v{c?Q zY=;h@D|-K#r*Zzh@j?o`;Zi&uuR+)FZR~~L;i=fPSNfv48k>^82Yn)LL?0~w;2>9!aLQyor(qRR33F@HFfsW|U>$A}Yufy~4dUR8L ziJp=JcsbVTo9fL+uRj?16==ZOS4r66ujnrQH!9?vo^C9H&P+*km!E*vuNSrsyM_JH zPqYjE-_=<_MfH7udk_@66}wvu?Cx&G?(Xg$yBig|ySux)ySuyNtG>@??&kMry?d?e zbI$H_Zp<(sK<(fls0Z63v+pyWcIbB9FvU~jC#aSEgDM=Zs&f@bhtem7(x)+fR;ZN~ zhT7U1P_KS1pbGaj{dD6p<2LB|{r|^2173uTw~SAqcH|w@*KD7l9=+e8ZmaOsoPvH( zJCfFz!&nrm;Yv2I0o7nr({~kh|MxM)AgGm%G){)v^4U;<>!DVP?LYyjYo;np2HQgUk2U>r=+^CbfPv203!`s!CqWvh7m56EAglqk(kn0`dj|QL826Q~ASyKT_hILbH!%5eqM zJDT-Sh3?usY#nE(vO^VU3)NUZsJLlR1?L!78n;0eK5TRMWd@A?SzCBa{x9P_jgP^v0md#hftjsq+otlSG7pq@APd>M+7z1s6S*U_d9D}PJ zRH3d=g@!|2{ZmZ8!noUb4l4d3RHLtrpNv1v&Y#uu*ds#E&;Q2o4EV8ms3%qys6th3 z-U_OL(J(2T4pYNzP%F6u%Rt`-PQz88{F^~7tTQYHM?p1q9_qHd2D$!u5n!OsKO6rT zeH%LZ7*K%;ZJxsDZ~9zNjTf|eBd7*iLS5Y5pziyTP#5uHvu}l-um2A*P=S+XxM1_U zP`Bk1sQdjVOb2}$IoC)gsEer^RN|pfPt0k?nNWG>LN&C+xY4+;5$l)XGztaYFvA_= zOXD}AcVp+&M2Ct?W6Tb9trW3&ps_L3-O&N+R1Gx!O4Dy^>~;c=o8gx6In*`q#pV&4 zI4kutrZwg^mWF!!T??jx&7e-{7^tg%D%A7fDAXxA2X&V`ax+lpAE8#{)706r7_cn! zcu?<*nnG>$AgF|spf19LP+R;Qs^B~04=DdI%^ZD9n45Vbs79(oHR5i-KUbYi;901xeF)|M3F?U%wz*Ri`XhEoJB@l8KxLqw6fisKk+5IP(-xE6-spVXSU!ZtM>I^!5KR21+o;44XU# z-dsZM%q^&f-a|F;)8?+0&O9R2*N8D}o)l_l(wIIs)WS+aHCzqq`w7iqOx^#387RS2 zs4ZRuwIds$3ciL)@CjGwh1{|}6>p?2gORD-TIPUF5%4aSAalinBr<)0Vo)D*XQU>oj# z85*F_3R)Sv8wVRF7-vKIudw+hsDk^U5??a=BUqXF8>qYm+B#cb7V6@y2Nl<;E%(39 z)esc*U=Y;&J!}G9?VS6$Db(#Y8fvH3L!GjVP&;rRs)1)v?-#zAK1O@zWjP+yC!yJ( zuC-b)JM7?Qp!<6v)XMflB|HiBM7#jCf-A;{#&=NH%5N9|BX)4EnF3HN>j@P%+Bn^~ z*th|zA@^QWJc26x-uMkF(I2RlMepd?lR*_u3uVs*{b5;{ANGXGvk5A0C)^BALalf} zC+FhZ2x-vm+T{#f$DtBlvH5f37pN`s>g;^Uy`1gh0>Q11xl zn|?o3+)1dnvDa)KrJGYa0hB#C)K!$(^i{fXALtdjmMOYHJ*E5Fe5i2@RPU3a{CB}T z@ER-wqjh&0s|~f*c2EVo+T3j%0ktRNZ9ca<_kjYIpwRo+)li#w${emjCAtIkcJw72 z5B+*LaZ91>Ym7The+=qsISWDZRPeLfaKTwY_pI*+6M2EVuQ$p!;n7)YV-GK~rM>mJbU{{y}2EnlK1k??A z4(hAHOE$j_wNtmD8h8fPzz3+tzC*1%dT(dvl0jXzm5j|Hc76_)ff9^?It5dWo1qe3 zf=YDL_!7$hC)6qN?&G`w2SDvi8K?$oK*e{oc@L<#3C0;PnqCJNF;L(pkAg=L)Wvol zD!~u4|AV^vBlmSK!lY0Q=ZD(jx;AeIwbC(A@e7R0p>}#5RJ}dW^Kg)u}0Ixz7bPaI62#W=kFh5kG@=*RYOyAV>U7=1*f2c-Q88@1Jhw;z=?tc|JgF=bF zo1^bQ=Q$7+s(>HN2~*j;E>wY5P>oD8{d}lAYiz#9coJ%%*I*j>9_pfw>*oH~Rjr?g z(bb&PUKcY!y=Tb}b=y=leH|!&y?)BSlj-|H`HzM2pKJP+Q2x81c5*+=124f6Fp_(a zvqe>mwV+ne5Nc%|q23eqHv1;19oY$W4v!hHLcR5PVtfPT_XR4C*I94XRLHn-@2hGksN?*Mr)zrcjM`@sRs} zAOl^5W1$jlGlv7lvrwntmd#@ibIyHos8@b}=nq>Pr$K#1a0n{jO{hj6LoMhPj1T`v zulK=z!);~8)KG!`P@U$2+QQMmnek_>biN zSAp#2P{ddfY6W%8u>;J?yt~bp8rMLb)6Fm$JOsJc1iv~8s^r7;6kV*$n@P^YxA&Fetjey!bR z=xZEi4in5_uIbl9-4#2bo_r6X8jd!`Sy5c5c^ataKqk}Yw0TLWg;X@wg=)y%$`oCU z1EE$p)*R;9d<9ekyP*m_hT6(kP>Fv*-9^4*9eXyY0(oIgSRC$xv!L#d8sj`~;N7nF z40I9AgMHu$SPd2%?>wugL4W3ZpdOtsp$es#;51MXs^JE(C+rLx!RJsrReGXxQTKp) zxtLvJ2;!oaK`u=>Pv=*LC*i!DFjO}9|B9k<2H{v)kzd+>z=3p;r7H>b4Fy&1p0R)B`OybZhIoFwmCFHXefddf+A0x$>IsynM!k`YJB~Dq#hv z##+PPa4n1n(*!%Gs4&#LEvyQMLj4HiRoEEDoWcEHm_fH0&V9QXc4Gbys>4n*ogYPB z3H7Lb0s~;OSZA5>g1sB5Yf)Pin8 z?Nr$X&cY@@?cfPF16>?XpgQth==|@kyilK8^?_R1M%Wkrgt`X0FR~vsfJ)@G*xBmD zP!F_RHm?Acw*_1PgJC@{ey(PTb8Wb%E_D)YhOKZo4|Ut*UglgxEugl3B$WOz)Cxbs zLNM-fZ_lr(r~$(0XA7f4or1(R&kFSgNI|H?#Z6z% zSPSYI-yG^u+rjkxp&mS=q4EVm#V><;V6BBZWqV-^-T$W;XbbN^b^Zg&G3rVuQ4;8R z)q-lsA1YxssP}q#p$e6RdQVszs)1(44p0Sq8HbsEGW7f%yx9y?c&#}chAMEu=GSfh z#OAM!Ka62lId?-$s617mFKlV-2$M1I33XQmLoM(k^nCsQkbzeC4tjBMe1fHze_8F^ zmigB>_L0W1P%D}U_1)n)ura&^GsFCA9erD9(WL zMfDnL>!PoB3M7EZnWu%)mxVglflw=G3RR#hRQz(NQ*p+4-}uQGc7u~A9@K*^#Rj+Y z#v(5YJs{dbJ>e#q!)mCHsSZJ{^nuNjY;-x+eNT`3H2HMh8P+ONBDq$(8LiM3m*2e68p!~-{`OSv%+X$6-AJkj56HswK z;c~922wNTd#%)gF-4K7b>ktFINSrY~g?c3ag<)Wm?M{K_Pzk%(d@$7QHv#H7FbnF% zWiiy3?+>64jIhJG8=^wpo^hf4l0zTe{|y@QDnRU_MmgjZgu*pc=RYRqzqiJDtx^ zI~IPo^IV8&jB88)l_v?5Us|YB5df7h7u3aEYB%@4E~1JkbP+W(c81aqfN5cn>32gt zs7^rLc4wfjozGBLedIk(Ts~tJsN1lm&Bwq}%ojjC@}KYF{@0sH@4Zf7W|)t838;?U zP@N8gYH+O0XV`o`RHJKbeh6wO&qKvMgxY}@Hva^5t^9bA)PbHX-I z7u$TO!kcWq-+0ONPoWZhg7IPa{Z3p8sJNU^1&cwQ!m3cGrYTfo?sg1xPI?%Jn_(K% z3g$yyWXqtodJ|OQ)5aUdr%(-lg4%(w2b^oj&zJ@3yFaC&8g35B!{>ht^z0r9^{ih5 zbxO`bb@&r1q4z;2Fb-718KLgu{80YAZN3=lHRS=6U+hE9MVkt0hw?)C2g204{|7Qq zp(RiO>!4P?&v+E7u`^Ix`3`EOf1uvFML+CZl-Z%;b3@%drET8G=AEGOj)aBb1n8^# z{~UwN@EX(>hdtsvc#=R}?P;I_GeB)!0Mscc4Qs*ba5r27)oAOZ-mV>R4Afmw{FrkW zb%9#>OsITEpy&QSZHn747lubrI}-o6!<0|~nV?pf18N6K7;72ZntcFNgX4{}jLVH% zj0cZ%|7)wxp-`vKpzhb$C!7L#pbD3VdIVR4dL%c7x_?`neVB19RN*N$pAWTz%b;F% zS3$*{gj&ec6K3c&Z7;BsX6}Qy5#<@=P+{e9ybs0M!8+;zr@ivsnWNB~vPAIdM6u^`kbEMfMF9&-QHVxYoJj2(^rjH93~ zmTAzl#ZU#-7`H*iA26OZ{Vgc}Cr}sRYp9F(z3KnJm_b)BrgiHID|yzr(wabJ8(cmpc#1=Mms+59KeOA;daPoyWMsqVz;|^#p#_>=W{Vb22dvF^AZTVhvIO#F)k_dI~?wbBBRHMI4?{nEH5F4tIgvNAG zJC)N|#`N`|;#)&C))jL7(;)*ro(7o1P#Ktyhk8w&4AsbHvmZ8|HC~5m;GyxI@wYMj z6~`XOm;$PSEYR~ccrH^Ehk8tvGX_E>u5WAu71+}_0BS|UpjJG=xDcx0Eyg2IepjFt zcF*RIuCRU?-k?z8Z)W&o^u6i?#(+wg(3la*KR;B1#f+6rUmt2A&1~M@?A?rmpl64# za{nvQWOJNhoNtcHjGK)I%zoB*#dzE7k8J+l_zh}-f6VTC&8ZjLn9$8YD@b9AEH=+& zEN-k~_6El0P&?Aj*bgetSmO++ceYE-e#-Q>jL)GObAPeHU#Oi3f8Aj;D2KQj}o?rau6w=XRYn#TBT84;_Q+3seKYq0Uv<8%|>pp!Cs= z2~3{~YDY2}^FuXI-dNk%!t7l=bMC((4D^-dM5tG>B_0Dm6bJPnIcoFUP=#MW75Zch zbJHml6KV&O+B^-Ee|D%h{{^8g%34s5_Qs;_|1Jy^I0PzSw9SKzvy2PPz5;4xn~eKS zf5zt5jE|x6elYuY==n(fmZOgcJ>P>%YKrVoE6WE}pq#Omu{qQ!>S7#b`e5S{<3{5? zDF4&Od#3*gRp;+5?tcxU-gY`lVoVM7NcK18fqFeJ0kuPcP%CQy)o63mcQJiGn-77? zKh8MExW>5WHut|0oLv<_m1Ni!LSizEC-dpvC-X% zfj;Kw2=xWpbm$Kcn!`J&gkOze?l}pfLFwZ{tt_SK(?ac7W~j#V*t{r|e|e||YCC$j ztC2ahF+(?FU*lloD5wMzZ9d25i;WwMdtpTUPC+$t6{_HU<1^!154r!oFi_&(W(a@Z znMX4wf=ZCym=)@x%55xdtY!9AHtz_PccAIVLNzqSI7fQj|H~N2ajhA4$-w-G%}?9> zD%4irvH1h2_YKc&{ub)1kS{h5_rNI_#pq{D4plEB^t}G(VW5H~jTMZ6Q19>SLOnQI zo8Aqzk`YilG0El&%)Schr=U zb}@TzsM}|_afWfVaUWEki#ES!{AhZgM~*$lBe%1XBq+3!bjCbTD=Y)mKsBf@{_8+p z)lE#_7OGGesQ7`VpJ4N8P>n7%?lApnsJPp18@w=nHHLZYI7EYLAQ9A6of7Jkr_8V? zYzKAQJ~Bpm;@rM@j4fbp>{FopP8q+#7R=qro;q)bM?hUXi(px}1(t??VLe#tne+3Q zi(q=@m!Q7=@gEF;0neSc>CKEopq?uWp+5LM3H1%2=TP~Qzwmqy&+Qt(pel+zP@hCa zed&BVq#)Fao57l}BUFN;X8#9EFi-u;`QWH6)W@d_VMTZcs(}ozoi9GC!PLwsz8n4}d&tKmFcE901o?idH}PhE*gyp%>eVn0FxNh)GvkZ?KkFt!slYyn4!pU4s3 z^pkC8mlLmRuAQF0E%Z(UnN4Q}Il3_3K+c!2pI%aN58 z#tF3(^2@oOV$gWou zJC5ojiI%Ghav5WY6eP(%RyqJ?L^+NG!HgSIq=>C(537;XrrGl_BJo+t^$4F38Ab#3 zvA<$r15gh4#CWcM94Sx>V;_PxSrZ2+RGk84YzN{}^diAmuvdf=ZTrueeI7~uDO|)> zn3UBPHCrVXcb0-9n76YyPh(c!HJ_xNFf6rT8FP~$L>e$oX{%{tNwYIQ!#JLuf)HOH zR{9_LKGI|bv*kp$n#CkSe}P8EV3W8@QM3id#uV_w;ZmqAb6oiHnw3i)*fxhJrY?ym zGOt0bWHdg>h#zi=%b0#E^ZlkfgsuY(NVc=koKc+T55ESKE1Ip_i^EuwNY+whEY7V% zT?>`*>y54(x^wvU=I|xa6z1JRH697QB$x&V(%1v$!-!32x&9-!q;=#hte7o4kKzpu zEm>7nf~vC{vk0uov4@~eB>zRB+CfcTBy=~lHN@s?lKOajCBsdk$`TbG<{(RamXRNu zMBmlliLN}hOSEzgzoFJjFFWC3(0!%@$y^x6meY+|dx$MY>=-!Ai#>bBZ1E^qfnt&?_{GH zTQ-)Yp=C753!yuQ{RYQh=B3~_3O*!<53!Lc+}4UV#kM(Af{yyRfhrU{&uX7@BqV|4 z6ajo)?U8BNqmk@1+y~RM`u|8glJQ@f9*f^Q{F872=Vmco&@U#kK8>wr9v9y$6mA5= zsS%oM#=+gRP}&I+Sc+C8KFV(t^SViSwbrdi;Cf zHxd18iVUP!h{T}Tdf4OH>AXjL3F1PexIal7SwInzoxmYBL5pah4@FWluS5WUALBcLTg5Sc-#0G{Un6CEhZY3^c~ohYTj8U}IX$NVRN?N8m51O@-+!?<{TKqLPp4 z1DG$zcMx@6lK(ler|^Fho)e}o*{@QhKLP0pPKrZ_%%-{MthE4%Dw9AGl_G8N-GzQM zi6te8yMbO(n_LYkw2x(HA-+34W3bm^9wNasFpl|qeWN!$1*79w3a4*4cQwZy6qsVo zoG0OJniyw06_;kFaGa%)%f!|t^A^UDtRWRjMSKS0t5}X0_=QL`n!QOAQ}p^jg`{_J znnD6eHX1lf@Cge3fw$2gBlwiL8}XZke+*A1t`u?|Cr?Fo zq+gXqV9VxP$fV~_sBP@O<#otA=2WCPpuAVq8$EhXiU{c!yHb2OolBp>=_%v%u`l_I}rBAYc3m+@%)#>1lcW@3DiajP(_zbVf8axFhA z&WtiUbG|*`k(DI<&8QZMK9hK*=@ZcKD)hgsu`R^TXa1MiKvpTy@3Jk#(VMuUGjX0rw~`Au-oYs|9WN*00qoJx#iq$N963lh z09#pBQ;9@VX*iM<+0MKR4HqD80hCO~H!eQ>4IkG=?3u86>;9LNBzXZGB#kkKNFf^9 z!BL39R|#B5vI#U*jV7ZrZcfa0oF`apNL&`1-$W4^{~;j;n21{CDSnB(rF8y}Q}8ay zE2BtE;?0cjpc_xO68;(qzdYR;pF|&t6@P&VNt6Kp*x14{e@)V-#Oy+sSi3=CNq(B2 z&#{gCe#G3TxunEIMpscU*eP+GWgV}f*fk6z*y8RaT+h)EXFv3kh!k3mEuA&AorKfT z-KJ=Wbj9|8Nlg5yaEGmYD)X7P%7GL}htEE8 zZ9un*8nuZH5x(c;ktJ@sNHi;=q$KZc4NasWNp@D1j)3ggQiNLV4aP@kFrOuBK$DXE z7FURQ1Liwu#+TfZw6>rE*0g&J-5s$6atL{u&qb1!*4!z4o-peo<|`P-!uK!w6}AYEll}991$^g7Laz1XDDKP0SF@}*e@)00U4`iS8cq?c(-i3M zOAn85ND>&=umer-Ux?kGm|-LyN;4UP0)EB{O7_ji?M+L5wDOMS3?XA}7@svRQB@*l zh1$=$jAN2154OLs7gdt5tW@NfM%*1jcGyX5g1$O=|AkuSUgDZ?48o@YwPJ_m@_s{0 zizze{WlI%Be%Oi1hJG$Z?_gU`!QLDtu*bAQ}BpFP?aWr?Ec^UYRf|9}LEH`eLrXN8A5NhZ z_|2il9ozqmjO(EHyu|hcZzv|oO`_0p3a5l9VpAk)C|etf&n9^%PZB3$1NN@yE>NUL zs0CHQ_c_gdAV(1Pu67#v4wx&Co6a_bN>Yj>S8$eik;sb`C1%{4gn99s$98{3e~qNS zNifM)Je2W$3e+UIk3A-~+G;(?_@_HLR^uaCZHsa5Cm@|AnG5gOPL!osAVmrjl$3y4 zrdRNFn&<(WS+ZReuS&x66s%)@cbJzWUrBUPEPqa0c~9nlh|RBWvs`2cT2Msa!cMPM zVQj2Ng!?{e`&-B>yei;vk9l19i1zjpHOJQR6MIqoS6EB9xH^)_4?Eu<^T;v$CHtu& z8O=V=V?37@XXE>c)>Hi7p6S+P{pK8%O>MxsJJUc~oUVGT+<55Z`I-g_QLG6?f-I(t zH8+Cfc}V`8qawEM_+Gb0Ct041`1T_2cYGyj^$~AuOAw9~coY1G;PDjD&kM~#cNpiS z=p_l*k?{D(!hVzjg;^axg7iOWfc`x`y5gcR{>50bj|E7MkgGZkG_`q0y+xK}L=l0+ zcL^v;@GQo;Ng#>OxI6k^=*ODB^oLnpFA}CST{TOZn%$d7Y%3c3!?+vq{J}?$?4x)? z{92-uxQmdqD9Vwnq_lNAgzhfG?ILjd`PJ+w3Ual4H%EN{c$|l3vx(?VBd!QAmf9?7bmtNxwqP~kDyQT ze>F0@QV|d$Eh(^>pq425(TwCO?N+vNmY~Uh6S}LD{tKExM7HO2zT@c2QIG|;rkrF3 z{6gd%+FD}^?nLGqRFLSq?hVnuLbsdP1Ez0H-qP60U^_c-oTbFduLA#o~G&P z><~^fF%GcJYyqQL6MqQqYa70thFY+iyD%RsIELR7?CovEli8s(jN@B_FG8J<=Hx4B z^RdKiVNuidSyC12DmBV}1h2MY=jbvT#ok-;3KqPk!s z2&N}dFMPfcxRXMe@O?w0t88ap;5P)lWCi+z6n|tnrF&uHv*hZFZ6A5A6XSWB7H~Ro z)xmIsZVz}2GIGO_bgl&tASfpZBoP>IA+8;}P$E>J(~jBm?`!OD7zN;aiE$%*CI48= z82AXb)`$D=EkPPqF3G?ON}wC)Qjn)8^R@Ju-};fQ9$_Bx&jt-x zPb7RBQhyBT*0EWaSx*P_lAYLAQ2s1>{X{|q@+GFvlvXPo?fld09Y4M5kpLWe;&7Uv zs{|z@@m$7JNgj=$;kLl+_(bD zt+!Va_XwKVN4(^z^-~-Ew6lJQjreGG`Gg_f-{z~CH?!Ve&~s93ArhaszT|$)rg(GI zVLgx0b;B93PNm2ReNiG@B-x*Cs!5`^wm`*7 zvJe|+3)P&zll(tP!#F(o?-3jHzeY3iu9-q(&21V*M9;esAp`A@y)lFQKJ{L|38Btd#spsXXZ4Su3ZpjmGCF?2N9JrBlioww#6d zOCsWvkG!65s)N*YvzvNL@jLDKG;|$Dd5yMz;GFD#>*9*jvM6wtfMyh#VT~&BHrA7a z7;khVN!E;G4=1$~hoql1l`;5WSk^d(9@3yHhx-uHmSFyga?9u;G2>Z;tWcjOu_=3) zRL$9gYL+s@wwAI@$+4B#U5wjMdK|e=a}*-SB<8D$$z%IfTYm>8CQ8XD0wpPME^KR^ zNusxmfFJpV?2afUM-LL0mj?+-7l`v2`Q&Z}Jq=IY)}? z@4$D#p&t(MaCk*vF`S~4@HM*aumSQwD zHS5RxF3IQEGV55*F=k&vL$k0Ix5CQ(Gm7Wa4el?T_L$)wjtPS=M)Zo6{x7Pe)XmEl zE`oD7cF^M@7BCU+L7$Dfc|D&kp1^v7&N9Kw>JF=*jJ>#dHxVNl zK*zg?X~KA$ts=VZh{u6{!s9OqYj%yN&~RD(j8qH~jvzs75 z9#cFHOOQOHsVi_TJMhW2>N5$)k!uVw{qXHZ6Z5ReY2+=3e@lGZqn}TnT#TpdJ_#+C zG2|oo5=rh@v9F9@keK|g=P)hJe6{nW*wgrh!)Fz78*Sxx@q5SoEq;d?OCnP6D)Vt1 z@mbsjn){@eoh&5$L4rweK1aFWjgh@#x&LB1K+*Zc2XVAuTpr@#%E1QQrB*D$1~Lw` zO;DZP#BFBoXZCJ~ zBk(H4L!=S~FId6;<}ceij;8E>Q<{_%rRYHByUlkW97wKc78BhrmD@Tq|IvA23rx-m zf;l>nK=O)!&ona%`(RsrV;Yn+L;srCHyj(W*Tgr8V{(n6cyU&H23r*L_pPwZyNP>= zZH$@=xiUV|T`g9cj(`pXOD0k1EQxQ}R(7VT@z|%LYsYbi@pD+3*f%7L&-gV>ZbdIS zhc1|056GK_<1qFKGm1NB}+Qpf}63T`sk)( zlT@WZTicnF_*`fF%ofs+#*<*r${|UGJ~OeYd_BK}h=&HnZTHSc4V%eD+YJGLIv|ma4n`0#@3s5^EJ(eLQ|Iya< zi1gE0^IBpKkgFZ@^!W9~mW!j9oq)5%1kl1t>@CoD=Rm@_o@2-w+{K&wDKqhpiOoVx zLi&klv3qU*Qs7!0yCkuma4hdH$9v+s)B6?1l56<%q0T&X59zBj^B{aCS!}SaGZy)7 zSnewNPLdZ1im}kvBuS=B$R8U0j^lhbV-|txDFw$M3d~{tnnn*{tAkH-ij?C>&C#Dc zec^9%W}vaBy;V^@a58>P&hfJZ0Hm68zn@=L~30rLq{L``n>xel(_8270%D6u94_Qb# zd|SbEH2jqOf5_9y8oy8MWyafx+3&^qABsZKoSBTT#tOd=nBFJy+bmo6jYOWF*I0T9Tx}R+2WavT>E6WUPKRu_Vcgo6|Ci?4U@9__FAMwrSFx z!B*bZ(2*o%8GBhV*=t&!4HS_S!KWlSBp+ztmgPzZcTqRH=Wlyq?98h2a#ReJOhE-m z(B2waLV|~uShiXuxJ$u8=(}3tROolhh(tjz*@<5+^0Xw+Qu4Xxe~x&j=YM;uLC}3$Qi{J)LcL6G=T2bVN8i*PgZpkhrbk(bb=8`&Tm6- zHKAw(d}hH3_(__R_!SIGG07AMu4*(<3g1f18{u=t3N}S|gYjMbE3=TcI{(^@APn(n zA|k~mF_ye1@EXn^?L6LLT*Wc{@88L0yFyb3X?81?AuPa$*g4papnplRp61sV+kKi_ z1SRX-GEn%eXUe0Ul}d6`>?DnRw?JQ#MCEAbm|d0d%WJm6B&=xXROXkA%TqW+nlksN zhGZ2v$`Kcd7>Tp)WVcToX6^o#+VcDuB1W8IVZe-)h1V*M%43ZSJV*5!NmIT{F zHJB-QZ9K1pb&isM2O+C5-?0=i%q=DU zM~q}paPs(kM%**hel{lT8t!RH_mmQA2r=! z0Jo7R9yKR0mW(F%7ZzIr`*mzp@Xw8H2eu35Bfp;HZbN@VVQ2KE@hynHK*-Nqh9}7n z3{6P%jj`kghnsO#0t-+yBevEwng`~y#qGfs)0%xlGcidlS&#h!d_>%FbYIDRA6-j) zH*##|IOp-@AvBK3Q@d>Y+AdC{)8Q2RgwtD2_h9V*NcaN#Hf(8OBrel8+EtSOq^aRF z5DovX=(36#(?~gMIwL$l{B7#G8gulbKsX8FHj3kmT1jOPvM8fqH zkp#n(#C=8A3)^`T9wNsY;&w5Yc#&^%@Z>~Zu?jAg%ClgP#q&=v;i)J$gWkJvd^h_i zQk^7y2D}oomSw>YN#VY0W?!;q!$p#Uit}t7gOHL`Kf}BNX$N2%7OLbu%1O@C%1v^7 zw78S_g+ccpvC;84j!n{(mX5Hx%J^01e?Pn4;}9abFm|%}Ut6wh-WI%%NX&G7H-ief|E5K_wEL!uSrSJ{a>dZVUS| zPfNGytf?qm9QE)$h`ud}8d|cK?8rC#vk)hVV>^`E;x4mu5g4Z?E*?G;@VP}}FZ9jS z&bEbnF~p;pB=8=NCrqE7c@xHmuzj-&sV51tY6Ud+S{0E86sXV6^hQ^dypwE~d}-#Q z?NBN54kX_tY&FXK3K;QG45tnEts!1+Zo5j)du}C61!=}mjuz7uVVZXdld7{ zfW0`4bmIs^j&T%}tfcXZ_(n(9m$(|}BI=vz;pl8H&ZkiJqI1bUoFw0jU9g2CvE%_= zXCT>OY<{Mb{+IbSw%f}KMk99)xKs|vb;gxgU|pK`!j@W28-qV4^-Ae}jJ_9re70SC z#5gNQVtR^?O_GT5JQma&p9r>K>3gs+Np3iV-sV_eZShG?Y!7N3w=?&G9Mf5kQkZ2IW6|8s%>_cd-Kg9=F1Mz8KILBu@ z3(DJ*I^l`mZi@=S);cUV!XO;=iFj*P_nyS*q@= zbI^D5gAsj@l^tnZA9f8t?2nNT3H{ zd=jQ3iDW-TC29V@BGTQW+o9-Bv#P2j8)iO<(O;y zPg;$=9{-d|&2})!jYA(+`;bG@3+L60GXw{ug$`MB%DDZ9}84)ev!*Gl)86Xi`!I)`ug=-wXG;wiww;U@J%d z{EW*|YZbAJ&_%{)E5{c4yTJT3y-s62U7#eP@e6%U!KXI4PoQ_}bE7mA`Ho>Wipm5} zqJShm<8UOM2~&c5HT?4uSBM(7n5V~9kNGj? zF=#NR{)0t05$x!L^I%H~_Yu>E9O2+O+KGZ+BH|ZQw^n3VIM;g?(G6vk!uPe!HgeT{hIi`Vw@KJZ`KaTU%T!z0S3%)C0 z2IgTHN3gwY5{Y}L4^2usQcP0G3iyy<4$YMbbrQR=0gLdf%P|q#6MVcF$26Zr#17{u z&VHxhko?0h0R<)9{mksvRgy*Y2p|DK^%?rUicacNhSi%llUTAl*Agk zhkm^-3k#Ot33g#S2_^dM_B%Pk64Qj0?ZB^|6+Vj31@fI>Q5(on&|+$$%Z0zheH6oX z8i+#RW)g>%{|LxRa!GdMWZS-n=!$zRys@UhT=HzeR*7+Tt&n^tS;Rf&l5gbdOa4;O zm-}iJ`PS*DG4hzha)OdE-bVKs2<(INCXyz#o3N+tKx%xvuotA*cIhrj6W=CBbvI-(S_#SwwrNSz;v3wN4_}Zxldd@np#OyI}2EX5w^WbI?Nh)fnQH5S&w*YaYHnY8)hkE7;5X62#N1vidYA~; rw~u-r=6B`odvbeM%pL9d-gVC=EPXn0@v{{RpN}53y<;cuz61Xs(bsJ> diff --git a/netbox/translations/zh/LC_MESSAGES/django.po b/netbox/translations/zh/LC_MESSAGES/django.po index cfd4ff319..1679a30a7 100644 --- a/netbox/translations/zh/LC_MESSAGES/django.po +++ b/netbox/translations/zh/LC_MESSAGES/django.po @@ -24,7 +24,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-24 05:56+0000\n" +"POT-Creation-Date: 2026-07-30 05:52+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" "Last-Translator: Jeremy Stretch, 2026\n" "Language-Team: Chinese (https://app.transifex.com/netbox-community/teams/178115/zh/)\n" @@ -187,10 +187,10 @@ msgstr "站点组(缩写)" #: netbox/circuits/forms/filtersets.py:249 #: netbox/circuits/tables/circuits.py:125 netbox/dcim/forms/bulk_edit.py:176 #: netbox/dcim/forms/bulk_edit.py:339 netbox/dcim/forms/bulk_edit.py:696 -#: netbox/dcim/forms/bulk_edit.py:906 netbox/dcim/forms/bulk_import.py:148 -#: netbox/dcim/forms/bulk_import.py:256 netbox/dcim/forms/bulk_import.py:365 -#: netbox/dcim/forms/bulk_import.py:656 netbox/dcim/forms/bulk_import.py:1701 -#: netbox/dcim/forms/bulk_import.py:1729 netbox/dcim/forms/filtersets.py:108 +#: netbox/dcim/forms/bulk_edit.py:906 netbox/dcim/forms/bulk_import.py:149 +#: netbox/dcim/forms/bulk_import.py:257 netbox/dcim/forms/bulk_import.py:366 +#: netbox/dcim/forms/bulk_import.py:657 netbox/dcim/forms/bulk_import.py:1789 +#: netbox/dcim/forms/bulk_import.py:1817 netbox/dcim/forms/filtersets.py:108 #: netbox/dcim/forms/filtersets.py:258 netbox/dcim/forms/filtersets.py:390 #: netbox/dcim/forms/filtersets.py:500 netbox/dcim/forms/filtersets.py:895 #: netbox/dcim/forms/filtersets.py:1117 netbox/dcim/forms/filtersets.py:1198 @@ -317,7 +317,7 @@ msgstr "接入点A (ID)" #: netbox/extras/filtersets.py:503 netbox/extras/filtersets.py:562 #: netbox/extras/filtersets.py:623 netbox/extras/filtersets.py:662 #: netbox/extras/filtersets.py:695 netbox/extras/filtersets.py:869 -#: netbox/ipam/forms/model_forms.py:523 netbox/netbox/filtersets.py:319 +#: netbox/ipam/forms/model_forms.py:523 netbox/netbox/filtersets.py:324 #: netbox/netbox/forms/filtersets.py:32 netbox/netbox/forms/search.py:20 #: netbox/templates/htmx/object_selector.html:28 #: netbox/templates/inc/filter_list.html:43 @@ -418,7 +418,7 @@ msgstr "接口(ID)" #: netbox/dcim/forms/bulk_edit.py:142 netbox/dcim/forms/filtersets.py:227 #: netbox/dcim/forms/model_forms.py:144 netbox/dcim/tables/sites.py:74 #: netbox/ipam/models/asns.py:164 netbox/ipam/tables/asn.py:37 -#: netbox/ipam/tables/ip.py:126 netbox/ipam/views.py:383 +#: netbox/ipam/tables/ip.py:126 netbox/ipam/views.py:384 #: netbox/netbox/navigation/menu.py:189 netbox/netbox/navigation/menu.py:192 msgid "ASNs" msgstr "自治系统编号/AS编号" @@ -466,7 +466,7 @@ msgstr "服务ID" #: netbox/dcim/forms/bulk_edit.py:628 netbox/dcim/forms/bulk_edit.py:849 #: netbox/dcim/forms/bulk_edit.py:1103 netbox/dcim/forms/bulk_edit.py:1202 #: netbox/dcim/forms/bulk_edit.py:1229 netbox/dcim/forms/bulk_edit.py:1773 -#: netbox/dcim/forms/bulk_import.py:1541 netbox/dcim/forms/filtersets.py:1283 +#: netbox/dcim/forms/bulk_import.py:1629 netbox/dcim/forms/filtersets.py:1283 #: netbox/dcim/forms/filtersets.py:1613 netbox/dcim/forms/filtersets.py:1829 #: netbox/dcim/forms/filtersets.py:1848 netbox/dcim/forms/filtersets.py:1872 #: netbox/dcim/forms/filtersets.py:1891 netbox/dcim/tables/devices.py:804 @@ -495,12 +495,12 @@ msgstr "颜色" #: netbox/dcim/forms/bulk_edit.py:1033 netbox/dcim/forms/bulk_edit.py:1056 #: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_edit.py:1146 #: netbox/dcim/forms/bulk_edit.py:1197 netbox/dcim/forms/bulk_edit.py:1224 -#: netbox/dcim/forms/bulk_import.py:214 netbox/dcim/forms/bulk_import.py:300 -#: netbox/dcim/forms/bulk_import.py:829 netbox/dcim/forms/bulk_import.py:855 -#: netbox/dcim/forms/bulk_import.py:881 netbox/dcim/forms/bulk_import.py:902 -#: netbox/dcim/forms/bulk_import.py:988 netbox/dcim/forms/bulk_import.py:1117 -#: netbox/dcim/forms/bulk_import.py:1136 netbox/dcim/forms/bulk_import.py:1515 -#: netbox/dcim/forms/bulk_import.py:1766 netbox/dcim/forms/filtersets.py:1155 +#: netbox/dcim/forms/bulk_import.py:215 netbox/dcim/forms/bulk_import.py:301 +#: netbox/dcim/forms/bulk_import.py:830 netbox/dcim/forms/bulk_import.py:856 +#: netbox/dcim/forms/bulk_import.py:882 netbox/dcim/forms/bulk_import.py:903 +#: netbox/dcim/forms/bulk_import.py:989 netbox/dcim/forms/bulk_import.py:1118 +#: netbox/dcim/forms/bulk_import.py:1224 netbox/dcim/forms/bulk_import.py:1603 +#: netbox/dcim/forms/bulk_import.py:1854 netbox/dcim/forms/filtersets.py:1155 #: netbox/dcim/forms/filtersets.py:1268 netbox/dcim/forms/filtersets.py:1401 #: netbox/dcim/forms/filtersets.py:1492 netbox/dcim/forms/filtersets.py:1512 #: netbox/dcim/forms/filtersets.py:1532 netbox/dcim/forms/filtersets.py:1552 @@ -559,11 +559,11 @@ msgstr "运营商账户" #: netbox/dcim/forms/bulk_edit.py:719 netbox/dcim/forms/bulk_edit.py:778 #: netbox/dcim/forms/bulk_edit.py:822 netbox/dcim/forms/bulk_edit.py:942 #: netbox/dcim/forms/bulk_edit.py:1747 netbox/dcim/forms/bulk_edit.py:1791 -#: netbox/dcim/forms/bulk_import.py:105 netbox/dcim/forms/bulk_import.py:164 -#: netbox/dcim/forms/bulk_import.py:281 netbox/dcim/forms/bulk_import.py:390 -#: netbox/dcim/forms/bulk_import.py:621 netbox/dcim/forms/bulk_import.py:781 -#: netbox/dcim/forms/bulk_import.py:1258 netbox/dcim/forms/bulk_import.py:1503 -#: netbox/dcim/forms/bulk_import.py:1761 netbox/dcim/forms/bulk_import.py:1824 +#: netbox/dcim/forms/bulk_import.py:106 netbox/dcim/forms/bulk_import.py:165 +#: netbox/dcim/forms/bulk_import.py:282 netbox/dcim/forms/bulk_import.py:391 +#: netbox/dcim/forms/bulk_import.py:622 netbox/dcim/forms/bulk_import.py:782 +#: netbox/dcim/forms/bulk_import.py:1346 netbox/dcim/forms/bulk_import.py:1591 +#: netbox/dcim/forms/bulk_import.py:1849 netbox/dcim/forms/bulk_import.py:1912 #: netbox/dcim/forms/filtersets.py:210 netbox/dcim/forms/filtersets.py:270 #: netbox/dcim/forms/filtersets.py:413 netbox/dcim/forms/filtersets.py:528 #: netbox/dcim/forms/filtersets.py:941 netbox/dcim/forms/filtersets.py:1064 @@ -622,10 +622,10 @@ msgstr "状态" #: netbox/dcim/forms/bulk_edit.py:195 netbox/dcim/forms/bulk_edit.py:361 #: netbox/dcim/forms/bulk_edit.py:486 netbox/dcim/forms/bulk_edit.py:709 #: netbox/dcim/forms/bulk_edit.py:834 netbox/dcim/forms/bulk_edit.py:1796 -#: netbox/dcim/forms/bulk_import.py:124 netbox/dcim/forms/bulk_import.py:169 -#: netbox/dcim/forms/bulk_import.py:267 netbox/dcim/forms/bulk_import.py:395 -#: netbox/dcim/forms/bulk_import.py:595 netbox/dcim/forms/bulk_import.py:1521 -#: netbox/dcim/forms/bulk_import.py:1817 netbox/dcim/forms/filtersets.py:145 +#: netbox/dcim/forms/bulk_import.py:125 netbox/dcim/forms/bulk_import.py:170 +#: netbox/dcim/forms/bulk_import.py:268 netbox/dcim/forms/bulk_import.py:396 +#: netbox/dcim/forms/bulk_import.py:596 netbox/dcim/forms/bulk_import.py:1609 +#: netbox/dcim/forms/bulk_import.py:1905 netbox/dcim/forms/filtersets.py:145 #: netbox/dcim/forms/filtersets.py:204 netbox/dcim/forms/filtersets.py:237 #: netbox/dcim/forms/filtersets.py:374 netbox/dcim/forms/filtersets.py:459 #: netbox/dcim/forms/filtersets.py:480 netbox/dcim/forms/filtersets.py:863 @@ -716,7 +716,7 @@ msgstr "服务参数" #: netbox/circuits/forms/filtersets.py:325 #: netbox/circuits/forms/filtersets.py:341 netbox/core/forms/filtersets.py:78 #: netbox/core/forms/filtersets.py:150 netbox/dcim/forms/bulk_edit.py:867 -#: netbox/dcim/forms/bulk_import.py:504 netbox/dcim/forms/filtersets.py:203 +#: netbox/dcim/forms/bulk_import.py:505 netbox/dcim/forms/filtersets.py:203 #: netbox/dcim/forms/filtersets.py:236 netbox/dcim/forms/filtersets.py:1054 #: netbox/dcim/forms/filtersets.py:1207 netbox/dcim/forms/filtersets.py:1219 #: netbox/dcim/forms/filtersets.py:1355 netbox/dcim/forms/filtersets.py:1482 @@ -812,7 +812,7 @@ msgstr "描述" #: netbox/circuits/forms/bulk_edit.py:192 #: netbox/circuits/forms/model_forms.py:198 -#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/bulk_import.py:1494 +#: netbox/dcim/forms/bulk_import.py:1549 netbox/dcim/forms/bulk_import.py:1582 msgid "Termination type" msgstr "线缆接口类型" @@ -886,7 +886,7 @@ msgstr "运营商网络" #: netbox/circuits/forms/filtersets.py:393 #: netbox/circuits/forms/model_forms.py:399 netbox/dcim/forms/bulk_edit.py:372 #: netbox/dcim/forms/bulk_edit.py:1301 netbox/dcim/forms/bulk_edit.py:1737 -#: netbox/dcim/forms/bulk_import.py:286 netbox/dcim/forms/bulk_import.py:1227 +#: netbox/dcim/forms/bulk_import.py:287 netbox/dcim/forms/bulk_import.py:1315 #: netbox/dcim/forms/filtersets.py:421 netbox/dcim/forms/filtersets.py:919 #: netbox/dcim/forms/filtersets.py:1990 netbox/dcim/forms/filtersets.py:2030 #: netbox/dcim/forms/model_forms.py:312 netbox/dcim/forms/model_forms.py:1298 @@ -943,10 +943,10 @@ msgstr "线路类型" #: netbox/circuits/forms/bulk_import.py:102 #: netbox/circuits/forms/bulk_import.py:228 -#: netbox/dcim/forms/bulk_import.py:107 netbox/dcim/forms/bulk_import.py:166 -#: netbox/dcim/forms/bulk_import.py:283 netbox/dcim/forms/bulk_import.py:392 -#: netbox/dcim/forms/bulk_import.py:623 netbox/dcim/forms/bulk_import.py:783 -#: netbox/dcim/forms/bulk_import.py:1260 netbox/dcim/forms/bulk_import.py:1763 +#: netbox/dcim/forms/bulk_import.py:108 netbox/dcim/forms/bulk_import.py:167 +#: netbox/dcim/forms/bulk_import.py:284 netbox/dcim/forms/bulk_import.py:393 +#: netbox/dcim/forms/bulk_import.py:624 netbox/dcim/forms/bulk_import.py:784 +#: netbox/dcim/forms/bulk_import.py:1348 netbox/dcim/forms/bulk_import.py:1851 #: netbox/ipam/forms/bulk_import.py:207 netbox/ipam/forms/bulk_import.py:271 #: netbox/ipam/forms/bulk_import.py:307 netbox/ipam/forms/bulk_import.py:538 #: netbox/ipam/forms/bulk_import.py:551 @@ -960,10 +960,10 @@ msgstr "运行状态" #: netbox/circuits/forms/bulk_import.py:115 #: netbox/circuits/forms/bulk_import.py:174 #: netbox/circuits/forms/bulk_import.py:235 -#: netbox/dcim/forms/bulk_import.py:128 netbox/dcim/forms/bulk_import.py:173 -#: netbox/dcim/forms/bulk_import.py:399 netbox/dcim/forms/bulk_import.py:599 -#: netbox/dcim/forms/bulk_import.py:1525 netbox/dcim/forms/bulk_import.py:1758 -#: netbox/dcim/forms/bulk_import.py:1821 netbox/ipam/forms/bulk_import.py:49 +#: netbox/dcim/forms/bulk_import.py:129 netbox/dcim/forms/bulk_import.py:174 +#: netbox/dcim/forms/bulk_import.py:400 netbox/dcim/forms/bulk_import.py:600 +#: netbox/dcim/forms/bulk_import.py:1613 netbox/dcim/forms/bulk_import.py:1846 +#: netbox/dcim/forms/bulk_import.py:1909 netbox/ipam/forms/bulk_import.py:49 #: netbox/ipam/forms/bulk_import.py:78 netbox/ipam/forms/bulk_import.py:106 #: netbox/ipam/forms/bulk_import.py:126 netbox/ipam/forms/bulk_import.py:153 #: netbox/ipam/forms/bulk_import.py:181 netbox/ipam/forms/bulk_import.py:266 @@ -1008,7 +1008,7 @@ msgstr "操作角色" #: netbox/circuits/forms/bulk_import.py:258 #: netbox/circuits/forms/model_forms.py:402 #: netbox/circuits/tables/virtual_circuits.py:109 -#: netbox/circuits/ui/panels.py:179 netbox/dcim/forms/bulk_import.py:1358 +#: netbox/circuits/ui/panels.py:179 netbox/dcim/forms/bulk_import.py:1446 #: netbox/dcim/forms/model_forms.py:1372 netbox/dcim/forms/model_forms.py:1641 #: netbox/dcim/forms/model_forms.py:1822 netbox/dcim/forms/model_forms.py:1857 #: netbox/dcim/forms/model_forms.py:1982 netbox/dcim/tables/connections.py:66 @@ -1036,9 +1036,9 @@ msgstr "接口" #: netbox/circuits/tables/circuits.py:140 netbox/dcim/forms/bulk_edit.py:348 #: netbox/dcim/forms/bulk_edit.py:462 netbox/dcim/forms/bulk_edit.py:701 #: netbox/dcim/forms/bulk_edit.py:750 netbox/dcim/forms/bulk_edit.py:915 -#: netbox/dcim/forms/bulk_import.py:261 netbox/dcim/forms/bulk_import.py:371 -#: netbox/dcim/forms/bulk_import.py:662 netbox/dcim/forms/bulk_import.py:1707 -#: netbox/dcim/forms/bulk_import.py:1741 netbox/dcim/forms/filtersets.py:116 +#: netbox/dcim/forms/bulk_import.py:262 netbox/dcim/forms/bulk_import.py:372 +#: netbox/dcim/forms/bulk_import.py:663 netbox/dcim/forms/bulk_import.py:1795 +#: netbox/dcim/forms/bulk_import.py:1829 netbox/dcim/forms/filtersets.py:116 #: netbox/dcim/forms/filtersets.py:369 netbox/dcim/forms/filtersets.py:404 #: netbox/dcim/forms/filtersets.py:455 netbox/dcim/forms/filtersets.py:508 #: netbox/dcim/forms/filtersets.py:860 netbox/dcim/forms/filtersets.py:904 @@ -1160,7 +1160,7 @@ msgstr "联系" #: netbox/circuits/forms/filtersets.py:239 #: netbox/circuits/tables/circuits.py:135 netbox/dcim/forms/bulk_edit.py:121 #: netbox/dcim/forms/bulk_edit.py:323 netbox/dcim/forms/bulk_edit.py:890 -#: netbox/dcim/forms/bulk_import.py:110 netbox/dcim/forms/filtersets.py:94 +#: netbox/dcim/forms/bulk_import.py:111 netbox/dcim/forms/filtersets.py:94 #: netbox/dcim/forms/filtersets.py:171 netbox/dcim/forms/filtersets.py:217 #: netbox/dcim/forms/filtersets.py:244 netbox/dcim/forms/filtersets.py:382 #: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:881 @@ -1224,7 +1224,7 @@ msgstr "分配" #: netbox/circuits/forms/filtersets.py:311 #: netbox/circuits/forms/model_forms.py:289 #: netbox/circuits/tables/circuits.py:187 netbox/dcim/forms/bulk_edit.py:126 -#: netbox/dcim/forms/bulk_edit.py:356 netbox/dcim/forms/bulk_import.py:117 +#: netbox/dcim/forms/bulk_edit.py:356 netbox/dcim/forms/bulk_import.py:118 #: netbox/dcim/forms/model_forms.py:137 netbox/dcim/tables/racks.py:139 #: netbox/dcim/tables/racks.py:232 netbox/dcim/tables/sites.py:69 #: netbox/extras/forms/filtersets.py:612 netbox/ipam/filtersets.py:1049 @@ -1719,13 +1719,13 @@ msgstr "终端" #: netbox/circuits/tables/virtual_circuits.py:106 #: netbox/dcim/forms/bulk_edit.py:749 netbox/dcim/forms/bulk_edit.py:1320 #: netbox/dcim/forms/bulk_edit.py:1732 netbox/dcim/forms/bulk_edit.py:1786 -#: netbox/dcim/forms/bulk_import.py:763 netbox/dcim/forms/bulk_import.py:824 -#: netbox/dcim/forms/bulk_import.py:850 netbox/dcim/forms/bulk_import.py:876 -#: netbox/dcim/forms/bulk_import.py:897 netbox/dcim/forms/bulk_import.py:953 -#: netbox/dcim/forms/bulk_import.py:1112 netbox/dcim/forms/bulk_import.py:1131 -#: netbox/dcim/forms/bulk_import.py:1150 netbox/dcim/forms/bulk_import.py:1168 -#: netbox/dcim/forms/bulk_import.py:1222 netbox/dcim/forms/bulk_import.py:1344 -#: netbox/dcim/forms/bulk_import.py:1811 netbox/dcim/forms/connections.py:34 +#: netbox/dcim/forms/bulk_import.py:764 netbox/dcim/forms/bulk_import.py:825 +#: netbox/dcim/forms/bulk_import.py:851 netbox/dcim/forms/bulk_import.py:877 +#: netbox/dcim/forms/bulk_import.py:898 netbox/dcim/forms/bulk_import.py:954 +#: netbox/dcim/forms/bulk_import.py:1113 netbox/dcim/forms/bulk_import.py:1219 +#: netbox/dcim/forms/bulk_import.py:1238 netbox/dcim/forms/bulk_import.py:1256 +#: netbox/dcim/forms/bulk_import.py:1310 netbox/dcim/forms/bulk_import.py:1432 +#: netbox/dcim/forms/bulk_import.py:1899 netbox/dcim/forms/connections.py:34 #: netbox/dcim/forms/filtersets.py:158 netbox/dcim/forms/filtersets.py:1061 #: netbox/dcim/forms/filtersets.py:1098 netbox/dcim/forms/filtersets.py:1265 #: netbox/dcim/forms/filtersets.py:1486 netbox/dcim/forms/filtersets.py:1509 @@ -1799,7 +1799,7 @@ msgid "Connection" msgstr "连接" #: netbox/circuits/ui/panels.py:99 netbox/dcim/forms/bulk_edit.py:1480 -#: netbox/dcim/forms/bulk_import.py:835 netbox/dcim/forms/bulk_import.py:861 +#: netbox/dcim/forms/bulk_import.py:836 netbox/dcim/forms/bulk_import.py:862 #: netbox/dcim/forms/filtersets.py:1497 netbox/dcim/forms/filtersets.py:1537 #: netbox/dcim/forms/filtersets.py:1675 netbox/dcim/tables/devices.py:662 #: netbox/dcim/ui/panels.py:488 @@ -2000,7 +2000,7 @@ msgstr "信息" msgid "Warning" msgstr "警告" -#: netbox/core/constants.py:33 netbox/netbox/tables/columns.py:597 +#: netbox/core/constants.py:33 netbox/netbox/tables/columns.py:625 msgid "Error" msgstr "错误" @@ -2970,7 +2970,7 @@ msgid "Position (U)" msgstr "具体U位" #: netbox/dcim/api/serializers_/devices.py:193 -#: netbox/dcim/forms/bulk_import.py:786 netbox/dcim/forms/model_forms.py:819 +#: netbox/dcim/forms/bulk_import.py:787 netbox/dcim/forms/model_forms.py:819 msgid "Replicate components" msgstr "组件冗余" @@ -2981,12 +2981,12 @@ msgid "" msgstr "自动填充与此模块类型关联的组件(默认值:true)" #: netbox/dcim/api/serializers_/devices.py:200 -#: netbox/dcim/forms/bulk_import.py:791 netbox/dcim/forms/model_forms.py:825 +#: netbox/dcim/forms/bulk_import.py:792 netbox/dcim/forms/model_forms.py:825 msgid "Adopt components" msgstr "选定组件" #: netbox/dcim/api/serializers_/devices.py:201 -#: netbox/dcim/forms/bulk_import.py:793 netbox/dcim/forms/model_forms.py:828 +#: netbox/dcim/forms/bulk_import.py:794 netbox/dcim/forms/model_forms.py:828 msgid "Adopt already existing components" msgstr "选定已经存在的组件" @@ -3117,11 +3117,11 @@ msgstr "陈旧" #: netbox/dcim/choices.py:170 netbox/dcim/forms/bulk_edit.py:87 #: netbox/dcim/forms/bulk_edit.py:101 netbox/dcim/forms/bulk_edit.py:181 #: netbox/dcim/forms/bulk_edit.py:623 netbox/dcim/forms/bulk_edit.py:651 -#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/bulk_import.py:77 -#: netbox/dcim/forms/bulk_import.py:91 netbox/dcim/forms/bulk_import.py:154 -#: netbox/dcim/forms/bulk_import.py:530 netbox/dcim/forms/bulk_import.py:556 -#: netbox/dcim/forms/bulk_import.py:682 netbox/dcim/forms/bulk_import.py:958 -#: netbox/dcim/forms/bulk_import.py:1239 netbox/dcim/forms/filtersets.py:267 +#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/bulk_import.py:78 +#: netbox/dcim/forms/bulk_import.py:92 netbox/dcim/forms/bulk_import.py:155 +#: netbox/dcim/forms/bulk_import.py:531 netbox/dcim/forms/bulk_import.py:557 +#: netbox/dcim/forms/bulk_import.py:683 netbox/dcim/forms/bulk_import.py:959 +#: netbox/dcim/forms/bulk_import.py:1327 netbox/dcim/forms/filtersets.py:267 #: netbox/dcim/forms/filtersets.py:820 netbox/dcim/forms/filtersets.py:836 #: netbox/dcim/forms/model_forms.py:95 netbox/dcim/forms/model_forms.py:113 #: netbox/dcim/forms/model_forms.py:216 netbox/dcim/forms/model_forms.py:559 @@ -3261,7 +3261,7 @@ msgid "Virtual interfaces" msgstr "虚拟接口" #: netbox/dcim/choices.py:1164 netbox/dcim/forms/bulk_edit.py:1455 -#: netbox/dcim/forms/bulk_import.py:965 netbox/dcim/forms/model_forms.py:1171 +#: netbox/dcim/forms/bulk_import.py:966 netbox/dcim/forms/model_forms.py:1171 #: netbox/dcim/tables/devices.py:761 #: netbox/virtualization/forms/bulk_edit.py:231 #: netbox/virtualization/forms/bulk_import.py:198 @@ -4035,7 +4035,7 @@ msgstr "虚拟接口(ID)" msgid "Is assigned" msgstr "已分配" -#: netbox/dcim/filtersets.py:2080 netbox/dcim/forms/bulk_import.py:1365 +#: netbox/dcim/filtersets.py:2080 netbox/dcim/forms/bulk_import.py:1453 #: netbox/ipam/forms/bulk_import.py:344 msgid "Is primary" msgstr "首选" @@ -4056,7 +4056,7 @@ msgid "Assigned VID" msgstr "指定VID" #: netbox/dcim/filtersets.py:2158 netbox/dcim/forms/bulk_edit.py:1568 -#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/forms/filtersets.py:1755 +#: netbox/dcim/forms/bulk_import.py:1051 netbox/dcim/forms/filtersets.py:1755 #: netbox/dcim/forms/model_forms.py:1619 #: netbox/dcim/models/device_components.py:958 #: netbox/dcim/tables/devices.py:678 netbox/dcim/ui/panels.py:521 @@ -4279,7 +4279,7 @@ msgstr "联系人手机" msgid "Contact E-mail" msgstr "联系人电子邮箱" -#: netbox/dcim/forms/bulk_edit.py:160 netbox/dcim/forms/bulk_import.py:140 +#: netbox/dcim/forms/bulk_edit.py:160 netbox/dcim/forms/bulk_import.py:141 #: netbox/dcim/forms/model_forms.py:159 msgid "Time zone" msgstr "时区" @@ -4288,9 +4288,9 @@ msgstr "时区" #: netbox/dcim/forms/bulk_edit.py:584 netbox/dcim/forms/bulk_edit.py:656 #: netbox/dcim/forms/bulk_edit.py:675 netbox/dcim/forms/bulk_edit.py:762 #: netbox/dcim/forms/bulk_edit.py:1306 netbox/dcim/forms/bulk_edit.py:1742 -#: netbox/dcim/forms/bulk_import.py:208 netbox/dcim/forms/bulk_import.py:432 -#: netbox/dcim/forms/bulk_import.py:482 netbox/dcim/forms/bulk_import.py:566 -#: netbox/dcim/forms/bulk_import.py:602 netbox/dcim/forms/bulk_import.py:1233 +#: netbox/dcim/forms/bulk_import.py:209 netbox/dcim/forms/bulk_import.py:433 +#: netbox/dcim/forms/bulk_import.py:483 netbox/dcim/forms/bulk_import.py:567 +#: netbox/dcim/forms/bulk_import.py:603 netbox/dcim/forms/bulk_import.py:1321 #: netbox/dcim/forms/filtersets.py:355 netbox/dcim/forms/filtersets.py:426 #: netbox/dcim/forms/filtersets.py:578 netbox/dcim/forms/filtersets.py:728 #: netbox/dcim/forms/filtersets.py:841 netbox/dcim/forms/filtersets.py:924 @@ -4309,21 +4309,21 @@ msgid "Manufacturer" msgstr "厂商" #: netbox/dcim/forms/bulk_edit.py:240 netbox/dcim/forms/bulk_edit.py:392 -#: netbox/dcim/forms/bulk_import.py:217 netbox/dcim/forms/bulk_import.py:303 +#: netbox/dcim/forms/bulk_import.py:218 netbox/dcim/forms/bulk_import.py:304 #: netbox/dcim/forms/filtersets.py:301 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "外形规格" #: netbox/dcim/forms/bulk_edit.py:245 netbox/dcim/forms/bulk_edit.py:397 -#: netbox/dcim/forms/bulk_import.py:225 netbox/dcim/forms/bulk_import.py:306 +#: netbox/dcim/forms/bulk_import.py:226 netbox/dcim/forms/bulk_import.py:307 #: netbox/dcim/forms/filtersets.py:306 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "宽度" #: netbox/dcim/forms/bulk_edit.py:251 netbox/dcim/forms/bulk_edit.py:403 -#: netbox/dcim/forms/bulk_import.py:313 +#: netbox/dcim/forms/bulk_import.py:314 msgid "Height (U)" msgstr "高度(U)" @@ -4345,7 +4345,7 @@ msgid "Outer depth" msgstr "外部深度" #: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:426 -#: netbox/dcim/forms/bulk_import.py:230 netbox/dcim/forms/bulk_import.py:316 +#: netbox/dcim/forms/bulk_import.py:231 netbox/dcim/forms/bulk_import.py:317 msgid "Outer unit" msgstr "外部单元" @@ -4357,7 +4357,7 @@ msgstr "安装深度" #: netbox/dcim/forms/bulk_edit.py:441 netbox/dcim/forms/bulk_edit.py:465 #: netbox/dcim/forms/bulk_edit.py:542 netbox/dcim/forms/bulk_edit.py:559 #: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/bulk_edit.py:614 -#: netbox/dcim/forms/bulk_import.py:445 netbox/dcim/forms/bulk_import.py:493 +#: netbox/dcim/forms/bulk_import.py:446 netbox/dcim/forms/bulk_import.py:494 #: netbox/dcim/forms/filtersets.py:326 netbox/dcim/forms/filtersets.py:348 #: netbox/dcim/forms/filtersets.py:373 netbox/dcim/forms/filtersets.py:458 #: netbox/dcim/forms/filtersets.py:571 netbox/dcim/forms/filtersets.py:683 @@ -4382,8 +4382,8 @@ msgstr "最大承重" #: netbox/dcim/forms/bulk_edit.py:298 netbox/dcim/forms/bulk_edit.py:451 #: netbox/dcim/forms/bulk_edit.py:547 netbox/dcim/forms/bulk_edit.py:603 -#: netbox/dcim/forms/bulk_import.py:236 netbox/dcim/forms/bulk_import.py:328 -#: netbox/dcim/forms/bulk_import.py:450 netbox/dcim/forms/bulk_import.py:498 +#: netbox/dcim/forms/bulk_import.py:237 netbox/dcim/forms/bulk_import.py:329 +#: netbox/dcim/forms/bulk_import.py:451 netbox/dcim/forms/bulk_import.py:499 #: netbox/dcim/forms/filtersets.py:336 netbox/dcim/forms/filtersets.py:687 #: netbox/dcim/forms/filtersets.py:799 msgid "Weight unit" @@ -4415,7 +4415,7 @@ msgstr "外部尺寸" msgid "Numbering" msgstr "编号" -#: netbox/dcim/forms/bulk_edit.py:377 netbox/dcim/forms/bulk_import.py:293 +#: netbox/dcim/forms/bulk_edit.py:377 netbox/dcim/forms/bulk_import.py:294 #: netbox/dcim/forms/filtersets.py:434 msgid "Rack type" msgstr "机柜型号" @@ -4433,17 +4433,17 @@ msgstr "资产标签" #: netbox/dcim/forms/bulk_edit.py:436 netbox/dcim/forms/bulk_edit.py:537 #: netbox/dcim/forms/bulk_edit.py:593 netbox/dcim/forms/bulk_edit.py:724 -#: netbox/dcim/forms/bulk_import.py:322 netbox/dcim/forms/bulk_import.py:487 -#: netbox/dcim/forms/bulk_import.py:696 netbox/dcim/forms/filtersets.py:437 +#: netbox/dcim/forms/bulk_import.py:323 netbox/dcim/forms/bulk_import.py:488 +#: netbox/dcim/forms/bulk_import.py:697 netbox/dcim/forms/filtersets.py:437 #: netbox/dcim/forms/filtersets.py:600 netbox/dcim/forms/filtersets.py:790 #: netbox/dcim/forms/filtersets.py:946 msgid "Airflow" msgstr "气流方向" #: netbox/dcim/forms/bulk_edit.py:460 netbox/dcim/forms/bulk_edit.py:937 -#: netbox/dcim/forms/bulk_import.py:378 netbox/dcim/forms/bulk_import.py:381 -#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/bulk_import.py:1748 -#: netbox/dcim/forms/bulk_import.py:1752 netbox/dcim/forms/filtersets.py:125 +#: netbox/dcim/forms/bulk_import.py:379 netbox/dcim/forms/bulk_import.py:382 +#: netbox/dcim/forms/bulk_import.py:670 netbox/dcim/forms/bulk_import.py:1836 +#: netbox/dcim/forms/bulk_import.py:1840 netbox/dcim/forms/filtersets.py:125 #: netbox/dcim/forms/filtersets.py:370 netbox/dcim/forms/filtersets.py:465 #: netbox/dcim/forms/filtersets.py:479 netbox/dcim/forms/filtersets.py:525 #: netbox/dcim/forms/filtersets.py:914 netbox/dcim/forms/filtersets.py:1130 @@ -4469,7 +4469,7 @@ msgstr "机柜" msgid "Hardware" msgstr "硬件" -#: netbox/dcim/forms/bulk_edit.py:513 netbox/dcim/forms/bulk_import.py:438 +#: netbox/dcim/forms/bulk_edit.py:513 netbox/dcim/forms/bulk_import.py:439 #: netbox/dcim/forms/filtersets.py:583 netbox/dcim/forms/model_forms.py:416 #: netbox/virtualization/forms/bulk_edit.py:85 #: netbox/virtualization/forms/bulk_import.py:89 @@ -4508,8 +4508,8 @@ msgid "Schema" msgstr "架构" #: netbox/dcim/forms/bulk_edit.py:572 netbox/dcim/forms/bulk_edit.py:579 -#: netbox/dcim/forms/bulk_edit.py:828 netbox/dcim/forms/bulk_import.py:476 -#: netbox/dcim/forms/bulk_import.py:1509 netbox/dcim/forms/filtersets.py:723 +#: netbox/dcim/forms/bulk_edit.py:828 netbox/dcim/forms/bulk_import.py:477 +#: netbox/dcim/forms/bulk_import.py:1597 netbox/dcim/forms/filtersets.py:723 #: netbox/dcim/forms/filtersets.py:1146 netbox/dcim/forms/filtersets.py:1278 #: netbox/dcim/forms/model_forms.py:463 netbox/dcim/forms/model_forms.py:476 #: netbox/dcim/tables/modules.py:43 netbox/dcim/tables/modules.py:97 @@ -4542,10 +4542,10 @@ msgid "VM role" msgstr "VM 角色" #: netbox/dcim/forms/bulk_edit.py:637 netbox/dcim/forms/bulk_edit.py:661 -#: netbox/dcim/forms/bulk_edit.py:734 netbox/dcim/forms/bulk_import.py:540 -#: netbox/dcim/forms/bulk_import.py:544 netbox/dcim/forms/bulk_import.py:573 -#: netbox/dcim/forms/bulk_import.py:577 netbox/dcim/forms/bulk_import.py:702 -#: netbox/dcim/forms/bulk_import.py:706 netbox/dcim/forms/filtersets.py:815 +#: netbox/dcim/forms/bulk_edit.py:734 netbox/dcim/forms/bulk_import.py:541 +#: netbox/dcim/forms/bulk_import.py:545 netbox/dcim/forms/bulk_import.py:574 +#: netbox/dcim/forms/bulk_import.py:578 netbox/dcim/forms/bulk_import.py:703 +#: netbox/dcim/forms/bulk_import.py:707 netbox/dcim/forms/filtersets.py:815 #: netbox/dcim/forms/filtersets.py:846 netbox/dcim/forms/filtersets.py:965 #: netbox/dcim/forms/model_forms.py:554 netbox/dcim/forms/model_forms.py:591 #: netbox/dcim/forms/model_forms.py:716 @@ -4557,19 +4557,19 @@ msgid "Config template" msgstr "配置模版" #: netbox/dcim/forms/bulk_edit.py:680 netbox/dcim/forms/bulk_edit.py:1086 -#: netbox/dcim/forms/bulk_import.py:608 netbox/dcim/forms/filtersets.py:135 +#: netbox/dcim/forms/bulk_import.py:609 netbox/dcim/forms/filtersets.py:135 #: netbox/dcim/forms/filtersets.py:1438 netbox/dcim/forms/model_forms.py:661 #: netbox/dcim/forms/model_forms.py:1048 netbox/dcim/forms/model_forms.py:1065 #: netbox/extras/filtersets.py:756 msgid "Device type" msgstr "设备型号" -#: netbox/dcim/forms/bulk_edit.py:691 netbox/dcim/forms/bulk_import.py:589 +#: netbox/dcim/forms/bulk_edit.py:691 netbox/dcim/forms/bulk_import.py:590 #: netbox/dcim/forms/filtersets.py:140 netbox/dcim/forms/model_forms.py:669 msgid "Device role" msgstr "设备角色" -#: netbox/dcim/forms/bulk_edit.py:714 netbox/dcim/forms/bulk_import.py:614 +#: netbox/dcim/forms/bulk_edit.py:714 netbox/dcim/forms/bulk_import.py:615 #: netbox/dcim/forms/filtersets.py:829 netbox/dcim/forms/filtersets.py:938 #: netbox/dcim/forms/model_forms.py:602 netbox/dcim/forms/model_forms.py:674 #: netbox/dcim/tables/devices.py:191 netbox/extras/filtersets.py:772 @@ -4581,7 +4581,7 @@ msgstr "设备角色" msgid "Platform" msgstr "平台" -#: netbox/dcim/forms/bulk_edit.py:739 netbox/dcim/forms/bulk_import.py:633 +#: netbox/dcim/forms/bulk_edit.py:739 netbox/dcim/forms/bulk_import.py:634 #: netbox/dcim/forms/filtersets.py:870 netbox/dcim/forms/filtersets.py:1040 #: netbox/dcim/forms/model_forms.py:683 netbox/dcim/tables/devices.py:211 #: netbox/extras/filtersets.py:805 netbox/extras/forms/filtersets.py:411 @@ -4610,12 +4610,12 @@ msgstr "配置" msgid "Virtualization" msgstr "虚拟化" -#: netbox/dcim/forms/bulk_edit.py:767 netbox/dcim/forms/bulk_import.py:775 +#: netbox/dcim/forms/bulk_edit.py:767 netbox/dcim/forms/bulk_import.py:776 #: netbox/dcim/forms/model_forms.py:811 netbox/dcim/forms/model_forms.py:1073 msgid "Module type" msgstr "模块类型" -#: netbox/dcim/forms/bulk_edit.py:839 netbox/dcim/forms/bulk_import.py:1528 +#: netbox/dcim/forms/bulk_edit.py:839 netbox/dcim/forms/bulk_import.py:1616 #: netbox/dcim/forms/filtersets.py:1305 netbox/dcim/forms/model_forms.py:888 #: netbox/dcim/tables/cables.py:124 msgid "Bundle" @@ -4639,8 +4639,8 @@ msgstr "标记" msgid "Length" msgstr "长度" -#: netbox/dcim/forms/bulk_edit.py:858 netbox/dcim/forms/bulk_import.py:1535 -#: netbox/dcim/forms/bulk_import.py:1538 netbox/dcim/forms/filtersets.py:1291 +#: netbox/dcim/forms/bulk_edit.py:858 netbox/dcim/forms/bulk_import.py:1623 +#: netbox/dcim/forms/bulk_import.py:1626 netbox/dcim/forms/filtersets.py:1291 msgid "Length unit" msgstr "长度单位" @@ -4648,17 +4648,17 @@ msgstr "长度单位" msgid "Domain" msgstr "域" -#: netbox/dcim/forms/bulk_edit.py:932 netbox/dcim/forms/bulk_import.py:1735 +#: netbox/dcim/forms/bulk_edit.py:932 netbox/dcim/forms/bulk_import.py:1823 #: netbox/dcim/forms/filtersets.py:1384 netbox/dcim/forms/model_forms.py:927 msgid "Power panel" msgstr "电源面版" -#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/bulk_import.py:1771 +#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/bulk_import.py:1859 #: netbox/dcim/forms/filtersets.py:1406 msgid "Supply" msgstr "供应" -#: netbox/dcim/forms/bulk_edit.py:960 netbox/dcim/forms/bulk_import.py:1776 +#: netbox/dcim/forms/bulk_edit.py:960 netbox/dcim/forms/bulk_import.py:1864 #: netbox/dcim/forms/filtersets.py:1411 msgid "Phase" msgstr "相位" @@ -4695,13 +4695,13 @@ msgstr "分配功率" msgid "Allocated power draw (watts)" msgstr "分配功率(瓦)" -#: netbox/dcim/forms/bulk_edit.py:1107 netbox/dcim/forms/bulk_import.py:908 +#: netbox/dcim/forms/bulk_edit.py:1107 netbox/dcim/forms/bulk_import.py:909 #: netbox/dcim/forms/model_forms.py:1144 netbox/dcim/forms/model_forms.py:1509 #: netbox/dcim/forms/model_forms.py:1838 netbox/dcim/forms/object_import.py:56 msgid "Power port" msgstr "电源接口" -#: netbox/dcim/forms/bulk_edit.py:1112 netbox/dcim/forms/bulk_import.py:915 +#: netbox/dcim/forms/bulk_edit.py:1112 netbox/dcim/forms/bulk_import.py:916 msgid "Feed leg" msgstr "馈电线路" @@ -4711,7 +4711,7 @@ msgid "Management only" msgstr "仅限管理" #: netbox/dcim/forms/bulk_edit.py:1168 netbox/dcim/forms/bulk_edit.py:1495 -#: netbox/dcim/forms/bulk_import.py:1001 netbox/dcim/forms/filtersets.py:1711 +#: netbox/dcim/forms/bulk_import.py:1002 netbox/dcim/forms/filtersets.py:1711 #: netbox/dcim/forms/filtersets.py:1796 netbox/dcim/forms/object_import.py:91 #: netbox/dcim/models/device_component_templates.py:473 #: netbox/dcim/models/device_components.py:930 netbox/dcim/ui/panels.py:494 @@ -4719,7 +4719,7 @@ msgid "PoE mode" msgstr "PoE模式" #: netbox/dcim/forms/bulk_edit.py:1174 netbox/dcim/forms/bulk_edit.py:1501 -#: netbox/dcim/forms/bulk_import.py:1007 netbox/dcim/forms/filtersets.py:1716 +#: netbox/dcim/forms/bulk_import.py:1008 netbox/dcim/forms/filtersets.py:1716 #: netbox/dcim/forms/filtersets.py:1801 netbox/dcim/forms/object_import.py:96 #: netbox/dcim/models/device_component_templates.py:480 #: netbox/dcim/models/device_components.py:937 netbox/dcim/ui/panels.py:495 @@ -4745,7 +4745,7 @@ msgstr "链路聚合" msgid "Virtual device contexts" msgstr "设备虚拟上下文" -#: netbox/dcim/forms/bulk_edit.py:1509 netbox/dcim/forms/bulk_import.py:1010 +#: netbox/dcim/forms/bulk_edit.py:1509 netbox/dcim/forms/bulk_import.py:1011 #: netbox/virtualization/forms/bulk_edit.py:252 #: netbox/virtualization/forms/bulk_import.py:205 #: netbox/vpn/forms/bulk_edit.py:128 netbox/vpn/forms/bulk_edit.py:196 @@ -4756,7 +4756,7 @@ msgstr "设备虚拟上下文" msgid "Mode" msgstr "模式" -#: netbox/dcim/forms/bulk_edit.py:1517 netbox/dcim/forms/bulk_import.py:1016 +#: netbox/dcim/forms/bulk_edit.py:1517 netbox/dcim/forms/bulk_import.py:1017 #: netbox/dcim/forms/model_forms.py:1585 netbox/ipam/forms/bulk_import.py:184 #: netbox/ipam/forms/filtersets.py:603 netbox/ipam/models/vlans.py:99 #: netbox/virtualization/forms/bulk_edit.py:259 @@ -4765,7 +4765,7 @@ msgstr "模式" msgid "VLAN group" msgstr "VLAN 组" -#: netbox/dcim/forms/bulk_edit.py:1526 netbox/dcim/forms/bulk_import.py:1023 +#: netbox/dcim/forms/bulk_edit.py:1526 netbox/dcim/forms/bulk_import.py:1024 #: netbox/dcim/forms/model_forms.py:1591 netbox/dcim/tables/devices.py:627 #: netbox/dcim/ui/panels.py:498 netbox/virtualization/forms/bulk_edit.py:267 #: netbox/virtualization/forms/bulk_import.py:218 @@ -4773,7 +4773,7 @@ msgstr "VLAN 组" msgid "Untagged VLAN" msgstr "未标记的VLAN" -#: netbox/dcim/forms/bulk_edit.py:1535 netbox/dcim/forms/bulk_import.py:1030 +#: netbox/dcim/forms/bulk_edit.py:1535 netbox/dcim/forms/bulk_import.py:1031 #: netbox/dcim/forms/model_forms.py:1600 netbox/dcim/tables/devices.py:633 #: netbox/virtualization/forms/bulk_edit.py:275 #: netbox/virtualization/forms/bulk_import.py:225 @@ -4789,7 +4789,7 @@ msgstr "添加带标签的 VLAN" msgid "Remove tagged VLANs" msgstr "移除带标签的 VLAN" -#: netbox/dcim/forms/bulk_edit.py:1558 netbox/dcim/forms/bulk_import.py:1043 +#: netbox/dcim/forms/bulk_edit.py:1558 netbox/dcim/forms/bulk_import.py:1044 #: netbox/dcim/forms/model_forms.py:1609 #: netbox/virtualization/forms/bulk_import.py:238 #: netbox/virtualization/forms/model_forms.py:439 @@ -4857,336 +4857,336 @@ msgstr "该接口模式下,必须指定VLAN" msgid "An access interface cannot have tagged VLANs assigned." msgstr "access接口不允许指定Tag的VLAN" -#: netbox/dcim/forms/bulk_import.py:81 +#: netbox/dcim/forms/bulk_import.py:82 msgid "Name of parent region" msgstr "上一级区域的名称" -#: netbox/dcim/forms/bulk_import.py:95 +#: netbox/dcim/forms/bulk_import.py:96 msgid "Name of parent site group" msgstr "上一级站点组的名称" -#: netbox/dcim/forms/bulk_import.py:114 +#: netbox/dcim/forms/bulk_import.py:115 msgid "Assigned region" msgstr "指定地区" -#: netbox/dcim/forms/bulk_import.py:121 netbox/tenancy/forms/bulk_import.py:50 +#: netbox/dcim/forms/bulk_import.py:122 netbox/tenancy/forms/bulk_import.py:50 #: netbox/wireless/forms/bulk_import.py:41 msgid "Assigned group" msgstr "指定组" -#: netbox/dcim/forms/bulk_import.py:140 +#: netbox/dcim/forms/bulk_import.py:141 msgid "available options" msgstr "可用选项" -#: netbox/dcim/forms/bulk_import.py:151 netbox/dcim/forms/bulk_import.py:659 -#: netbox/dcim/forms/bulk_import.py:1732 netbox/ipam/forms/bulk_import.py:519 +#: netbox/dcim/forms/bulk_import.py:152 netbox/dcim/forms/bulk_import.py:660 +#: netbox/dcim/forms/bulk_import.py:1820 netbox/ipam/forms/bulk_import.py:519 #: netbox/virtualization/forms/bulk_import.py:66 msgid "Assigned site" msgstr "指定站点" -#: netbox/dcim/forms/bulk_import.py:158 +#: netbox/dcim/forms/bulk_import.py:159 msgid "Parent location" msgstr "上一级位置" -#: netbox/dcim/forms/bulk_import.py:160 +#: netbox/dcim/forms/bulk_import.py:161 msgid "Location not found." msgstr "未找到该位置" -#: netbox/dcim/forms/bulk_import.py:211 +#: netbox/dcim/forms/bulk_import.py:212 msgid "The manufacturer of this rack type" msgstr "这种机架类型的制造商" -#: netbox/dcim/forms/bulk_import.py:222 +#: netbox/dcim/forms/bulk_import.py:223 msgid "The lowest-numbered position in the rack" msgstr "机架中编号最低的位置" -#: netbox/dcim/forms/bulk_import.py:227 netbox/dcim/forms/bulk_import.py:309 +#: netbox/dcim/forms/bulk_import.py:228 netbox/dcim/forms/bulk_import.py:310 msgid "Rail-to-rail width (in inches)" msgstr "设备安装宽度(英寸)" -#: netbox/dcim/forms/bulk_import.py:233 netbox/dcim/forms/bulk_import.py:319 +#: netbox/dcim/forms/bulk_import.py:234 netbox/dcim/forms/bulk_import.py:320 msgid "Unit for outer dimensions" msgstr "外形尺寸单位" -#: netbox/dcim/forms/bulk_import.py:239 netbox/dcim/forms/bulk_import.py:331 +#: netbox/dcim/forms/bulk_import.py:240 netbox/dcim/forms/bulk_import.py:332 msgid "Unit for rack weights" msgstr "机柜重量单位" -#: netbox/dcim/forms/bulk_import.py:271 +#: netbox/dcim/forms/bulk_import.py:272 msgid "Name of assigned tenant" msgstr "指定租户名称" -#: netbox/dcim/forms/bulk_import.py:274 netbox/dcim/forms/filtersets.py:410 +#: netbox/dcim/forms/bulk_import.py:275 netbox/dcim/forms/filtersets.py:410 #: netbox/dcim/forms/filtersets.py:515 netbox/dcim/ui/panels.py:47 #: netbox/ipam/forms/filtersets.py:497 msgid "Rack group" msgstr "机架组" -#: netbox/dcim/forms/bulk_import.py:278 +#: netbox/dcim/forms/bulk_import.py:279 msgid "Name of assigned group" msgstr "分配的群组的名称" -#: netbox/dcim/forms/bulk_import.py:290 +#: netbox/dcim/forms/bulk_import.py:291 msgid "Name of assigned role" msgstr "指定规则名称" -#: netbox/dcim/forms/bulk_import.py:297 +#: netbox/dcim/forms/bulk_import.py:298 msgid "Rack type model" msgstr "机架类型型号" -#: netbox/dcim/forms/bulk_import.py:325 netbox/dcim/forms/bulk_import.py:490 -#: netbox/dcim/forms/bulk_import.py:699 +#: netbox/dcim/forms/bulk_import.py:326 netbox/dcim/forms/bulk_import.py:491 +#: netbox/dcim/forms/bulk_import.py:700 msgid "Airflow direction" msgstr "风道方向" -#: netbox/dcim/forms/bulk_import.py:358 +#: netbox/dcim/forms/bulk_import.py:359 msgid "Width must be set if not specifying a rack type." msgstr "如果未指定机架类型,则必须设置宽度。" -#: netbox/dcim/forms/bulk_import.py:360 +#: netbox/dcim/forms/bulk_import.py:361 msgid "U height must be set if not specifying a rack type." msgstr "如果未指定机架类型,则必须设置 U 高度。" -#: netbox/dcim/forms/bulk_import.py:368 +#: netbox/dcim/forms/bulk_import.py:369 msgid "Parent site" msgstr "上一级站点" -#: netbox/dcim/forms/bulk_import.py:375 netbox/dcim/forms/bulk_import.py:1745 +#: netbox/dcim/forms/bulk_import.py:376 netbox/dcim/forms/bulk_import.py:1833 msgid "Rack's location (if any)" msgstr "机柜所在位置(如果有)" -#: netbox/dcim/forms/bulk_import.py:384 netbox/dcim/forms/model_forms.py:376 +#: netbox/dcim/forms/bulk_import.py:385 netbox/dcim/forms/model_forms.py:376 #: netbox/dcim/tables/racks.py:242 #: netbox/templates/dcim/rackreservation.html:7 msgid "Units" msgstr "单元(U)" -#: netbox/dcim/forms/bulk_import.py:387 +#: netbox/dcim/forms/bulk_import.py:388 msgid "Comma-separated list of individual unit numbers" msgstr "占用U位号列表,以逗号分隔" -#: netbox/dcim/forms/bulk_import.py:435 +#: netbox/dcim/forms/bulk_import.py:436 msgid "The manufacturer which produces this device type" msgstr "生产这种类型设备的制造商" -#: netbox/dcim/forms/bulk_import.py:442 +#: netbox/dcim/forms/bulk_import.py:443 msgid "The default platform for devices of this type (optional)" msgstr "此类型设备的默认平台(可选)" -#: netbox/dcim/forms/bulk_import.py:447 +#: netbox/dcim/forms/bulk_import.py:448 msgid "Device weight" msgstr "设备重量" -#: netbox/dcim/forms/bulk_import.py:453 +#: netbox/dcim/forms/bulk_import.py:454 msgid "Unit for device weight" msgstr "设备重量单位" -#: netbox/dcim/forms/bulk_import.py:495 +#: netbox/dcim/forms/bulk_import.py:496 msgid "Module weight" msgstr "模块重量" -#: netbox/dcim/forms/bulk_import.py:501 +#: netbox/dcim/forms/bulk_import.py:502 msgid "Unit for module weight" msgstr "模块重量单位" -#: netbox/dcim/forms/bulk_import.py:506 +#: netbox/dcim/forms/bulk_import.py:507 msgid "Attribute values for the assigned profile, passed as a dictionary" msgstr "已分配配置文件的属性值,以字典形式传递" -#: netbox/dcim/forms/bulk_import.py:521 +#: netbox/dcim/forms/bulk_import.py:522 msgid "Profile must be specified if attribute data is provided." msgstr "如果提供属性数据,则必须指定配置文件。" -#: netbox/dcim/forms/bulk_import.py:534 +#: netbox/dcim/forms/bulk_import.py:535 msgid "Parent Device Role" msgstr "父设备角色" -#: netbox/dcim/forms/bulk_import.py:536 +#: netbox/dcim/forms/bulk_import.py:537 msgid "Device role not found." msgstr "未找到设备角色。" -#: netbox/dcim/forms/bulk_import.py:560 +#: netbox/dcim/forms/bulk_import.py:561 msgid "Parent platform" msgstr "上级操作系统" -#: netbox/dcim/forms/bulk_import.py:562 +#: netbox/dcim/forms/bulk_import.py:563 msgid "Platform not found." msgstr "未找到操作系统" -#: netbox/dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:571 msgid "Limit platform assignments to this manufacturer" msgstr "限定此系统平台的制造商" -#: netbox/dcim/forms/bulk_import.py:592 netbox/dcim/forms/bulk_import.py:1814 +#: netbox/dcim/forms/bulk_import.py:593 netbox/dcim/forms/bulk_import.py:1902 #: netbox/tenancy/forms/bulk_import.py:116 msgid "Assigned role" msgstr "指定规则" -#: netbox/dcim/forms/bulk_import.py:605 +#: netbox/dcim/forms/bulk_import.py:606 msgid "Device type manufacturer" msgstr "设备制造商" -#: netbox/dcim/forms/bulk_import.py:611 +#: netbox/dcim/forms/bulk_import.py:612 msgid "Device type model" msgstr "设备型号" -#: netbox/dcim/forms/bulk_import.py:618 +#: netbox/dcim/forms/bulk_import.py:619 #: netbox/virtualization/forms/bulk_import.py:165 msgid "Assigned platform" msgstr "指定系统平台" -#: netbox/dcim/forms/bulk_import.py:626 netbox/dcim/forms/bulk_import.py:630 +#: netbox/dcim/forms/bulk_import.py:627 netbox/dcim/forms/bulk_import.py:631 #: netbox/dcim/forms/model_forms.py:697 msgid "Virtual chassis" msgstr "堆叠" -#: netbox/dcim/forms/bulk_import.py:637 +#: netbox/dcim/forms/bulk_import.py:638 msgid "Virtualization cluster" msgstr "虚拟化集群" -#: netbox/dcim/forms/bulk_import.py:666 +#: netbox/dcim/forms/bulk_import.py:667 msgid "Assigned location (if any)" msgstr "指定位置(如果有)" -#: netbox/dcim/forms/bulk_import.py:673 +#: netbox/dcim/forms/bulk_import.py:674 msgid "Assigned rack (if any)" msgstr "指定机柜(如果有)" -#: netbox/dcim/forms/bulk_import.py:676 netbox/dcim/forms/model_forms.py:653 +#: netbox/dcim/forms/bulk_import.py:677 netbox/dcim/forms/model_forms.py:653 msgid "Face" msgstr "朝向" -#: netbox/dcim/forms/bulk_import.py:679 +#: netbox/dcim/forms/bulk_import.py:680 msgid "Mounted rack face" msgstr "机架正面安装" -#: netbox/dcim/forms/bulk_import.py:686 +#: netbox/dcim/forms/bulk_import.py:687 msgid "Parent device (for child devices)" msgstr "上一级设备(用于子设备)" -#: netbox/dcim/forms/bulk_import.py:689 +#: netbox/dcim/forms/bulk_import.py:690 msgid "Device bay" msgstr "设备托架" -#: netbox/dcim/forms/bulk_import.py:693 +#: netbox/dcim/forms/bulk_import.py:694 msgid "Device bay in which this device is installed (for child devices)" msgstr "安装此设备的设备托架(用于子设备)" -#: netbox/dcim/forms/bulk_import.py:766 +#: netbox/dcim/forms/bulk_import.py:767 msgid "The device in which this module is installed" msgstr "安装此模块的设备" -#: netbox/dcim/forms/bulk_import.py:769 netbox/dcim/forms/model_forms.py:801 +#: netbox/dcim/forms/bulk_import.py:770 netbox/dcim/forms/model_forms.py:801 msgid "Module bay" msgstr "设备板卡插槽" -#: netbox/dcim/forms/bulk_import.py:772 +#: netbox/dcim/forms/bulk_import.py:773 msgid "The module bay in which this module is installed" msgstr "安装此模块的模块托架" -#: netbox/dcim/forms/bulk_import.py:778 +#: netbox/dcim/forms/bulk_import.py:779 msgid "The type of module" msgstr "模块类型" -#: netbox/dcim/forms/bulk_import.py:788 +#: netbox/dcim/forms/bulk_import.py:789 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" msgstr "自动填充此模块类型关联的组件(默认启用)" -#: netbox/dcim/forms/bulk_import.py:832 netbox/dcim/forms/bulk_import.py:858 -#: netbox/dcim/forms/bulk_import.py:884 +#: netbox/dcim/forms/bulk_import.py:833 netbox/dcim/forms/bulk_import.py:859 +#: netbox/dcim/forms/bulk_import.py:885 msgid "Port type" msgstr "端口类型" -#: netbox/dcim/forms/bulk_import.py:840 netbox/dcim/forms/bulk_import.py:866 +#: netbox/dcim/forms/bulk_import.py:841 netbox/dcim/forms/bulk_import.py:867 msgid "Port speed in bps" msgstr "端口速率(bps)" -#: netbox/dcim/forms/bulk_import.py:905 +#: netbox/dcim/forms/bulk_import.py:906 msgid "Outlet type" msgstr "插座类型" -#: netbox/dcim/forms/bulk_import.py:912 +#: netbox/dcim/forms/bulk_import.py:913 msgid "Local power port which feeds this outlet" msgstr "该插座供电的电源端口" -#: netbox/dcim/forms/bulk_import.py:918 +#: netbox/dcim/forms/bulk_import.py:919 msgid "Electrical phase (for three-phase circuits)" msgstr "供电相位(用于三相电)" -#: netbox/dcim/forms/bulk_import.py:962 netbox/dcim/forms/model_forms.py:1547 +#: netbox/dcim/forms/bulk_import.py:963 netbox/dcim/forms/model_forms.py:1547 #: netbox/virtualization/forms/bulk_import.py:195 #: netbox/virtualization/forms/model_forms.py:400 msgid "Parent interface" msgstr "上一级接口" -#: netbox/dcim/forms/bulk_import.py:969 netbox/dcim/forms/model_forms.py:1555 +#: netbox/dcim/forms/bulk_import.py:970 netbox/dcim/forms/model_forms.py:1555 #: netbox/virtualization/forms/bulk_import.py:202 #: netbox/virtualization/forms/model_forms.py:408 msgid "Bridged interface" msgstr "桥接接口" -#: netbox/dcim/forms/bulk_import.py:972 +#: netbox/dcim/forms/bulk_import.py:973 msgid "Lag" msgstr "聚合接口" -#: netbox/dcim/forms/bulk_import.py:976 +#: netbox/dcim/forms/bulk_import.py:977 msgid "Parent LAG interface" msgstr "上一级聚合接口" -#: netbox/dcim/forms/bulk_import.py:979 +#: netbox/dcim/forms/bulk_import.py:980 msgid "Vdcs" msgstr "Vdcs" -#: netbox/dcim/forms/bulk_import.py:984 +#: netbox/dcim/forms/bulk_import.py:985 msgid "VDC names separated by commas, encased with double quotes. Example:" msgstr "VDC名称,用逗号分隔,用双引号包含。例如:" -#: netbox/dcim/forms/bulk_import.py:990 +#: netbox/dcim/forms/bulk_import.py:991 msgid "Physical medium" msgstr "物理接口类型" -#: netbox/dcim/forms/bulk_import.py:993 netbox/dcim/forms/filtersets.py:1682 +#: netbox/dcim/forms/bulk_import.py:994 netbox/dcim/forms/filtersets.py:1682 msgid "Duplex" msgstr "双工" -#: netbox/dcim/forms/bulk_import.py:998 +#: netbox/dcim/forms/bulk_import.py:999 msgid "Poe mode" msgstr "POE模式" -#: netbox/dcim/forms/bulk_import.py:1004 +#: netbox/dcim/forms/bulk_import.py:1005 msgid "Poe type" msgstr "POE类型" -#: netbox/dcim/forms/bulk_import.py:1013 +#: netbox/dcim/forms/bulk_import.py:1014 #: netbox/virtualization/forms/bulk_import.py:208 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "IEEE 802.1Q 运作模式(针对二层接口)" -#: netbox/dcim/forms/bulk_import.py:1020 +#: netbox/dcim/forms/bulk_import.py:1021 #: netbox/virtualization/forms/bulk_import.py:215 msgid "Filter VLANs available for assignment by group" msgstr "按组筛选可供分配的 VLAN" -#: netbox/dcim/forms/bulk_import.py:1027 +#: netbox/dcim/forms/bulk_import.py:1028 #: netbox/virtualization/forms/bulk_import.py:222 msgid "Assigned untagged VLAN ID (filtered by VLAN group)" msgstr "分配了未标记的 VLAN ID(按 VLAN 组过滤)" -#: netbox/dcim/forms/bulk_import.py:1036 +#: netbox/dcim/forms/bulk_import.py:1037 #: netbox/virtualization/forms/bulk_import.py:231 msgid "" "Assigned tagged VLAN IDs separated by commas, encased with double quotes " "(filtered by VLAN group). Example:" msgstr "分配的带标签的 VLAN ID 以逗号分隔,用双引号括起来(按 VLAN 组过滤)。示例:" -#: netbox/dcim/forms/bulk_import.py:1047 +#: netbox/dcim/forms/bulk_import.py:1048 #: netbox/virtualization/forms/bulk_import.py:242 msgid "Assigned Q-in-Q Service VLAN ID (filtered by VLAN group)" msgstr "分配的 Q-in-Q 服务 VLAN ID(按 VLAN 组过滤)" -#: netbox/dcim/forms/bulk_import.py:1054 netbox/ipam/forms/bulk_import.py:174 +#: netbox/dcim/forms/bulk_import.py:1055 netbox/ipam/forms/bulk_import.py:174 #: netbox/ipam/forms/bulk_import.py:259 netbox/ipam/forms/bulk_import.py:295 #: netbox/ipam/forms/filtersets.py:230 netbox/ipam/forms/filtersets.py:314 #: netbox/ipam/forms/filtersets.py:383 @@ -5194,74 +5194,103 @@ msgstr "分配的 Q-in-Q 服务 VLAN ID(按 VLAN 组过滤)" msgid "Assigned VRF" msgstr "指定VRF" -#: netbox/dcim/forms/bulk_import.py:1057 +#: netbox/dcim/forms/bulk_import.py:1058 msgid "Rf role" msgstr "射频类型" -#: netbox/dcim/forms/bulk_import.py:1060 +#: netbox/dcim/forms/bulk_import.py:1061 msgid "Wireless role (AP/station)" msgstr "无线角色(AP/基站)" -#: netbox/dcim/forms/bulk_import.py:1103 +#: netbox/dcim/forms/bulk_import.py:1104 #, python-brace-format msgid "VDC {vdc} is not assigned to device {device}" msgstr "VDC {vdc} 没有指定给设备 {device}" -#: netbox/dcim/forms/bulk_import.py:1119 netbox/dcim/forms/bulk_import.py:1137 -#: netbox/dcim/forms/bulk_import.py:1518 +#: netbox/dcim/forms/bulk_import.py:1120 netbox/dcim/forms/bulk_import.py:1225 +#: netbox/dcim/forms/bulk_import.py:1606 msgid "Physical medium classification" msgstr "物理端口类型" -#: netbox/dcim/forms/bulk_import.py:1173 +#: netbox/dcim/forms/bulk_import.py:1123 netbox/dcim/forms/model_forms.py:1846 +#: netbox/dcim/forms/object_import.py:145 +msgid "Rear port" +msgstr "后置端口" + +#: netbox/dcim/forms/bulk_import.py:1126 +msgid "Corresponding rear port (mapped to the front port's first position)" +msgstr "相应的后端口(映射到前端口的第一个位置)" + +#: netbox/dcim/forms/bulk_import.py:1129 +msgid "Rear port position" +msgstr "后方端口位置" + +#: netbox/dcim/forms/bulk_import.py:1131 +msgid "Mapped position on the corresponding rear port (defaults to 1)" +msgstr "相应的后端端口上的映射位置(默认为 1)" + +#: netbox/dcim/forms/bulk_import.py:1175 netbox/dcim/models/base.py:59 +#, python-brace-format +msgid "" +"Invalid rear port position ({rear_port_position}): Rear port {name} has only" +" {positions} positions." +msgstr "无效的后端口位置({rear_port_position});后端口{name}只有 {positions}个" + +#: netbox/dcim/forms/bulk_import.py:1193 +#, python-brace-format +msgid "Rear port {name} position {rear_port_position} is already occupied." +msgstr "后端口 {name} 位置 {rear_port_position} 已经被占用了。" + +#: netbox/dcim/forms/bulk_import.py:1261 msgid "Installed device" msgstr "安装设备" -#: netbox/dcim/forms/bulk_import.py:1177 +#: netbox/dcim/forms/bulk_import.py:1265 msgid "Child device installed within this bay" msgstr "此托架内安装的子设备" -#: netbox/dcim/forms/bulk_import.py:1179 +#: netbox/dcim/forms/bulk_import.py:1267 msgid "Child device not found." msgstr "子设备未找到" -#: netbox/dcim/forms/bulk_import.py:1243 +#: netbox/dcim/forms/bulk_import.py:1331 msgid "Parent inventory item" msgstr "上一级库存项" -#: netbox/dcim/forms/bulk_import.py:1246 +#: netbox/dcim/forms/bulk_import.py:1334 msgid "Component type" msgstr "组件类型" -#: netbox/dcim/forms/bulk_import.py:1250 +#: netbox/dcim/forms/bulk_import.py:1338 msgid "Component Type" msgstr "组件类型" -#: netbox/dcim/forms/bulk_import.py:1253 +#: netbox/dcim/forms/bulk_import.py:1341 msgid "Component name" msgstr "组件名称" -#: netbox/dcim/forms/bulk_import.py:1255 +#: netbox/dcim/forms/bulk_import.py:1343 msgid "Component Name" msgstr "组件名称" -#: netbox/dcim/forms/bulk_import.py:1298 netbox/dcim/forms/bulk_import.py:1316 +#: netbox/dcim/forms/bulk_import.py:1386 netbox/dcim/forms/bulk_import.py:1404 msgid "Component name must be specified when component type is specified" msgstr "指定组件类型时必须指定组件名称" -#: netbox/dcim/forms/bulk_import.py:1308 +#: netbox/dcim/forms/bulk_import.py:1396 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "组件未找到: {device} - {component_name}" -#: netbox/dcim/forms/bulk_import.py:1321 +#: netbox/dcim/forms/bulk_import.py:1409 msgid "Component type must be specified when component name is specified" msgstr "指定组件名称时必须指定组件类型" -#: netbox/dcim/forms/bulk_import.py:1348 netbox/ipam/forms/bulk_import.py:320 +#: netbox/dcim/forms/bulk_import.py:1436 netbox/ipam/forms/bulk_import.py:320 msgid "Parent device of assigned interface (if any)" msgstr "指定接口的父设备(如果有)" -#: netbox/dcim/forms/bulk_import.py:1351 netbox/ipam/forms/bulk_import.py:323 +#: netbox/dcim/forms/bulk_import.py:1439 netbox/ipam/forms/bulk_import.py:323 #: netbox/virtualization/filtersets.py:354 #: netbox/virtualization/filtersets.py:412 #: netbox/virtualization/forms/bulk_edit.py:219 @@ -5275,183 +5304,183 @@ msgstr "指定接口的父设备(如果有)" msgid "Virtual machine" msgstr "虚拟机" -#: netbox/dcim/forms/bulk_import.py:1355 netbox/ipam/forms/bulk_import.py:327 +#: netbox/dcim/forms/bulk_import.py:1443 netbox/ipam/forms/bulk_import.py:327 msgid "Parent VM of assigned interface (if any)" msgstr "指定接口的父虚拟机(如果有)" -#: netbox/dcim/forms/bulk_import.py:1362 netbox/ipam/filtersets.py:1111 +#: netbox/dcim/forms/bulk_import.py:1450 netbox/ipam/filtersets.py:1111 #: netbox/ipam/forms/bulk_import.py:334 msgid "Assigned interface" msgstr "分配的接口" -#: netbox/dcim/forms/bulk_import.py:1366 +#: netbox/dcim/forms/bulk_import.py:1454 msgid "Make this the primary MAC address for the assigned interface" msgstr "将此设为所分配接口的主 MAC 地址" -#: netbox/dcim/forms/bulk_import.py:1404 +#: netbox/dcim/forms/bulk_import.py:1492 msgid "Must specify the parent device or VM when assigning an interface" msgstr "分配接口时必须指定父设备或 VM" -#: netbox/dcim/forms/bulk_import.py:1437 +#: netbox/dcim/forms/bulk_import.py:1525 msgid "Side A site" msgstr "A 侧网站" -#: netbox/dcim/forms/bulk_import.py:1441 +#: netbox/dcim/forms/bulk_import.py:1529 #: netbox/wireless/forms/bulk_import.py:93 msgid "Site of parent device A (if any)" msgstr "父设备 A 的站点(如果有)" -#: netbox/dcim/forms/bulk_import.py:1444 +#: netbox/dcim/forms/bulk_import.py:1532 msgid "Side A device" msgstr "A端设备" -#: netbox/dcim/forms/bulk_import.py:1448 netbox/dcim/forms/bulk_import.py:1481 +#: netbox/dcim/forms/bulk_import.py:1536 netbox/dcim/forms/bulk_import.py:1569 msgid "Device name (for device component terminations)" msgstr "设备名称(用于设备组件终止)" -#: netbox/dcim/forms/bulk_import.py:1451 +#: netbox/dcim/forms/bulk_import.py:1539 msgid "Side A power panel" msgstr "A 侧电源面板" -#: netbox/dcim/forms/bulk_import.py:1455 netbox/dcim/forms/bulk_import.py:1488 +#: netbox/dcim/forms/bulk_import.py:1543 netbox/dcim/forms/bulk_import.py:1576 msgid "Power panel name (for power feed terminations)" msgstr "电源面板名称(用于电源终端)" -#: netbox/dcim/forms/bulk_import.py:1458 +#: netbox/dcim/forms/bulk_import.py:1546 msgid "Side A type" msgstr "A端线缆类型" -#: netbox/dcim/forms/bulk_import.py:1464 +#: netbox/dcim/forms/bulk_import.py:1552 msgid "Side A name" msgstr "A端设备名称" -#: netbox/dcim/forms/bulk_import.py:1465 netbox/dcim/forms/bulk_import.py:1498 +#: netbox/dcim/forms/bulk_import.py:1553 netbox/dcim/forms/bulk_import.py:1586 msgid "Termination name" msgstr "线缆类型名称" -#: netbox/dcim/forms/bulk_import.py:1470 +#: netbox/dcim/forms/bulk_import.py:1558 msgid "Side B site" msgstr "B 侧网站" -#: netbox/dcim/forms/bulk_import.py:1474 +#: netbox/dcim/forms/bulk_import.py:1562 #: netbox/wireless/forms/bulk_import.py:114 msgid "Site of parent device B (if any)" msgstr "父设备 B 的站点(如果有)" -#: netbox/dcim/forms/bulk_import.py:1477 +#: netbox/dcim/forms/bulk_import.py:1565 msgid "Side B device" msgstr "B端设备" -#: netbox/dcim/forms/bulk_import.py:1484 +#: netbox/dcim/forms/bulk_import.py:1572 msgid "Side B power panel" msgstr "B 侧电源面板" -#: netbox/dcim/forms/bulk_import.py:1491 +#: netbox/dcim/forms/bulk_import.py:1579 msgid "Side B type" msgstr "B端线缆类型" -#: netbox/dcim/forms/bulk_import.py:1497 +#: netbox/dcim/forms/bulk_import.py:1585 msgid "Side B name" msgstr "B端设备名称" -#: netbox/dcim/forms/bulk_import.py:1506 +#: netbox/dcim/forms/bulk_import.py:1594 #: netbox/templates/dcim/panels/connection.html:60 #: netbox/wireless/forms/bulk_import.py:133 msgid "Connection status" msgstr "连接状态" -#: netbox/dcim/forms/bulk_import.py:1512 +#: netbox/dcim/forms/bulk_import.py:1600 msgid "Cable connection profile" msgstr "电缆连接配置文件" -#: netbox/dcim/forms/bulk_import.py:1532 +#: netbox/dcim/forms/bulk_import.py:1620 msgid "Cable bundle name" msgstr "电缆束名称" -#: netbox/dcim/forms/bulk_import.py:1544 +#: netbox/dcim/forms/bulk_import.py:1632 msgid "Color name (e.g. \"Red\") or hex code (e.g. \"f44336\")" msgstr "颜色名称(例如 “红色”)或十六进制代码(例如 “f44336”)" -#: netbox/dcim/forms/bulk_import.py:1587 +#: netbox/dcim/forms/bulk_import.py:1675 #, python-brace-format msgid "Invalid side designation: {side}" msgstr "侧面名称无效: {side}" -#: netbox/dcim/forms/bulk_import.py:1606 +#: netbox/dcim/forms/bulk_import.py:1694 #, python-brace-format msgid "" "Side {side_upper}: {power_panel} {termination_object} is already connected" msgstr "侧面 {side_upper}: {power_panel} {termination_object} 已经连接" -#: netbox/dcim/forms/bulk_import.py:1612 +#: netbox/dcim/forms/bulk_import.py:1700 #, python-brace-format msgid "{side_upper} side termination not found: {power_panel} {name}" msgstr "{side_upper} 未找到侧面终端: {power_panel} {name}" -#: netbox/dcim/forms/bulk_import.py:1630 +#: netbox/dcim/forms/bulk_import.py:1718 #, python-brace-format msgid "Side {side_upper}: {device} {termination_object} is already connected" msgstr " {side_upper}端: {device} {termination_object}已连接" -#: netbox/dcim/forms/bulk_import.py:1636 +#: netbox/dcim/forms/bulk_import.py:1724 #, python-brace-format msgid "{side_upper} side termination not found: {device} {name}" msgstr "{side_upper} 端接口类型未发现: {device} {name}" -#: netbox/dcim/forms/bulk_import.py:1658 +#: netbox/dcim/forms/bulk_import.py:1746 #, python-brace-format msgid "" "{color} did not match any used color name and was longer than six " "characters: invalid hex." msgstr "{color} 与任何使用的颜色名称都不匹配且长度超过六个字符:十六进制无效。" -#: netbox/dcim/forms/bulk_import.py:1683 netbox/dcim/forms/model_forms.py:962 +#: netbox/dcim/forms/bulk_import.py:1771 netbox/dcim/forms/model_forms.py:962 #: netbox/dcim/tables/devices.py:1154 #: netbox/templates/dcim/panels/virtual_chassis_members.html:10 msgid "Master" msgstr "Master" -#: netbox/dcim/forms/bulk_import.py:1687 +#: netbox/dcim/forms/bulk_import.py:1775 msgid "Master device" msgstr "主设备" -#: netbox/dcim/forms/bulk_import.py:1704 +#: netbox/dcim/forms/bulk_import.py:1792 msgid "Name of parent site" msgstr "父站点名称" -#: netbox/dcim/forms/bulk_import.py:1738 +#: netbox/dcim/forms/bulk_import.py:1826 msgid "Upstream power panel" msgstr "上一级电源面板" -#: netbox/dcim/forms/bulk_import.py:1768 +#: netbox/dcim/forms/bulk_import.py:1856 msgid "Primary or redundant" msgstr "主线路/备用线路" -#: netbox/dcim/forms/bulk_import.py:1773 +#: netbox/dcim/forms/bulk_import.py:1861 msgid "Supply type (AC/DC)" msgstr "供应类型(AC/DC)" -#: netbox/dcim/forms/bulk_import.py:1778 +#: netbox/dcim/forms/bulk_import.py:1866 msgid "Single or three-phase" msgstr "单相或三相" -#: netbox/dcim/forms/bulk_import.py:1828 netbox/dcim/forms/model_forms.py:1939 +#: netbox/dcim/forms/bulk_import.py:1916 netbox/dcim/forms/model_forms.py:1939 #: netbox/dcim/ui/panels.py:111 netbox/dcim/ui/panels.py:371 #: netbox/virtualization/ui/panels.py:55 msgid "Primary IPv4" msgstr "主 IPv4" -#: netbox/dcim/forms/bulk_import.py:1832 +#: netbox/dcim/forms/bulk_import.py:1920 msgid "IPv4 address with mask, e.g. 1.2.3.4/24" msgstr "带掩码的 IPv4 地址,例如 1.2.3.4/24" -#: netbox/dcim/forms/bulk_import.py:1835 netbox/dcim/forms/model_forms.py:1948 +#: netbox/dcim/forms/bulk_import.py:1923 netbox/dcim/forms/model_forms.py:1948 #: netbox/dcim/ui/panels.py:116 netbox/dcim/ui/panels.py:376 #: netbox/virtualization/ui/panels.py:60 msgid "Primary IPv6" msgstr "主 IPv6" -#: netbox/dcim/forms/bulk_import.py:1839 +#: netbox/dcim/forms/bulk_import.py:1927 msgid "IPv6 address with prefix length, e.g. 2001:db8::1/64" msgstr "带有前缀长度的 IPv6 地址,例如 2001:db8:: 1/64" @@ -5921,11 +5950,6 @@ msgstr "前置接口" msgid "Power outlet" msgstr "电源插座" -#: netbox/dcim/forms/model_forms.py:1846 -#: netbox/dcim/forms/object_import.py:145 -msgid "Rear port" -msgstr "后置端口" - #: netbox/dcim/forms/model_forms.py:1852 msgid "Inventory Item" msgstr "库存项" @@ -5973,7 +5997,7 @@ msgstr "提供了 {value_count}个参数,实际需要{pattern_count}个。" #: netbox/dcim/forms/object_create.py:312 netbox/dcim/tables/devices.py:1160 #: netbox/ipam/tables/fhrp.py:31 netbox/ipam/ui/panels.py:185 -#: netbox/ipam/views.py:1589 netbox/templates/dcim/virtualchassis_edit.html:59 +#: netbox/ipam/views.py:1594 netbox/templates/dcim/virtualchassis_edit.html:59 #: netbox/users/views.py:375 msgid "Members" msgstr "成员" @@ -5996,13 +6020,6 @@ msgstr "成员设备" msgid "A position must be specified for the first VC member." msgstr "必须为第一个VC成员指定一个位置。" -#: netbox/dcim/models/base.py:59 -#, python-brace-format -msgid "" -"Invalid rear port position ({rear_port_position}): Rear port {name} has only" -" {positions} positions." -msgstr "无效的后端口位置({rear_port_position});后端口{name}只有 {positions}个" - #: netbox/dcim/models/cables.py:62 msgid "cable bundle" msgstr "电缆束" @@ -7817,8 +7834,8 @@ msgstr "分配功率(W)" #: netbox/dcim/tables/devices.py:597 netbox/dcim/views.py:3402 #: netbox/ipam/forms/model_forms.py:834 netbox/ipam/tables/fhrp.py:28 -#: netbox/ipam/ui/panels.py:252 netbox/ipam/views.py:922 -#: netbox/ipam/views.py:1047 netbox/netbox/navigation/menu.py:175 +#: netbox/ipam/ui/panels.py:252 netbox/ipam/views.py:924 +#: netbox/ipam/views.py:1052 netbox/netbox/navigation/menu.py:175 #: netbox/netbox/navigation/menu.py:177 netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "IP地址" @@ -8245,7 +8262,7 @@ msgstr "设备虚拟实例" #: netbox/dcim/views.py:3414 netbox/ipam/forms/filtersets.py:469 #: netbox/ipam/models/vlans.py:308 netbox/ipam/tables/ip.py:121 -#: netbox/ipam/tables/vlans.py:52 netbox/ipam/views.py:1381 +#: netbox/ipam/tables/vlans.py:52 netbox/ipam/views.py:1386 #: netbox/netbox/navigation/menu.py:210 netbox/netbox/navigation/menu.py:212 msgid "VLANs" msgstr "VLANs" @@ -11102,11 +11119,11 @@ msgstr "策略" msgid "Ports" msgstr "端口" -#: netbox/ipam/forms/bulk_import.py:55 netbox/ipam/views.py:72 +#: netbox/ipam/forms/bulk_import.py:55 netbox/ipam/views.py:73 msgid "Import route targets" msgstr "导入的 Route Targets" -#: netbox/ipam/forms/bulk_import.py:61 netbox/ipam/views.py:75 +#: netbox/ipam/forms/bulk_import.py:61 netbox/ipam/views.py:76 msgid "Export route targets" msgstr "导出的Route Targets" @@ -11919,8 +11936,8 @@ msgid "Added" msgstr "已添加" #: netbox/ipam/tables/ip.py:76 netbox/ipam/tables/ip.py:111 -#: netbox/ipam/tables/vlans.py:125 netbox/ipam/views.py:621 -#: netbox/ipam/views.py:1731 netbox/netbox/navigation/menu.py:182 +#: netbox/ipam/tables/vlans.py:125 netbox/ipam/views.py:623 +#: netbox/ipam/views.py:1736 netbox/netbox/navigation/menu.py:182 #: netbox/netbox/navigation/menu.py:184 msgid "Prefixes" msgstr "前缀" @@ -12121,77 +12138,77 @@ msgid "" "are allowed in DNS names" msgstr "DNS 名称中仅允许使用字母数字字符、星号、连字符、句点和下划线" -#: netbox/ipam/views.py:106 netbox/ipam/views.py:1761 +#: netbox/ipam/views.py:107 netbox/ipam/views.py:1766 msgid "Device Interfaces" msgstr "设备接口" -#: netbox/ipam/views.py:111 netbox/ipam/views.py:1779 +#: netbox/ipam/views.py:112 netbox/ipam/views.py:1784 msgid "VM Interfaces" msgstr "VM接口" -#: netbox/ipam/views.py:196 +#: netbox/ipam/views.py:197 msgid "Importing VRFs" msgstr "导入VFR" -#: netbox/ipam/views.py:203 +#: netbox/ipam/views.py:204 msgid "Exporting VRFs" msgstr "导出VFR" -#: netbox/ipam/views.py:212 +#: netbox/ipam/views.py:213 msgid "Importing L2VPNs" msgstr "导入L2VPN" -#: netbox/ipam/views.py:219 +#: netbox/ipam/views.py:220 msgid "Exporting L2VPNs" msgstr "导出L2VPN" -#: netbox/ipam/views.py:798 +#: netbox/ipam/views.py:800 msgid "Duplicate prefixes" msgstr "重复的前缀" -#: netbox/ipam/views.py:799 netbox/ipam/views.py:1012 -#: netbox/ipam/views.py:1120 +#: netbox/ipam/views.py:801 netbox/ipam/views.py:1017 +#: netbox/ipam/views.py:1125 msgid "Parent prefixes" msgstr "父前缀" -#: netbox/ipam/views.py:851 +#: netbox/ipam/views.py:853 msgid "Child Prefixes" msgstr "下级前缀" -#: netbox/ipam/views.py:895 +#: netbox/ipam/views.py:897 msgid "Child Ranges" msgstr "子类地址访问" -#: netbox/ipam/views.py:1121 +#: netbox/ipam/views.py:1126 msgid "Duplicate IPs" msgstr "重复 IP" -#: netbox/ipam/views.py:1125 +#: netbox/ipam/views.py:1130 msgid "Application services" msgstr "应用程序服务" -#: netbox/ipam/views.py:1291 +#: netbox/ipam/views.py:1296 msgid "Related IPs" msgstr "关联IP" -#: netbox/ipam/views.py:1432 +#: netbox/ipam/views.py:1437 msgid "VLAN translation rules" msgstr "VLAN 转换规则" -#: netbox/ipam/views.py:1438 +#: netbox/ipam/views.py:1443 msgid "Add Rule" msgstr "添加规则" -#: netbox/ipam/views.py:1580 +#: netbox/ipam/views.py:1585 msgid "Virtual IP addresses" msgstr "虚拟 IP 地址" -#: netbox/ipam/views.py:1585 netbox/templates/ipam/iprange/ip_addresses.html:8 +#: netbox/ipam/views.py:1590 netbox/templates/ipam/iprange/ip_addresses.html:8 #: netbox/templates/ipam/prefix/ip_addresses.html:7 msgid "Add IP Address" msgstr "增加 IP 地址" -#: netbox/ipam/views.py:1744 +#: netbox/ipam/views.py:1749 msgid "Add a Prefix" msgstr "添加一个前缀" @@ -13568,7 +13585,7 @@ msgstr "的同步数据 {object_type} {object}。" msgid "Synced {count} {object_type}" msgstr "已同步 {count} {object_type}" -#: netbox/netbox/views/generic/object_views.py:118 +#: netbox/netbox/views/generic/object_views.py:120 #, python-brace-format msgid "{class_name} must implement get_children()" msgstr "{class_name}必须实现get_children()方法" @@ -15487,7 +15504,7 @@ msgstr "每页" msgid "Data is out of sync with upstream file" msgstr "数据与上游文件不同步" -#: netbox/templates/inc/table_controls_htmx.html:11 +#: netbox/templates/inc/table_controls_htmx.html:10 #: netbox/templates/inc/table_controls_htmx.html:12 msgid "Quick search" msgstr "快速搜索" diff --git a/requirements.txt b/requirements.txt index 3a2c3caf8..d71a5289b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,7 +18,7 @@ django-timezone-field==7.2.2 djangorestframework==3.17.1 drf-spectacular==0.30.0 drf-spectacular-sidecar==2026.7.1 -feedparser==6.0.13 +feedparser==6.0.14 gunicorn==26.0.0 Jinja2==3.1.6 jsonschema==4.26.0 @@ -43,4 +43,4 @@ strawberry-graphql-django==0.86.5 svgwrite==1.4.3 tablib==3.9.0 tzdata==2026.3 -zensical==0.0.51 +zensical==0.0.52 From 42cb0326fb0154650b973ee12812c5cad7592f5f Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 31 Jul 2026 06:00:45 +0000 Subject: [PATCH 11/35] Update source translation strings --- netbox/translations/en/LC_MESSAGES/django.po | 44 ++++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index 121300393..641f6ea4a 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: 2026-07-30 05:52+0000\n" +"POT-Creation-Date: 2026-07-31 06:00+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -230,30 +230,30 @@ msgstr "" #: netbox/circuits/filtersets.py:107 netbox/circuits/filtersets.py:137 #: netbox/circuits/filtersets.py:175 netbox/circuits/filtersets.py:365 -#: netbox/circuits/filtersets.py:436 netbox/circuits/filtersets.py:517 -#: netbox/circuits/filtersets.py:596 netbox/ipam/filtersets.py:284 +#: netbox/circuits/filtersets.py:441 netbox/circuits/filtersets.py:522 +#: netbox/circuits/filtersets.py:601 netbox/ipam/filtersets.py:284 msgid "Provider (ID)" msgstr "" #: netbox/circuits/filtersets.py:114 netbox/circuits/filtersets.py:144 #: netbox/circuits/filtersets.py:182 netbox/circuits/filtersets.py:372 -#: netbox/circuits/filtersets.py:524 netbox/circuits/filtersets.py:603 +#: netbox/circuits/filtersets.py:529 netbox/circuits/filtersets.py:608 #: netbox/ipam/filtersets.py:290 msgid "Provider (slug)" msgstr "" -#: netbox/circuits/filtersets.py:188 netbox/circuits/filtersets.py:530 -#: netbox/circuits/filtersets.py:609 +#: netbox/circuits/filtersets.py:188 netbox/circuits/filtersets.py:535 +#: netbox/circuits/filtersets.py:614 msgid "Provider account (ID)" msgstr "" -#: netbox/circuits/filtersets.py:195 netbox/circuits/filtersets.py:537 -#: netbox/circuits/filtersets.py:616 +#: netbox/circuits/filtersets.py:195 netbox/circuits/filtersets.py:542 +#: netbox/circuits/filtersets.py:621 msgid "Provider account (account)" msgstr "" -#: netbox/circuits/filtersets.py:200 netbox/circuits/filtersets.py:542 -#: netbox/circuits/filtersets.py:622 +#: netbox/circuits/filtersets.py:200 netbox/circuits/filtersets.py:547 +#: netbox/circuits/filtersets.py:627 msgid "Provider network (ID)" msgstr "" @@ -289,7 +289,7 @@ msgid "Termination A (ID)" msgstr "" #: netbox/circuits/filtersets.py:295 netbox/circuits/filtersets.py:405 -#: netbox/circuits/filtersets.py:580 netbox/core/filtersets.py:91 +#: netbox/circuits/filtersets.py:585 netbox/core/filtersets.py:91 #: netbox/core/filtersets.py:179 netbox/core/filtersets.py:205 #: netbox/core/filtersets.py:248 netbox/dcim/filtersets.py:926 #: netbox/dcim/filtersets.py:1760 netbox/dcim/filtersets.py:3041 @@ -343,43 +343,43 @@ msgstr "" msgid "ProviderNetwork (ID)" msgstr "" -#: netbox/circuits/filtersets.py:411 +#: netbox/circuits/filtersets.py:416 msgid "Circuit (CID)" msgstr "" -#: netbox/circuits/filtersets.py:416 +#: netbox/circuits/filtersets.py:421 msgid "Circuit (ID)" msgstr "" -#: netbox/circuits/filtersets.py:421 +#: netbox/circuits/filtersets.py:426 msgid "Virtual circuit (CID)" msgstr "" -#: netbox/circuits/filtersets.py:426 netbox/dcim/filtersets.py:2336 +#: netbox/circuits/filtersets.py:431 netbox/dcim/filtersets.py:2336 msgid "Virtual circuit (ID)" msgstr "" -#: netbox/circuits/filtersets.py:431 +#: netbox/circuits/filtersets.py:436 msgid "Provider (name)" msgstr "" -#: netbox/circuits/filtersets.py:441 +#: netbox/circuits/filtersets.py:446 msgid "Circuit group (ID)" msgstr "" -#: netbox/circuits/filtersets.py:448 +#: netbox/circuits/filtersets.py:453 msgid "Circuit group (slug)" msgstr "" -#: netbox/circuits/filtersets.py:547 +#: netbox/circuits/filtersets.py:552 msgid "Virtual circuit type (ID)" msgstr "" -#: netbox/circuits/filtersets.py:554 +#: netbox/circuits/filtersets.py:559 msgid "Virtual circuit type (slug)" msgstr "" -#: netbox/circuits/filtersets.py:585 netbox/circuits/forms/bulk_edit.py:316 +#: netbox/circuits/filtersets.py:590 netbox/circuits/forms/bulk_edit.py:316 #: netbox/circuits/forms/bulk_import.py:248 #: netbox/circuits/forms/filtersets.py:384 #: netbox/circuits/forms/filtersets.py:390 @@ -389,7 +389,7 @@ msgstr "" msgid "Virtual circuit" msgstr "" -#: netbox/circuits/filtersets.py:628 netbox/dcim/filtersets.py:1572 +#: netbox/circuits/filtersets.py:633 netbox/dcim/filtersets.py:1572 #: netbox/dcim/filtersets.py:2061 netbox/ipam/filtersets.py:680 #: netbox/vpn/filtersets.py:117 netbox/vpn/filtersets.py:445 msgid "Interface (ID)" From 4877d1167f4e20c0507bc902ee4c708e20f92e36 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 30 Jul 2026 16:49:03 -0400 Subject: [PATCH 12/35] Correct release date for v4.6.7 --- docs/release-notes/version-4.6.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/release-notes/version-4.6.md b/docs/release-notes/version-4.6.md index d3e30621a..6d7db1575 100644 --- a/docs/release-notes/version-4.6.md +++ b/docs/release-notes/version-4.6.md @@ -1,6 +1,6 @@ # NetBox v4.6 -## v4.6.7 (FUTURE) +## v4.6.7 (2026-07-30) ### Performance Improvements From 492cb83cc3e9c30b7e28e16291e4f96dd6fd04da Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Mon, 3 Aug 2026 09:00:07 -0400 Subject: [PATCH 13/35] Fixes #22844: Allow null value for CustomFieldChoiceSet base_choices in REST API --- .../extras/api/serializers_/customfields.py | 3 +- netbox/extras/tests/test_api.py | 30 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/netbox/extras/api/serializers_/customfields.py b/netbox/extras/api/serializers_/customfields.py index 175b88646..1cdbc46dd 100644 --- a/netbox/extras/api/serializers_/customfields.py +++ b/netbox/extras/api/serializers_/customfields.py @@ -19,7 +19,8 @@ __all__ = ( class CustomFieldChoiceSetSerializer(OwnerMixin, ChangeLogMessageSerializer, ValidatedModelSerializer): base_choices = ChoiceField( choices=CustomFieldChoiceSetBaseChoices, - required=False + required=False, + allow_null=True, ) extra_choices = serializers.ListField( child=serializers.ListField( diff --git a/netbox/extras/tests/test_api.py b/netbox/extras/tests/test_api.py index d278a5845..89af94be6 100644 --- a/netbox/extras/tests/test_api.py +++ b/netbox/extras/tests/test_api.py @@ -296,6 +296,36 @@ class CustomFieldChoiceSetTestCase(APIViewTestCases.APIViewTestCase): response = self.client.post(self._get_list_url(), data, format='json', **self.header) self.assertEqual(response.status_code, 400) + def test_null_base_choices(self): + """ + A null value for base_choices should be accepted, as returned by the API for a choice set which defines + only extra choices. + """ + self.add_permissions('extras.add_customfieldchoiceset', 'extras.change_customfieldchoiceset') + data = { + 'name': 'test', + 'base_choices': None, + 'extra_choices': [ + ['choice1', 'Choice 1'], + ], + } + + response = self.client.post(self._get_list_url(), data, format='json', **self.header) + self.assertHttpStatus(response, status.HTTP_201_CREATED) + self.assertIsNone(response.data['base_choices']) + choice_set = CustomFieldChoiceSet.objects.get(pk=response.data['id']) + self.assertIsNone(choice_set.base_choices) + + # A choice set with base choices assigned can be reverted to null + choice_set.base_choices = CustomFieldChoiceSetBaseChoices.IATA + choice_set.save() + response = self.client.patch( + self._get_detail_url(choice_set), {'base_choices': None}, format='json', **self.header + ) + self.assertHttpStatus(response, status.HTTP_200_OK) + choice_set.refresh_from_db() + self.assertIsNone(choice_set.base_choices) + def test_invalid_choice_color(self): self.add_permissions('extras.add_customfieldchoiceset') data = { From 071c78d1724d8c2703f3615f5b5b647469d6ff59 Mon Sep 17 00:00:00 2001 From: bctiemann Date: Mon, 3 Aug 2026 11:46:24 -0400 Subject: [PATCH 14/35] Closes #22828: Validate Webhook.payload_url as a URL or Jinja2 template (#22832) --- docs/models/extras/webhook.md | 7 ++- netbox/extras/models/models.py | 48 ++++++++++++++-- netbox/extras/tests/test_models.py | 90 ++++++++++++++++++++++++++++++ netbox/utilities/jinja2.py | 41 ++++++++++++-- 4 files changed, 173 insertions(+), 13 deletions(-) diff --git a/docs/models/extras/webhook.md b/docs/models/extras/webhook.md index 1d17bdd49..07db9e33c 100644 --- a/docs/models/extras/webhook.md +++ b/docs/models/extras/webhook.md @@ -32,7 +32,12 @@ The events which will trigger the webhook. At least one event type must be selec ### URL -The URL to which the webhook HTTP request will be made. +The URL to which the webhook HTTP request will be made. Must be `http://` or `https://`, though +part or all of the value may be a Jinja2 template rendered at send time (e.g. +`http://{{ data.name }}.example.com/hook`, or `{{ data.custom_fields.callback_url }}` if the whole +URL comes from a template). A literal scheme is always validated as such, even if the rest of the +URL is templated; otherwise the value is checked only for valid Jinja2 syntax, since its rendered +value isn't known until the webhook actually fires. ### HTTP Method diff --git a/netbox/extras/models/models.py b/netbox/extras/models/models.py index 4bd257ccf..fdb371a9f 100644 --- a/netbox/extras/models/models.py +++ b/netbox/extras/models/models.py @@ -1,4 +1,5 @@ import json +import re import urllib.parse from pathlib import Path @@ -34,7 +35,7 @@ from netbox.models.features import ( ) from netbox.models.mixins import OwnerMixin from utilities.html import clean_html -from utilities.jinja2 import render_jinja2, sanitize_http_header +from utilities.jinja2 import JINJA2_TEMPLATE_RE, render_jinja2, sanitize_http_header, validate_jinja2_syntax from utilities.querydict import dict_to_querydict from utilities.querysets import RestrictedQuerySet from utilities.tables import get_table_for_model @@ -51,6 +52,11 @@ __all__ = ( 'Webhook', ) +# Matches a literal URL scheme (RFC 3986), independent of urlsplit()'s netloc parsing -- which can +# raise ValueError on a malformed host -- so a payload_url's scheme can always be read even when +# its host is templated or malformed. +LITERAL_SCHEME_RE = re.compile(r'^([a-zA-Z][a-zA-Z0-9+.-]*):') + class EventRule(CustomFieldsMixin, ExportTemplatesMixin, OwnerMixin, TagsMixin, ChangeLoggedModel): """ @@ -187,8 +193,9 @@ class Webhook(CustomFieldsMixin, ExportTemplatesMixin, TagsMixin, OwnerMixin, Ch max_length=500, verbose_name=_('URL'), help_text=_( - "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." + "This URL will be called using the HTTP method defined when the webhook is called. Must be " + "http:// or https://. Jinja2 template processing is supported (with the same context as the " + "request body) for part or all of the URL." ) ) http_method = models.CharField( @@ -273,11 +280,40 @@ class Webhook(CustomFieldsMixin, ExportTemplatesMixin, TagsMixin, OwnerMixin, Ch def clean(self): super().clean() + errors = {} + # CA file path requires SSL verification enabled if not self.ssl_verification and self.ca_file_path: - raise ValidationError({ - 'ca_file_path': _('Do not specify a CA certificate file if SSL verification is disabled.') - }) + errors['ca_file_path'] = _('Do not specify a CA certificate file if SSL verification is disabled.') + + # payload_url may be a literal URL or a Jinja2 template (see its help_text). Skipped when + # blank; clean_fields() already flags that. + if self.payload_url: + if JINJA2_TEMPLATE_RE.search(self.payload_url): + # A literal, disallowed scheme (e.g. "file://") can never resolve no matter what + # else in the value is templated; anything else is checked for template syntax + # only, since its rendered result isn't known here. + match = LITERAL_SCHEME_RE.match(self.payload_url) + if match and match.group(1).lower() not in ('http', 'https'): + errors['payload_url'] = _("Enter a valid URL, beginning with http:// or https://.") + else: + try: + validate_jinja2_syntax(self.payload_url) + except ValidationError as e: + errors['payload_url'] = e + else: + # Fully literal -- validate directly rather than via URLValidator, which rejects + # single-label and underscore hosts that `requests` accepts fine. urlsplit() can + # raise ValueError for a malformed netloc (e.g. an unbalanced IPv6 bracket). + try: + scheme, netloc = urllib.parse.urlsplit(self.payload_url)[:2] + except ValueError: + scheme, netloc = '', '' + if scheme not in ('http', 'https') or not netloc: + errors['payload_url'] = _("Enter a valid URL, beginning with http:// or https://.") + + if errors: + raise ValidationError(errors) def render_headers(self, context): """ diff --git a/netbox/extras/tests/test_models.py b/netbox/extras/tests/test_models.py index 296e7192d..d6862a246 100644 --- a/netbox/extras/tests/test_models.py +++ b/netbox/extras/tests/test_models.py @@ -32,6 +32,7 @@ from extras.models import ( TableConfig, Tag, TaggedItem, + Webhook, ) from extras.models.mixins import RenderTemplateMixin from tenancy.models import Tenant, TenantGroup @@ -1580,6 +1581,95 @@ class ExportTemplateRenderTestCase(TestCase): self.assertEqual(response.content.decode(), 'Site A\nSite B\nSite C\n') +class WebhookTestCase(TestCase): + """Tests for Webhook.clean()'s validation of payload_url (#22828).""" + + def test_payload_url_accepts_literal_url(self): + webhook = Webhook(name='Webhook 1', payload_url='http://example.com/hook') + webhook.clean() + + def test_payload_url_rejects_non_url(self): + webhook = Webhook(name='Webhook 1', payload_url='not-a-url-at-all') + with self.assertRaises(ValidationError) as cm: + webhook.clean() + self.assertIn('payload_url', cm.exception.message_dict) + + def test_payload_url_rejects_disallowed_scheme(self): + webhook = Webhook(name='Webhook 1', payload_url='file:///etc/passwd') + with self.assertRaises(ValidationError) as cm: + webhook.clean() + self.assertIn('payload_url', cm.exception.message_dict) + + def test_payload_url_accepts_jinja2_template(self): + """A templated payload_url must not be rejected merely for not being a literal URL.""" + webhook = Webhook(name='Webhook 1', payload_url='http://{{ data.name }}.example.com/hook') + webhook.clean() + + def test_payload_url_accepts_template_using_a_registered_filter(self): + webhook = Webhook(name='Webhook 1', payload_url="http://example.com/{{ 'HOME' | env }}") + webhook.clean() + + def test_payload_url_rejects_malformed_template_syntax(self): + webhook = Webhook(name='Webhook 1', payload_url='http://{{ data.name }.example.com/hook') + with self.assertRaises(ValidationError) as cm: + webhook.clean() + self.assertIn('payload_url', cm.exception.message_dict) + + def test_payload_url_rejects_template_with_unregistered_filter(self): + webhook = Webhook( + name='Webhook 1', payload_url='http://example.com/{{ data.name | totally_unregistered_filter }}' + ) + with self.assertRaises(ValidationError) as cm: + webhook.clean() + self.assertIn('payload_url', cm.exception.message_dict) + + def test_payload_url_accepts_single_label_host(self): + """A Docker/Kubernetes-style internal service name is a legitimate webhook target (#22832).""" + webhook = Webhook(name='Webhook 1', payload_url='http://webhook-receiver:8080/hook') + webhook.clean() + + def test_payload_url_accepts_underscore_in_hostname(self): + """requests accepts an underscore in a hostname even though Django's URLValidator does not (#22832).""" + webhook = Webhook(name='Webhook 1', payload_url='http://my_host.example.com/hook') + webhook.clean() + + def test_payload_url_rejects_missing_host(self): + webhook = Webhook(name='Webhook 1', payload_url='http:///hook') + with self.assertRaises(ValidationError) as cm: + webhook.clean() + self.assertIn('payload_url', cm.exception.message_dict) + + def test_payload_url_rejects_templated_disallowed_scheme(self): + """A literal, disallowed scheme must be rejected even when the rest of the URL is templated (#22832).""" + webhook = Webhook(name='Webhook 1', payload_url='file:///{{ data.name }}') + with self.assertRaises(ValidationError) as cm: + webhook.clean() + self.assertIn('payload_url', cm.exception.message_dict) + + def test_blank_payload_url_produces_a_single_error(self): + """clean() must not add its own error on top of clean_fields()'s for a blank value (#22832).""" + webhook = Webhook(name='Webhook 1', payload_url='') + with self.assertRaises(ValidationError) as cm: + webhook.full_clean() + self.assertEqual(cm.exception.message_dict['payload_url'], ['This field cannot be blank.']) + + def test_none_payload_url_does_not_raise_typeerror(self): + webhook = Webhook(name='Webhook 1', payload_url=None) + webhook.clean() + + def test_payload_url_accepts_fully_templated_value(self): + """A value with no literal scheme at all (the scheme itself is templated) must still be usable (#22832).""" + webhook = Webhook(name='Webhook 1', payload_url='{{ data.custom_fields.callback_url }}') + webhook.clean() + + def test_payload_url_rejects_malformed_bracketed_host_gracefully(self): + """A malformed netloc must raise ValidationError, not an uncaught ValueError from urlsplit() (#22832).""" + webhook = Webhook(name='Webhook 1', payload_url='http://[2001:db8::1/hook') + with self.assertRaises(ValidationError) as cm: + webhook.clean() + self.assertIn('payload_url', cm.exception.message_dict) + + class EventRuleTestCase(TestCase): def test_action_data_clean_accepts_dict(self): diff --git a/netbox/utilities/jinja2.py b/netbox/utilities/jinja2.py index 620697007..5d8f4ffcd 100644 --- a/netbox/utilities/jinja2.py +++ b/netbox/utilities/jinja2.py @@ -3,7 +3,10 @@ import os import re from django.apps import apps +from django.core.exceptions import ValidationError +from django.utils.translation import gettext_lazy as _ from jinja2 import BaseLoader, TemplateNotFound +from jinja2.exceptions import TemplateSyntaxError from jinja2.meta import find_referenced_templates from jinja2.sandbox import SandboxedEnvironment @@ -11,16 +14,23 @@ from netbox.config import get_config __all__ = ( 'DEFAULT_JINJA2_FILTERS', + 'HTTP_HEADER_INVALID_CHARS_RE', + 'JINJA2_TEMPLATE_RE', 'DataFileLoader', 'env_filter', 'render_jinja2', 'sanitize_http_header', + 'validate_jinja2_syntax', ) # Control characters (C0 range plus DEL) which are invalid in an HTTP header value. Notably, this includes the # carriage return and line feed characters used to smuggle additional headers (CR/LF injection). HTTP_HEADER_INVALID_CHARS_RE = re.compile(r'[\x00-\x1f\x7f]') +# Matches the start of a Jinja2 expression, statement, or comment ({{, {%, {#), to detect whether a +# template-capable field (e.g. Webhook.payload_url) is being used as a literal value or a template. +JINJA2_TEMPLATE_RE = re.compile(r'\{[{%#]') + def env_filter(name): """ @@ -86,6 +96,15 @@ class DataFileLoader(BaseLoader): # Utility functions # +def _jinja2_filters(filters=None): + """ + Build the Jinja2 filter table: defaults, then instance-configured JINJA2_FILTERS, then any + filters passed for this call, in increasing precedence. Shared by render_jinja2() and + validate_jinja2_syntax() so both see an identical filter table. + """ + return {**DEFAULT_JINJA2_FILTERS, **get_config().JINJA2_FILTERS, **(filters or {})} + + def render_jinja2(template_code, context, environment_params=None, data_file=None, debug=False, filters=None): """ Render a Jinja2 template with the provided context. Return the rendered content. @@ -114,15 +133,25 @@ def render_jinja2(template_code, context, environment_params=None, data_file=Non environment_params['loader'] = loader environment = SandboxedEnvironment(**environment_params) - - # Register default filters, then apply any user-defined filters. User-defined entries take precedence so that - # existing JINJA2_FILTERS configurations are never overridden. Any filters passed for this render take precedence - # over both so that context-specific (e.g. sanitization) filters cannot be shadowed. - all_filters = {**DEFAULT_JINJA2_FILTERS, **get_config().JINJA2_FILTERS, **(filters or {})} - environment.filters.update(all_filters) + environment.filters.update(_jinja2_filters(filters)) if data_file: template = environment.get_template(data_file.path) else: template = environment.from_string(source=template_code) return template.render(**context) + + +def validate_jinja2_syntax(template_code, filters=None): + """ + Validate that template_code is syntactically well-formed Jinja2 -- including that any filters + it references are registered -- without rendering it, so no context data is required. Pass the + same `filters` used at render time (see render_jinja2()) for an identical filter table. Raises + django.core.exceptions.ValidationError on failure. + """ + environment = SandboxedEnvironment(loader=BaseLoader()) + environment.filters.update(_jinja2_filters(filters)) + try: + environment.compile(template_code) + except TemplateSyntaxError as e: + raise ValidationError(_("Invalid template: {error}").format(error=e)) From 6047ce1a37010fa6374f8aab1a54bcd82cc4b7e5 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Mon, 3 Aug 2026 12:13:40 -0400 Subject: [PATCH 15/35] Fixes #22854: Set `USE_SHADOW_DOM=False` to fix GraphiQL queries w/debug enabled (#22855) --- netbox/netbox/settings.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/netbox/netbox/settings.py b/netbox/netbox/settings.py index f334a73a7..1f7a92764 100644 --- a/netbox/netbox/settings.py +++ b/netbox/netbox/settings.py @@ -634,6 +634,10 @@ SERIALIZATION_MODULES = { DEBUG_TOOLBAR_CONFIG = { 'SHOW_TOOLBAR_CALLBACK': 'utilities.debug.show_toolbar', + # The GraphiQL integration provided by strawberry-django locates the toolbar via + # document.getElementById('djDebug'), which fails when the toolbar is rendered inside a + # shadow root (the default as of django-debug-toolbar v7.0). + 'USE_SHADOW_DOM': False, } From 4afdb31b89ea1adc457f38af945b58f9743ff610 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Mon, 3 Aug 2026 12:58:24 -0400 Subject: [PATCH 16/35] Fixes #22848: Ensure deterministic ordering for duplicate IP addresses (#22849) --- netbox/ipam/managers.py | 6 ++- .../migrations/0094_ipaddress_host_index.py | 33 ++++++++++++++ netbox/ipam/models/ip.py | 9 +++- netbox/ipam/tests/test_ordering.py | 43 +++++++++++++++++++ 4 files changed, 88 insertions(+), 3 deletions(-) create mode 100644 netbox/ipam/migrations/0094_ipaddress_host_index.py diff --git a/netbox/ipam/managers.py b/netbox/ipam/managers.py index 8f1eb9ff1..e7da0108b 100644 --- a/netbox/ipam/managers.py +++ b/netbox/ipam/managers.py @@ -13,5 +13,9 @@ class IPAddressManager(Manager.from_queryset(IPAddressQuerySet)): address. We can use HOST() to extract just the host portion of the address (ignoring its mask), but we must then re-cast this value to INET() so that records will be ordered properly. We are essentially re-casting each IP address as a /32 or /128. + + Host addresses are not unique, so we must also order by primary key to guarantee a stable, total ordering. + Without this tiebreaker, PostgreSQL is free to return tied rows in a different order from one query to the + next, which causes objects to be duplicated or omitted across paginated requests. """ - return super().get_queryset().order_by(Inet(Host('address'))) + return super().get_queryset().order_by(Inet(Host('address')), 'pk') diff --git a/netbox/ipam/migrations/0094_ipaddress_host_index.py b/netbox/ipam/migrations/0094_ipaddress_host_index.py new file mode 100644 index 000000000..04f0f7c72 --- /dev/null +++ b/netbox/ipam/migrations/0094_ipaddress_host_index.py @@ -0,0 +1,33 @@ +import django.db.models.functions.comparison +from django.db import migrations, models + +import ipam.fields +import ipam.lookups + + +class Migration(migrations.Migration): + dependencies = [ + ('ipam', '0093_alter_prefix__region_alter_prefix__site_group'), + ] + + operations = [ + # Replace the host address index with a composite index which also covers the primary key, so that it can + # satisfy the default ordering of IPAddress outright. Note that the existing index must be dropped rather + # than retained alongside the new one: with both present, PostgreSQL continues to select the narrower index + # and applies an incremental sort atop it. + migrations.RemoveIndex( + model_name='ipaddress', + name='ipam_ipaddress_host', + ), + migrations.AddIndex( + model_name='ipaddress', + index=models.Index( + django.db.models.functions.comparison.Cast( + ipam.lookups.Host('address'), + output_field=ipam.fields.IPAddressField(), + ), + models.F('id'), + name='ipam_ipaddress_host', + ), + ), + ] diff --git a/netbox/ipam/models/ip.py b/netbox/ipam/models/ip.py index 51941526e..231c77c6d 100644 --- a/netbox/ipam/models/ip.py +++ b/netbox/ipam/models/ip.py @@ -1023,8 +1023,13 @@ class IPAddress(ContactsMixin, PrimaryModel): class Meta: ordering = ('address', 'pk') # address may be non-unique indexes = ( - models.Index(fields=('address', 'id')), # Default ordering - models.Index(Cast(Host('address'), output_field=IPAddressField()), name='ipam_ipaddress_host'), + models.Index(fields=('address', 'id')), + # Default ordering (see IPAddressManager). The primary key must be included so that the index can + # satisfy the ordering outright; without it PostgreSQL falls back to an incremental sort, which + # measurably slows deep pagination. + models.Index( + Cast(Host('address'), output_field=IPAddressField()), F('id'), name='ipam_ipaddress_host' + ), models.Index(fields=('assigned_object_type', 'assigned_object_id')), ) verbose_name = _('IP address') diff --git a/netbox/ipam/tests/test_ordering.py b/netbox/ipam/tests/test_ordering.py index 2f904ab89..efd536d14 100644 --- a/netbox/ipam/tests/test_ordering.py +++ b/netbox/ipam/tests/test_ordering.py @@ -198,3 +198,46 @@ class IPAddressOrderingTestCase(OrderingTestBase): # Test self._compare(IPAddress.objects.all(), addresses) + + def test_duplicate_address_ordering(self): + """ + Host addresses are not unique, so tied addresses must be ordered by primary key to yield a stable, total + ordering. Without a tiebreaker the database may return tied rows in a different order from one query to the + next, duplicating or omitting objects across paginated requests. + """ + # Create several duplicates of each address, interleaved so that primary key order does not follow + # address order. + addresses = [ + IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, address=netaddr.IPNetwork(f'10.0.{i}.1/24')) + for _ in range(4) + for i in range(100) + ] + IPAddress.objects.bulk_create(addresses) + + pks = list(IPAddress.objects.values_list('pk', flat=True)) + expected = [ + ip.pk for ip in sorted(IPAddress.objects.all(), key=lambda ip: (ip.address.ip, ip.pk)) + ] + + self.assertEqual(pks, expected) + + def test_duplicate_address_pagination(self): + """ + Paginating over duplicate addresses must not return the same object on two pages, nor omit any object. + """ + addresses = [ + IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, address=netaddr.IPNetwork(f'10.0.{i}.1/24')) + for _ in range(4) + for i in range(100) + ] + IPAddress.objects.bulk_create(addresses) + + queryset = IPAddress.objects.values_list('pk', flat=True) + page_size = 37 + paginated = [] + for offset in range(0, len(addresses), page_size): + paginated.extend(queryset[offset:offset + page_size]) + + self.assertEqual(len(paginated), len(addresses)) + self.assertEqual(len(set(paginated)), len(addresses)) + self.assertEqual(paginated, list(queryset)) From be72e841f58281399202197c6fba05dbe05be6d9 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Mon, 3 Aug 2026 12:49:54 -0400 Subject: [PATCH 17/35] Closes #22837: Omit implicit pagination on GraphQL to-one prefetches --- netbox/netbox/graphql/pagination.py | 14 +++++- netbox/netbox/tests/test_graphql.py | 76 +++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+), 1 deletion(-) diff --git a/netbox/netbox/graphql/pagination.py b/netbox/netbox/graphql/pagination.py index abc62ac6b..984e41d01 100644 --- a/netbox/netbox/graphql/pagination.py +++ b/netbox/netbox/graphql/pagination.py @@ -52,8 +52,20 @@ def apply_pagination( # Enforce MAX_PAGE_SIZE on the pagination limit max_page_size = get_config().MAX_PAGE_SIZE if max_page_size: + # A limit is meaningless for a field which returns at most one object, and synthesizing one for a + # prefetched to-one relation is actively harmful. strawberry-django deliberately leaves `pagination` + # as None there so that the prefetch remains a plain `WHERE id IN (...)` query; making it non-None + # switches the prefetch to a window function partitioned by the parent ID. Every partition then + # holds exactly one row, so ROW_NUMBER() is 1 throughout and the row number filter discards nothing, + # causing the join back to the parent table to return every row which shares the related object. + # See strawberry-graphql/strawberry-django#719. + returns_single_object = not (self.is_list or self.is_paginated or self.is_connection) + if pagination is None: - pagination = OffsetPaginationInput(limit=max_page_size) + # Note that `pagination` is never None for a single-object field unless it is a prefetched + # relation: strawberry-django populates it with an implicit limit of its own beforehand. + if not returns_single_object: + pagination = OffsetPaginationInput(limit=max_page_size) elif pagination.limit in (None, UNSET) or pagination.limit > max_page_size: pagination.limit = max_page_size elif pagination.limit <= 0: diff --git a/netbox/netbox/tests/test_graphql.py b/netbox/netbox/tests/test_graphql.py index 5fe5b8468..46f06dd6e 100644 --- a/netbox/netbox/tests/test_graphql.py +++ b/netbox/netbox/tests/test_graphql.py @@ -627,6 +627,82 @@ class GraphQLAPITestCase(APITestCase): self.assertNotIn('errors', data) self.assertEqual(len(data['data']['site_list']), 2) + def test_to_one_relation_prefetch(self): + """ + A prefetched to-one relation should be fetched with a plain `WHERE id IN (...)` query, rather than + with a window function partitioned by the parent ID (which returns every row sharing the related + object, regardless of the requested page size). + """ + self.add_permissions('dcim.view_device', 'dcim.view_site') + url = reverse('graphql') + + site = Site.objects.first() + manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1') + device_type = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1') + role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') + Device.objects.bulk_create([ + Device(name=f'Device {i}', site=site, device_type=device_type, role=role) + for i in range(1, 21) + ]) + + # Request two of the twenty devices at the site + query = """ + { + device_list(pagination: {limit: 2}) { + name + site { name } + } + } + """ + with CaptureQueriesContext(connection) as ctx: + response = self.client.post(url, data={'query': query}, format='json', **self.header) + self.assertHttpStatus(response, status.HTTP_200_OK) + data = json.loads(response.content) + self.assertNotIn('errors', data) + self.assertEqual(len(data['data']['device_list']), 2) + self.assertEqual(data['data']['device_list'][0]['site']['name'], site.name) + + # The site should have been fetched by exactly one query. (Asserting that it exists keeps the + # assertions below from silently passing if the site is ever fetched some other way.) + site_queries = [q['sql'] for q in ctx.captured_queries if 'FROM "dcim_site"' in q['sql']] + self.assertEqual(len(site_queries), 1, msg=f'Expected one query against dcim_site, got {site_queries}') + + # That query should not apply window pagination, nor join back to the devices table (which would + # return one row per device at the site) + self.assertNotIn('ROW_NUMBER', site_queries[0]) + self.assertNotIn('dcim_device', site_queries[0]) + + @override_settings(MAX_PAGE_SIZE=3) + def test_max_page_size_nested_list(self): + """ + MAX_PAGE_SIZE should still be enforced on a nested list relation. + """ + self.add_permissions('dcim.view_device', 'dcim.view_site') + url = reverse('graphql') + + site = Site.objects.first() + manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1') + device_type = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1') + role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') + Device.objects.bulk_create([ + Device(name=f'Device {i}', site=site, device_type=device_type, role=role) + for i in range(1, 6) + ]) + + query = """ + { + site_list(pagination: {limit: 1}) { + name + devices { name } + } + } + """ + response = self.client.post(url, data={'query': query}, format='json', **self.header) + self.assertHttpStatus(response, status.HTTP_200_OK) + data = json.loads(response.content) + self.assertNotIn('errors', data) + self.assertEqual(len(data['data']['site_list'][0]['devices']), 3) + def test_pagination_conflict(self): url = reverse('graphql') query = """ From a158ed3794c61d32e448cb23b0c0c854e087cc2c Mon Sep 17 00:00:00 2001 From: Jason Novinger Date: Mon, 3 Aug 2026 16:10:32 -0500 Subject: [PATCH 18/35] Fixes #22825: Handle CircuitTermination origins in cable path tracing CablePath.save() and delete() wrote the _path back-reference onto the path's origin object, and PathTraceView built the trace SVG URL from the origin's REST API action. Both assume the origin is a PathEndpoint, but a CircuitTermination is a valid cable-path origin (per from_origin) without the _path field or a -trace API action, so those paths raised FieldDoesNotExist and NoReverseMatch respectively. Guard the _path writes and the SVG URL on PathEndpoint membership, and skip the SVG block in the template when no URL is available. --- netbox/dcim/models/cables.py | 16 +++++++---- netbox/dcim/tests/test_cablepaths.py | 39 ++++++++++++++++++++++++++ netbox/dcim/views.py | 12 ++++++-- netbox/templates/dcim/cable_trace.html | 2 ++ 4 files changed, 60 insertions(+), 9 deletions(-) diff --git a/netbox/dcim/models/cables.py b/netbox/dcim/models/cables.py index 868ab0822..73b023913 100644 --- a/netbox/dcim/models/cables.py +++ b/netbox/dcim/models/cables.py @@ -780,18 +780,22 @@ class CablePath(models.Model): super().save(*args, **kwargs) - # Record a direct reference to this CablePath on its originating object(s) + # Record a direct reference to this CablePath on its originating object(s). Only PathEndpoint + # subclasses carry the denormalized `_path` back-reference; other valid origins (e.g. + # CircuitTermination) do not, so skip the update for them. origin_model = self.origin_type.model_class() - origin_ids = [decompile_path_node(node)[1] for node in self.path[0]] - origin_model.objects.filter(pk__in=origin_ids).update(_path=self.pk) + if issubclass(origin_model, PathEndpoint): + origin_ids = [decompile_path_node(node)[1] for node in self.path[0]] + origin_model.objects.filter(pk__in=origin_ids).update(_path=self.pk) def delete(self, *args, **kwargs): # Mirror save() - clear _path on origins to prevent stale references - # in table views that render _path.destinations + # in table views that render _path.destinations. Only PathEndpoint subclasses carry `_path`. if self.path: origin_model = self.origin_type.model_class() - origin_ids = [decompile_path_node(node)[1] for node in self.path[0]] - origin_model.objects.filter(pk__in=origin_ids, _path=self.pk).update(_path=None) + if issubclass(origin_model, PathEndpoint): + origin_ids = [decompile_path_node(node)[1] for node in self.path[0]] + origin_model.objects.filter(pk__in=origin_ids, _path=self.pk).update(_path=None) super().delete(*args, **kwargs) diff --git a/netbox/dcim/tests/test_cablepaths.py b/netbox/dcim/tests/test_cablepaths.py index d60f5cc86..ec7de6020 100644 --- a/netbox/dcim/tests/test_cablepaths.py +++ b/netbox/dcim/tests/test_cablepaths.py @@ -2680,6 +2680,45 @@ class LegacyCablePathTestCase(BaseCablePathTestCase): ) self.assertEqual(CablePath.objects.count(), 2) + def test_225_circuittermination_origin_passive_network(self): + """ + [CT1] --C1-- [RP1] [FP1] + + A CircuitTermination cabled into a passive (FrontPort/RearPort-only) device can become a + CablePath origin. Unlike PathEndpoint origins, CircuitTermination has no `_path` back-reference + field, so saving and deleting such a path must not attempt to write it (see #22825). + """ + rearport1 = RearPort.objects.create(device=self.device, name='Rear Port 1') + frontport1 = FrontPort.objects.create(device=self.device, name='Front Port 1') + PortMapping.objects.create( + device=self.device, front_port=frontport1, front_port_position=1, + rear_port=rearport1, rear_port_position=1, + ) + circuittermination1 = CircuitTermination.objects.create( + circuit=self.circuit, + termination=self.site, + term_side='A' + ) + cable1 = Cable( + a_terminations=[circuittermination1], + b_terminations=[rearport1] + ) + cable1.save() + + # Re-fetch so the in-memory instance reflects the cable set above (from_origin reads .cable). + circuittermination1.refresh_from_db() + + # A path traced from the CircuitTermination origin must save without raising FieldDoesNotExist + # on the missing `_path` field. + cablepath = CablePath.from_origin([circuittermination1]) + cablepath.save() + self.assertEqual(cablepath.origin_type.model_class(), CircuitTermination) + self.assertEqual(cablepath.origins, [circuittermination1]) + + # Deleting the path must likewise not attempt to clear a nonexistent `_path` field. + cablepath.delete() + self.assertIsNone(CablePath.objects.filter(pk=cablepath.pk).first()) + def test_301_create_path_via_existing_cable(self): """ [IF1] --C1-- [FP1] [RP1] --C2-- [RP2] [FP2] --C3-- [IF2] diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index cc888597d..987493641 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -208,9 +208,15 @@ class PathTraceView(generic.ObjectView): # Get the total length of the cable and whether the length is definitive (fully defined) total_length, is_definitive = path.get_total_length() if path else (None, False) - # Determine the path to the SVG trace image - api_viewname = f"{path.origin_type.app_label}-api:{path.origin_type.model}-trace" - svg_url = f"{reverse(api_viewname, kwargs={'pk': path.origins[0].pk})}?render=svg" + # Determine the path to the SVG trace image. The `-trace` API action (and the SVG renderer, + # which calls origin.trace()) exist only for PathEndpoint origins. Other valid origins such as + # CircuitTermination have no such action, so omit the SVG for them. + origin_model = path.origin_type.model_class() + if issubclass(origin_model, PathEndpoint): + api_viewname = f"{path.origin_type.app_label}-api:{path.origin_type.model}-trace" + svg_url = f"{reverse(api_viewname, kwargs={'pk': path.origins[0].pk})}?render=svg" + else: + svg_url = None return { 'path': path, diff --git a/netbox/templates/dcim/cable_trace.html b/netbox/templates/dcim/cable_trace.html index e07b12d81..bc7be377e 100644 --- a/netbox/templates/dcim/cable_trace.html +++ b/netbox/templates/dcim/cable_trace.html @@ -17,6 +17,7 @@ {# Cable trace SVG & options #}

{% if path %} + {% if svg_url %} + {% endif %}
{% if path.is_split and path.get_asymmetric_nodes %}

{% trans "Asymmetric Path" %}!

From bb292460334aa17170eed34e6f5affdeec1a903a Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 4 Aug 2026 05:56:44 +0000 Subject: [PATCH 19/35] Update source translation strings --- netbox/translations/en/LC_MESSAGES/django.po | 243 ++++++++++--------- 1 file changed, 126 insertions(+), 117 deletions(-) diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index 641f6ea4a..5c63ea216 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: 2026-07-31 06:00+0000\n" +"POT-Creation-Date: 2026-08-04 05:56+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1404,9 +1404,9 @@ msgstr "" #: netbox/dcim/models/device_components.py:68 netbox/dcim/models/racks.py:730 #: netbox/extras/models/configs.py:45 netbox/extras/models/configs.py:98 #: netbox/extras/models/configs.py:289 netbox/extras/models/customfields.py:153 -#: netbox/extras/models/models.py:73 netbox/extras/models/models.py:182 -#: netbox/extras/models/models.py:435 netbox/extras/models/models.py:503 -#: netbox/extras/models/models.py:587 netbox/extras/models/models.py:730 +#: netbox/extras/models/models.py:79 netbox/extras/models/models.py:188 +#: netbox/extras/models/models.py:471 netbox/extras/models/models.py:539 +#: netbox/extras/models/models.py:623 netbox/extras/models/models.py:766 #: netbox/extras/models/notifications.py:132 netbox/extras/models/tags.py:34 #: netbox/ipam/models/vlans.py:401 netbox/netbox/models/__init__.py:149 #: netbox/netbox/models/__init__.py:188 netbox/netbox/models/__init__.py:238 @@ -1439,10 +1439,10 @@ msgstr "" #: netbox/dcim/models/power.py:90 netbox/dcim/models/racks.py:290 #: netbox/dcim/models/sites.py:175 netbox/extras/models/configs.py:40 #: netbox/extras/models/configs.py:82 netbox/extras/models/configs.py:285 -#: netbox/extras/models/customfields.py:120 netbox/extras/models/models.py:68 -#: netbox/extras/models/models.py:177 netbox/extras/models/models.py:325 -#: netbox/extras/models/models.py:431 netbox/extras/models/models.py:493 -#: netbox/extras/models/models.py:583 netbox/extras/models/models.py:725 +#: netbox/extras/models/customfields.py:120 netbox/extras/models/models.py:74 +#: netbox/extras/models/models.py:183 netbox/extras/models/models.py:361 +#: netbox/extras/models/models.py:467 netbox/extras/models/models.py:529 +#: netbox/extras/models/models.py:619 netbox/extras/models/models.py:761 #: netbox/extras/models/notifications.py:127 netbox/extras/models/scripts.py:29 #: netbox/ipam/models/asns.py:18 netbox/ipam/models/fhrp.py:24 #: netbox/ipam/models/services.py:63 netbox/ipam/models/services.py:91 @@ -1471,7 +1471,7 @@ msgstr "" #: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:89 #: netbox/dcim/models/racks.py:166 netbox/dcim/models/sites.py:182 -#: netbox/extras/models/models.py:498 netbox/ipam/models/asns.py:24 +#: netbox/extras/models/models.py:534 netbox/ipam/models/asns.py:24 #: netbox/ipam/models/vlans.py:47 netbox/netbox/models/__init__.py:184 #: netbox/netbox/models/__init__.py:233 netbox/tenancy/models/tenants.py:25 #: netbox/tenancy/models/tenants.py:50 @@ -2331,7 +2331,7 @@ msgstr "" #: netbox/core/models/config.py:22 netbox/core/models/data.py:290 #: netbox/core/models/files.py:30 netbox/core/models/jobs.py:60 -#: netbox/extras/models/models.py:938 netbox/extras/models/notifications.py:39 +#: netbox/extras/models/models.py:974 netbox/extras/models/notifications.py:39 #: netbox/extras/models/notifications.py:196 #: netbox/netbox/models/features.py:62 netbox/users/models/tokens.py:51 msgid "created" @@ -2389,7 +2389,7 @@ msgid "type" msgstr "" #: netbox/core/models/data.py:50 netbox/core/ui/panels.py:17 -#: netbox/extras/choices.py:37 netbox/extras/models/models.py:188 +#: netbox/extras/choices.py:37 netbox/extras/models/models.py:194 #: netbox/extras/tables/tables.py:860 netbox/templates/core/plugin.html:66 msgid "URL" msgstr "" @@ -2401,8 +2401,8 @@ msgstr "" #: netbox/dcim/models/device_components.py:696 #: netbox/dcim/models/device_components.py:1379 #: netbox/dcim/models/device_components.py:1480 -#: netbox/extras/models/models.py:82 netbox/extras/models/models.py:330 -#: netbox/extras/models/models.py:518 netbox/extras/models/models.py:602 +#: netbox/extras/models/models.py:88 netbox/extras/models/models.py:366 +#: netbox/extras/models/models.py:554 netbox/extras/models/models.py:638 #: netbox/users/models/permissions.py:32 netbox/users/models/tokens.py:65 msgid "enabled" msgstr "" @@ -2419,7 +2419,7 @@ msgstr "" msgid "Patterns (one per line) matching files or paths to ignore when syncing" msgstr "" -#: netbox/core/models/data.py:75 netbox/extras/models/models.py:526 +#: netbox/core/models/data.py:75 netbox/extras/models/models.py:562 msgid "parameters" msgstr "" @@ -2546,7 +2546,7 @@ msgstr "" msgid "completed" msgstr "" -#: netbox/core/models/jobs.py:101 netbox/extras/models/models.py:113 +#: netbox/core/models/jobs.py:101 netbox/extras/models/models.py:119 msgid "data" msgstr "" @@ -2601,7 +2601,7 @@ msgstr "" msgid "object type" msgstr "" -#: netbox/core/models/object_types.py:205 netbox/extras/models/models.py:64 +#: netbox/core/models/object_types.py:205 netbox/extras/models/models.py:70 msgid "object types" msgstr "" @@ -7107,7 +7107,7 @@ msgid "Numeric identifier unique to the parent device" msgstr "" #: netbox/dcim/models/devices.py:1298 netbox/extras/models/customfields.py:264 -#: netbox/extras/models/models.py:119 netbox/extras/models/models.py:898 +#: netbox/extras/models/models.py:125 netbox/extras/models/models.py:934 #: netbox/netbox/models/__init__.py:154 netbox/netbox/models/__init__.py:193 #: netbox/netbox/models/__init__.py:243 msgid "comments" @@ -8817,7 +8817,7 @@ msgid "Shared" msgstr "" #: netbox/extras/forms/bulk_edit.py:258 netbox/extras/forms/filtersets.py:325 -#: netbox/extras/models/models.py:198 netbox/extras/ui/panels.py:338 +#: netbox/extras/models/models.py:205 netbox/extras/ui/panels.py:338 msgid "HTTP method" msgstr "" @@ -8826,7 +8826,7 @@ msgstr "" msgid "Payload URL" msgstr "" -#: netbox/extras/forms/bulk_edit.py:267 netbox/extras/models/models.py:240 +#: netbox/extras/forms/bulk_edit.py:267 netbox/extras/models/models.py:247 #: netbox/extras/ui/panels.py:347 msgid "SSL verification" msgstr "" @@ -8930,11 +8930,11 @@ msgstr "" msgid "Duplicate color mapping defined for choice '{value}'." msgstr "" -#: netbox/extras/forms/bulk_import.py:161 netbox/extras/models/models.py:352 +#: netbox/extras/forms/bulk_import.py:161 netbox/extras/models/models.py:388 msgid "button class" msgstr "" -#: netbox/extras/forms/bulk_import.py:164 netbox/extras/models/models.py:356 +#: netbox/extras/forms/bulk_import.py:164 netbox/extras/models/models.py:392 msgid "" "The class of the first link in a group will be used for the dropdown button" msgstr "" @@ -9065,7 +9065,7 @@ msgstr "" msgid "Content types" msgstr "" -#: netbox/extras/forms/filtersets.py:315 netbox/extras/models/models.py:203 +#: netbox/extras/forms/filtersets.py:315 netbox/extras/models/models.py:210 #: netbox/extras/ui/panels.py:340 msgid "HTTP content type" msgstr "" @@ -9387,8 +9387,8 @@ msgstr "" msgid "config context profiles" msgstr "" -#: netbox/extras/models/configs.py:94 netbox/extras/models/models.py:342 -#: netbox/extras/models/models.py:514 netbox/extras/models/models.py:598 +#: netbox/extras/models/configs.py:94 netbox/extras/models/models.py:378 +#: netbox/extras/models/models.py:550 netbox/extras/models/models.py:634 #: netbox/extras/models/search.py:49 netbox/extras/models/tags.py:45 #: netbox/ipam/models/ip.py:200 netbox/netbox/models/mixins.py:32 msgid "weight" @@ -9475,7 +9475,7 @@ msgid "" "will be used)" msgstr "" -#: netbox/extras/models/customfields.py:147 netbox/extras/models/models.py:346 +#: netbox/extras/models/customfields.py:147 netbox/extras/models/models.py:382 msgid "group name" msgstr "" @@ -9872,61 +9872,61 @@ msgid "" "{allowed}" msgstr "" -#: netbox/extras/models/models.py:65 +#: netbox/extras/models/models.py:71 msgid "The object(s) to which this rule applies." msgstr "" -#: netbox/extras/models/models.py:79 +#: netbox/extras/models/models.py:85 msgid "The types of event which will trigger this rule." msgstr "" -#: netbox/extras/models/models.py:86 +#: netbox/extras/models/models.py:92 msgid "conditions" msgstr "" -#: netbox/extras/models/models.py:89 +#: netbox/extras/models/models.py:95 msgid "" "A set of conditions which determine whether the event will be generated." msgstr "" -#: netbox/extras/models/models.py:97 +#: netbox/extras/models/models.py:103 msgid "action type" msgstr "" -#: netbox/extras/models/models.py:116 +#: netbox/extras/models/models.py:122 msgid "Additional data to pass to the action object" msgstr "" -#: netbox/extras/models/models.py:128 +#: netbox/extras/models/models.py:134 msgid "event rule" msgstr "" -#: netbox/extras/models/models.py:129 +#: netbox/extras/models/models.py:135 msgid "event rules" msgstr "" -#: netbox/extras/models/models.py:149 +#: netbox/extras/models/models.py:155 msgid "Action data must be a JSON object or null." msgstr "" -#: netbox/extras/models/models.py:190 +#: netbox/extras/models/models.py:196 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." +"called. Must be http:// or https://. Jinja2 template processing is supported " +"(with the same context as the request body) for part or all of the URL." msgstr "" -#: netbox/extras/models/models.py:205 +#: netbox/extras/models/models.py:212 msgid "" "The complete list of official content types is available here." msgstr "" -#: netbox/extras/models/models.py:210 +#: netbox/extras/models/models.py:217 msgid "additional headers" msgstr "" -#: netbox/extras/models/models.py:213 +#: netbox/extras/models/models.py:220 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: " @@ -9937,11 +9937,11 @@ msgid "" "name | header_safe }}." msgstr "" -#: netbox/extras/models/models.py:221 +#: netbox/extras/models/models.py:228 msgid "body template" msgstr "" -#: netbox/extras/models/models.py:224 +#: netbox/extras/models/models.py:231 msgid "" "Jinja2 template for a custom request body. If blank, a JSON object " "representing the change will be included. Available context data includes: " @@ -9949,197 +9949,201 @@ msgid "" "username, request_id, and data." msgstr "" -#: netbox/extras/models/models.py:230 +#: netbox/extras/models/models.py:237 msgid "secret" msgstr "" -#: netbox/extras/models/models.py:234 +#: netbox/extras/models/models.py:241 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 "" -#: netbox/extras/models/models.py:241 +#: netbox/extras/models/models.py:248 msgid "Enable SSL certificate verification. Disable with caution!" msgstr "" -#: netbox/extras/models/models.py:247 +#: netbox/extras/models/models.py:254 msgid "CA File Path" msgstr "" -#: netbox/extras/models/models.py:249 +#: netbox/extras/models/models.py:256 msgid "" "The specific CA certificate file to use for SSL verification. Leave blank to " "use the system defaults." msgstr "" -#: netbox/extras/models/models.py:260 +#: netbox/extras/models/models.py:267 msgid "webhook" msgstr "" -#: netbox/extras/models/models.py:261 +#: netbox/extras/models/models.py:268 msgid "webhooks" msgstr "" -#: netbox/extras/models/models.py:279 +#: netbox/extras/models/models.py:287 msgid "Do not specify a CA certificate file if SSL verification is disabled." msgstr "" -#: netbox/extras/models/models.py:322 +#: netbox/extras/models/models.py:298 netbox/extras/models/models.py:313 +msgid "Enter a valid URL, beginning with http:// or https://." +msgstr "" + +#: netbox/extras/models/models.py:358 msgid "The object type(s) to which this link applies." msgstr "" -#: netbox/extras/models/models.py:334 +#: netbox/extras/models/models.py:370 msgid "link text" msgstr "" -#: netbox/extras/models/models.py:335 +#: netbox/extras/models/models.py:371 msgid "Jinja2 template code for link text" msgstr "" -#: netbox/extras/models/models.py:338 +#: netbox/extras/models/models.py:374 msgid "link URL" msgstr "" -#: netbox/extras/models/models.py:339 +#: netbox/extras/models/models.py:375 msgid "Jinja2 template code for link URL" msgstr "" -#: netbox/extras/models/models.py:349 +#: netbox/extras/models/models.py:385 msgid "Links with the same group will appear as a dropdown menu" msgstr "" -#: netbox/extras/models/models.py:359 +#: netbox/extras/models/models.py:395 msgid "new window" msgstr "" -#: netbox/extras/models/models.py:361 +#: netbox/extras/models/models.py:397 msgid "Force link to open in a new window" msgstr "" -#: netbox/extras/models/models.py:373 +#: netbox/extras/models/models.py:409 msgid "custom link" msgstr "" -#: netbox/extras/models/models.py:374 +#: netbox/extras/models/models.py:410 msgid "custom links" msgstr "" -#: netbox/extras/models/models.py:428 +#: netbox/extras/models/models.py:464 msgid "The object type(s) to which this template applies." msgstr "" -#: netbox/extras/models/models.py:449 +#: netbox/extras/models/models.py:485 msgid "export template" msgstr "" -#: netbox/extras/models/models.py:450 +#: netbox/extras/models/models.py:486 msgid "export templates" msgstr "" -#: netbox/extras/models/models.py:467 +#: netbox/extras/models/models.py:503 #, python-brace-format msgid "\"{name}\" is a reserved name. Please choose a different name." msgstr "" -#: netbox/extras/models/models.py:490 +#: netbox/extras/models/models.py:526 msgid "The object type(s) to which this filter applies." msgstr "" -#: netbox/extras/models/models.py:522 netbox/extras/models/models.py:606 +#: netbox/extras/models/models.py:558 netbox/extras/models/models.py:642 msgid "shared" msgstr "" -#: netbox/extras/models/models.py:540 +#: netbox/extras/models/models.py:576 msgid "saved filter" msgstr "" -#: netbox/extras/models/models.py:541 +#: netbox/extras/models/models.py:577 msgid "saved filters" msgstr "" -#: netbox/extras/models/models.py:559 +#: netbox/extras/models/models.py:595 msgid "Filter parameters must be stored as a dictionary of keyword arguments." msgstr "" -#: netbox/extras/models/models.py:576 +#: netbox/extras/models/models.py:612 msgid "The table's object type" msgstr "" -#: netbox/extras/models/models.py:579 +#: netbox/extras/models/models.py:615 msgid "table" msgstr "" -#: netbox/extras/models/models.py:627 +#: netbox/extras/models/models.py:663 msgid "table config" msgstr "" -#: netbox/extras/models/models.py:628 +#: netbox/extras/models/models.py:664 msgid "table configs" msgstr "" -#: netbox/extras/models/models.py:670 +#: netbox/extras/models/models.py:706 #, python-brace-format msgid "Unknown table: {name}" msgstr "" -#: netbox/extras/models/models.py:681 netbox/extras/models/models.py:688 +#: netbox/extras/models/models.py:717 netbox/extras/models/models.py:724 #, python-brace-format msgid "Unknown column: {name}" msgstr "" -#: netbox/extras/models/models.py:711 +#: netbox/extras/models/models.py:747 msgid "image height" msgstr "" -#: netbox/extras/models/models.py:714 +#: netbox/extras/models/models.py:750 msgid "image width" msgstr "" -#: netbox/extras/models/models.py:720 +#: netbox/extras/models/models.py:756 msgid "image size" msgstr "" -#: netbox/extras/models/models.py:766 +#: netbox/extras/models/models.py:802 msgid "image attachment" msgstr "" -#: netbox/extras/models/models.py:767 +#: netbox/extras/models/models.py:803 msgid "image attachments" msgstr "" -#: netbox/extras/models/models.py:781 +#: netbox/extras/models/models.py:817 #, python-brace-format msgid "Image attachments cannot be assigned to this object type ({type})." msgstr "" -#: netbox/extras/models/models.py:892 +#: netbox/extras/models/models.py:928 msgid "kind" msgstr "" -#: netbox/extras/models/models.py:907 +#: netbox/extras/models/models.py:943 msgid "journal entry" msgstr "" -#: netbox/extras/models/models.py:908 +#: netbox/extras/models/models.py:944 msgid "journal entries" msgstr "" -#: netbox/extras/models/models.py:926 +#: netbox/extras/models/models.py:962 #, python-brace-format msgid "Journaling is not supported for this object type ({type})." msgstr "" -#: netbox/extras/models/models.py:969 +#: netbox/extras/models/models.py:1005 msgid "bookmark" msgstr "" -#: netbox/extras/models/models.py:970 +#: netbox/extras/models/models.py:1006 msgid "bookmarks" msgstr "" -#: netbox/extras/models/models.py:986 +#: netbox/extras/models/models.py:1022 #, python-brace-format msgid "Bookmarks cannot be assigned to this object type ({type})." msgstr "" @@ -10830,7 +10834,7 @@ msgstr "" msgid "IP address (ID)" msgstr "" -#: netbox/ipam/filtersets.py:1280 netbox/ipam/models/ip.py:1030 +#: netbox/ipam/filtersets.py:1280 netbox/ipam/models/ip.py:1035 msgid "IP address" msgstr "" @@ -11523,12 +11527,12 @@ msgstr "" msgid "Cannot create prefix with /0 mask." msgstr "" -#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:1120 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:1125 #, python-brace-format msgid "VRF {vrf}" msgstr "" -#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:1120 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:1125 msgid "global table" msgstr "" @@ -11627,47 +11631,47 @@ msgstr "" msgid "Hostname or FQDN (not case-sensitive)" msgstr "" -#: netbox/ipam/models/ip.py:1031 netbox/ipam/models/services.py:97 +#: netbox/ipam/models/ip.py:1036 netbox/ipam/models/services.py:97 msgid "IP addresses" msgstr "" -#: netbox/ipam/models/ip.py:1091 +#: netbox/ipam/models/ip.py:1096 msgid "Cannot create IP address with /0 mask." msgstr "" -#: netbox/ipam/models/ip.py:1097 +#: netbox/ipam/models/ip.py:1102 #, python-brace-format msgid "{ip} is a network ID, which may not be assigned to an interface." msgstr "" -#: netbox/ipam/models/ip.py:1108 +#: netbox/ipam/models/ip.py:1113 #, python-brace-format msgid "{ip} is a broadcast address, which may not be assigned to an interface." msgstr "" -#: netbox/ipam/models/ip.py:1122 +#: netbox/ipam/models/ip.py:1127 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "" -#: netbox/ipam/models/ip.py:1138 +#: netbox/ipam/models/ip.py:1143 #, python-brace-format msgid "Cannot create IP address {ip} inside range {range}." msgstr "" -#: netbox/ipam/models/ip.py:1159 +#: netbox/ipam/models/ip.py:1164 msgid "" "Cannot reassign IP address while it is designated as the primary IP for the " "parent object" msgstr "" -#: netbox/ipam/models/ip.py:1166 +#: netbox/ipam/models/ip.py:1171 msgid "" "Cannot reassign IP address while it is designated as the OOB IP for the " "parent object" msgstr "" -#: netbox/ipam/models/ip.py:1172 +#: netbox/ipam/models/ip.py:1177 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "" @@ -13222,71 +13226,71 @@ msgstr "" msgid "Cannot delete stores from registry" msgstr "" -#: netbox/netbox/settings.py:893 +#: netbox/netbox/settings.py:897 msgid "Czech" msgstr "" -#: netbox/netbox/settings.py:894 +#: netbox/netbox/settings.py:898 msgid "Danish" msgstr "" -#: netbox/netbox/settings.py:895 +#: netbox/netbox/settings.py:899 msgid "German" msgstr "" -#: netbox/netbox/settings.py:896 +#: netbox/netbox/settings.py:900 msgid "English" msgstr "" -#: netbox/netbox/settings.py:897 +#: netbox/netbox/settings.py:901 msgid "Spanish" msgstr "" -#: netbox/netbox/settings.py:898 +#: netbox/netbox/settings.py:902 msgid "French" msgstr "" -#: netbox/netbox/settings.py:899 +#: netbox/netbox/settings.py:903 msgid "Italian" msgstr "" -#: netbox/netbox/settings.py:900 +#: netbox/netbox/settings.py:904 msgid "Japanese" msgstr "" -#: netbox/netbox/settings.py:901 +#: netbox/netbox/settings.py:905 msgid "Korean" msgstr "" -#: netbox/netbox/settings.py:902 +#: netbox/netbox/settings.py:906 msgid "Latvian" msgstr "" -#: netbox/netbox/settings.py:903 +#: netbox/netbox/settings.py:907 msgid "Dutch" msgstr "" -#: netbox/netbox/settings.py:904 +#: netbox/netbox/settings.py:908 msgid "Polish" msgstr "" -#: netbox/netbox/settings.py:905 +#: netbox/netbox/settings.py:909 msgid "Portuguese" msgstr "" -#: netbox/netbox/settings.py:906 +#: netbox/netbox/settings.py:910 msgid "Russian" msgstr "" -#: netbox/netbox/settings.py:907 +#: netbox/netbox/settings.py:911 msgid "Turkish" msgstr "" -#: netbox/netbox/settings.py:908 +#: netbox/netbox/settings.py:912 msgid "Ukrainian" msgstr "" -#: netbox/netbox/settings.py:909 +#: netbox/netbox/settings.py:913 msgid "Chinese" msgstr "" @@ -16752,6 +16756,11 @@ msgstr "" msgid "(automatically set)" msgstr "" +#: netbox/utilities/jinja2.py:157 +#, python-brace-format +msgid "Invalid template: {error}" +msgstr "" + #: netbox/utilities/jobs.py:42 #, python-brace-format msgid "Created background job {id}: {name}" From c36e72876f026819e3b815cae0d4a24709234fe6 Mon Sep 17 00:00:00 2001 From: Jason Satein <8883967+clovehitch@users.noreply.github.com> Date: Tue, 4 Aug 2026 08:36:11 -0700 Subject: [PATCH 20/35] Closes #22567: Warn that a custom script file name must not shadow an installed Python module (#22804) --- docs/customization/custom-scripts.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/customization/custom-scripts.md b/docs/customization/custom-scripts.md index f7aacb238..e18d7f700 100644 --- a/docs/customization/custom-scripts.md +++ b/docs/customization/custom-scripts.md @@ -23,6 +23,9 @@ Custom scripts are Python code which exists outside the NetBox code base, so the ## Writing Custom Scripts +!!! warning "Choose a unique file name" + A script file's name (without the `.py` extension) becomes its Python module name when the script is loaded. A script file must not share its name with a NetBox application (e.g. `circuits.py` or `dcim.py`) or any other installed Python module: the script will shadow that module in Python's import system and can break unrelated functionality. Choose a unique, descriptive file name, such as `circuit_maintenance.py`. + All custom scripts must inherit from the `extras.scripts.Script` base class. This class provides the functionality necessary to generate forms and log activity. ```python From 852f73b081a3a0ad5d63f76d377b235eaa81912f Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Tue, 4 Aug 2026 13:16:13 -0400 Subject: [PATCH 21/35] Release v4.6.8-rc2 --- netbox/release.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/netbox/release.yaml b/netbox/release.yaml index ecc1b766a..b9f189b9e 100644 --- a/netbox/release.yaml +++ b/netbox/release.yaml @@ -1,3 +1,4 @@ -version: "4.6.7" +version: "4.6.8" edition: "Community" -published: "2026-07-30" +build: "rc2" +published: "2026-08-04" From 3d3bebcb785ba89e188f313c4b224dd319714460 Mon Sep 17 00:00:00 2001 From: Elliott Balsley <3991046+llamafilm@users.noreply.github.com> Date: Tue, 4 Aug 2026 21:28:20 +0200 Subject: [PATCH 22/35] Closes #22787: Improve GraphQL query efficiency when resolving assigned objects (#22792) --- netbox/circuits/graphql/types.py | 27 ++++- netbox/dcim/graphql/types.py | 101 +++++++++++++---- netbox/ipam/graphql/types.py | 72 +++++++++++- netbox/netbox/graphql/optimization.py | 43 +++++++ netbox/netbox/tests/test_graphql.py | 150 +++++++++++++++++++++++++ netbox/virtualization/graphql/types.py | 15 ++- netbox/vpn/graphql/types.py | 16 ++- netbox/wireless/graphql/types.py | 15 ++- 8 files changed, 408 insertions(+), 31 deletions(-) create mode 100644 netbox/netbox/graphql/optimization.py diff --git a/netbox/circuits/graphql/types.py b/netbox/circuits/graphql/types.py index d150d2b5c..65be61d7f 100644 --- a/netbox/circuits/graphql/types.py +++ b/netbox/circuits/graphql/types.py @@ -5,7 +5,9 @@ import strawberry_django from circuits import models from dcim.graphql.mixins import CabledObjectMixin +from dcim.models import Location, Region, Site, SiteGroup from extras.graphql.mixins import ContactsMixin, CustomFieldsMixin, TagsMixin +from netbox.graphql.optimization import build_gfk_prefetch from netbox.graphql.types import BaseObjectType, ObjectType, OrganizationalObjectType, PrimaryObjectType from tenancy.graphql.types import TenantType @@ -74,7 +76,19 @@ class ProviderNetworkType(PrimaryObjectType): class CircuitTerminationType(CustomFieldsMixin, TagsMixin, CabledObjectMixin, ObjectType): circuit: Annotated['CircuitType', strawberry.lazy('circuits.graphql.types')] - @strawberry_django.field(prefetch_related='termination') + @strawberry_django.field( + prefetch_related=build_gfk_prefetch( + 'termination', + [ + Location, + Region, + SiteGroup, + Site, + models.ProviderNetwork, + ], + ), + only=['termination_type', 'termination_id'], + ) def termination(self) -> Annotated[ Annotated['LocationType', strawberry.lazy('dcim.graphql.types')] | Annotated['RegionType', strawberry.lazy('dcim.graphql.types')] @@ -133,7 +147,16 @@ class CircuitGroupType(OrganizationalObjectType): class CircuitGroupAssignmentType(TagsMixin, BaseObjectType): group: Annotated['CircuitGroupType', strawberry.lazy('circuits.graphql.types')] - @strawberry_django.field(prefetch_related='member') + @strawberry_django.field( + prefetch_related=build_gfk_prefetch( + 'member', + [ + models.Circuit, + models.VirtualCircuit, + ], + ), + only=['member_type', 'member_id'], + ) def member(self) -> Annotated[ Annotated['CircuitType', strawberry.lazy('circuits.graphql.types')] | Annotated['VirtualCircuitType', strawberry.lazy('circuits.graphql.types')], diff --git a/netbox/dcim/graphql/types.py b/netbox/dcim/graphql/types.py index 7f3d01bcc..e4f4b7a14 100644 --- a/netbox/dcim/graphql/types.py +++ b/netbox/dcim/graphql/types.py @@ -9,6 +9,7 @@ from core.graphql.mixins import ChangelogMixin from dcim import models from extras.graphql.mixins import ConfigContextMixin, ContactsMixin, ImageAttachmentsMixin from ipam.graphql.mixins import IPAddressesMixin, VLANGroupsMixin +from netbox.graphql.optimization import build_gfk_prefetch from netbox.graphql.scalars import BigInt from netbox.graphql.types import ( BaseObjectType, @@ -19,7 +20,7 @@ from netbox.graphql.types import ( ) from users.graphql.mixins import OwnerMixin from utilities.querysets import RestrictedPrefetch -from virtualization.models import Cluster +from virtualization.models import Cluster, VMInterface from .filters import * from .mixins import CabledObjectMixin, PathEndpointMixin @@ -150,7 +151,25 @@ class CableBundleType(PrimaryObjectType): ) class CableTerminationType(NetBoxObjectType): cable: Annotated['CableType', strawberry.lazy('dcim.graphql.types')] | None - termination: Annotated[ + + @strawberry_django.field( + prefetch_related=build_gfk_prefetch( + 'termination', + [ + CircuitTermination, + models.ConsolePort, + models.ConsoleServerPort, + models.FrontPort, + models.Interface, + models.PowerFeed, + models.PowerOutlet, + models.PowerPort, + models.RearPort, + ], + ), + only=['termination_type', 'termination_id'], + ) + def termination(self) -> Annotated[ Annotated['CircuitTerminationType', strawberry.lazy('circuits.graphql.types')] | Annotated['ConsolePortType', strawberry.lazy('dcim.graphql.types')] | Annotated['ConsoleServerPortType', strawberry.lazy('dcim.graphql.types')] @@ -161,7 +180,8 @@ class CableTerminationType(NetBoxObjectType): | Annotated['PowerPortType', strawberry.lazy('dcim.graphql.types')] | Annotated['RearPortType', strawberry.lazy('dcim.graphql.types')], strawberry.union('CableTerminationTerminationType'), - ] | None + ] | None: + return self.termination @strawberry_django.type( @@ -330,22 +350,38 @@ class InventoryItemTemplateType(ComponentTemplateType): role: Annotated['InventoryItemRoleType', strawberry.lazy('dcim.graphql.types')] | None manufacturer: Annotated['ManufacturerType', strawberry.lazy('dcim.graphql.types')] - @strawberry_django.field(prefetch_related='parent') + @strawberry_django.field(prefetch_related='parent', only=['parent_id']) def parent(self) -> Annotated['InventoryItemTemplateType', strawberry.lazy('dcim.graphql.types')] | None: return self.parent child_items: list[Annotated['InventoryItemTemplateType', strawberry.lazy('dcim.graphql.types')]] - component: Annotated[ - Annotated['ConsolePortType', strawberry.lazy('dcim.graphql.types')] - | Annotated['ConsoleServerPortType', strawberry.lazy('dcim.graphql.types')] - | Annotated['FrontPortType', strawberry.lazy('dcim.graphql.types')] - | Annotated['InterfaceType', strawberry.lazy('dcim.graphql.types')] - | Annotated['PowerOutletType', strawberry.lazy('dcim.graphql.types')] - | Annotated['PowerPortType', strawberry.lazy('dcim.graphql.types')] - | Annotated['RearPortType', strawberry.lazy('dcim.graphql.types')], + @strawberry_django.field( + prefetch_related=build_gfk_prefetch( + 'component', + [ + models.ConsolePortTemplate, + models.ConsoleServerPortTemplate, + models.FrontPortTemplate, + models.InterfaceTemplate, + models.PowerOutletTemplate, + models.PowerPortTemplate, + models.RearPortTemplate, + ], + ), + only=['component_type', 'component_id'], + ) + def component(self) -> Annotated[ + Annotated['ConsolePortTemplateType', strawberry.lazy('dcim.graphql.types')] + | Annotated['ConsoleServerPortTemplateType', strawberry.lazy('dcim.graphql.types')] + | Annotated['FrontPortTemplateType', strawberry.lazy('dcim.graphql.types')] + | Annotated['InterfaceTemplateType', strawberry.lazy('dcim.graphql.types')] + | Annotated['PowerOutletTemplateType', strawberry.lazy('dcim.graphql.types')] + | Annotated['PowerPortTemplateType', strawberry.lazy('dcim.graphql.types')] + | Annotated['RearPortTemplateType', strawberry.lazy('dcim.graphql.types')], strawberry.union('InventoryItemTemplateComponentType'), - ] | None + ] | None: + return self.component @strawberry_django.type( @@ -433,7 +469,16 @@ class FrontPortTemplateType(ModularComponentTemplateType): class MACAddressType(PrimaryObjectType): mac_address: str - @strawberry_django.field(prefetch_related='assigned_object') + @strawberry_django.field( + prefetch_related=build_gfk_prefetch( + 'assigned_object', + [ + models.Interface, + VMInterface, + ], + ), + only=['assigned_object_type', 'assigned_object_id'], + ) def assigned_object(self) -> Annotated[ Annotated['InterfaceType', strawberry.lazy('dcim.graphql.types')] | Annotated['VMInterfaceType', strawberry.lazy('virtualization.graphql.types')], @@ -497,11 +542,26 @@ class InventoryItemType(ComponentType): child_items: list[Annotated['InventoryItemType', strawberry.lazy('dcim.graphql.types')]] - @strawberry_django.field(prefetch_related='parent') + @strawberry_django.field(prefetch_related='parent', only=['parent_id']) def parent(self) -> Annotated['InventoryItemType', strawberry.lazy('dcim.graphql.types')] | None: return self.parent - component: Annotated[ + @strawberry_django.field( + prefetch_related=build_gfk_prefetch( + 'component', + [ + models.ConsolePort, + models.ConsoleServerPort, + models.FrontPort, + models.Interface, + models.PowerOutlet, + models.PowerPort, + models.RearPort, + ], + ), + only=['component_type', 'component_id'], + ) + def component(self) -> Annotated[ Annotated['ConsolePortType', strawberry.lazy('dcim.graphql.types')] | Annotated['ConsoleServerPortType', strawberry.lazy('dcim.graphql.types')] | Annotated['FrontPortType', strawberry.lazy('dcim.graphql.types')] @@ -510,7 +570,8 @@ class InventoryItemType(ComponentType): | Annotated['PowerPortType', strawberry.lazy('dcim.graphql.types')] | Annotated['RearPortType', strawberry.lazy('dcim.graphql.types')], strawberry.union('InventoryItemComponentType'), - ] | None + ] | None: + return self.component @strawberry_django.type( @@ -611,7 +672,7 @@ class ModuleBayType(ModularComponentType): installed_module: Annotated["ModuleType", strawberry.lazy('dcim.graphql.types')] | None children: list[Annotated["ModuleBayType", strawberry.lazy('dcim.graphql.types')]] - @strawberry_django.field(prefetch_related='parent') + @strawberry_django.field(prefetch_related='parent', only=['parent_id']) def parent(self) -> Annotated["ModuleBayType", strawberry.lazy('dcim.graphql.types')] | None: return self.parent @@ -888,7 +949,7 @@ class RegionType(VLANGroupsMixin, ContactsMixin, NestedGroupObjectType): sites: list[Annotated["SiteType", strawberry.lazy('dcim.graphql.types')]] children: list[Annotated["RegionType", strawberry.lazy('dcim.graphql.types')]] - @strawberry_django.field(prefetch_related='parent') + @strawberry_django.field(prefetch_related='parent', only=['parent_id']) def parent(self) -> Annotated["RegionType", strawberry.lazy('dcim.graphql.types')] | None: return self.parent @@ -965,7 +1026,7 @@ class SiteGroupType(VLANGroupsMixin, ContactsMixin, NestedGroupObjectType): sites: list[Annotated["SiteType", strawberry.lazy('dcim.graphql.types')]] children: list[Annotated["SiteGroupType", strawberry.lazy('dcim.graphql.types')]] - @strawberry_django.field(prefetch_related='parent') + @strawberry_django.field(prefetch_related='parent', only=['parent_id']) def parent(self) -> Annotated["SiteGroupType", strawberry.lazy('dcim.graphql.types')] | None: return self.parent diff --git a/netbox/ipam/graphql/types.py b/netbox/ipam/graphql/types.py index b684022da..667f2142f 100644 --- a/netbox/ipam/graphql/types.py +++ b/netbox/ipam/graphql/types.py @@ -5,10 +5,13 @@ import strawberry_django from circuits.graphql.types import ProviderType from dcim.graphql.types import SiteType +from dcim.models import Device, Interface, Location, Rack, RackGroup, Region, Site, SiteGroup from extras.graphql.mixins import ContactsMixin from ipam import models +from netbox.graphql.optimization import build_gfk_prefetch from netbox.graphql.scalars import BigInt from netbox.graphql.types import BaseObjectType, NetBoxObjectType, OrganizationalObjectType, PrimaryObjectType +from virtualization.models import Cluster, ClusterGroup, VirtualMachine, VMInterface from .filters import * from .mixins import IPAddressesMixin @@ -18,6 +21,7 @@ if TYPE_CHECKING: DeviceType, InterfaceType, LocationType, + RackGroupType, RackType, RegionType, SiteGroupType, @@ -126,7 +130,16 @@ class FHRPGroupType(IPAddressesMixin, PrimaryObjectType): class FHRPGroupAssignmentType(BaseObjectType): group: Annotated['FHRPGroupType', strawberry.lazy('ipam.graphql.types')] - @strawberry_django.field(prefetch_related='interface') + @strawberry_django.field( + prefetch_related=build_gfk_prefetch( + 'interface', + [ + Interface, + VMInterface, + ], + ), + only=['interface_type', 'interface_id'], + ) def interface(self) -> Annotated[ Annotated['InterfaceType', strawberry.lazy('dcim.graphql.types')] | Annotated['VMInterfaceType', strawberry.lazy('virtualization.graphql.types')], @@ -155,7 +168,17 @@ class IPAddressType(ContactsMixin, PrimaryObjectType): def family(self) -> IPAddressFamilyType: return IPAddressFamilyType(value=self.family, label=f'IPv{self.family}') - @strawberry_django.field(prefetch_related='assigned_object') + @strawberry_django.field( + prefetch_related=build_gfk_prefetch( + 'assigned_object', + [ + models.FHRPGroup, + Interface, + VMInterface, + ], + ), + only=['assigned_object_type', 'assigned_object_id'], + ) def assigned_object(self) -> Annotated[ Annotated['InterfaceType', strawberry.lazy('dcim.graphql.types')] | Annotated['FHRPGroupType', strawberry.lazy('ipam.graphql.types')] @@ -197,7 +220,18 @@ class PrefixType(ContactsMixin, PrimaryObjectType): def family(self) -> IPAddressFamilyType: return IPAddressFamilyType(value=self.family, label=f'IPv{self.family}') - @strawberry_django.field(prefetch_related='scope') + @strawberry_django.field( + prefetch_related=build_gfk_prefetch( + 'scope', + [ + Region, + SiteGroup, + Site, + Location, + ], + ), + only=['scope_type', 'scope_id'], + ) def scope(self) -> Annotated[ Annotated['LocationType', strawberry.lazy('dcim.graphql.types')] | Annotated['RegionType', strawberry.lazy('dcim.graphql.types')] @@ -259,7 +293,17 @@ class ServiceType(ContactsMixin, PrimaryObjectType): ports: list[int] ipaddresses: list[Annotated['IPAddressType', strawberry.lazy('ipam.graphql.types')]] - @strawberry_django.field(prefetch_related='parent') + @strawberry_django.field( + prefetch_related=build_gfk_prefetch( + 'parent', + [ + Device, + VirtualMachine, + models.FHRPGroup, + ], + ), + only=['parent_object_type', 'parent_object_id'], + ) def parent(self) -> Annotated[ Annotated['DeviceType', strawberry.lazy('dcim.graphql.types')] | Annotated['VirtualMachineType', strawberry.lazy('virtualization.graphql.types')] @@ -298,7 +342,7 @@ class VLANType(PrimaryObjectType): interfaces_as_tagged: list[Annotated["InterfaceType", strawberry.lazy('dcim.graphql.types')]] vminterfaces_as_tagged: list[Annotated["VMInterfaceType", strawberry.lazy('virtualization.graphql.types')]] - @strawberry_django.field(prefetch_related='qinq_svlan') + @strawberry_django.field(prefetch_related='qinq_svlan', only=['qinq_svlan_id']) def qinq_svlan(self) -> Annotated["VLANType", strawberry.lazy('ipam.graphql.types')] | None: return self.qinq_svlan @@ -316,11 +360,27 @@ class VLANGroupType(OrganizationalObjectType): total_vlan_ids: BigInt tenant: Annotated['TenantType', strawberry.lazy('tenancy.graphql.types')] | None - @strawberry_django.field(prefetch_related='scope') + @strawberry_django.field( + prefetch_related=build_gfk_prefetch( + 'scope', + [ + Cluster, + ClusterGroup, + Location, + Rack, + RackGroup, + Region, + Site, + SiteGroup, + ], + ), + only=['scope_type', 'scope_id'], + ) def scope(self) -> Annotated[ Annotated['ClusterType', strawberry.lazy('virtualization.graphql.types')] | Annotated['ClusterGroupType', strawberry.lazy('virtualization.graphql.types')] | Annotated['LocationType', strawberry.lazy('dcim.graphql.types')] + | Annotated['RackGroupType', strawberry.lazy('dcim.graphql.types')] | Annotated['RackType', strawberry.lazy('dcim.graphql.types')] | Annotated['RegionType', strawberry.lazy('dcim.graphql.types')] | Annotated['SiteType', strawberry.lazy('dcim.graphql.types')] diff --git a/netbox/netbox/graphql/optimization.py b/netbox/netbox/graphql/optimization.py new file mode 100644 index 000000000..d5263fae9 --- /dev/null +++ b/netbox/netbox/graphql/optimization.py @@ -0,0 +1,43 @@ +from collections.abc import Callable, Sequence + +from django.contrib.contenttypes.prefetch import GenericPrefetch +from django.db.models import Model, QuerySet +from strawberry.types import Info +from strawberry_django.optimizer import optimize +from strawberry_django.optimizer import optimizer as optimizer_ctx + +__all__ = ( + 'build_gfk_prefetch', + 'optimize_prefetch_queryset', +) + + +def optimize_prefetch_queryset(queryset: QuerySet, info: Info) -> QuerySet: + """ + Apply strawberry-django's query optimizer to a queryset used inside a GenericForeignKey prefetch. + """ + if ext := optimizer_ctx.get(): + return ext.optimize(queryset, info) + + return optimize(queryset, info) + + +def build_gfk_prefetch( + lookup: str, + models: Sequence[type[Model]], +) -> Callable[[Info], GenericPrefetch]: + """ + Return a selection-aware GenericPrefetch for a GenericForeignKey field. + + Each model gets its own queryset, optimized according to the client's GraphQL selection set. + """ + + def prefetch(info: Info) -> GenericPrefetch: + querysets = [ + optimize_prefetch_queryset(model.objects.all(), info) + for model in models + ] + + return GenericPrefetch(lookup, querysets) + + return prefetch diff --git a/netbox/netbox/tests/test_graphql.py b/netbox/netbox/tests/test_graphql.py index 46f06dd6e..098e7d0e0 100644 --- a/netbox/netbox/tests/test_graphql.py +++ b/netbox/netbox/tests/test_graphql.py @@ -18,6 +18,7 @@ from dcim.models import ( Device, DeviceRole, DeviceType, + Interface, Location, Manufacturer, Rack, @@ -35,6 +36,12 @@ from utilities.tables import get_table_for_model from utilities.testing import APITestCase, APIViewTestCases, TestCase, disable_warnings +def count_primary_table_queries(queries, table): + """Count queries that read from `table` as the primary relation (not only as a join).""" + pattern = re.compile(rf'FROM "{re.escape(table)}"') + return sum(1 for query_record in queries if pattern.search(query_record['sql'])) + + class GraphQLTestCase(TestCase): def _schema_extension_instances(self): @@ -469,6 +476,149 @@ class GraphQLAPITestCase(APITestCase): msg=f'Expected batched tag prefetch, got {tag_queries} tag queries for 10 devices', ) + def test_graphql_ip_address_list_assigned_object(self): + """ + Requesting assigned_object should batch prefetch related objects. + """ + self.add_permissions('ipam.view_ipaddress', 'dcim.view_interface', 'dcim.view_device') + + site = Site.objects.first() + manufacturer = Manufacturer.objects.create(name='Assigned Object Manufacturer', slug='assigned-object-mfg') + device_type = DeviceType.objects.create( + manufacturer=manufacturer, + model='Assigned Object Model', + slug='assigned-object-model', + ) + device_role = DeviceRole.objects.create(name='Assigned Object Role', slug='assigned-object-role') + device = Device.objects.create( + name='Assigned Object Device', + site=site, + device_type=device_type, + role=device_role, + ) + interface = Interface.objects.create(name='eth0', device=device, type='1000baset') + ip_addresses = IPAddress.objects.bulk_create([ + IPAddress(address=f'192.0.2.{index}/24', assigned_object=interface) + for index in range(1, 6) + ]) + ip_ids = json.dumps([str(ip.pk) for ip in ip_addresses]) + + query = f""" + {{ + ip_address_list(filters: {{id: {{in_list: {ip_ids}}}}}) {{ + address + assigned_object {{ + ... on InterfaceType {{ + name + device {{ + name + }} + }} + }} + }} + }} + """ + url = reverse('graphql') + + with CaptureQueriesContext(connection) as context: + response = self.client.post(url, data={'query': query}, format='json', **self.header) + + self.assertHttpStatus(response, status.HTTP_200_OK) + data = json.loads(response.content) + self.assertNotIn('errors', data) + self.assertEqual(len(data['data']['ip_address_list']), len(ip_addresses)) + + device_queries = count_primary_table_queries(context.captured_queries, 'dcim_device') + self.assertLessEqual( + device_queries, + 2, + msg=f'Expected batched assigned_object prefetch, got {device_queries} device queries for 5 IP addresses', + ) + + def test_graphql_ip_address_list_assigned_object_nested_site(self): + """ + Nested assigned_object selections should be optimized on the GFK prefetch queryset. + """ + self.add_permissions( + 'ipam.view_ipaddress', + 'dcim.view_interface', + 'dcim.view_device', + 'dcim.view_site', + ) + + site = Site.objects.first() + manufacturer = Manufacturer.objects.create( + name='Nested Site Manufacturer', + slug='nested-site-mfg', + ) + device_type = DeviceType.objects.create( + manufacturer=manufacturer, + model='Nested Site Model', + slug='nested-site-model', + ) + device_role = DeviceRole.objects.create(name='Nested Site Role', slug='nested-site-role') + interfaces = [] + for index in range(5): + device = Device.objects.create( + name=f'Nested Site Device {index}', + site=site, + device_type=device_type, + role=device_role, + ) + interfaces.append(Interface.objects.create( + name=f'eth{index}', + device=device, + type='1000baset', + )) + ip_addresses = IPAddress.objects.bulk_create([ + IPAddress(address=f'192.0.2.{index}/24', assigned_object=interfaces[index - 1]) + for index in range(1, 6) + ]) + ip_ids = json.dumps([str(ip.pk) for ip in ip_addresses]) + + query = f""" + {{ + ip_address_list(filters: {{id: {{in_list: {ip_ids}}}}}) {{ + address + assigned_object {{ + ... on InterfaceType {{ + name + device {{ + name + site {{ + name + }} + }} + }} + }} + }} + }} + """ + url = reverse('graphql') + + with CaptureQueriesContext(connection) as context: + response = self.client.post(url, data={'query': query}, format='json', **self.header) + + self.assertHttpStatus(response, status.HTTP_200_OK) + data = json.loads(response.content) + self.assertNotIn('errors', data) + self.assertEqual(len(data['data']['ip_address_list']), len(ip_addresses)) + for ip_data in data['data']['ip_address_list']: + self.assertEqual(ip_data['assigned_object']['device']['site']['name'], site.name) + + device_queries = count_primary_table_queries(context.captured_queries, 'dcim_device') + site_queries = count_primary_table_queries(context.captured_queries, 'dcim_site') + self.assertLessEqual( + device_queries, + 2, + msg=f'Expected batched device prefetch, got {device_queries} device queries for 5 IP addresses', + ) + self.assertLessEqual( + site_queries, + 2, + msg=f'Expected optimized site join, got {site_queries} site queries for 5 IP addresses', + ) + def test_offset_pagination(self): self.add_permissions('dcim.view_site') url = reverse('graphql') diff --git a/netbox/virtualization/graphql/types.py b/netbox/virtualization/graphql/types.py index 81ef685a1..dbad15d54 100644 --- a/netbox/virtualization/graphql/types.py +++ b/netbox/virtualization/graphql/types.py @@ -3,8 +3,10 @@ from typing import TYPE_CHECKING, Annotated import strawberry import strawberry_django +from dcim.models import Location, Region, Site, SiteGroup from extras.graphql.mixins import ConfigContextMixin, ContactsMixin from ipam.graphql.mixins import IPAddressesMixin, VLANGroupsMixin +from netbox.graphql.optimization import build_gfk_prefetch from netbox.graphql.scalars import BigInt from netbox.graphql.types import NetBoxObjectType, OrganizationalObjectType, PrimaryObjectType from users.graphql.mixins import OwnerMixin @@ -59,7 +61,18 @@ class ClusterType(ContactsMixin, VLANGroupsMixin, PrimaryObjectType): virtual_machines: list[Annotated["VirtualMachineType", strawberry.lazy('virtualization.graphql.types')]] devices: list[Annotated["DeviceType", strawberry.lazy('dcim.graphql.types')]] - @strawberry_django.field(prefetch_related='scope') + @strawberry_django.field( + prefetch_related=build_gfk_prefetch( + 'scope', + [ + Region, + SiteGroup, + Site, + Location, + ], + ), + only=['scope_type', 'scope_id'], + ) def scope(self) -> Annotated[ Annotated['LocationType', strawberry.lazy('dcim.graphql.types')] | Annotated['RegionType', strawberry.lazy('dcim.graphql.types')] diff --git a/netbox/vpn/graphql/types.py b/netbox/vpn/graphql/types.py index 40f125e83..1d7216599 100644 --- a/netbox/vpn/graphql/types.py +++ b/netbox/vpn/graphql/types.py @@ -3,8 +3,12 @@ from typing import TYPE_CHECKING, Annotated import strawberry import strawberry_django +from dcim.models import Interface from extras.graphql.mixins import ContactsMixin, CustomFieldsMixin, TagsMixin +from ipam.models import VLAN +from netbox.graphql.optimization import build_gfk_prefetch from netbox.graphql.types import NetBoxObjectType, ObjectType, OrganizationalObjectType, PrimaryObjectType +from virtualization.models import VMInterface from vpn import models from .filters import * @@ -145,7 +149,17 @@ class L2VPNType(ContactsMixin, PrimaryObjectType): class L2VPNTerminationType(NetBoxObjectType): l2vpn: Annotated["L2VPNType", strawberry.lazy('vpn.graphql.types')] - @strawberry_django.field(prefetch_related='assigned_object') + @strawberry_django.field( + prefetch_related=build_gfk_prefetch( + 'assigned_object', + [ + Interface, + VMInterface, + VLAN, + ], + ), + only=['assigned_object_type', 'assigned_object_id'], + ) def assigned_object(self) -> Annotated[ Annotated['InterfaceType', strawberry.lazy('dcim.graphql.types')] | Annotated['VLANType', strawberry.lazy('ipam.graphql.types')] diff --git a/netbox/wireless/graphql/types.py b/netbox/wireless/graphql/types.py index 557f32ce4..589fc237c 100644 --- a/netbox/wireless/graphql/types.py +++ b/netbox/wireless/graphql/types.py @@ -3,6 +3,8 @@ from typing import TYPE_CHECKING, Annotated import strawberry import strawberry_django +from dcim.models import Location, Region, Site, SiteGroup +from netbox.graphql.optimization import build_gfk_prefetch from netbox.graphql.types import NestedGroupObjectType, PrimaryObjectType from wireless import models @@ -46,7 +48,18 @@ class WirelessLANType(PrimaryObjectType): interfaces: list[Annotated["InterfaceType", strawberry.lazy('dcim.graphql.types')]] - @strawberry_django.field(prefetch_related='scope') + @strawberry_django.field( + prefetch_related=build_gfk_prefetch( + 'scope', + [ + Region, + SiteGroup, + Site, + Location, + ], + ), + only=['scope_type', 'scope_id'], + ) def scope(self) -> Annotated[ Annotated['LocationType', strawberry.lazy('dcim.graphql.types')] | Annotated['RegionType', strawberry.lazy('dcim.graphql.types')] From 280e32fcc95a2dfb9a51f307e9a0b6b6e9388433 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 5 Aug 2026 05:54:34 +0000 Subject: [PATCH 23/35] Update source translation strings --- netbox/translations/en/LC_MESSAGES/django.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index 5c63ea216..0c190cdfa 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: 2026-08-04 05:56+0000\n" +"POT-Creation-Date: 2026-08-05 05:54+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -8305,7 +8305,7 @@ msgstr "" msgid "The rendered template output." msgstr "" -#: netbox/extras/api/serializers_/customfields.py:79 +#: netbox/extras/api/serializers_/customfields.py:80 msgid "Changing the type of custom fields is not supported." msgstr "" From 75ceb5575450a06b93d6f92abf89672dab80298f Mon Sep 17 00:00:00 2001 From: Martin Hauser Date: Wed, 5 Aug 2026 18:01:38 +0200 Subject: [PATCH 24/35] fix(extras): Honor Script defaults when triggered by Event Rules Scripts triggered by Event Rules now respect notifications_default and job_timeout from script Meta class. Updates documentation to clarify this behavior and adds regression test coverage. Fixes #22852 --- docs/customization/custom-scripts.md | 8 +- netbox/extras/events.py | 2 + .../extras/management/commands/runscript.py | 2 + netbox/extras/tests/test_event_rules.py | 77 ++++++++++++++++++- .../extras/tests/test_management_commands.py | 29 ++++--- 5 files changed, 98 insertions(+), 20 deletions(-) diff --git a/docs/customization/custom-scripts.md b/docs/customization/custom-scripts.md index e18d7f700..6ebac740a 100644 --- a/docs/customization/custom-scripts.md +++ b/docs/customization/custom-scripts.md @@ -108,7 +108,7 @@ class MyScript(Script): ### `commit_default` -The checkbox to commit database changes when executing a script is checked by default. Set `commit_default` to False under the script's Meta class to leave this option unchecked by default. +The checkbox to commit database changes when executing a script is checked by default. Set `commit_default` to False under the script's Meta class to leave this option unchecked by default. This setting controls only the initial state of the execution form. ```python commit_default = False @@ -120,7 +120,9 @@ By default, a script can be scheduled for execution at a later time. Setting `sc ### `notifications_default` -By default, a notification is generated for the requesting user each time a script finishes running. This attribute sets the initial value for the notifications field when running a script. Valid values are `always` (default), `on_failure`, and `never`. +By default, a notification is generated for the user associated with the script's job each time the script finishes running. This attribute sets the initial value for the notifications field when running a script. Valid values are `always` (default), `on_failure`, and `never`. + +Scripts run from an event rule or the `runscript` management command use this value as their notification policy. For an event rule, the notification goes to the user associated with the triggering event, if there is one. ```python notifications_default = 'on_failure' @@ -134,7 +136,7 @@ notifications_default = 'on_failure' ### `job_timeout` -Set the maximum allowed runtime for the script. If not set, `RQ_DEFAULT_TIMEOUT` will be used. +Set the maximum allowed runtime for the script. If not set, `RQ_DEFAULT_TIMEOUT` will be used. Scripts run from an event rule use this value as their execution timeout. ## Accessing Request Data diff --git a/netbox/extras/events.py b/netbox/extras/events.py index c01e02ed5..e4740779e 100644 --- a/netbox/extras/events.py +++ b/netbox/extras/events.py @@ -253,6 +253,8 @@ def process_event_rules(event_rules, object_type, event): 'name': script.name, 'user': event['user'], 'data': event_data, + 'notifications': script.notifications_default, + 'job_timeout': script.job_timeout, } if 'snapshots' in event: params['snapshots'] = event['snapshots'] diff --git a/netbox/extras/management/commands/runscript.py b/netbox/extras/management/commands/runscript.py index ef3a46fac..1bc9ef958 100644 --- a/netbox/extras/management/commands/runscript.py +++ b/netbox/extras/management/commands/runscript.py @@ -85,6 +85,7 @@ class Command(BaseCommand): form.cleaned_data.pop('_schedule_at') form.cleaned_data.pop('_interval') form.cleaned_data.pop('_commit') + notifications = form.cleaned_data.pop('_notifications') # Execute the script. job = ScriptJob.enqueue( @@ -92,6 +93,7 @@ class Command(BaseCommand): user=user, immediate=True, data=form.cleaned_data, + notifications=notifications, request=NetBoxFakeRequest({ 'META': {}, 'COOKIES': {}, diff --git a/netbox/extras/tests/test_event_rules.py b/netbox/extras/tests/test_event_rules.py index 98e6e4b81..d75bf5bf6 100644 --- a/netbox/extras/tests/test_event_rules.py +++ b/netbox/extras/tests/test_event_rules.py @@ -14,14 +14,14 @@ from PIL import Image from requests import Session from rest_framework import status -from core.choices import ManagedFileRootPathChoices +from core.choices import JobNotificationChoices, ManagedFileRootPathChoices from core.events import * from core.models import Job, ObjectType from dcim.choices import SiteStatusChoices from dcim.models import DeviceType, Interface, Manufacturer, Site from extras.choices import EventRuleActionChoices from extras.events import enqueue_event, flush_events, serialize_for_event -from extras.models import EventRule, Script, ScriptModule, Tag, Webhook +from extras.models import EventRule, Notification, Script, ScriptModule, Tag, Webhook from extras.scripts import Script as ScriptBase from extras.signals import process_job_end_event_rules from extras.webhooks import generate_signature, send_webhook @@ -756,6 +756,79 @@ class EventRuleTestCase(RQQueueTestMixin, APITestCase): self.assertEqual(script_job.status, "completed") self.assertEqual(script_job.data.get('output', ''), "finished successfully") + @tag('regression') # Issue #22852 + def test_eventrule_script_action_honors_script_defaults(self): + """A script run from an event rule uses the notification policy and job timeout from its Meta class.""" + class DummyScript(ScriptBase): + class Meta: + name = 'Dummy Defaults Script' + notifications_default = JobNotificationChoices.NOTIFICATION_ON_FAILURE + job_timeout = 600 + + def run(self, data, commit=True): + return 'finished successfully' + + dummy_script = DummyScript() + + with patch.object(ScriptModule, 'sync_classes'): + module = ScriptModule.objects.create( + file_root=ManagedFileRootPathChoices.SCRIPTS, + file_path='dummy_defaults_script.py', + ) + script = Script.objects.create( + module=module, + name=dummy_script.name, + is_executable=True, + ) + + event_rule = EventRule.objects.create( + name='Test Script Defaults Event Rule', + event_types=[OBJECT_CREATED], + action_type=EventRuleActionChoices.SCRIPT, + action_object_type=ObjectType.objects.get_for_model(Script), + action_object_id=script.pk, + ) + event_rule.object_types.set([ObjectType.objects.get_for_model(DeviceType)]) + + manufacturer = Manufacturer.objects.create(name='Test Manufacturer', slug='test-manufacturer') + self.add_permissions('dcim.add_devicetype') + + with patch.object(Script, 'python_class') as mock: + mock.return_value = dummy_script + with self.captureOnCommitCallbacks(execute=True): + response = self.client.post( + reverse('dcim-api:devicetype-list'), + { + 'manufacturer': manufacturer.pk, + 'model': 'Test DeviceType', + 'slug': 'test-devicetype', + }, + format='json', + **self.header, + ) + self.assertHttpStatus(response, status.HTTP_201_CREATED) + + self.assertEqual(self.queue.count, 1) + self.assertEqual(self.queue.jobs[0].timeout, 600) + script_job = Job.objects.get(name=dummy_script.name) + self.assertEqual(script_job.notifications, JobNotificationChoices.NOTIFICATION_ON_FAILURE) + + # silence rqworker (cleaner output) and trigger job execution + rq_logger = logging.getLogger('rq.worker') + self.addCleanup(rq_logger.setLevel, rq_logger.level) + rq_logger.setLevel(logging.ERROR) + self.run_rq_jobs('default') + + script_job.refresh_from_db() + self.assertEqual(script_job.status, "completed") + self.assertFalse( + Notification.objects.filter( + user=self.user, + object_type=ObjectType.objects.get_for_model(Job), + object_id=script_job.pk, + ).exists() + ) + @tag('regression') def test_eventrule_webhook_action_with_object_image_files(self): """ diff --git a/netbox/extras/tests/test_management_commands.py b/netbox/extras/tests/test_management_commands.py index 3372de375..3f46f413b 100644 --- a/netbox/extras/tests/test_management_commands.py +++ b/netbox/extras/tests/test_management_commands.py @@ -7,11 +7,13 @@ from django.core.management import call_command from django.core.management.base import CommandError from django.test import TestCase +from core.choices import JobNotificationChoices from dcim.choices import InterfaceTypeChoices from dcim.models import Device, DeviceRole, DeviceType, Interface, Manufacturer, Site from extras.management.commands import renaturalize, webhook_receiver from extras.management.commands.webhook_receiver import WebhookHandler from extras.models import ImageAttachment +from extras.scripts import Script, StringVar from extras.tests.test_models import OverwriteStyleMemoryStorage, UnreadableSizeMemoryStorage from users.models import User from utilities.fields import NaturalOrderingField @@ -255,20 +257,14 @@ class RunScriptTestCase(TestCase): ) def test_enqueues_script_job(self): - class TestScript: - full_name = 'test.Script' + class TestScript(Script): + value = StringVar() - def as_form(self, data, files): - form = MagicMock() - form.is_valid.return_value = True - form.cleaned_data = { - '_schedule_at': None, - '_interval': None, - '_commit': None, - 'name': data['name'], - } - form.errors.get_json_data.return_value = {} - return form + class Meta: + notifications_default = JobNotificationChoices.NOTIFICATION_ON_FAILURE + + def run(self, data, commit): + return None script_obj = SimpleNamespace(python_class=TestScript) job = SimpleNamespace(duration='0 seconds') @@ -288,7 +284,7 @@ class RunScriptTestCase(TestCase): 'runscript', 'test.Script', user='admin', - data='{"name": "test"}', + data='{"value": "test"}', stdout=StringIO(), ) @@ -298,8 +294,9 @@ class RunScriptTestCase(TestCase): self.assertEqual(kwargs['instance'], script_obj) self.assertEqual(kwargs['user'], self.user) self.assertTrue(kwargs['immediate']) - self.assertEqual(kwargs['data'], {'name': 'test'}) + self.assertEqual(kwargs['data'], {'value': 'test'}) self.assertFalse(kwargs['commit']) + self.assertEqual(kwargs['notifications'], JobNotificationChoices.NOTIFICATION_ON_FAILURE) def test_invalid_script_data_raises_error_without_enqueueing_job(self): class TestScript: @@ -351,6 +348,7 @@ class RunScriptTestCase(TestCase): '_schedule_at': None, '_interval': None, '_commit': None, + '_notifications': JobNotificationChoices.NOTIFICATION_ALWAYS, } form.errors.get_json_data.return_value = {} return form @@ -391,6 +389,7 @@ class RunScriptTestCase(TestCase): '_schedule_at': None, '_interval': None, '_commit': None, + '_notifications': JobNotificationChoices.NOTIFICATION_ALWAYS, } form.errors.get_json_data.return_value = {} return form From e160359e6e3375489a0d99eb2765c179572876ea Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 6 Aug 2026 05:57:19 +0000 Subject: [PATCH 25/35] Update source translation strings --- netbox/translations/en/LC_MESSAGES/django.po | 182 +++++++++---------- 1 file changed, 91 insertions(+), 91 deletions(-) diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index 0c190cdfa..601b9fdf7 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: 2026-08-05 05:54+0000\n" +"POT-Creation-Date: 2026-08-06 05:56+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -710,7 +710,7 @@ msgstr "" #: netbox/dcim/forms/filtersets.py:1924 netbox/dcim/forms/filtersets.py:1942 #: netbox/dcim/forms/filtersets.py:1962 netbox/dcim/forms/filtersets.py:1978 #: netbox/dcim/forms/filtersets.py:2024 netbox/dcim/forms/filtersets.py:2060 -#: netbox/dcim/tables/modules.py:25 netbox/dcim/views.py:1774 +#: netbox/dcim/tables/modules.py:25 netbox/dcim/views.py:1780 #: netbox/extras/forms/bulk_edit.py:98 netbox/extras/forms/filtersets.py:48 #: netbox/extras/forms/filtersets.py:152 netbox/extras/forms/filtersets.py:231 #: netbox/extras/forms/filtersets.py:248 netbox/extras/forms/filtersets.py:280 @@ -824,7 +824,7 @@ msgstr "" #: netbox/circuits/forms/bulk_edit.py:220 #: netbox/circuits/forms/model_forms.py:211 netbox/circuits/ui/panels.py:85 -#: netbox/dcim/views.py:3579 netbox/dcim/views.py:3681 +#: netbox/dcim/views.py:3585 netbox/dcim/views.py:3687 #: netbox/templates/circuits/circuit_termination/attrs/connection.html:43 #: netbox/templates/circuits/inc/circuit_termination_fields.html:59 #: netbox/templates/dcim/panels/interface_connection.html:92 @@ -988,8 +988,8 @@ msgstr "" #: netbox/dcim/forms/model_forms.py:1372 netbox/dcim/forms/model_forms.py:1641 #: netbox/dcim/forms/model_forms.py:1822 netbox/dcim/forms/model_forms.py:1857 #: netbox/dcim/forms/model_forms.py:1982 netbox/dcim/tables/connections.py:66 -#: netbox/dcim/tables/devices.py:1229 netbox/dcim/views.py:3571 -#: netbox/dcim/views.py:3675 netbox/ipam/forms/bulk_import.py:330 +#: netbox/dcim/tables/devices.py:1229 netbox/dcim/views.py:3577 +#: netbox/dcim/views.py:3681 netbox/ipam/forms/bulk_import.py:330 #: netbox/ipam/forms/model_forms.py:316 netbox/ipam/forms/model_forms.py:325 #: netbox/ipam/tables/fhrp.py:61 netbox/ipam/tables/ip.py:328 #: netbox/ipam/tables/vlans.py:149 @@ -3521,7 +3521,7 @@ msgid "Kilometers" msgstr "" #: netbox/dcim/choices.py:1992 netbox/netbox/choices.py:178 -#: netbox/templates/dcim/cable_trace.html:65 +#: netbox/templates/dcim/cable_trace.html:67 msgid "Meters" msgstr "" @@ -3534,7 +3534,7 @@ msgid "Miles" msgstr "" #: netbox/dcim/choices.py:1995 netbox/netbox/choices.py:180 -#: netbox/templates/dcim/cable_trace.html:66 +#: netbox/templates/dcim/cable_trace.html:68 msgid "Feet" msgstr "" @@ -4327,7 +4327,7 @@ msgstr "" #: netbox/dcim/forms/model_forms.py:277 netbox/dcim/forms/model_forms.py:363 #: netbox/dcim/tables/devicetypes.py:110 netbox/dcim/tables/modules.py:55 #: netbox/dcim/tables/racks.py:95 netbox/dcim/tables/racks.py:190 -#: netbox/dcim/views.py:977 netbox/dcim/views.py:1105 +#: netbox/dcim/views.py:983 netbox/dcim/views.py:1111 #: netbox/extras/forms/bulk_edit.py:57 netbox/extras/forms/bulk_edit.py:144 #: netbox/extras/forms/bulk_edit.py:198 netbox/extras/forms/bulk_edit.py:226 #: netbox/extras/forms/bulk_edit.py:322 netbox/extras/forms/bulk_edit.py:348 @@ -4363,7 +4363,7 @@ msgstr "" #: netbox/dcim/forms/bulk_edit.py:311 netbox/dcim/forms/model_forms.py:278 #: netbox/dcim/forms/model_forms.py:364 netbox/dcim/ui/panels.py:138 -#: netbox/dcim/views.py:971 netbox/dcim/views.py:1103 +#: netbox/dcim/views.py:977 netbox/dcim/views.py:1109 #: netbox/extras/tables/tables.py:282 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:3 #: netbox/templates/extras/panels/imageattachment_file.html:14 @@ -4372,7 +4372,7 @@ msgstr "" #: netbox/dcim/forms/bulk_edit.py:313 netbox/dcim/forms/filtersets.py:347 #: netbox/dcim/forms/filtersets.py:372 netbox/dcim/forms/model_forms.py:280 -#: netbox/dcim/views.py:976 netbox/dcim/views.py:1104 +#: netbox/dcim/views.py:982 netbox/dcim/views.py:1110 #: netbox/templates/dcim/inc/panels/racktype_numbering.html:3 msgid "Numbering" msgstr "" @@ -4464,7 +4464,7 @@ msgid "Device Type" msgstr "" #: netbox/dcim/forms/bulk_edit.py:566 netbox/dcim/forms/model_forms.py:457 -#: netbox/dcim/views.py:1684 netbox/extras/forms/model_forms.py:689 +#: netbox/dcim/views.py:1690 netbox/extras/forms/model_forms.py:689 msgid "Schema" msgstr "" @@ -4488,7 +4488,7 @@ msgstr "" #: netbox/dcim/forms/model_forms.py:1184 netbox/dcim/forms/model_forms.py:1205 #: netbox/dcim/forms/model_forms.py:1245 netbox/dcim/forms/model_forms.py:1263 #: netbox/dcim/forms/object_create.py:120 netbox/dcim/tables/modules.py:52 -#: netbox/dcim/tables/modules.py:102 netbox/dcim/views.py:2958 +#: netbox/dcim/tables/modules.py:102 netbox/dcim/views.py:2964 msgid "Module Type" msgstr "" @@ -5464,7 +5464,7 @@ msgid "Power Panel" msgstr "" #: netbox/dcim/forms/connections.py:68 netbox/dcim/forms/model_forms.py:942 -#: netbox/dcim/views.py:3215 +#: netbox/dcim/views.py:3221 msgid "Power Feed" msgstr "" @@ -5493,7 +5493,7 @@ msgid "Function" msgstr "" #: netbox/dcim/forms/filtersets.py:478 netbox/dcim/forms/model_forms.py:386 -#: netbox/dcim/tables/racks.py:217 netbox/dcim/views.py:1254 +#: netbox/dcim/tables/racks.py:217 netbox/dcim/views.py:1260 msgid "Reservation" msgstr "" @@ -5600,7 +5600,7 @@ msgid "Transmit power (dBm)" msgstr "" #: netbox/dcim/forms/filtersets.py:1819 netbox/dcim/forms/filtersets.py:1863 -#: netbox/dcim/tables/devices.py:344 netbox/templates/dcim/cable_trace.html:46 +#: netbox/dcim/tables/devices.py:344 netbox/templates/dcim/cable_trace.html:48 #: netbox/templates/dcim/htmx/cable_edit.html:53 #: netbox/templates/dcim/inc/connection_endpoints.html:4 #: netbox/templates/dcim/panels/connection.html:14 @@ -5820,19 +5820,19 @@ msgid "Rear port template" msgstr "" #: netbox/dcim/forms/model_forms.py:1373 netbox/dcim/forms/model_forms.py:1858 -#: netbox/dcim/tables/connections.py:28 netbox/dcim/views.py:3124 -#: netbox/dcim/views.py:3573 +#: netbox/dcim/tables/connections.py:28 netbox/dcim/views.py:3130 +#: netbox/dcim/views.py:3579 msgid "Console Port" msgstr "" #: netbox/dcim/forms/model_forms.py:1374 netbox/dcim/forms/model_forms.py:1859 -#: netbox/dcim/views.py:3033 netbox/dcim/views.py:3572 +#: netbox/dcim/views.py:3039 netbox/dcim/views.py:3578 msgid "Console Server Port" msgstr "" #: netbox/dcim/forms/model_forms.py:1375 netbox/dcim/forms/model_forms.py:1860 -#: netbox/dcim/views.py:3035 netbox/dcim/views.py:3125 -#: netbox/dcim/views.py:3574 netbox/dcim/views.py:3676 +#: netbox/dcim/views.py:3041 netbox/dcim/views.py:3131 +#: netbox/dcim/views.py:3580 netbox/dcim/views.py:3682 #: netbox/templates/circuits/circuit_termination/attrs/connection.html:41 #: netbox/templates/circuits/inc/circuit_termination_fields.html:57 #: netbox/templates/dcim/panels/interface_connection.html:86 @@ -5841,8 +5841,8 @@ msgid "Front Port" msgstr "" #: netbox/dcim/forms/model_forms.py:1376 netbox/dcim/forms/model_forms.py:1861 -#: netbox/dcim/views.py:3036 netbox/dcim/views.py:3126 -#: netbox/dcim/views.py:3575 netbox/dcim/views.py:3677 +#: netbox/dcim/views.py:3042 netbox/dcim/views.py:3132 +#: netbox/dcim/views.py:3581 netbox/dcim/views.py:3683 #: netbox/templates/circuits/circuit_termination/attrs/connection.html:42 #: netbox/templates/circuits/inc/circuit_termination_fields.html:58 #: netbox/templates/dcim/panels/front_port_mappings.html:10 @@ -5852,12 +5852,12 @@ msgstr "" #: netbox/dcim/forms/model_forms.py:1377 netbox/dcim/forms/model_forms.py:1862 #: netbox/dcim/tables/connections.py:47 netbox/dcim/tables/devices.py:539 -#: netbox/dcim/views.py:3303 netbox/dcim/views.py:4835 +#: netbox/dcim/views.py:3309 netbox/dcim/views.py:4841 msgid "Power Port" msgstr "" #: netbox/dcim/forms/model_forms.py:1378 netbox/dcim/forms/model_forms.py:1863 -#: netbox/dcim/views.py:3214 +#: netbox/dcim/views.py:3220 msgid "Power Outlet" msgstr "" @@ -6092,23 +6092,23 @@ msgstr "" msgid "cable paths" msgstr "" -#: netbox/dcim/models/cables.py:858 +#: netbox/dcim/models/cables.py:862 msgid "All originating terminations must be attached to the same link" msgstr "" -#: netbox/dcim/models/cables.py:876 +#: netbox/dcim/models/cables.py:880 msgid "All mid-span terminations must have the same termination type" msgstr "" -#: netbox/dcim/models/cables.py:884 +#: netbox/dcim/models/cables.py:888 msgid "All mid-span terminations must have the same parent object" msgstr "" -#: netbox/dcim/models/cables.py:914 +#: netbox/dcim/models/cables.py:918 msgid "All links must be cable or wireless" msgstr "" -#: netbox/dcim/models/cables.py:916 +#: netbox/dcim/models/cables.py:920 msgid "All links must match first link type" msgstr "" @@ -7566,11 +7566,11 @@ msgstr "" msgid "Disconnect Selected" msgstr "" -#: netbox/dcim/tables/cables.py:57 netbox/dcim/views.py:4342 +#: netbox/dcim/tables/cables.py:57 netbox/dcim/views.py:4348 msgid "Termination A" msgstr "" -#: netbox/dcim/tables/cables.py:62 netbox/dcim/views.py:4346 +#: netbox/dcim/tables/cables.py:62 netbox/dcim/views.py:4352 msgid "Termination B" msgstr "" @@ -7706,8 +7706,8 @@ msgid "Power outlets" msgstr "" #: netbox/dcim/tables/devices.py:254 netbox/dcim/tables/devices.py:1204 -#: netbox/dcim/tables/devicetypes.py:132 netbox/dcim/views.py:1518 -#: netbox/dcim/views.py:1872 netbox/dcim/views.py:2759 +#: netbox/dcim/tables/devicetypes.py:132 netbox/dcim/views.py:1524 +#: netbox/dcim/views.py:1878 netbox/dcim/views.py:2765 #: netbox/netbox/navigation/menu.py:104 netbox/netbox/navigation/menu.py:269 #: netbox/templates/dcim/buttons/bulk_add_components.html:38 #: netbox/templates/dcim/device/base.html:37 @@ -7751,7 +7751,7 @@ msgstr "" #: netbox/dcim/tables/devices.py:335 netbox/dcim/tables/devicetypes.py:53 #: netbox/dcim/tables/devicetypes.py:147 netbox/dcim/ui/panels.py:416 -#: netbox/dcim/views.py:1593 netbox/dcim/views.py:2845 +#: netbox/dcim/views.py:1599 netbox/dcim/views.py:2851 #: netbox/netbox/navigation/menu.py:113 #: netbox/templates/dcim/buttons/bulk_add_components.html:66 #: netbox/templates/dcim/device/base.html:52 @@ -7780,7 +7780,7 @@ msgstr "" msgid "Allocated draw (W)" msgstr "" -#: netbox/dcim/tables/devices.py:597 netbox/dcim/views.py:3402 +#: netbox/dcim/tables/devices.py:597 netbox/dcim/views.py:3408 #: netbox/ipam/forms/model_forms.py:834 netbox/ipam/tables/fhrp.py:28 #: netbox/ipam/ui/panels.py:252 netbox/ipam/views.py:924 #: netbox/ipam/views.py:1052 netbox/netbox/navigation/menu.py:175 @@ -7792,7 +7792,7 @@ msgstr "" msgid "Primary MAC" msgstr "" -#: netbox/dcim/tables/devices.py:606 netbox/dcim/views.py:3408 +#: netbox/dcim/tables/devices.py:606 netbox/dcim/views.py:3414 #: netbox/netbox/navigation/menu.py:120 msgid "MAC Addresses" msgstr "" @@ -7886,7 +7886,7 @@ msgstr "" msgid "Device Types" msgstr "" -#: netbox/dcim/tables/devicetypes.py:48 netbox/dcim/views.py:1690 +#: netbox/dcim/tables/devicetypes.py:48 netbox/dcim/views.py:1696 #: netbox/netbox/navigation/menu.py:96 msgid "Module Types" msgstr "" @@ -7909,8 +7909,8 @@ msgstr "" msgid "Device Count" msgstr "" -#: netbox/dcim/tables/devicetypes.py:120 netbox/dcim/views.py:1458 -#: netbox/dcim/views.py:1812 netbox/dcim/views.py:2694 +#: netbox/dcim/tables/devicetypes.py:120 netbox/dcim/views.py:1464 +#: netbox/dcim/views.py:1818 netbox/dcim/views.py:2700 #: netbox/netbox/navigation/menu.py:107 #: netbox/templates/dcim/buttons/bulk_add_components.html:10 #: netbox/templates/dcim/device/base.html:25 @@ -7920,8 +7920,8 @@ msgstr "" msgid "Console Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:123 netbox/dcim/views.py:1473 -#: netbox/dcim/views.py:1827 netbox/dcim/views.py:2710 +#: netbox/dcim/tables/devicetypes.py:123 netbox/dcim/views.py:1479 +#: netbox/dcim/views.py:1833 netbox/dcim/views.py:2716 #: netbox/netbox/navigation/menu.py:108 #: netbox/templates/dcim/buttons/bulk_add_components.html:17 #: netbox/templates/dcim/device/base.html:28 @@ -7931,8 +7931,8 @@ msgstr "" msgid "Console Server Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:126 netbox/dcim/views.py:1488 -#: netbox/dcim/views.py:1842 netbox/dcim/views.py:2726 +#: netbox/dcim/tables/devicetypes.py:126 netbox/dcim/views.py:1494 +#: netbox/dcim/views.py:1848 netbox/dcim/views.py:2732 #: netbox/netbox/navigation/menu.py:109 #: netbox/templates/dcim/buttons/bulk_add_components.html:24 #: netbox/templates/dcim/device/base.html:31 @@ -7942,8 +7942,8 @@ msgstr "" msgid "Power Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:129 netbox/dcim/views.py:1503 -#: netbox/dcim/views.py:1857 netbox/dcim/views.py:2742 +#: netbox/dcim/tables/devicetypes.py:129 netbox/dcim/views.py:1509 +#: netbox/dcim/views.py:1863 netbox/dcim/views.py:2748 #: netbox/netbox/navigation/menu.py:110 #: netbox/templates/dcim/buttons/bulk_add_components.html:31 #: netbox/templates/dcim/device/base.html:34 @@ -7953,8 +7953,8 @@ msgstr "" msgid "Power Outlets" msgstr "" -#: netbox/dcim/tables/devicetypes.py:135 netbox/dcim/views.py:1533 -#: netbox/dcim/views.py:1887 netbox/dcim/views.py:2781 +#: netbox/dcim/tables/devicetypes.py:135 netbox/dcim/views.py:1539 +#: netbox/dcim/views.py:1893 netbox/dcim/views.py:2787 #: netbox/netbox/navigation/menu.py:105 #: netbox/templates/dcim/device/base.html:40 #: netbox/templates/dcim/devicetype/base.html:37 @@ -7963,8 +7963,8 @@ msgstr "" msgid "Front Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:138 netbox/dcim/views.py:1548 -#: netbox/dcim/views.py:1902 netbox/dcim/views.py:2797 +#: netbox/dcim/tables/devicetypes.py:138 netbox/dcim/views.py:1554 +#: netbox/dcim/views.py:1908 netbox/dcim/views.py:2803 #: netbox/netbox/navigation/menu.py:106 #: netbox/templates/dcim/buttons/bulk_add_components.html:45 #: netbox/templates/dcim/device/base.html:43 @@ -7974,16 +7974,16 @@ msgstr "" msgid "Rear Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:141 netbox/dcim/views.py:1578 -#: netbox/dcim/views.py:2829 netbox/netbox/navigation/menu.py:112 +#: netbox/dcim/tables/devicetypes.py:141 netbox/dcim/views.py:1584 +#: netbox/dcim/views.py:2835 netbox/netbox/navigation/menu.py:112 #: netbox/templates/dcim/buttons/bulk_add_components.html:52 #: netbox/templates/dcim/device/base.html:49 #: netbox/templates/dcim/devicetype/base.html:46 msgid "Device Bays" msgstr "" -#: netbox/dcim/tables/devicetypes.py:144 netbox/dcim/views.py:1563 -#: netbox/dcim/views.py:1917 netbox/dcim/views.py:2813 +#: netbox/dcim/tables/devicetypes.py:144 netbox/dcim/views.py:1569 +#: netbox/dcim/views.py:1923 netbox/dcim/views.py:2819 #: netbox/netbox/navigation/menu.py:111 #: netbox/templates/dcim/buttons/bulk_add_components.html:59 #: netbox/templates/dcim/device/base.html:46 @@ -8153,110 +8153,110 @@ msgstr "" msgid "Disconnected {count} {type}" msgstr "" -#: netbox/dcim/views.py:258 +#: netbox/dcim/views.py:264 msgid "Child Regions" msgstr "" -#: netbox/dcim/views.py:391 netbox/tenancy/views.py:59 +#: netbox/dcim/views.py:397 netbox/tenancy/views.py:59 #: netbox/tenancy/views.py:232 netbox/wireless/views.py:54 msgid "Child Groups" msgstr "" -#: netbox/dcim/views.py:551 netbox/dcim/views.py:693 netbox/dcim/views.py:1180 +#: netbox/dcim/views.py:557 netbox/dcim/views.py:699 netbox/dcim/views.py:1186 msgid "Non-Racked Devices" msgstr "" -#: netbox/dcim/views.py:678 +#: netbox/dcim/views.py:684 msgid "Child Locations" msgstr "" -#: netbox/dcim/views.py:1161 netbox/netbox/navigation/menu.py:53 +#: netbox/dcim/views.py:1167 netbox/netbox/navigation/menu.py:53 msgid "Reservations" msgstr "" -#: netbox/dcim/views.py:2444 +#: netbox/dcim/views.py:2450 msgid "Child Device Roles" msgstr "" -#: netbox/dcim/views.py:2545 +#: netbox/dcim/views.py:2551 msgid "Child Platforms" msgstr "" -#: netbox/dcim/views.py:2637 netbox/netbox/navigation/menu.py:223 +#: netbox/dcim/views.py:2643 netbox/netbox/navigation/menu.py:223 #: netbox/virtualization/views.py:493 msgid "Application Services" msgstr "" -#: netbox/dcim/views.py:2858 netbox/extras/forms/filtersets.py:407 +#: netbox/dcim/views.py:2864 netbox/extras/forms/filtersets.py:407 #: netbox/extras/forms/model_forms.py:789 netbox/extras/ui/panels.py:435 #: netbox/virtualization/forms/model_forms.py:278 #: netbox/virtualization/views.py:569 msgid "Config Context" msgstr "" -#: netbox/dcim/views.py:2869 netbox/virtualization/views.py:580 +#: netbox/dcim/views.py:2875 netbox/virtualization/views.py:580 msgid "Render Config" msgstr "" -#: netbox/dcim/views.py:2882 netbox/extras/tables/tables.py:735 +#: netbox/dcim/views.py:2888 netbox/extras/tables/tables.py:735 #: netbox/netbox/navigation/menu.py:266 netbox/netbox/navigation/menu.py:268 #: netbox/virtualization/views.py:278 msgid "Virtual Machines" msgstr "" -#: netbox/dcim/views.py:3389 netbox/netbox/navigation/menu.py:89 +#: netbox/dcim/views.py:3395 netbox/netbox/navigation/menu.py:89 msgid "Virtual Device Contexts" msgstr "" -#: netbox/dcim/views.py:3414 netbox/ipam/forms/filtersets.py:469 +#: netbox/dcim/views.py:3420 netbox/ipam/forms/filtersets.py:469 #: netbox/ipam/models/vlans.py:308 netbox/ipam/tables/ip.py:121 #: netbox/ipam/tables/vlans.py:52 netbox/ipam/views.py:1386 #: netbox/netbox/navigation/menu.py:210 netbox/netbox/navigation/menu.py:212 msgid "VLANs" msgstr "" -#: netbox/dcim/views.py:3416 +#: netbox/dcim/views.py:3422 msgid "LAG Members" msgstr "" -#: netbox/dcim/views.py:3417 netbox/virtualization/ui/panels.py:112 +#: netbox/dcim/views.py:3423 netbox/virtualization/ui/panels.py:112 #: netbox/virtualization/views.py:680 msgid "VLAN Translation" msgstr "" -#: netbox/dcim/views.py:3418 +#: netbox/dcim/views.py:3424 msgid "Bridged Interfaces" msgstr "" -#: netbox/dcim/views.py:3419 netbox/virtualization/views.py:681 +#: netbox/dcim/views.py:3425 netbox/virtualization/views.py:681 msgid "Child Interfaces" msgstr "" -#: netbox/dcim/views.py:3892 +#: netbox/dcim/views.py:3898 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "" -#: netbox/dcim/views.py:3933 +#: netbox/dcim/views.py:3939 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "" -#: netbox/dcim/views.py:4055 netbox/ipam/tables/ip.py:184 +#: netbox/dcim/views.py:4061 netbox/ipam/tables/ip.py:184 msgid "Children" msgstr "" -#: netbox/dcim/views.py:4625 +#: netbox/dcim/views.py:4631 #, python-brace-format msgid "Added member {device}" msgstr "" -#: netbox/dcim/views.py:4670 +#: netbox/dcim/views.py:4676 #, python-brace-format msgid "Unable to remove master device {device} from the virtual chassis." msgstr "" -#: netbox/dcim/views.py:4681 +#: netbox/dcim/views.py:4687 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "" @@ -13658,7 +13658,7 @@ msgstr "" #: netbox/templates/account/preferences.html:71 #: netbox/templates/core/system.html:118 -#: netbox/templates/dcim/cable_trace.html:113 +#: netbox/templates/dcim/cable_trace.html:115 #: netbox/templates/extras/object_configcontext.html:43 msgid "None found" msgstr "" @@ -14327,60 +14327,60 @@ msgstr "" msgid "Cable Trace for %(object_type)s %(object)s" msgstr "" -#: netbox/templates/dcim/cable_trace.html:24 +#: netbox/templates/dcim/cable_trace.html:25 #: netbox/templates/dcim/inc/rack_elevation.html:18 msgid "Download SVG" msgstr "" -#: netbox/templates/dcim/cable_trace.html:30 +#: netbox/templates/dcim/cable_trace.html:32 msgid "Asymmetric Path" msgstr "" -#: netbox/templates/dcim/cable_trace.html:31 +#: netbox/templates/dcim/cable_trace.html:33 msgid "The nodes below have no links and result in an asymmetric path" msgstr "" -#: netbox/templates/dcim/cable_trace.html:38 +#: netbox/templates/dcim/cable_trace.html:40 msgid "Path split" msgstr "" -#: netbox/templates/dcim/cable_trace.html:39 +#: netbox/templates/dcim/cable_trace.html:41 msgid "Select a node below to continue" msgstr "" -#: netbox/templates/dcim/cable_trace.html:55 +#: netbox/templates/dcim/cable_trace.html:57 msgid "Trace Completed" msgstr "" -#: netbox/templates/dcim/cable_trace.html:58 +#: netbox/templates/dcim/cable_trace.html:60 msgid "Total segments" msgstr "" -#: netbox/templates/dcim/cable_trace.html:62 +#: netbox/templates/dcim/cable_trace.html:64 msgid "Total length" msgstr "" -#: netbox/templates/dcim/cable_trace.html:77 +#: netbox/templates/dcim/cable_trace.html:79 msgid "No paths found" msgstr "" -#: netbox/templates/dcim/cable_trace.html:85 +#: netbox/templates/dcim/cable_trace.html:87 msgid "Related Paths" msgstr "" -#: netbox/templates/dcim/cable_trace.html:89 +#: netbox/templates/dcim/cable_trace.html:91 msgid "Origin" msgstr "" -#: netbox/templates/dcim/cable_trace.html:90 +#: netbox/templates/dcim/cable_trace.html:92 msgid "Destination" msgstr "" -#: netbox/templates/dcim/cable_trace.html:91 +#: netbox/templates/dcim/cable_trace.html:93 msgid "Segments" msgstr "" -#: netbox/templates/dcim/cable_trace.html:104 +#: netbox/templates/dcim/cable_trace.html:106 msgid "Incomplete" msgstr "" From b1ee8297d2296533b4c1194330ce1fb99ad3726d Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 6 Aug 2026 12:32:43 -0400 Subject: [PATCH 26/35] Closes #22877: Improve caching logic when retrieving custom fields via get_for_model() --- netbox/circuits/tests/query_counts.json | 42 +++--- netbox/core/tests/query_counts.json | 6 +- netbox/dcim/tests/query_counts.json | 140 +++++++++--------- netbox/extras/models/customfields.py | 6 +- netbox/extras/tests/query_counts.json | 14 +- netbox/extras/tests/test_customfields.py | 18 +++ netbox/ipam/tests/query_counts.json | 64 ++++---- netbox/tenancy/tests/query_counts.json | 24 +-- netbox/users/tests/query_counts.json | 10 +- netbox/virtualization/tests/query_counts.json | 28 ++-- netbox/vpn/tests/query_counts.json | 40 ++--- netbox/wireless/tests/query_counts.json | 12 +- 12 files changed, 212 insertions(+), 192 deletions(-) diff --git a/netbox/circuits/tests/query_counts.json b/netbox/circuits/tests/query_counts.json index 408dfdca0..5fb526af6 100644 --- a/netbox/circuits/tests/query_counts.json +++ b/netbox/circuits/tests/query_counts.json @@ -1,24 +1,24 @@ { - "circuit:api_list_objects": 16, - "circuit:list_objects_with_permission": 22, - "circuitgroup:api_list_objects": 13, - "circuitgroup:list_objects_with_permission": 20, + "circuit:api_list_objects": 15, + "circuit:list_objects_with_permission": 19, + "circuitgroup:api_list_objects": 12, + "circuitgroup:list_objects_with_permission": 17, "circuitgroupassignment:api_list_objects": 17, - "circuitgroupassignment:list_objects_with_permission": 26, - "circuittermination:api_list_objects": 18, - "circuittermination:list_objects_with_permission": 24, - "circuittype:api_list_objects": 13, - "circuittype:list_objects_with_permission": 20, - "provider:api_list_objects": 15, - "provider:list_objects_with_permission": 20, - "provideraccount:api_list_objects": 14, - "provideraccount:list_objects_with_permission": 21, - "providernetwork:api_list_objects": 14, - "providernetwork:list_objects_with_permission": 21, - "virtualcircuit:api_list_objects": 16, - "virtualcircuit:list_objects_with_permission": 24, - "virtualcircuittermination:api_list_objects": 17, - "virtualcircuittermination:list_objects_with_permission": 23, - "virtualcircuittype:api_list_objects": 13, - "virtualcircuittype:list_objects_with_permission": 20 + "circuitgroupassignment:list_objects_with_permission": 23, + "circuittermination:api_list_objects": 17, + "circuittermination:list_objects_with_permission": 21, + "circuittype:api_list_objects": 12, + "circuittype:list_objects_with_permission": 17, + "provider:api_list_objects": 14, + "provider:list_objects_with_permission": 17, + "provideraccount:api_list_objects": 13, + "provideraccount:list_objects_with_permission": 18, + "providernetwork:api_list_objects": 13, + "providernetwork:list_objects_with_permission": 18, + "virtualcircuit:api_list_objects": 15, + "virtualcircuit:list_objects_with_permission": 21, + "virtualcircuittermination:api_list_objects": 16, + "virtualcircuittermination:list_objects_with_permission": 20, + "virtualcircuittype:api_list_objects": 12, + "virtualcircuittype:list_objects_with_permission": 17 } diff --git a/netbox/core/tests/query_counts.json b/netbox/core/tests/query_counts.json index c6a476cd7..f52577be7 100644 --- a/netbox/core/tests/query_counts.json +++ b/netbox/core/tests/query_counts.json @@ -1,8 +1,8 @@ { "datafile:api_list_objects": 10, - "datafile:list_objects_with_permission": 18, - "datasource:api_list_objects": 12, - "datasource:list_objects_with_permission": 20, + "datafile:list_objects_with_permission": 17, + "datasource:api_list_objects": 11, + "datasource:list_objects_with_permission": 17, "job:api_list_objects": 12, "job:list_objects_with_permission": 19 } diff --git a/netbox/dcim/tests/query_counts.json b/netbox/dcim/tests/query_counts.json index 1d761f060..bc7d38a9d 100644 --- a/netbox/dcim/tests/query_counts.json +++ b/netbox/dcim/tests/query_counts.json @@ -1,86 +1,86 @@ { - "cable:api_list_objects": 24, - "cable:list_objects_with_permission": 24, - "cablebundle:api_list_objects": 13, - "cablebundle:list_objects_with_permission": 20, + "cable:api_list_objects": 23, + "cable:list_objects_with_permission": 21, + "cablebundle:api_list_objects": 12, + "cablebundle:list_objects_with_permission": 17, "cabletermination:api_list_objects": 16, "consoleconnection:list_objects_with_permission": 29, - "consoleport:api_list_objects": 14, - "consoleport:list_objects_with_permission": 21, + "consoleport:api_list_objects": 13, + "consoleport:list_objects_with_permission": 18, "consoleporttemplate:api_list_objects": 11, - "consoleserverport:api_list_objects": 14, - "consoleserverport:list_objects_with_permission": 21, + "consoleserverport:api_list_objects": 13, + "consoleserverport:list_objects_with_permission": 18, "consoleserverporttemplate:api_list_objects": 11, - "device:api_list_objects": 20, - "device:list_objects_with_permission": 25, - "devicebay:api_list_objects": 14, - "devicebay:list_objects_with_permission": 21, + "device:api_list_objects": 19, + "device:list_objects_with_permission": 22, + "devicebay:api_list_objects": 13, + "devicebay:list_objects_with_permission": 18, "devicebaytemplate:api_list_objects": 11, - "devicerole:api_list_objects": 13, - "devicerole:list_objects_with_permission": 20, - "devicetype:api_list_objects": 14, - "devicetype:list_objects_with_permission": 21, - "frontport:api_list_objects": 15, - "frontport:list_objects_with_permission": 25, + "devicerole:api_list_objects": 12, + "devicerole:list_objects_with_permission": 17, + "devicetype:api_list_objects": 13, + "devicetype:list_objects_with_permission": 18, + "frontport:api_list_objects": 14, + "frontport:list_objects_with_permission": 22, "frontporttemplate:api_list_objects": 12, - "interface:api_list_objects": 23, - "interface:list_objects_with_permission": 21, + "interface:api_list_objects": 22, + "interface:list_objects_with_permission": 18, "interfaceconnection:list_objects_with_permission": 41, "interfacetemplate:api_list_objects": 11, - "inventoryitem:api_list_objects": 20, - "inventoryitem:list_objects_with_permission": 23, - "inventoryitemrole:api_list_objects": 13, - "inventoryitemrole:list_objects_with_permission": 20, + "inventoryitem:api_list_objects": 19, + "inventoryitem:list_objects_with_permission": 20, + "inventoryitemrole:api_list_objects": 12, + "inventoryitemrole:list_objects_with_permission": 17, "inventoryitemtemplate:api_list_objects": 13, - "location:api_list_objects": 15, - "location:list_objects_with_permission": 22, - "macaddress:api_list_objects": 17, - "macaddress:list_objects_with_permission": 24, - "manufacturer:api_list_objects": 13, - "manufacturer:list_objects_with_permission": 20, - "module:api_list_objects": 18, - "module:list_objects_with_permission": 24, - "modulebay:api_list_objects": 15, - "modulebay:list_objects_with_permission": 21, + "location:api_list_objects": 14, + "location:list_objects_with_permission": 19, + "macaddress:api_list_objects": 16, + "macaddress:list_objects_with_permission": 21, + "manufacturer:api_list_objects": 12, + "manufacturer:list_objects_with_permission": 17, + "module:api_list_objects": 17, + "module:list_objects_with_permission": 21, + "modulebay:api_list_objects": 14, + "modulebay:list_objects_with_permission": 18, "modulebaytemplate:api_list_objects": 11, - "moduletype:api_list_objects": 14, - "moduletype:list_objects_with_permission": 22, - "moduletypeprofile:api_list_objects": 13, - "moduletypeprofile:list_objects_with_permission": 20, - "platform:api_list_objects": 13, - "platform:list_objects_with_permission": 21, + "moduletype:api_list_objects": 13, + "moduletype:list_objects_with_permission": 19, + "moduletypeprofile:api_list_objects": 12, + "moduletypeprofile:list_objects_with_permission": 17, + "platform:api_list_objects": 12, + "platform:list_objects_with_permission": 18, "powerconnection:list_objects_with_permission": 29, - "powerfeed:api_list_objects": 15, - "powerfeed:list_objects_with_permission": 22, - "poweroutlet:api_list_objects": 14, - "poweroutlet:list_objects_with_permission": 22, + "powerfeed:api_list_objects": 14, + "powerfeed:list_objects_with_permission": 19, + "poweroutlet:api_list_objects": 13, + "poweroutlet:list_objects_with_permission": 19, "poweroutlettemplate:api_list_objects": 11, - "powerpanel:api_list_objects": 15, - "powerpanel:list_objects_with_permission": 22, - "powerport:api_list_objects": 14, - "powerport:list_objects_with_permission": 21, + "powerpanel:api_list_objects": 14, + "powerpanel:list_objects_with_permission": 19, + "powerport:api_list_objects": 13, + "powerport:list_objects_with_permission": 18, "powerporttemplate:api_list_objects": 11, - "rack:api_list_objects": 17, - "rack:list_objects_with_permission": 29, - "rackgroup:api_list_objects": 13, - "rackgroup:list_objects_with_permission": 20, - "rackreservation:api_list_objects": 15, - "rackreservation:list_objects_with_permission": 23, - "rackrole:api_list_objects": 13, - "rackrole:list_objects_with_permission": 20, - "racktype:api_list_objects": 14, - "racktype:list_objects_with_permission": 21, - "rearport:api_list_objects": 15, - "rearport:list_objects_with_permission": 22, + "rack:api_list_objects": 16, + "rack:list_objects_with_permission": 26, + "rackgroup:api_list_objects": 12, + "rackgroup:list_objects_with_permission": 17, + "rackreservation:api_list_objects": 14, + "rackreservation:list_objects_with_permission": 20, + "rackrole:api_list_objects": 12, + "rackrole:list_objects_with_permission": 17, + "racktype:api_list_objects": 13, + "racktype:list_objects_with_permission": 18, + "rearport:api_list_objects": 14, + "rearport:list_objects_with_permission": 19, "rearporttemplate:api_list_objects": 12, - "region:api_list_objects": 13, - "region:list_objects_with_permission": 20, - "site:api_list_objects": 17, - "site:list_objects_with_permission": 22, - "sitegroup:api_list_objects": 13, - "sitegroup:list_objects_with_permission": 20, - "virtualchassis:api_list_objects": 16, - "virtualchassis:list_objects_with_permission": 21, - "virtualdevicecontext:api_list_objects": 14, - "virtualdevicecontext:list_objects_with_permission": 20 + "region:api_list_objects": 12, + "region:list_objects_with_permission": 17, + "site:api_list_objects": 16, + "site:list_objects_with_permission": 19, + "sitegroup:api_list_objects": 12, + "sitegroup:list_objects_with_permission": 17, + "virtualchassis:api_list_objects": 15, + "virtualchassis:list_objects_with_permission": 18, + "virtualdevicecontext:api_list_objects": 13, + "virtualdevicecontext:list_objects_with_permission": 17 } diff --git a/netbox/extras/models/customfields.py b/netbox/extras/models/customfields.py index b954ccdd2..20fed052e 100644 --- a/netbox/extras/models/customfields.py +++ b/netbox/extras/models/customfields.py @@ -71,10 +71,12 @@ class CustomFieldManager(models.Manager.from_queryset(RestrictedQuerySet)): """ Return all CustomFields assigned to the given model. """ - # Check the request cache before hitting the database + # Check the request cache before hitting the database. Test the cached value against None + # rather than for truthiness: a model with no custom fields caches an empty QuerySet, which + # would otherwise be treated as a miss and re-queried on every call. cache = query_cache.get() if cache is not None: - if custom_fields := cache['custom_fields'].get(model._meta.model): + if (custom_fields := cache['custom_fields'].get(model._meta.model)) is not None: return custom_fields content_type = ObjectType.objects.get_for_model(model._meta.concrete_model) diff --git a/netbox/extras/tests/query_counts.json b/netbox/extras/tests/query_counts.json index 84a5223d2..a4cf448b9 100644 --- a/netbox/extras/tests/query_counts.json +++ b/netbox/extras/tests/query_counts.json @@ -4,7 +4,7 @@ "configcontext:api_list_objects": 22, "configcontext:list_objects_with_permission": 16, "configcontextprofile:api_list_objects": 12, - "configcontextprofile:list_objects_with_permission": 19, + "configcontextprofile:list_objects_with_permission": 16, "configtemplate:api_list_objects": 10, "configtemplate:list_objects_with_permission": 17, "customfield:api_list_objects": 10, @@ -13,14 +13,14 @@ "customfieldchoiceset:list_objects_with_permission": 16, "customlink:api_list_objects": 10, "customlink:list_objects_with_permission": 18, - "eventrule:api_list_objects": 16, - "eventrule:list_objects_with_permission": 23, + "eventrule:api_list_objects": 15, + "eventrule:list_objects_with_permission": 20, "exporttemplate:api_list_objects": 10, "exporttemplate:list_objects_with_permission": 19, "imageattachment:api_list_objects": 11, "imageattachment:list_objects_with_permission": 21, - "journalentry:api_list_objects": 16, - "journalentry:list_objects_with_permission": 24, + "journalentry:api_list_objects": 15, + "journalentry:list_objects_with_permission": 21, "notification:api_list_objects": 12, "notificationgroup:api_list_objects": 11, "notificationgroup:list_objects_with_permission": 18, @@ -32,6 +32,6 @@ "tag:api_list_objects": 10, "tag:list_objects_with_permission": 18, "taggeditem:api_list_objects": 12, - "webhook:api_list_objects": 13, - "webhook:list_objects_with_permission": 20 + "webhook:api_list_objects": 12, + "webhook:list_objects_with_permission": 17 } diff --git a/netbox/extras/tests/test_customfields.py b/netbox/extras/tests/test_customfields.py index 5e9948868..15063ef1d 100644 --- a/netbox/extras/tests/test_customfields.py +++ b/netbox/extras/tests/test_customfields.py @@ -1,5 +1,6 @@ import datetime import json +from collections import defaultdict from decimal import Decimal from unittest.mock import patch @@ -16,6 +17,7 @@ from extras.choices import * from extras.models import CustomField, CustomFieldChoiceSet from ipam.models import VLAN from netbox.choices import CSVDelimiterChoices, ImportFormatChoices +from netbox.context import query_cache from utilities.testing import APITestCase, TestCase from virtualization.models import VirtualMachine @@ -826,6 +828,22 @@ class CustomFieldManagerTestCase(TestCase): self.assertEqual(CustomField.objects.get_for_model(Site).count(), 1) self.assertEqual(CustomField.objects.get_for_model(VirtualMachine).count(), 0) + def test_get_for_model_caches_models_with_no_custom_fields(self): + """ + A model with no custom fields assigned must be served from the request cache like any other. + An empty QuerySet is falsy, so testing the cached value for truthiness would treat it as a + miss and re-query on every call. + """ + token = query_cache.set(defaultdict(dict)) + self.addCleanup(query_cache.reset, token) + + # Site has one custom field assigned, VirtualMachine none + for model in (Site, VirtualMachine): + # Prime the cache, iterating so that the QuerySet's own result cache is populated too + list(CustomField.objects.get_for_model(model)) + with self.assertNumQueries(0): + list(CustomField.objects.get_for_model(model)) + class CustomFieldAPITestCase(APITestCase): diff --git a/netbox/ipam/tests/query_counts.json b/netbox/ipam/tests/query_counts.json index f0863dc09..e89f72277 100644 --- a/netbox/ipam/tests/query_counts.json +++ b/netbox/ipam/tests/query_counts.json @@ -1,37 +1,37 @@ { - "aggregate:api_list_objects": 14, - "aggregate:list_objects_with_permission": 24, - "asn:api_list_objects": 18, - "asn:list_objects_with_permission": 31, - "asnrange:api_list_objects": 15, - "asnrange:list_objects_with_permission": 22, - "fhrpgroup:api_list_objects": 14, - "fhrpgroup:list_objects_with_permission": 21, + "aggregate:api_list_objects": 13, + "aggregate:list_objects_with_permission": 21, + "asn:api_list_objects": 17, + "asn:list_objects_with_permission": 28, + "asnrange:api_list_objects": 14, + "asnrange:list_objects_with_permission": 19, + "fhrpgroup:api_list_objects": 13, + "fhrpgroup:list_objects_with_permission": 18, "fhrpgroupassignment:api_list_objects": 18, - "ipaddress:api_list_objects": 14, - "ipaddress:list_objects_with_permission": 21, - "iprange:api_list_objects": 13, - "iprange:list_objects_with_permission": 20, - "prefix:api_list_objects": 13, - "prefix:list_objects_with_permission": 29, - "rir:api_list_objects": 13, - "rir:list_objects_with_permission": 20, - "role:api_list_objects": 13, - "role:list_objects_with_permission": 20, - "routetarget:api_list_objects": 13, - "routetarget:list_objects_with_permission": 21, - "service:api_list_objects": 16, - "service:list_objects_with_permission": 21, - "servicetemplate:api_list_objects": 13, - "servicetemplate:list_objects_with_permission": 20, - "vlan:api_list_objects": 15, - "vlan:list_objects_with_permission": 24, - "vlangroup:api_list_objects": 13, - "vlangroup:list_objects_with_permission": 25, + "ipaddress:api_list_objects": 13, + "ipaddress:list_objects_with_permission": 18, + "iprange:api_list_objects": 12, + "iprange:list_objects_with_permission": 17, + "prefix:api_list_objects": 12, + "prefix:list_objects_with_permission": 26, + "rir:api_list_objects": 12, + "rir:list_objects_with_permission": 17, + "role:api_list_objects": 12, + "role:list_objects_with_permission": 17, + "routetarget:api_list_objects": 12, + "routetarget:list_objects_with_permission": 18, + "service:api_list_objects": 15, + "service:list_objects_with_permission": 18, + "servicetemplate:api_list_objects": 12, + "servicetemplate:list_objects_with_permission": 17, + "vlan:api_list_objects": 14, + "vlan:list_objects_with_permission": 21, + "vlangroup:api_list_objects": 12, + "vlangroup:list_objects_with_permission": 22, "vlantranslationpolicy:api_list_objects": 12, - "vlantranslationpolicy:list_objects_with_permission": 20, + "vlantranslationpolicy:list_objects_with_permission": 17, "vlantranslationrule:api_list_objects": 12, - "vlantranslationrule:list_objects_with_permission": 21, - "vrf:api_list_objects": 15, - "vrf:list_objects_with_permission": 20 + "vlantranslationrule:list_objects_with_permission": 18, + "vrf:api_list_objects": 14, + "vrf:list_objects_with_permission": 17 } diff --git a/netbox/tenancy/tests/query_counts.json b/netbox/tenancy/tests/query_counts.json index 0beb74b26..7a7401ccf 100644 --- a/netbox/tenancy/tests/query_counts.json +++ b/netbox/tenancy/tests/query_counts.json @@ -1,14 +1,14 @@ { - "contact:api_list_objects": 14, - "contact:list_objects_with_permission": 21, - "contactassignment:api_list_objects": 17, - "contactassignment:list_objects_with_permission": 25, - "contactgroup:api_list_objects": 14, - "contactgroup:list_objects_with_permission": 20, - "contactrole:api_list_objects": 13, - "contactrole:list_objects_with_permission": 20, - "tenant:api_list_objects": 14, - "tenant:list_objects_with_permission": 21, - "tenantgroup:api_list_objects": 14, - "tenantgroup:list_objects_with_permission": 20 + "contact:api_list_objects": 13, + "contact:list_objects_with_permission": 18, + "contactassignment:api_list_objects": 16, + "contactassignment:list_objects_with_permission": 22, + "contactgroup:api_list_objects": 13, + "contactgroup:list_objects_with_permission": 17, + "contactrole:api_list_objects": 12, + "contactrole:list_objects_with_permission": 17, + "tenant:api_list_objects": 13, + "tenant:list_objects_with_permission": 18, + "tenantgroup:api_list_objects": 13, + "tenantgroup:list_objects_with_permission": 17 } diff --git a/netbox/users/tests/query_counts.json b/netbox/users/tests/query_counts.json index 697e0c65c..cf625fca0 100644 --- a/netbox/users/tests/query_counts.json +++ b/netbox/users/tests/query_counts.json @@ -1,14 +1,14 @@ { "group:api_list_objects": 10, - "group:list_objects_with_permission": 17, + "group:list_objects_with_permission": 16, "objectpermission:api_list_objects": 14, - "objectpermission:list_objects_with_permission": 18, + "objectpermission:list_objects_with_permission": 17, "owner:api_list_objects": 11, - "owner:list_objects_with_permission": 19, + "owner:list_objects_with_permission": 18, "ownergroup:api_list_objects": 9, - "ownergroup:list_objects_with_permission": 17, + "ownergroup:list_objects_with_permission": 16, "token:api_list_objects": 10, "token:list_objects_with_permission": 17, "user:api_list_objects": 12, - "user:list_objects_with_permission": 17 + "user:list_objects_with_permission": 16 } diff --git a/netbox/virtualization/tests/query_counts.json b/netbox/virtualization/tests/query_counts.json index 3c65f818d..fb1afa140 100644 --- a/netbox/virtualization/tests/query_counts.json +++ b/netbox/virtualization/tests/query_counts.json @@ -1,16 +1,16 @@ { - "cluster:api_list_objects": 16, - "cluster:list_objects_with_permission": 22, - "clustergroup:api_list_objects": 13, - "clustergroup:list_objects_with_permission": 20, - "clustertype:api_list_objects": 13, - "clustertype:list_objects_with_permission": 20, - "virtualdisk:api_list_objects": 14, - "virtualdisk:list_objects_with_permission": 21, - "virtualmachine:api_list_objects": 18, - "virtualmachine:list_objects_with_permission": 24, - "virtualmachinetype:api_list_objects": 14, - "virtualmachinetype:list_objects_with_permission": 21, - "vminterface:api_list_objects": 19, - "vminterface:list_objects_with_permission": 21 + "cluster:api_list_objects": 15, + "cluster:list_objects_with_permission": 19, + "clustergroup:api_list_objects": 12, + "clustergroup:list_objects_with_permission": 17, + "clustertype:api_list_objects": 12, + "clustertype:list_objects_with_permission": 17, + "virtualdisk:api_list_objects": 13, + "virtualdisk:list_objects_with_permission": 18, + "virtualmachine:api_list_objects": 17, + "virtualmachine:list_objects_with_permission": 21, + "virtualmachinetype:api_list_objects": 13, + "virtualmachinetype:list_objects_with_permission": 18, + "vminterface:api_list_objects": 18, + "vminterface:list_objects_with_permission": 18 } diff --git a/netbox/vpn/tests/query_counts.json b/netbox/vpn/tests/query_counts.json index 7c5b85216..ece0201f5 100644 --- a/netbox/vpn/tests/query_counts.json +++ b/netbox/vpn/tests/query_counts.json @@ -1,22 +1,22 @@ { - "ikepolicy:api_list_objects": 14, - "ikepolicy:list_objects_with_permission": 21, - "ikeproposal:api_list_objects": 13, - "ikeproposal:list_objects_with_permission": 20, - "ipsecpolicy:api_list_objects": 14, - "ipsecpolicy:list_objects_with_permission": 21, - "ipsecprofile:api_list_objects": 15, - "ipsecprofile:list_objects_with_permission": 22, - "ipsecproposal:api_list_objects": 13, - "ipsecproposal:list_objects_with_permission": 20, - "l2vpn:api_list_objects": 15, - "l2vpn:list_objects_with_permission": 20, - "l2vpntermination:api_list_objects": 16, - "l2vpntermination:list_objects_with_permission": 25, - "tunnel:api_list_objects": 14, - "tunnel:list_objects_with_permission": 21, - "tunnelgroup:api_list_objects": 13, - "tunnelgroup:list_objects_with_permission": 20, - "tunneltermination:api_list_objects": 18, - "tunneltermination:list_objects_with_permission": 28 + "ikepolicy:api_list_objects": 13, + "ikepolicy:list_objects_with_permission": 18, + "ikeproposal:api_list_objects": 12, + "ikeproposal:list_objects_with_permission": 17, + "ipsecpolicy:api_list_objects": 13, + "ipsecpolicy:list_objects_with_permission": 18, + "ipsecprofile:api_list_objects": 14, + "ipsecprofile:list_objects_with_permission": 19, + "ipsecproposal:api_list_objects": 12, + "ipsecproposal:list_objects_with_permission": 17, + "l2vpn:api_list_objects": 14, + "l2vpn:list_objects_with_permission": 17, + "l2vpntermination:api_list_objects": 15, + "l2vpntermination:list_objects_with_permission": 22, + "tunnel:api_list_objects": 13, + "tunnel:list_objects_with_permission": 18, + "tunnelgroup:api_list_objects": 12, + "tunnelgroup:list_objects_with_permission": 17, + "tunneltermination:api_list_objects": 17, + "tunneltermination:list_objects_with_permission": 25 } diff --git a/netbox/wireless/tests/query_counts.json b/netbox/wireless/tests/query_counts.json index af3619eee..3fd4845b2 100644 --- a/netbox/wireless/tests/query_counts.json +++ b/netbox/wireless/tests/query_counts.json @@ -1,8 +1,8 @@ { - "wirelesslan:api_list_objects": 13, - "wirelesslan:list_objects_with_permission": 21, - "wirelesslangroup:api_list_objects": 13, - "wirelesslangroup:list_objects_with_permission": 21, - "wirelesslink:api_list_objects": 18, - "wirelesslink:list_objects_with_permission": 24 + "wirelesslan:api_list_objects": 12, + "wirelesslan:list_objects_with_permission": 18, + "wirelesslangroup:api_list_objects": 12, + "wirelesslangroup:list_objects_with_permission": 18, + "wirelesslink:api_list_objects": 17, + "wirelesslink:list_objects_with_permission": 21 } From 80231a97060b447854e963fe476780b5e7fe7e9d Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 6 Aug 2026 15:56:22 -0400 Subject: [PATCH 27/35] Closes #22835: Improve performance when provisioning new custom fields (#22866) --- docs/customization/custom-fields.md | 9 + netbox/extras/filters.py | 98 ++++ netbox/extras/graphql/mixins.py | 13 +- netbox/extras/models/customfields.py | 46 +- netbox/extras/signals.py | 36 +- netbox/extras/tests/test_customfields.py | 540 +++++++++++++++++++++-- netbox/extras/tests/test_signals.py | 4 +- netbox/netbox/tables/columns.py | 39 +- netbox/netbox/tables/tables.py | 63 +++ netbox/netbox/tests/test_graphql.py | 25 ++ 10 files changed, 805 insertions(+), 68 deletions(-) diff --git a/docs/customization/custom-fields.md b/docs/customization/custom-fields.md index eae35f3d0..2255fe3ea 100644 --- a/docs/customization/custom-fields.md +++ b/docs/customization/custom-fields.md @@ -30,6 +30,15 @@ Marking a field as required will force the user to provide a value for the field A custom field must be assigned to one or more object types, or models, in NetBox. Once created, custom fields will automatically appear as part of these models in the web UI and REST API. Note that not all models support custom fields. +!!! info "This behavior changed in NetBox v4.6.8." + To improve performance when creating custom fields, empty field values are no longer pre-provisioned. + +Unless the field has been assigned a default value, creating a custom field does not write a value to the objects which already exist. An object which has never been assigned a value simply stores nothing for the field, and reports the field as having no value in the web UI, REST API, GraphQL API, and exports, exactly as if it stored an explicit null. + +This matters only if you query the underlying `custom_field_data` JSON directly, for example in a custom script. The field's key is absent from an object's data until a value is assigned to it, so read it with `obj.cf['field_name']` or `obj.custom_field_data.get('field_name')` rather than by direct subscript. + +Assigning a default value, by contrast, does write that value to every existing object at the time the field is created, so that objects can be filtered by it immediately. On a model with a very large number of objects, this can take some time. Note that a default added to a field which already exists is _not_ backfilled: objects with no value continue to report none until they are next saved. + ### Filtering The filter logic controls how values are matched when filtering objects by the custom field. Loose filtering (the default) matches on a partial value, whereas exact matching requires a complete match of the given string to a field's value. For example, exact filtering with the string "red" will only match the exact value "red", whereas loose filtering will match on the values "red", "red-orange", or "bored". Setting the filter logic to "disabled" disables filtering by the field entirely. diff --git a/netbox/extras/filters.py b/netbox/extras/filters.py index d05800c22..2080c8819 100644 --- a/netbox/extras/filters.py +++ b/netbox/extras/filters.py @@ -1,13 +1,111 @@ +from functools import cache + import django_filters +from django.db.models import Q from .models import Tag __all__ = ( + 'MissingKeyAwareFilterMixin', 'TagFilter', 'TagIDFilter', + 'missing_key_aware_filter_factory', ) +class MissingKeyAwareFilterMixin: + """ + Treat a JSON key which is absent as equivalent to one holding a null value: an object storing + no value for a custom field must filter identically however that absence is represented. + + Custom field data materializes a key only once a value is assigned to it (see + CustomField.populate_initial_data()), so an object predating a field carries no key for it at + all, whereas one whose value has been cleared holds a JSON null. Postgres treats the two + differently, in two places: + + * Django compiles `exclude(custom_field_data__foo='x')` to a bare `NOT (data -> 'foo' = 'x')`. + A row which does not carry the key yields SQL NULL there, so the negation evaluates to NULL + and the row is discarded. A row holding a JSON null fares no better under any of the text + lookups (icontains, istartswith, etc.), which compare `data ->> 'foo'` and so are NULL for a + JSON null as well. + * The null sentinel (`?cf_foo=null`; see FILTERS_NULL_CHOICE_VALUE) asks for the objects holding + no value. MultipleChoiceFilter.filter() translates it to None and hands it to + get_filter_predicate(), which builds a lookup matching a JSON null only -- silently omitting + every object which predates the field. + + Both directions are handled: the sentinel is mapped onto "holds no value" rather than onto a + predicate of its own, and a negation is built explicitly so that valueless rows are admitted. + + Two constraints on where this may be mixed in, both satisfied by every filter class + CustomField.to_filter() can select: + + * filter() is reimplemented rather than delegated to, so any custom filter() on the base class + is bypassed. Do not mix this into a class which overrides filter() (e.g. + MultiValueMACAddressFilter, MultiValueContentTypeFilter). + missing_key_aware_filter_factory() rejects such classes. + * `conjoined` is not honored: multiple values are always OR'ed. Passing it raises TypeError. + """ + def __init__(self, *args, **kwargs): + if kwargs.get('conjoined'): + raise TypeError( + f"{type(self).__name__} does not support conjoined filtering: multiple values are " + f"always OR'ed." + ) + super().__init__(*args, **kwargs) + + def filter(self, qs, value): + if not value: + return super().filter(qs, value) + + # `__isnull` matches only a missing key and `=None` only a JSON null, so together + # they select exactly the objects holding no value. Both are null-safe, which is what makes + # them usable inside the negation below. + unset = Q(**{f'{self.field_name}__isnull': True}) | Q(**{self.field_name: None}) + + values = set(value) + match_unset = self.null_value in values + values.discard(self.null_value) + + q = Q() + for v in values: + q |= Q(**self.get_filter_predicate(v)) + if match_unset: + q |= unset + + if self.exclude: + # Negate explicitly rather than deferring to exclude(), whose bare NOT discards the + # rows carrying no key. Those rows are admitted, unless holding no value is itself one + # of the things being excluded. + q = ~q if match_unset else ~q | unset + + qs = qs.filter(q) + + return qs.distinct() if self.distinct else qs + + +@cache +def missing_key_aware_filter_factory(filter_class): + """ + Return a subclass of the given filter class which treats an absent JSON key as equivalent to a + null one. Results are cached so that each filter class yields a single stable subclass. + + The class must inherit MultipleChoiceFilter.filter() unmodified: the mixin reimplements it, so a + filter() of its own (and with it any custom predicate or short-circuit) would be silently + bypassed, yielding a wrong result set rather than an error. + """ + if filter_class.filter is not django_filters.MultipleChoiceFilter.filter: + raise TypeError( + f"{filter_class.__name__} cannot be made missing-key aware: it defines its own " + f"filter(), which MissingKeyAwareFilterMixin would bypass." + ) + + return type( + f'MissingKeyAware{filter_class.__name__}', + (MissingKeyAwareFilterMixin, filter_class), + {} + ) + + class TagFilter(django_filters.ModelMultipleChoiceFilter): """ Match on one or more assigned tags. If multiple tags are specified (e.g. ?tag=foo&tag=bar), the queryset is filtered diff --git a/netbox/extras/graphql/mixins.py b/netbox/extras/graphql/mixins.py index 7a9f81ff9..133452e4a 100644 --- a/netbox/extras/graphql/mixins.py +++ b/netbox/extras/graphql/mixins.py @@ -4,7 +4,7 @@ import strawberry import strawberry_django from strawberry.types import Info -from extras.models import ImageAttachment, JournalEntry +from extras.models import CustomField, ImageAttachment, JournalEntry from utilities.querysets import RestrictedPrefetch __all__ = ( @@ -47,7 +47,16 @@ class CustomFieldsMixin: @strawberry_django.field(only=['custom_field_data']) def custom_fields(self) -> strawberry.scalars.JSON: - return self.custom_field_data + # Emit a key for every custom field assigned to the model, as the REST API does, rather than + # returning the stored data verbatim. A key is materialized only once a value is assigned + # (see CustomField.populate_initial_data()), so an object which predates a field carries no + # key for it; without this, such a field would be absent from the response instead of null. + # CustomFieldManager.get_for_model() is served from the per-request cache, so this costs one + # query per model rather than one per object. + return { + cf.name: self.custom_field_data.get(cf.name) + for cf in CustomField.objects.get_for_model(self) + } @strawberry.type diff --git a/netbox/extras/models/customfields.py b/netbox/extras/models/customfields.py index 20fed052e..710ce57d7 100644 --- a/netbox/extras/models/customfields.py +++ b/netbox/extras/models/customfields.py @@ -10,7 +10,6 @@ from django.conf import settings from django.core.validators import RegexValidator, ValidationError from django.db import models, transaction from django.db.models import F, Func, Value -from django.db.models.expressions import RawSQL from django.urls import reverse from django.utils.html import escape from django.utils.safestring import mark_safe @@ -326,7 +325,7 @@ class CustomField(CloningMixin, ExportTemplatesMixin, OwnerMixin, ChangeLoggedMo return None @staticmethod - def _update_object_data(model, **update_kwargs): + def _update_object_data(model, filters=None, **update_kwargs): """ Apply an UPDATE to the custom_field_data of every instance of the given model in batches, bounding the number of rows touched by each statement. A single unbounded UPDATE across @@ -338,29 +337,41 @@ class CustomField(CloningMixin, ExportTemplatesMixin, OwnerMixin, ChangeLoggedMo a renamed field landing on only some objects) should the loop be interrupted when not already running inside a request's transaction. Batching avoids the statement timeout regardless, as that limit applies per statement rather than per transaction. + + :param filters: Optional dict of ORM filters restricting which rows are updated. Callers + which need only to touch rows already holding a given key should pass + `{'custom_field_data__has_key': ...}`; because keys are materialized only when a value + is actually set (see populate_initial_data()), this typically excludes the bulk of the + table. """ + filters = filters or {} + queryset = model.objects.filter(**filters) with transaction.atomic(): last_pk = 0 while True: pks = list( - model.objects.filter(pk__gt=last_pk).order_by('pk') + queryset.filter(pk__gt=last_pk).order_by('pk') .values_list('pk', flat=True)[:CUSTOMFIELD_DATA_BATCH_SIZE] ) if not pks: break - model.objects.filter(pk__in=pks).update(**update_kwargs) + queryset.filter(pk__in=pks).update(**update_kwargs) last_pk = pks[-1] def populate_initial_data(self, content_types): """ Populate initial custom field data upon either a) the creation of a new CustomField, or b) the assignment of an existing CustomField to new object types. + + Only a non-null default is written. A field with no default has no value to record, and an + absent key is equivalent to a null one everywhere the data is read (see CustomFieldsMixin), + so materializing a JSON null on every object would be a very expensive no-op: on a large + table it can outlast the request. Objects without the key simply report no value until one + is assigned. """ if self.default is None: - # We have to convert None to a JSON null for jsonb_set() - value = RawSQL("'null'::jsonb", []) - else: - value = Value(self.default, models.JSONField()) + return + value = Value(self.default, models.JSONField()) for ct in content_types: if model := ct.model_class(): self._update_object_data( @@ -377,11 +388,16 @@ class CustomField(CloningMixin, ExportTemplatesMixin, OwnerMixin, ChangeLoggedMo """ Delete custom field data which is no longer relevant (either because the CustomField is no longer assigned to a model, or because it has been deleted). + + Only objects which actually hold a value for the field are rewritten. Because keys are + materialized only when a value is set (see populate_initial_data()), this typically + excludes the bulk of the table. """ for ct in content_types: if model := ct.model_class(): self._update_object_data( model, + filters={'custom_field_data__has_key': self.name}, custom_field_data=F('custom_field_data') - self.name ) @@ -394,13 +410,15 @@ class CustomField(CloningMixin, ExportTemplatesMixin, OwnerMixin, ChangeLoggedMo if model := ct.model_class(): self._update_object_data( model, + filters={'custom_field_data__has_key': old_name}, custom_field_data=Func( F('custom_field_data') - old_name, Value([new_name]), Func( F('custom_field_data'), - function='jsonb_extract_path_text', - template=f"to_jsonb(%(expressions)s -> '{old_name}')" + Value(old_name), + function='jsonb_extract_path', + output_field=models.JSONField() ), function='jsonb_set') ) @@ -705,6 +723,9 @@ class CustomField(CloningMixin, ExportTemplatesMixin, OwnerMixin, ChangeLoggedMo :param lookup_expr: Custom lookup expression (optional) """ + # Imported locally as extras.filters imports extras.models + from extras.filters import missing_key_aware_filter_factory + kwargs = { 'field_name': f'custom_field_data__{self.name}' } @@ -770,6 +791,11 @@ class CustomField(CloningMixin, ExportTemplatesMixin, OwnerMixin, ChangeLoggedMo else: return None + # A negated lookup must match objects which carry no key for this field at all; see + # MissingKeyAwareFilterMixin. BooleanFilter is never negated, so it is left alone. + if not issubclass(filter_class, django_filters.BooleanFilter): + filter_class = missing_key_aware_filter_factory(filter_class) + filter_instance = filter_class(**kwargs) filter_instance.custom_field = self diff --git a/netbox/extras/signals.py b/netbox/extras/signals.py index e59096cfa..417192dc3 100644 --- a/netbox/extras/signals.py +++ b/netbox/extras/signals.py @@ -20,20 +20,33 @@ from .utils import run_validators # -def handle_cf_added_obj_types(instance, action, pk_set, **kwargs): +def handle_cf_object_types_changed(instance, action, pk_set, reverse, **kwargs): """ - Handle the population of default/null values when a CustomField is added to one or more ContentTypes. + Handle the stored data of a CustomField as it is assigned to or unassigned from object types. + + Only the forward direction is handled: every action below operates on the CustomField, whereas + the reverse of this relation (ContentType.custom_fields) reports the ContentType as the sender's + instance. Nothing in NetBox assigns object types that way. """ + if reverse or action not in ('pre_clear', 'post_add', 'post_remove'): + return + + if action == 'pre_clear': + # clear() unassigns every object type at once. It must be handled before the fact: no + # pk_set is reported for a clear, so the assignments have to be read while they still + # exist. (Note that set() diffs via remove()/add() by default, so it does not land here.) + instance.remove_stale_data(instance.object_types.all()) + return + + object_types = ContentType.objects.filter(pk__in=pk_set) + if action == 'post_add': - instance.populate_initial_data(ContentType.objects.filter(pk__in=pk_set)) + # Populate the field's default value (if any) on all existing objects + instance.populate_initial_data(object_types) - -def handle_cf_removed_obj_types(instance, action, pk_set, **kwargs): - """ - Handle the cleanup of old custom field data when a CustomField is removed from one or more ContentTypes. - """ - if action == 'post_remove': - instance.remove_stale_data(ContentType.objects.filter(pk__in=pk_set)) + else: + # Remove the field's stored data from objects to which it no longer applies + instance.remove_stale_data(object_types) def handle_cf_renamed(instance, created, **kwargs): @@ -53,8 +66,7 @@ def handle_cf_deleted(instance, **kwargs): post_save.connect(handle_cf_renamed, sender=CustomField) pre_delete.connect(handle_cf_deleted, sender=CustomField) -m2m_changed.connect(handle_cf_added_obj_types, sender=CustomField.object_types.through) -m2m_changed.connect(handle_cf_removed_obj_types, sender=CustomField.object_types.through) +m2m_changed.connect(handle_cf_object_types_changed, sender=CustomField.object_types.through) # diff --git a/netbox/extras/tests/test_customfields.py b/netbox/extras/tests/test_customfields.py index 15063ef1d..3a452edce 100644 --- a/netbox/extras/tests/test_customfields.py +++ b/netbox/extras/tests/test_customfields.py @@ -4,8 +4,12 @@ from collections import defaultdict from decimal import Decimal from unittest.mock import patch +import django_filters from django.core.exceptions import ValidationError +from django.db import connection +from django.db.models import QuerySet from django.test import tag +from django.test.utils import CaptureQueriesContext from django.urls import reverse from rest_framework import status @@ -13,11 +17,14 @@ from core.models import ObjectChange, ObjectType from dcim.filtersets import SiteFilterSet from dcim.forms import SiteImportForm from dcim.models import Manufacturer, Rack, Site +from dcim.tables import SiteTable from extras.choices import * +from extras.filters import MissingKeyAwareFilterMixin, missing_key_aware_filter_factory from extras.models import CustomField, CustomFieldChoiceSet from ipam.models import VLAN from netbox.choices import CSVDelimiterChoices, ImportFormatChoices from netbox.context import query_cache +from utilities.filters import MultiValueCharFilter, MultiValueMACAddressFilter from utilities.testing import APITestCase, TestCase from virtualization.models import VirtualMachine @@ -49,7 +56,7 @@ class CustomFieldTestCase(TestCase): def test_text_field(self): value = 'Foobar!' - # Create a custom field & check that initial value is null + # Create a custom field & check that no initial data is written cf = CustomField.objects.create( name='text_field', type=CustomFieldTypeChoices.TYPE_TEXT, @@ -57,7 +64,7 @@ class CustomFieldTestCase(TestCase): ) cf.object_types.set([self.object_type]) instance = Site.objects.first() - self.assertIsNone(instance.custom_field_data[cf.name]) + self.assertNotIn(cf.name, instance.custom_field_data) # Assign a value and check that it is saved instance.custom_field_data[cf.name] = value @@ -74,7 +81,7 @@ class CustomFieldTestCase(TestCase): def test_longtext_field(self): value = 'A' * 256 - # Create a custom field & check that initial value is null + # Create a custom field & check that no initial data is written cf = CustomField.objects.create( name='longtext_field', type=CustomFieldTypeChoices.TYPE_LONGTEXT, @@ -82,7 +89,7 @@ class CustomFieldTestCase(TestCase): ) cf.object_types.set([self.object_type]) instance = Site.objects.first() - self.assertIsNone(instance.custom_field_data[cf.name]) + self.assertNotIn(cf.name, instance.custom_field_data) # Assign a value and check that it is saved instance.custom_field_data[cf.name] = value @@ -98,7 +105,7 @@ class CustomFieldTestCase(TestCase): def test_integer_field(self): - # Create a custom field & check that initial value is null + # Create a custom field & check that no initial data is written cf = CustomField.objects.create( name='integer_field', type=CustomFieldTypeChoices.TYPE_INTEGER, @@ -106,7 +113,7 @@ class CustomFieldTestCase(TestCase): ) cf.object_types.set([self.object_type]) instance = Site.objects.first() - self.assertIsNone(instance.custom_field_data[cf.name]) + self.assertNotIn(cf.name, instance.custom_field_data) for value in (123456, 0, -123456): @@ -124,7 +131,7 @@ class CustomFieldTestCase(TestCase): def test_decimal_field(self): - # Create a custom field & check that initial value is null + # Create a custom field & check that no initial data is written cf = CustomField.objects.create( name='decimal_field', type=CustomFieldTypeChoices.TYPE_DECIMAL, @@ -132,7 +139,7 @@ class CustomFieldTestCase(TestCase): ) cf.object_types.set([self.object_type]) instance = Site.objects.first() - self.assertIsNone(instance.custom_field_data[cf.name]) + self.assertNotIn(cf.name, instance.custom_field_data) for value in (123456.54, 0, -123456.78): @@ -150,7 +157,7 @@ class CustomFieldTestCase(TestCase): def test_boolean_field(self): - # Create a custom field & check that initial value is null + # Create a custom field & check that no initial data is written cf = CustomField.objects.create( name='boolean_field', type=CustomFieldTypeChoices.TYPE_INTEGER, @@ -158,7 +165,7 @@ class CustomFieldTestCase(TestCase): ) cf.object_types.set([self.object_type]) instance = Site.objects.first() - self.assertIsNone(instance.custom_field_data[cf.name]) + self.assertNotIn(cf.name, instance.custom_field_data) for value in (True, False): @@ -177,7 +184,7 @@ class CustomFieldTestCase(TestCase): def test_date_field(self): value = datetime.date(2016, 6, 23) - # Create a custom field & check that initial value is null + # Create a custom field & check that no initial data is written cf = CustomField.objects.create( name='date_field', type=CustomFieldTypeChoices.TYPE_DATE, @@ -185,7 +192,7 @@ class CustomFieldTestCase(TestCase): ) cf.object_types.set([self.object_type]) instance = Site.objects.first() - self.assertIsNone(instance.custom_field_data[cf.name]) + self.assertNotIn(cf.name, instance.custom_field_data) # Assign a value and check that it is saved instance.custom_field_data[cf.name] = cf.serialize(value) @@ -202,7 +209,7 @@ class CustomFieldTestCase(TestCase): def test_datetime_field(self): value = datetime.datetime(2016, 6, 23, 9, 45, 0) - # Create a custom field & check that initial value is null + # Create a custom field & check that no initial data is written cf = CustomField.objects.create( name='date_field', type=CustomFieldTypeChoices.TYPE_DATETIME, @@ -210,7 +217,7 @@ class CustomFieldTestCase(TestCase): ) cf.object_types.set([self.object_type]) instance = Site.objects.first() - self.assertIsNone(instance.custom_field_data[cf.name]) + self.assertNotIn(cf.name, instance.custom_field_data) # Assign a value and check that it is saved instance.custom_field_data[cf.name] = cf.serialize(value) @@ -227,7 +234,7 @@ class CustomFieldTestCase(TestCase): def test_url_field(self): value = 'http://example.com/' - # Create a custom field & check that initial value is null + # Create a custom field & check that no initial data is written cf = CustomField.objects.create( name='url_field', type=CustomFieldTypeChoices.TYPE_URL, @@ -235,7 +242,7 @@ class CustomFieldTestCase(TestCase): ) cf.object_types.set([self.object_type]) instance = Site.objects.first() - self.assertIsNone(instance.custom_field_data[cf.name]) + self.assertNotIn(cf.name, instance.custom_field_data) # Assign a value and check that it is saved instance.custom_field_data[cf.name] = value @@ -252,7 +259,7 @@ class CustomFieldTestCase(TestCase): def test_json_field(self): value = '{"foo": 1, "bar": 2}' - # Create a custom field & check that initial value is null + # Create a custom field & check that no initial data is written cf = CustomField.objects.create( name='json_field', type=CustomFieldTypeChoices.TYPE_JSON, @@ -260,7 +267,7 @@ class CustomFieldTestCase(TestCase): ) cf.object_types.set([self.object_type]) instance = Site.objects.first() - self.assertIsNone(instance.custom_field_data[cf.name]) + self.assertNotIn(cf.name, instance.custom_field_data) # Assign a value and check that it is saved instance.custom_field_data[cf.name] = value @@ -342,7 +349,7 @@ class CustomFieldTestCase(TestCase): extra_choices=CHOICES ) - # Create a custom field & check that initial value is null + # Create a custom field & check that no initial data is written cf = CustomField.objects.create( name='select_field', type=CustomFieldTypeChoices.TYPE_SELECT, @@ -351,7 +358,7 @@ class CustomFieldTestCase(TestCase): ) cf.object_types.set([self.object_type]) instance = Site.objects.first() - self.assertIsNone(instance.custom_field_data[cf.name]) + self.assertNotIn(cf.name, instance.custom_field_data) # Assign a value and check that it is saved instance.custom_field_data[cf.name] = value @@ -379,7 +386,7 @@ class CustomFieldTestCase(TestCase): extra_choices=CHOICES ) - # Create a custom field & check that initial value is null + # Create a custom field & check that no initial data is written cf = CustomField.objects.create( name='multiselect_field', type=CustomFieldTypeChoices.TYPE_MULTISELECT, @@ -388,7 +395,7 @@ class CustomFieldTestCase(TestCase): ) cf.object_types.set([self.object_type]) instance = Site.objects.first() - self.assertIsNone(instance.custom_field_data[cf.name]) + self.assertNotIn(cf.name, instance.custom_field_data) # Assign a value and check that it is saved instance.custom_field_data[cf.name] = value @@ -549,7 +556,7 @@ class CustomFieldTestCase(TestCase): def test_object_field(self): value = VLAN.objects.create(name='VLAN 1', vid=1).pk - # Create a custom field & check that initial value is null + # Create a custom field & check that no initial data is written cf = CustomField.objects.create( name='object_field', type=CustomFieldTypeChoices.TYPE_OBJECT, @@ -558,7 +565,7 @@ class CustomFieldTestCase(TestCase): ) cf.object_types.set([self.object_type]) instance = Site.objects.first() - self.assertIsNone(instance.custom_field_data[cf.name]) + self.assertNotIn(cf.name, instance.custom_field_data) # Assign a value and check that it is saved instance.custom_field_data[cf.name] = value @@ -581,7 +588,7 @@ class CustomFieldTestCase(TestCase): VLAN.objects.bulk_create(vlans) value = [vlan.pk for vlan in vlans] - # Create a custom field & check that initial value is null + # Create a custom field & check that no initial data is written cf = CustomField.objects.create( name='object_field', type=CustomFieldTypeChoices.TYPE_MULTIOBJECT, @@ -590,7 +597,7 @@ class CustomFieldTestCase(TestCase): ) cf.object_types.set([self.object_type]) instance = Site.objects.first() - self.assertIsNone(instance.custom_field_data[cf.name]) + self.assertNotIn(cf.name, instance.custom_field_data) # Assign a value and check that it is saved instance.custom_field_data[cf.name] = value @@ -665,13 +672,302 @@ class CustomFieldTestCase(TestCase): 0 ) - # Removal: the key is stripped from every existing object when the field is deleted + # Removal: deleting the field strips the key from every existing object cf.delete() self.assertEqual( Site.objects.filter(custom_field_data__has_key='renamed_field').count(), 0 ) + def test_provisioning_writes_nothing_without_a_default(self): + """ + A field with no default has no value to record, so creating one must not touch any object. + """ + cf = CustomField.objects.create( + name='unset_field', + type=CustomFieldTypeChoices.TYPE_TEXT + ) + + with CaptureQueriesContext(connection) as queries: + cf.object_types.set([self.object_type]) + + # No object data is written at all -- the cost of adding a field no longer scales with the + # number of objects it applies to + self.assertFalse([ + q['sql'] for q in queries.captured_queries + if q['sql'].lstrip().upper().startswith('UPDATE "DCIM_SITE"'.upper()) + ]) + + self.assertEqual(Site.objects.filter(custom_field_data__has_key='unset_field').count(), 0) + for site in Site.objects.all(): + self.assertEqual(site.custom_field_data, {}) + self.assertIsNone(site.cf['unset_field']) + + def test_provisioning_applies_a_default_immediately(self): + """ + A default value, by contrast, must be recorded on every existing object as soon as the + field is created -- it has to be filterable straight away, so it cannot be deferred. + """ + cf = CustomField.objects.create( + name='defaulted_field', + type=CustomFieldTypeChoices.TYPE_TEXT, + default='bar' + ) + cf.object_types.set([self.object_type]) + + self.assertEqual( + Site.objects.filter(custom_field_data__defaulted_field='bar').count(), + Site.objects.count() + ) + + def test_rename_touches_only_objects_holding_a_value(self): + """ + Renaming rewrites the key only where a value is actually stored. This is what keeps a + rename cheap now that objects are no longer provisioned with a placeholder each. + """ + cf = CustomField.objects.create( + name='sparse_field', + type=CustomFieldTypeChoices.TYPE_TEXT + ) + cf.object_types.set([self.object_type]) + + site = Site.objects.first() + site.custom_field_data['sparse_field'] = 'value' + site.save() + + cf.name = 'sparse_renamed' + cf.save() + + self.assertEqual( + list( + Site.objects.filter(custom_field_data__has_key='sparse_renamed') + .values_list('pk', flat=True) + ), + [site.pk] + ) + self.assertEqual(Site.objects.filter(custom_field_data__has_key='sparse_field').count(), 0) + site.refresh_from_db() + self.assertEqual(site.custom_field_data['sparse_renamed'], 'value') + + def test_removal_from_object_type_purges_data(self): + """ + Unassigning a field from an object type removes its data from those objects. + """ + cf = CustomField.objects.create( + name='unassigned_field', + type=CustomFieldTypeChoices.TYPE_TEXT, + default='baz' + ) + cf.object_types.set([self.object_type]) + self.assertEqual( + Site.objects.filter(custom_field_data__has_key='unassigned_field').count(), + Site.objects.count() + ) + + cf.object_types.remove(self.object_type) + + self.assertEqual( + Site.objects.filter(custom_field_data__has_key='unassigned_field').count(), + 0 + ) + + def test_clearing_object_types_purges_data(self): + """ + clear() unassigns every object type at once and reports no pk_set, so it must be handled + before the fact. Its data is removed just as remove()'s is. + """ + cf = CustomField.objects.create( + name='cleared_field', + type=CustomFieldTypeChoices.TYPE_TEXT, + default='baz' + ) + cf.object_types.set([self.object_type]) + self.assertEqual( + Site.objects.filter(custom_field_data__has_key='cleared_field').count(), + Site.objects.count() + ) + + cf.object_types.clear() + + self.assertEqual( + Site.objects.filter(custom_field_data__has_key='cleared_field').count(), + 0 + ) + + def test_batch_update_excludes_rows_which_no_longer_match(self): + """ + A caller's filters must constrain the UPDATE as well as the selection of each batch. + rename_object_data() builds a jsonb_set() expression which evaluates to NULL for a row not + holding the key being renamed, so a row which loses it between the two statements would + otherwise have its entire custom_field_data column nulled out. + """ + cf = CustomField.objects.create( + name='drifting_field', + type=CustomFieldTypeChoices.TYPE_TEXT + ) + cf.object_types.set([self.object_type]) + + sites = list(Site.objects.order_by('pk')) + holder, bystander = sites[0], sites[-1] + Site.objects.filter(pk=holder.pk).update(custom_field_data={'drifting_field': 'value'}) + Site.objects.filter(pk=bystander.pk).update(custom_field_data={'other': 'untouched'}) + + # Simulate a concurrent write: the batch selection yields a pk which no longer satisfies + # the has_key filter by the time the UPDATE is issued. + select_pks = QuerySet.values_list + injected = [] + + def inject_stale_pk(self, *args, **kwargs): + result = select_pks(self, *args, **kwargs) + if self.model is Site and args == ('pk',) and kwargs.get('flat') and not injected: + injected.append(bystander.pk) + return [*result, bystander.pk] + return result + + with patch.object(QuerySet, 'values_list', inject_stale_pk): + cf.name = 'drifted_field' + cf.save() + + self.assertEqual(injected, [bystander.pk], "the stale pk was never injected") + + # The renamed value landed, and the bystander was left entirely alone + holder.refresh_from_db() + self.assertEqual(holder.custom_field_data, {'drifted_field': 'value'}) + bystander.refresh_from_db() + self.assertEqual(bystander.custom_field_data, {'other': 'untouched'}) + + @staticmethod + def order_sites_by(*aliases): + """ + Order a SiteTable by the given column aliases and return the underlying QuerySet. + """ + table = SiteTable(Site.objects.all()) + table.order_by = aliases + return table.data.data + + def test_table_ordering_groups_objects_with_no_value(self): + """ + Objects holding no value sort together regardless of whether they store a JSON null or + carry no key at all, and numeric fields still sort numerically rather than lexically. + """ + cf = CustomField.objects.create( + name='sort_field', + type=CustomFieldTypeChoices.TYPE_INTEGER + ) + cf.object_types.set([self.object_type]) + + sites = list(Site.objects.order_by('name')) + # Site A holds a value, Site B an explicit null, Site C no key whatsoever + Site.objects.filter(pk=sites[0].pk).update(custom_field_data={'sort_field': 20}) + Site.objects.filter(pk=sites[1].pk).update(custom_field_data={'sort_field': None}) + Site.objects.filter(pk=sites[2].pk).update(custom_field_data={}) + extra = Site.objects.create( + name='Site D', slug='site-d', custom_field_data={'sort_field': 100} + ) + + ordered = self.order_sites_by('cf_sort_field') + self.assertEqual( + [s.pk for s in ordered][:2], + [sites[0].pk, extra.pk], + "20 must sort before 100 (numerically, not lexically) ahead of the empty rows" + ) + self.assertEqual( + {s.pk for s in ordered[2:]}, + {sites[1].pk, sites[2].pk}, + "the JSON-null and missing-key rows must group together at the end" + ) + + # Reversing the ordering carries the empty rows to the front, as it would SQL nulls + ordered = self.order_sites_by('-cf_sort_field') + self.assertEqual( + {s.pk for s in ordered[:2]}, + {sites[1].pk, sites[2].pk}, + "the JSON-null and missing-key rows must still group together" + ) + self.assertEqual([s.pk for s in ordered[2:]], [extra.pk, sites[0].pk]) + + def test_table_ordering_breaks_ties_by_primary_key(self): + """ + Rows tying on the sort value -- every object holding no value ties on both sort keys -- + must still be totally ordered, or paginated results may skip or repeat rows between + page requests. + """ + cf = CustomField.objects.create( + name='sort_field', + type=CustomFieldTypeChoices.TYPE_INTEGER + ) + cf.object_types.set([self.object_type]) + + # None of these hold a value for the field, so all of them tie + Site.objects.bulk_create([ + Site(name=f'Tied Site {i}', slug=f'tied-site-{i}') for i in range(1, 11) + ]) + + for alias in ('cf_sort_field', '-cf_sort_field'): + ordered = self.order_sites_by(alias) + self.assertEqual( + ordered.query.order_by[-1], + 'pk', + "the primary key must be applied as the final sort key" + ) + + # Paging through the results must yield each object exactly once + expected = [site.pk for site in ordered] + paginated = [] + for offset in range(0, len(expected), 4): + paginated.extend(site.pk for site in ordered[offset:offset + 4]) + self.assertEqual(paginated, expected) + + def test_table_ordering_composes_with_other_columns(self): + """ + A custom field column must contribute its sort keys to a multi-column ordering rather than + replace it. (The sort parameter is read with getlist(), and a saved TableConfig records an + ordering of arbitrary length.) + """ + cf = CustomField.objects.create( + name='sort_field', + type=CustomFieldTypeChoices.TYPE_INTEGER + ) + cf.object_types.set([self.object_type]) + + sites = list(Site.objects.order_by('name')) + # Ordering by the custom field alone would reverse the first two sites + Site.objects.filter(pk=sites[0].pk).update(custom_field_data={'sort_field': 2}) + Site.objects.filter(pk=sites[1].pk).update(custom_field_data={'sort_field': 1}) + Site.objects.filter(pk=sites[2].pk).update(custom_field_data={'sort_field': 3}) + + ordered = self.order_sites_by('name', 'cf_sort_field') + self.assertEqual( + [site.pk for site in ordered], + [site.pk for site in sites], + "the preceding sort key must survive the addition of a custom field column" + ) + + # A column named after the custom field column must likewise still apply + Site.objects.update(custom_field_data={'sort_field': 1}) + ordered = self.order_sites_by('cf_sort_field', '-name') + self.assertEqual( + [site.pk for site in ordered], + [site.pk for site in reversed(sites)], + "the trailing sort key must be applied before the primary key tie breaker" + ) + + def test_table_ordering_tolerates_a_repeated_sort_alias(self): + """ + The sort parameter is read with getlist(), so the same custom field column can appear in + the ordering more than once, applying the same annotation to the queryset twice. + """ + cf = CustomField.objects.create( + name='sort_field', + type=CustomFieldTypeChoices.TYPE_INTEGER + ) + cf.object_types.set([self.object_type]) + + table = SiteTable(Site.objects.all()) + table.order_by = ['cf_sort_field', '-cf_sort_field'] + + self.assertEqual(len(list(table.rows)), Site.objects.count()) + def test_default_value_validation(self): choiceset = CustomFieldChoiceSet.objects.create( name="Test Choice Set", @@ -1823,6 +2119,77 @@ class CustomFieldModelTestCase(TestCase): site.custom_field_data['baz'] = 'def' site.clean() + def test_required_field_enforced_on_existing_objects(self): + """ + Adding a required custom field invalidates the objects which already exist, whether they + carry no key for it -- the normal state now that empty values are not provisioned -- or an + explicit null. Both are rejected, as they were before: every object then held a materialized + null, which CustomField.validate() rejects for a required field. + """ + site = Site.objects.create(name='Test Site', slug='test-site') + + cf = CustomField(type=CustomFieldTypeChoices.TYPE_TEXT, name='req', required=True) + cf.save() + cf.object_types.set([ObjectType.objects.get_for_model(Site)]) + + # No value was provisioned onto the existing object + site.refresh_from_db() + self.assertNotIn('req', site.custom_field_data) + with self.assertRaises(ValidationError): + site.clean() + + # An explicit null is rejected identically + site.custom_field_data['req'] = None + with self.assertRaises(ValidationError): + site.clean() + + site.custom_field_data['req'] = 'value' + site.clean() + + +class MissingKeyAwareFilterTestCase(TestCase): + """ + MissingKeyAwareFilterMixin reimplements MultipleChoiceFilter.filter() for the negated case, so + it may only be mixed into a class which inherits that method unmodified and which does not + filter conjoined. Both constraints are enforced, as violating either would yield a wrong result + set rather than an error. + """ + def test_factory_rejects_a_class_which_defines_filter(self): + # MultiValueMACAddressFilter overrides filter() to swallow ValidationError + with self.assertRaises(TypeError): + missing_key_aware_filter_factory(MultiValueMACAddressFilter) + + # BooleanFilter does not inherit MultipleChoiceFilter.filter() at all + with self.assertRaises(TypeError): + missing_key_aware_filter_factory(django_filters.BooleanFilter) + + def test_factory_accepts_a_class_which_inherits_filter(self): + filter_class = missing_key_aware_filter_factory(MultiValueCharFilter) + + self.assertTrue(issubclass(filter_class, MissingKeyAwareFilterMixin)) + self.assertTrue(issubclass(filter_class, MultiValueCharFilter)) + # The factory is cached, so a class yields a single stable subclass + self.assertIs(filter_class, missing_key_aware_filter_factory(MultiValueCharFilter)) + + def test_conjoined_filtering_is_rejected(self): + filter_class = missing_key_aware_filter_factory(MultiValueCharFilter) + + filter_class(field_name='custom_field_data__foo') + filter_class(field_name='custom_field_data__foo', conjoined=False) + with self.assertRaises(TypeError): + filter_class(field_name='custom_field_data__foo', conjoined=True) + + def test_every_supported_custom_field_type_satisfies_the_constraints(self): + """ + The filter classes CustomField.to_filter() selects must all remain admissible. + """ + for cf_type in CustomFieldTypeChoices.values(): + with self.subTest(cf_type): + cf = CustomField(name='test', type=cf_type) + # Raises TypeError if the selected filter class violates a constraint + cf.to_filter() + cf.to_filter(lookup_expr='empty') + class CustomFieldModelFilterTestCase(TestCase): queryset = Site.objects.all() @@ -1979,12 +2346,14 @@ class CustomFieldModelFilterTestCase(TestCase): 'cf11': manufacturers[2].pk, 'cf12': [manufacturers[2].pk, manufacturers[3].pk], }), + # Carries no custom field data at all. Negated lookups ("is not x") match it, as they + # do an object holding an explicit null; see MissingKeyAwareFilterMixin. Site(name='Site 4', slug='site-4'), ]) def test_filter_integer(self): self.assertEqual(self.filterset({'cf_cf1': [100, 200]}, self.queryset).qs.count(), 2) - self.assertEqual(self.filterset({'cf_cf1__n': [200]}, self.queryset).qs.count(), 2) + self.assertEqual(self.filterset({'cf_cf1__n': [200]}, self.queryset).qs.count(), 3) self.assertEqual(self.filterset({'cf_cf1__gt': [200]}, self.queryset).qs.count(), 1) self.assertEqual(self.filterset({'cf_cf1__gte': [200]}, self.queryset).qs.count(), 2) self.assertEqual(self.filterset({'cf_cf1__lt': [200]}, self.queryset).qs.count(), 1) @@ -1993,7 +2362,7 @@ class CustomFieldModelFilterTestCase(TestCase): def test_filter_decimal(self): self.assertEqual(self.filterset({'cf_cf2': [100.1, 200.2]}, self.queryset).qs.count(), 2) - self.assertEqual(self.filterset({'cf_cf2__n': [200.2]}, self.queryset).qs.count(), 2) + self.assertEqual(self.filterset({'cf_cf2__n': [200.2]}, self.queryset).qs.count(), 3) self.assertEqual(self.filterset({'cf_cf2__gt': [200.2]}, self.queryset).qs.count(), 1) self.assertEqual(self.filterset({'cf_cf2__gte': [200.2]}, self.queryset).qs.count(), 2) self.assertEqual(self.filterset({'cf_cf2__lt': [200.2]}, self.queryset).qs.count(), 1) @@ -2006,15 +2375,15 @@ class CustomFieldModelFilterTestCase(TestCase): def test_filter_text_strict(self): self.assertEqual(self.filterset({'cf_cf4': ['foo']}, self.queryset).qs.count(), 1) - self.assertEqual(self.filterset({'cf_cf4__n': ['foo']}, self.queryset).qs.count(), 2) + self.assertEqual(self.filterset({'cf_cf4__n': ['foo']}, self.queryset).qs.count(), 3) self.assertEqual(self.filterset({'cf_cf4__ic': ['foo']}, self.queryset).qs.count(), 2) - self.assertEqual(self.filterset({'cf_cf4__nic': ['foo']}, self.queryset).qs.count(), 1) + self.assertEqual(self.filterset({'cf_cf4__nic': ['foo']}, self.queryset).qs.count(), 2) self.assertEqual(self.filterset({'cf_cf4__isw': ['foo']}, self.queryset).qs.count(), 2) - self.assertEqual(self.filterset({'cf_cf4__nisw': ['foo']}, self.queryset).qs.count(), 1) + self.assertEqual(self.filterset({'cf_cf4__nisw': ['foo']}, self.queryset).qs.count(), 2) self.assertEqual(self.filterset({'cf_cf4__iew': ['bar']}, self.queryset).qs.count(), 2) - self.assertEqual(self.filterset({'cf_cf4__niew': ['bar']}, self.queryset).qs.count(), 1) + self.assertEqual(self.filterset({'cf_cf4__niew': ['bar']}, self.queryset).qs.count(), 2) self.assertEqual(self.filterset({'cf_cf4__ie': ['FOO']}, self.queryset).qs.count(), 1) - self.assertEqual(self.filterset({'cf_cf4__nie': ['FOO']}, self.queryset).qs.count(), 2) + self.assertEqual(self.filterset({'cf_cf4__nie': ['FOO']}, self.queryset).qs.count(), 3) self.assertEqual(self.filterset({'cf_cf4__empty': True}, self.queryset).qs.count(), 1) def test_filter_text_loose(self): @@ -2022,7 +2391,7 @@ class CustomFieldModelFilterTestCase(TestCase): def test_filter_date(self): self.assertEqual(self.filterset({'cf_cf6': ['2016-06-26', '2016-06-27']}, self.queryset).qs.count(), 2) - self.assertEqual(self.filterset({'cf_cf6__n': ['2016-06-27']}, self.queryset).qs.count(), 2) + self.assertEqual(self.filterset({'cf_cf6__n': ['2016-06-27']}, self.queryset).qs.count(), 3) self.assertEqual(self.filterset({'cf_cf6__gt': ['2016-06-27']}, self.queryset).qs.count(), 1) self.assertEqual(self.filterset({'cf_cf6__gte': ['2016-06-27']}, self.queryset).qs.count(), 2) self.assertEqual(self.filterset({'cf_cf6__lt': ['2016-06-27']}, self.queryset).qs.count(), 1) @@ -2034,20 +2403,108 @@ class CustomFieldModelFilterTestCase(TestCase): self.filterset({'cf_cf7': ['http://a.example.com', 'http://b.example.com']}, self.queryset).qs.count(), 2 ) - self.assertEqual(self.filterset({'cf_cf7__n': ['http://b.example.com']}, self.queryset).qs.count(), 2) + self.assertEqual(self.filterset({'cf_cf7__n': ['http://b.example.com']}, self.queryset).qs.count(), 3) self.assertEqual(self.filterset({'cf_cf7__ic': ['b']}, self.queryset).qs.count(), 1) - self.assertEqual(self.filterset({'cf_cf7__nic': ['b']}, self.queryset).qs.count(), 2) + self.assertEqual(self.filterset({'cf_cf7__nic': ['b']}, self.queryset).qs.count(), 3) self.assertEqual(self.filterset({'cf_cf7__isw': ['http://']}, self.queryset).qs.count(), 3) - self.assertEqual(self.filterset({'cf_cf7__nisw': ['http://']}, self.queryset).qs.count(), 0) + self.assertEqual(self.filterset({'cf_cf7__nisw': ['http://']}, self.queryset).qs.count(), 1) self.assertEqual(self.filterset({'cf_cf7__iew': ['.com']}, self.queryset).qs.count(), 3) - self.assertEqual(self.filterset({'cf_cf7__niew': ['.com']}, self.queryset).qs.count(), 0) + self.assertEqual(self.filterset({'cf_cf7__niew': ['.com']}, self.queryset).qs.count(), 1) self.assertEqual(self.filterset({'cf_cf7__ie': ['HTTP://A.EXAMPLE.COM']}, self.queryset).qs.count(), 1) - self.assertEqual(self.filterset({'cf_cf7__nie': ['HTTP://A.EXAMPLE.COM']}, self.queryset).qs.count(), 2) + self.assertEqual(self.filterset({'cf_cf7__nie': ['HTTP://A.EXAMPLE.COM']}, self.queryset).qs.count(), 3) self.assertEqual(self.filterset({'cf_cf7__empty': True}, self.queryset).qs.count(), 1) def test_filter_url_loose(self): self.assertEqual(self.filterset({'cf_cf8': ['example.com']}, self.queryset).qs.count(), 3) + def test_filter_negation_matches_unset_values(self): + """ + A negated lookup must match an object which holds no value for the field, whether that is + recorded as an explicit null or by the absence of the key; see MissingKeyAwareFilterMixin. + """ + no_key = Site.objects.get(slug='site-4') + explicit_null = Site.objects.create(name='Site 5', slug='site-5', custom_field_data={ + 'cf1': None, + 'cf4': None, + 'cf6': None, + 'cf7': None, + }) + + for filter_name, value in ( + ('cf_cf1__n', 100), + ('cf_cf4__n', 'foo'), + ('cf_cf4__nic', 'foo'), + ('cf_cf4__nisw', 'foo'), + ('cf_cf4__niew', 'bar'), + ('cf_cf4__nie', 'FOO'), + ('cf_cf6__n', '2016-06-26'), + ('cf_cf7__n', 'http://a.example.com'), + ('cf_cf7__nic', 'a'), + ('cf_cf7__nisw', 'http://'), + ('cf_cf7__niew', '.com'), + ): + with self.subTest(filter_name): + pks = set( + self.filterset({filter_name: [value]}, self.queryset).qs.values_list('pk', flat=True) + ) + self.assertIn(no_key.pk, pks, "an object carrying no key must match") + self.assertIn(explicit_null.pk, pks, "an object holding a null must match") + + def test_filter_null_sentinel_matches_unset_values(self): + """ + The null sentinel (FILTERS_NULL_CHOICE_VALUE) asks for the objects holding no value, which + must include those carrying no key as well as those holding an explicit null. Negating it + must therefore return exactly the objects which do hold a value -- and in particular must + not return the ones it is being asked to exclude. + + Only string-backed field types are exercised: a numeric or date field rejects 'null' during + form validation ("Enter a whole number"), so the sentinel never reaches the filter at all. + That is a property of multivalue_field_factory() and is unaffected by this behavior. + """ + no_key = Site.objects.get(slug='site-4') + explicit_null = Site.objects.create(name='Site 5', slug='site-5', custom_field_data={ + 'cf4': None, + 'cf7': None, + 'cf9': None, + }) + has_value = set( + Site.objects.filter(slug__in=('site-1', 'site-2', 'site-3')).values_list('pk', flat=True) + ) + + for filter_name in ('cf_cf4', 'cf_cf7', 'cf_cf9'): + with self.subTest(filter_name): + pks = set( + self.filterset({filter_name: ['null']}, self.queryset).qs.values_list('pk', flat=True) + ) + self.assertEqual(pks, {no_key.pk, explicit_null.pk}) + + pks = set( + self.filterset({f'{filter_name}__n': ['null']}, self.queryset) + .qs.values_list('pk', flat=True) + ) + self.assertEqual(pks, has_value) + + def test_filter_null_sentinel_combined_with_a_value(self): + """ + The sentinel may be passed alongside real values, in which case it widens the match rather + than replacing it. Under negation the valueless objects are then excluded, as they are among + the values being negated. + """ + no_key = Site.objects.get(slug='site-4') + site_1 = Site.objects.get(slug='site-1') + + pks = set( + self.filterset({'cf_cf4': ['foo', 'null']}, self.queryset).qs.values_list('pk', flat=True) + ) + self.assertIn(site_1.pk, pks, "an object holding the value must match") + self.assertIn(no_key.pk, pks, "an object holding no value must match") + + pks = set( + self.filterset({'cf_cf4__n': ['foo', 'null']}, self.queryset).qs.values_list('pk', flat=True) + ) + self.assertNotIn(site_1.pk, pks, "an object holding the value must be excluded") + self.assertNotIn(no_key.pk, pks, "an object holding no value must be excluded") + def test_filter_select(self): self.assertEqual(self.filterset({'cf_cf9': ['A', 'B']}, self.queryset).qs.count(), 2) self.assertEqual(self.filterset({'cf_cf9__empty': True}, self.queryset).qs.count(), 1) @@ -2055,7 +2512,8 @@ class CustomFieldModelFilterTestCase(TestCase): def test_filter_multiselect(self): self.assertEqual(self.filterset({'cf_cf10': ['A']}, self.queryset).qs.count(), 1) self.assertEqual(self.filterset({'cf_cf10': ['A', 'C']}, self.queryset).qs.count(), 2) - self.assertEqual(self.filterset({'cf_cf10': ['null']}, self.queryset).qs.count(), 1) # Contains a literal null + # Matches both the object holding a literal null and the one carrying no key, as `empty` does + self.assertEqual(self.filterset({'cf_cf10': ['null']}, self.queryset).qs.count(), 2) self.assertEqual(self.filterset({'cf_cf10__empty': True}, self.queryset).qs.count(), 2) def test_filter_object(self): diff --git a/netbox/extras/tests/test_signals.py b/netbox/extras/tests/test_signals.py index 2a8fb29e6..82e601c89 100644 --- a/netbox/extras/tests/test_signals.py +++ b/netbox/extras/tests/test_signals.py @@ -81,8 +81,8 @@ class CustomFieldDeletedSignalTestCase(TestCase): class CustomFieldObjectTypeSignalTestCase(TestCase): """ - Verify extras.signals.handle_cf_added_obj_types and handle_cf_removed_obj_types - populate or strip default values when a CustomField's object_types m2m changes. + Verify extras.signals.handle_cf_object_types_changed populates or strips default values when a + CustomField's object_types m2m changes. """ def test_adding_object_type_populates_default_value(self): diff --git a/netbox/netbox/tables/columns.py b/netbox/netbox/tables/columns.py index cd493051a..07d9d02ec 100644 --- a/netbox/netbox/tables/columns.py +++ b/netbox/netbox/tables/columns.py @@ -6,7 +6,7 @@ import django_tables2 as tables from django.conf import settings from django.contrib.auth.context_processors import auth from django.contrib.auth.models import AnonymousUser -from django.db.models import DateField, DateTimeField +from django.db.models import DateField, DateTimeField, Q from django.template import Context, Template from django.urls import reverse from django.utils.dateparse import parse_date @@ -522,9 +522,46 @@ class CustomFieldColumn(tables.Column): CustomFieldTypeChoices.TYPE_MULTIOBJECT ): kwargs['orderable'] = False + else: + kwargs.setdefault('order_by', ( + self.unset_alias, + f'custom_field_data__{customfield.name}', + )) super().__init__(*args, **kwargs) + @property + def unset_alias(self): + """ + Return the name of the annotation which groups together the objects holding no value for + this field (see get_ordering_annotation()). + + The annotation is named for the custom field so that ordering by two custom field columns + cannot produce a duplicate alias. Field names are validated to contain only alphanumerics + and underscores, so the alias is always a legal identifier. + """ + return f'_cf_{self.customfield.name}_unset' + + def get_ordering_annotation(self): + """ + Return the annotation by which objects holding no value for this field are sorted together, + as the leading sort key for the column. (BaseTable applies it to the queryset when ordering + by this column.) + + An object can lack a value either by storing a JSON null or by carrying no key for the + field at all -- the latter being the normal state for objects which predate it, as data is + no longer provisioned onto existing objects (see CustomField.populate_initial_data()). + Postgres sorts those two apart: a JSON null is the lowest jsonb value, whereas a missing + key yields SQL NULL and sorts last, so the "empty" rows would otherwise land at both ends + of the same column. This key (the `empty` lookup covers both states) groups them at one + end, matching how SQL NULLs are ordered for an ordinary column: last when ascending, first + when descending. The column's second sort key then orders by the raw value, so that numeric + and date fields still sort by type rather than lexically. + """ + return { + self.unset_alias: Q(**{f'custom_field_data__{self.customfield.name}__empty': True}) + } + @staticmethod def _linkify_item(item): if hasattr(item, 'get_absolute_url'): diff --git a/netbox/netbox/tables/tables.py b/netbox/netbox/tables/tables.py index ead9e0e78..d5ee71c54 100644 --- a/netbox/netbox/tables/tables.py +++ b/netbox/netbox/tables/tables.py @@ -12,6 +12,7 @@ from django.urls.exceptions import NoReverseMatch from django.utils.safestring import mark_safe from django.utils.translation import gettext_lazy as _ from django_tables2.data import TableQuerysetData +from django_tables2.utils import OrderBy from core.models import ObjectType from extras.choices import * @@ -158,6 +159,68 @@ class BaseTable(tables.Table): prefetch_fields.append('__'.join(prefetch_path)) self.data.data = self.data.data.prefetch_related(*prefetch_fields) + def _get_custom_field_ordering_columns(self, order_by): + """ + Return the custom field columns among those named by the given ordering. + + Args: + order_by: An iterable (or comma-separated string) of order by aliases. + """ + order_by = order_by.split(',') if isinstance(order_by, str) else order_by or () + ordering_columns = [] + for alias in order_by: + name = OrderBy(alias).bare + # Ignore any aliases which django-tables2 will itself discard + if name not in self.columns or not self.columns[name].orderable: + continue + if isinstance(column := self.columns[name].column, columns.CustomFieldColumn): + ordering_columns.append(column) + return ordering_columns + + def _apply_ordering_annotations(self, ordering_columns): + """ + Dynamically annotate the table's QuerySet with the expressions needed to sort by the given + custom field columns. These are applied only for the columns actually being ordered by, to + avoid burdening every query with expressions it has no use for. + """ + annotations = {} + for column in ordering_columns: + annotations.update(column.get_ordering_annotation()) + + # Skip any annotations already applied, as when the ordering is set more than once + if annotations := { + name: expr for name, expr in annotations.items() + if name not in self.data.data.query.annotations + }: + self.data.data = self.data.data.annotate(**annotations) + + def _apply_ordering_tie_breaker(self): + """ + Append the primary key to the table's ordering as a final sort key, so that the ordering is + total. Rows tying on every preceding key -- and every object holding no value for a custom + field ties on both of that column's keys -- are otherwise free to come back in a different + order for each query, which would cause paginated results to skip or repeat rows from one + page to the next. + """ + ordering = self.data.data.query.order_by + if ordering and not any(OrderBy(o).bare in ('pk', 'id') for o in ordering): + self.data.data = self.data.data.order_by(*ordering, 'pk') + + @tables.Table.order_by.setter + def order_by(self, value): + """ + Extend the ordering of the table's data with the support needed by custom field columns. + """ + if not isinstance(self.data, TableQuerysetData): + tables.Table.order_by.fset(self, value) + return + + if ordering_columns := self._get_custom_field_ordering_columns(value): + self._apply_ordering_annotations(ordering_columns) + tables.Table.order_by.fset(self, value) + if ordering_columns: + self._apply_ordering_tie_breaker() + def configure(self, request): """ Configure the table for a specific request context. This performs pagination and records diff --git a/netbox/netbox/tests/test_graphql.py b/netbox/netbox/tests/test_graphql.py index 098e7d0e0..62d2e4704 100644 --- a/netbox/netbox/tests/test_graphql.py +++ b/netbox/netbox/tests/test_graphql.py @@ -419,6 +419,31 @@ class GraphQLAPITestCase(APITestCase): self.assertNotIn('errors', data) self.assertEqual(int(data['data']['table_config']['object_type']['id']), site_ct.pk) + def test_graphql_custom_fields_include_unset_fields(self): + """ + CustomFieldsMixin.custom_fields must emit a key for every custom field assigned to the model, + as the REST API does, rather than returning the stored data verbatim. A key is materialized + only once a value is assigned, so an object predating a field carries none; without this such + a field would be absent from the response instead of null. Stale data for a field which no + longer applies is likewise omitted. + """ + self.add_permissions('dcim.view_site') + url = reverse('graphql') + + cf = CustomField.objects.create(name='cf1', type=CustomFieldTypeChoices.TYPE_TEXT) + cf.object_types.set([ObjectType.objects.get_for_model(Site)]) + + site = Site.objects.get(slug='site-1') + self.assertNotIn('cf1', site.custom_field_data) + Site.objects.filter(pk=site.pk).update(custom_field_data={'stale': 'value'}) + + query = '{ site(id: ' + str(site.pk) + ') { custom_fields } }' + response = self.client.post(url, data={'query': query}, format='json', **self.header) + self.assertHttpStatus(response, status.HTTP_200_OK) + data = json.loads(response.content) + self.assertNotIn('errors', data) + self.assertEqual(data['data']['site']['custom_fields'], {'cf1': None}) + @override_settings(LOGIN_REQUIRED=True) def test_graphql_device_list_tags_are_prefetched(self): """ From d61528e4647e5d9064ab1a732550995a76975978 Mon Sep 17 00:00:00 2001 From: Martin Hauser Date: Thu, 6 Aug 2026 22:08:41 +0200 Subject: [PATCH 28/35] Fixes #22821: Prevent Tenant Group deletion from creating duplicate ungrouped Tenant names or slugs (#22830) --- docs/models/tenancy/tenantgroup.md | 2 + netbox/tenancy/models/tenants.py | 20 +++++- netbox/tenancy/tests/test_api.py | 53 ++++++++++++++- netbox/tenancy/tests/test_models.py | 102 +++++++++++++++++++++++++++- 4 files changed, 173 insertions(+), 4 deletions(-) diff --git a/docs/models/tenancy/tenantgroup.md b/docs/models/tenancy/tenantgroup.md index f9929ff66..22441f789 100644 --- a/docs/models/tenancy/tenantgroup.md +++ b/docs/models/tenancy/tenantgroup.md @@ -4,6 +4,8 @@ Tenant groups may be nested recursively to achieve a multi-level hierarchy. For example, you might have a group called "Customers" containing subgroups of individual tenants grouped by product or account team. +A tenant group cannot be deleted if ungrouping its tenants, including those of any nested groups, would result in duplicate tenant names or slugs among ungrouped tenants. + ## Fields ### Parent diff --git a/netbox/tenancy/models/tenants.py b/netbox/tenancy/models/tenants.py index 923c9a9ec..d6c7e8c2d 100644 --- a/netbox/tenancy/models/tenants.py +++ b/netbox/tenancy/models/tenants.py @@ -1,5 +1,5 @@ from django.db import models -from django.db.models import Q +from django.db.models import Count, ProtectedError, Q from django.utils.translation import gettext_lazy as _ from netbox.models import NestedGroupModel, PrimaryModel @@ -35,6 +35,24 @@ class TenantGroup(NestedGroupModel): verbose_name = _('tenant group') verbose_name_plural = _('tenant groups') + def delete(self, *args, **kwargs): + # Ungrouping the tenants of this group and its descendants can violate tenant name and slug uniqueness. + ungrouped = Tenant.objects.filter( + Q(group__isnull=True) | Q(group__in=self.get_descendants(include_self=True)) + ) + duplicate_names = ungrouped.values('name').annotate(count=Count('pk')).filter(count__gt=1).values('name') + duplicate_slugs = ungrouped.values('slug').annotate(count=Count('pk')).filter(count__gt=1).values('slug') + if conflicts := set(ungrouped.filter(Q(name__in=duplicate_names) | Q(slug__in=duplicate_slugs))): + raise ProtectedError( + _( + "Unable to delete tenant group {tenant_group}. Ungrouping its tenants, including those of any " + "nested groups, would create duplicate tenant names or slugs." + ).format(tenant_group=self), + conflicts, + ) + + return super().delete(*args, **kwargs) + class Tenant(ContactsMixin, PrimaryModel): """ diff --git a/netbox/tenancy/tests/test_api.py b/netbox/tenancy/tests/test_api.py index 36235a56b..dcba0025b 100644 --- a/netbox/tenancy/tests/test_api.py +++ b/netbox/tenancy/tests/test_api.py @@ -1,9 +1,14 @@ +import json +import logging + +from django.test import tag from django.urls import reverse +from rest_framework import status from dcim.models import Site from tenancy.choices import * from tenancy.models import * -from utilities.testing import APITestCase, APIViewTestCases +from utilities.testing import APITestCase, APIViewTestCases, disable_logging class AppTestCase(APITestCase): @@ -60,6 +65,52 @@ class TenantGroupTestCase(APIViewTestCases.APIViewTestCase): }, ] + @tag('regression') # Ref: #22821 + def test_delete_tenant_group_with_conflicting_tenants(self): + """ + Attempt and fail to delete a tenant group whose tenants cannot be ungrouped. + """ + group = TenantGroup.objects.create(name='Tenant Group 7', slug='tenant-group-7') + Tenant.objects.create(name='Tenant 1', slug='tenant-1a', group=group) + Tenant.objects.create(name='Tenant 1', slug='tenant-1b') + + self.add_permissions('tenancy.delete_tenantgroup') + url = reverse('tenancy-api:tenantgroup-detail', kwargs={'pk': group.pk}) + with disable_logging(level=logging.WARNING): + response = self.client.delete(url, **self.header) + + self.assertHttpStatus(response, status.HTTP_409_CONFLICT) + + content = json.loads(response.content.decode('utf-8')) + self.assertIn('detail', content) + self.assertTrue(content['detail'].startswith('Unable to delete object.')) + self.assertTrue(TenantGroup.objects.filter(pk=group.pk).exists()) + + @tag('regression') # Ref: #22821 + def test_bulk_delete_tenant_groups_with_conflicting_tenants(self): + """ + Attempt and fail to bulk delete two tenant groups whose tenants conflict only once both are + ungrouped, leaving every group and assignment intact. + """ + group1 = TenantGroup.objects.create(name='Tenant Group 8', slug='tenant-group-8') + group2 = TenantGroup.objects.create(name='Tenant Group 9', slug='tenant-group-9') + tenant1 = Tenant.objects.create(name='Tenant 2', slug='tenant-2a', group=group1) + tenant2 = Tenant.objects.create(name='Tenant 2', slug='tenant-2b', group=group2) + + self.add_permissions('tenancy.delete_tenantgroup') + data = [{'id': group1.pk}, {'id': group2.pk}] + with disable_logging(level=logging.WARNING): + response = self.client.delete(self._get_list_url(), data, format='json', **self.header) + + self.assertHttpStatus(response, status.HTTP_409_CONFLICT) + + # The rolled back batch must not leave the first group deleted + self.assertEqual(TenantGroup.objects.filter(pk__in=(group1.pk, group2.pk)).count(), 2) + tenant1.refresh_from_db() + tenant2.refresh_from_db() + self.assertEqual(tenant1.group, group1) + self.assertEqual(tenant2.group, group2) + class TenantTestCase(APIViewTestCases.APIViewTestCase): model = Tenant diff --git a/netbox/tenancy/tests/test_models.py b/netbox/tenancy/tests/test_models.py index 00f7c124f..438830d49 100644 --- a/netbox/tenancy/tests/test_models.py +++ b/netbox/tenancy/tests/test_models.py @@ -1,6 +1,104 @@ -from django.test import TestCase +from django.db.models import ProtectedError +from django.test import TestCase, tag -from tenancy.models import Contact, ContactGroup +from tenancy.models import Contact, ContactGroup, Tenant, TenantGroup + + +class TenantGroupTestCase(TestCase): + + @tag('regression') # Ref: #22821 + def test_tenantgroup_deletion_blocked_by_duplicate_ungrouped_name(self): + """ + Deleting a tenant group must raise ProtectedError when ungrouping its tenant would duplicate + the name of an already ungrouped tenant. + """ + group = TenantGroup.objects.create(name='Tenant Group 1', slug='tenant-group-1') + tenant1 = Tenant.objects.create(name='Tenant 1', slug='tenant-1a', group=group) + tenant2 = Tenant.objects.create(name='Tenant 1', slug='tenant-1b') + + with self.assertRaises(ProtectedError) as cm: + group.delete() + + self.assertEqual( + cm.exception.args[0], + 'Unable to delete tenant group Tenant Group 1. Ungrouping its tenants, including those of any nested ' + 'groups, would create duplicate tenant names or slugs.' + ) + self.assertEqual(set(cm.exception.protected_objects), {tenant1, tenant2}) + + # The failed deletion must leave the group and its tenant assignment intact + self.assertTrue(TenantGroup.objects.filter(pk=group.pk).exists()) + tenant1.refresh_from_db() + self.assertEqual(tenant1.group, group) + + @tag('regression') # Ref: #22821 + def test_tenantgroup_deletion_blocked_by_duplicate_ungrouped_slug(self): + """ + Deleting a tenant group must raise ProtectedError for a slug collision alone, when the + colliding tenants have differing names. + """ + group = TenantGroup.objects.create(name='Tenant Group 2', slug='tenant-group-2') + tenant1 = Tenant.objects.create(name='Tenant 2', slug='duplicate-slug', group=group) + tenant2 = Tenant.objects.create(name='Tenant 3', slug='duplicate-slug') + + with self.assertRaises(ProtectedError) as cm: + group.delete() + + self.assertEqual(set(cm.exception.protected_objects), {tenant1, tenant2}) + self.assertTrue(TenantGroup.objects.filter(pk=group.pk).exists()) + + @tag('regression') # Ref: #22821 + def test_tenantgroup_deletion_blocked_by_duplicate_name_in_descendants(self): + """ + Deleting a parent tenant group must raise ProtectedError when ungrouping the tenants of its + descendant groups would duplicate a name. + """ + parent = TenantGroup.objects.create(name='Parent Group', slug='parent-group') + child1 = TenantGroup.objects.create(name='Child Group 1', slug='child-group-1', parent=parent) + child2 = TenantGroup.objects.create(name='Child Group 2', slug='child-group-2', parent=parent) + tenant1 = Tenant.objects.create(name='Tenant 4', slug='tenant-4a', group=child1) + tenant2 = Tenant.objects.create(name='Tenant 4', slug='tenant-4b', group=child2) + + with self.assertRaises(ProtectedError) as cm: + parent.delete() + + self.assertEqual(set(cm.exception.protected_objects), {tenant1, tenant2}) + self.assertTrue(TenantGroup.objects.filter(pk=parent.pk).exists()) + self.assertEqual(TenantGroup.objects.filter(pk__in=(child1.pk, child2.pk)).count(), 2) + + def test_tenantgroup_deletion_ungroups_tenants(self): + """ + Deleting a tenant group whose tenants can be ungrouped safely must succeed and clear the group + assignment across the whole subtree. + """ + parent = TenantGroup.objects.create(name='Parent Group', slug='parent-group') + child = TenantGroup.objects.create(name='Child Group', slug='child-group', parent=parent) + tenant1 = Tenant.objects.create(name='Tenant 5', slug='tenant-5', group=parent) + tenant2 = Tenant.objects.create(name='Tenant 6', slug='tenant-6', group=child) + + parent.delete() + + self.assertFalse(TenantGroup.objects.filter(pk__in=(parent.pk, child.pk)).exists()) + tenant1.refresh_from_db() + tenant2.refresh_from_db() + self.assertIsNone(tenant1.group) + self.assertIsNone(tenant2.group) + + def test_tenantgroup_deletion_ignores_tenants_in_unrelated_groups(self): + """ + Deleting a tenant group must succeed when a tenant outside its subtree shares a name and slug + with one of its own tenants, as that tenant remains grouped. + """ + group = TenantGroup.objects.create(name='Tenant Group 3', slug='tenant-group-3') + unrelated = TenantGroup.objects.create(name='Unrelated Group', slug='unrelated-group') + tenant = Tenant.objects.create(name='Tenant 7', slug='tenant-7', group=group) + Tenant.objects.create(name='Tenant 7', slug='tenant-7', group=unrelated) + + group.delete() + + self.assertFalse(TenantGroup.objects.filter(pk=group.pk).exists()) + tenant.refresh_from_db() + self.assertIsNone(tenant.group) class ContactGroupTestCase(TestCase): From a6451297a20498e44424675f31d6447aeeec5700 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 7 Aug 2026 05:30:32 +0000 Subject: [PATCH 29/35] Update source translation strings --- netbox/translations/en/LC_MESSAGES/django.po | 240 ++++++++++--------- 1 file changed, 124 insertions(+), 116 deletions(-) diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index 601b9fdf7..59ce07ef7 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: 2026-08-06 05:56+0000\n" +"POT-Creation-Date: 2026-08-07 05:30+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -497,7 +497,7 @@ msgstr "" #: netbox/extras/forms/bulk_import.py:48 netbox/extras/tables/tables.py:427 #: netbox/extras/tables/tables.py:515 netbox/extras/tables/tables.py:584 #: netbox/extras/ui/panels.py:128 netbox/extras/ui/panels.py:377 -#: netbox/netbox/tables/tables.py:390 +#: netbox/netbox/tables/tables.py:453 #: netbox/templates/core/htmx/system_db_schema.html:70 #: netbox/templates/dcim/panels/interface_connection.html:68 #: netbox/templates/wireless/panels/wirelesslink_interface.html:16 @@ -720,7 +720,7 @@ msgstr "" #: netbox/ipam/forms/filtersets.py:351 netbox/ipam/forms/filtersets.py:434 #: netbox/ipam/forms/filtersets.py:532 netbox/ipam/forms/filtersets.py:546 #: netbox/ipam/forms/filtersets.py:571 netbox/ipam/forms/filtersets.py:643 -#: netbox/ipam/forms/filtersets.py:662 netbox/netbox/tables/tables.py:406 +#: netbox/ipam/forms/filtersets.py:662 netbox/netbox/tables/tables.py:469 #: netbox/virtualization/forms/filtersets.py:56 #: netbox/virtualization/forms/filtersets.py:114 #: netbox/virtualization/forms/filtersets.py:166 @@ -1403,7 +1403,7 @@ msgstr "" #: netbox/dcim/models/device_component_templates.py:70 #: netbox/dcim/models/device_components.py:68 netbox/dcim/models/racks.py:730 #: netbox/extras/models/configs.py:45 netbox/extras/models/configs.py:98 -#: netbox/extras/models/configs.py:289 netbox/extras/models/customfields.py:153 +#: netbox/extras/models/configs.py:289 netbox/extras/models/customfields.py:154 #: netbox/extras/models/models.py:79 netbox/extras/models/models.py:188 #: netbox/extras/models/models.py:471 netbox/extras/models/models.py:539 #: netbox/extras/models/models.py:623 netbox/extras/models/models.py:766 @@ -1439,7 +1439,7 @@ msgstr "" #: netbox/dcim/models/power.py:90 netbox/dcim/models/racks.py:290 #: netbox/dcim/models/sites.py:175 netbox/extras/models/configs.py:40 #: netbox/extras/models/configs.py:82 netbox/extras/models/configs.py:285 -#: netbox/extras/models/customfields.py:120 netbox/extras/models/models.py:74 +#: netbox/extras/models/customfields.py:121 netbox/extras/models/models.py:74 #: netbox/extras/models/models.py:183 netbox/extras/models/models.py:361 #: netbox/extras/models/models.py:467 netbox/extras/models/models.py:529 #: netbox/extras/models/models.py:619 netbox/extras/models/models.py:761 @@ -1450,7 +1450,7 @@ msgstr "" #: netbox/ipam/models/vlans.py:380 netbox/ipam/models/vrfs.py:20 #: netbox/ipam/models/vrfs.py:78 netbox/netbox/models/__init__.py:180 #: netbox/netbox/models/__init__.py:228 netbox/tenancy/models/contacts.py:85 -#: netbox/tenancy/models/tenants.py:19 netbox/tenancy/models/tenants.py:45 +#: netbox/tenancy/models/tenants.py:19 netbox/tenancy/models/tenants.py:63 #: netbox/users/models/owners.py:19 netbox/users/models/owners.py:38 #: netbox/users/models/permissions.py:23 netbox/users/models/users.py:36 #: netbox/virtualization/models/clusters.py:52 @@ -1474,7 +1474,7 @@ msgstr "" #: netbox/extras/models/models.py:534 netbox/ipam/models/asns.py:24 #: netbox/ipam/models/vlans.py:47 netbox/netbox/models/__init__.py:184 #: netbox/netbox/models/__init__.py:233 netbox/tenancy/models/tenants.py:25 -#: netbox/tenancy/models/tenants.py:50 +#: netbox/tenancy/models/tenants.py:68 #: netbox/virtualization/models/virtualmachines.py:44 #: netbox/vpn/models/l2vpn.py:26 netbox/wireless/models.py:60 msgid "slug" @@ -1577,7 +1577,7 @@ msgstr "" #: netbox/ipam/tables/services.py:16 netbox/ipam/tables/services.py:38 #: netbox/ipam/tables/vlans.py:33 netbox/ipam/tables/vlans.py:90 #: netbox/ipam/tables/vlans.py:209 netbox/ipam/tables/vrfs.py:26 -#: netbox/ipam/tables/vrfs.py:65 netbox/netbox/tables/tables.py:376 +#: netbox/ipam/tables/vrfs.py:65 netbox/netbox/tables/tables.py:439 #: netbox/netbox/ui/panels.py:222 netbox/netbox/ui/panels.py:231 #: netbox/templates/core/htmx/system_db_schema.html:99 #: netbox/templates/core/plugin.html:54 netbox/templates/core/rq_worker.html:43 @@ -1965,7 +1965,7 @@ msgstr "" msgid "Warning" msgstr "" -#: netbox/core/constants.py:33 netbox/netbox/tables/columns.py:625 +#: netbox/core/constants.py:33 netbox/netbox/tables/columns.py:662 msgid "Error" msgstr "" @@ -2381,7 +2381,7 @@ msgstr "" #: netbox/dcim/models/device_components.py:859 #: netbox/dcim/models/device_components.py:1246 #: netbox/dcim/models/device_components.py:1294 netbox/dcim/models/power.py:101 -#: netbox/extras/models/customfields.py:106 netbox/extras/models/search.py:42 +#: netbox/extras/models/customfields.py:107 netbox/extras/models/search.py:42 #: netbox/virtualization/models/clusters.py:57 #: netbox/virtualization/models/virtualmachines.py:121 #: netbox/vpn/models/l2vpn.py:31 @@ -2626,7 +2626,7 @@ msgstr "" #: netbox/extras/tables/tables.py:518 netbox/extras/tables/tables.py:589 #: netbox/extras/tables/tables.py:762 netbox/extras/tables/tables.py:803 #: netbox/extras/tables/tables.py:857 netbox/extras/ui/panels.py:378 -#: netbox/extras/ui/panels.py:507 netbox/netbox/tables/tables.py:394 +#: netbox/extras/ui/panels.py:507 netbox/netbox/tables/tables.py:457 #: netbox/tenancy/tables/contacts.py:87 netbox/vpn/tables/l2vpn.py:64 msgid "Object" msgstr "" @@ -2666,7 +2666,7 @@ msgstr "" #: netbox/core/tables/jobs.py:14 netbox/core/tables/tasks.py:77 #: netbox/dcim/tables/devicetypes.py:168 netbox/extras/tables/tables.py:264 #: netbox/extras/tables/tables.py:579 netbox/extras/tables/tables.py:828 -#: netbox/netbox/tables/tables.py:252 +#: netbox/netbox/tables/tables.py:315 #: netbox/templates/dcim/virtualchassis_edit.html:64 #: netbox/utilities/forms/forms.py:119 #: netbox/wireless/tables/wirelesslink.py:16 @@ -3094,7 +3094,7 @@ msgstr "" #: netbox/dcim/tables/devices.py:1235 netbox/ipam/forms/bulk_import.py:608 #: netbox/ipam/forms/model_forms.py:817 netbox/ipam/tables/fhrp.py:56 #: netbox/ipam/tables/ip.py:334 netbox/ipam/tables/services.py:42 -#: netbox/netbox/tables/tables.py:380 netbox/netbox/ui/panels.py:230 +#: netbox/netbox/tables/tables.py:443 netbox/netbox/ui/panels.py:230 #: netbox/tenancy/forms/bulk_edit.py:33 netbox/tenancy/forms/bulk_edit.py:62 #: netbox/tenancy/forms/bulk_import.py:31 #: netbox/tenancy/forms/bulk_import.py:64 @@ -5987,7 +5987,7 @@ msgstr "" #: netbox/dcim/models/cables.py:112 #: netbox/dcim/models/device_component_templates.py:64 #: netbox/dcim/models/device_components.py:62 -#: netbox/extras/models/customfields.py:139 +#: netbox/extras/models/customfields.py:140 msgid "label" msgstr "" @@ -7106,7 +7106,7 @@ msgstr "" msgid "Numeric identifier unique to the parent device" msgstr "" -#: netbox/dcim/models/devices.py:1298 netbox/extras/models/customfields.py:264 +#: netbox/dcim/models/devices.py:1298 netbox/extras/models/customfields.py:265 #: netbox/extras/models/models.py:125 netbox/extras/models/models.py:934 #: netbox/netbox/models/__init__.py:154 netbox/netbox/models/__init__.py:193 #: netbox/netbox/models/__init__.py:243 @@ -8743,13 +8743,13 @@ msgstr "" #: netbox/extras/forms/bulk_edit.py:65 netbox/extras/forms/bulk_import.py:66 #: netbox/extras/forms/filtersets.py:99 -#: netbox/extras/models/customfields.py:248 netbox/extras/ui/panels.py:155 +#: netbox/extras/models/customfields.py:249 netbox/extras/ui/panels.py:155 msgid "UI visible" msgstr "" #: netbox/extras/forms/bulk_edit.py:70 netbox/extras/forms/bulk_import.py:72 #: netbox/extras/forms/filtersets.py:104 -#: netbox/extras/models/customfields.py:255 netbox/extras/ui/panels.py:156 +#: netbox/extras/models/customfields.py:256 netbox/extras/ui/panels.py:156 msgid "UI editable" msgstr "" @@ -8997,8 +8997,8 @@ msgid "The classification of entry" msgstr "" #: netbox/extras/forms/bulk_import.py:337 netbox/extras/tables/tables.py:768 -#: netbox/netbox/tables/tables.py:346 netbox/netbox/tables/tables.py:361 -#: netbox/netbox/tables/tables.py:384 netbox/netbox/ui/panels.py:243 +#: netbox/netbox/tables/tables.py:409 netbox/netbox/tables/tables.py:424 +#: netbox/netbox/tables/tables.py:447 netbox/netbox/ui/panels.py:243 #: netbox/templates/dcim/htmx/cable_edit.html:110 #: netbox/templates/generic/bulk_edit.html:99 #: netbox/templates/inc/panels/comments.html:5 @@ -9148,7 +9148,7 @@ msgid "Specify query parameters as a JSON object." msgstr "" #: netbox/extras/forms/model_forms.py:82 -#: netbox/extras/models/customfields.py:234 +#: netbox/extras/models/customfields.py:235 msgid "A JSON schema definition for validating the custom field value" msgstr "" @@ -9445,126 +9445,126 @@ msgstr "" msgid "Line: {lineno}" msgstr "" -#: netbox/extras/models/customfields.py:103 +#: netbox/extras/models/customfields.py:104 msgid "The object(s) to which this field applies." msgstr "" -#: netbox/extras/models/customfields.py:110 +#: netbox/extras/models/customfields.py:111 msgid "The type of data this custom field holds" msgstr "" -#: netbox/extras/models/customfields.py:117 +#: netbox/extras/models/customfields.py:118 msgid "The type of NetBox object this field maps to (for object fields)" msgstr "" -#: netbox/extras/models/customfields.py:123 +#: netbox/extras/models/customfields.py:124 msgid "Internal field name" msgstr "" -#: netbox/extras/models/customfields.py:127 +#: netbox/extras/models/customfields.py:128 msgid "Only alphanumeric characters and underscores are allowed." msgstr "" -#: netbox/extras/models/customfields.py:132 +#: netbox/extras/models/customfields.py:133 msgid "Double underscores are not permitted in custom field names." msgstr "" -#: netbox/extras/models/customfields.py:143 +#: netbox/extras/models/customfields.py:144 msgid "" "Name of the field as displayed to users (if not provided, 'the field's name " "will be used)" msgstr "" -#: netbox/extras/models/customfields.py:147 netbox/extras/models/models.py:382 +#: netbox/extras/models/customfields.py:148 netbox/extras/models/models.py:382 msgid "group name" msgstr "" -#: netbox/extras/models/customfields.py:150 +#: netbox/extras/models/customfields.py:151 msgid "Custom fields within the same group will be displayed together" msgstr "" -#: netbox/extras/models/customfields.py:158 +#: netbox/extras/models/customfields.py:159 msgid "required" msgstr "" -#: netbox/extras/models/customfields.py:160 +#: netbox/extras/models/customfields.py:161 msgid "" "This field is required when creating new objects or editing an existing " "object." msgstr "" -#: netbox/extras/models/customfields.py:163 +#: netbox/extras/models/customfields.py:164 msgid "must be unique" msgstr "" -#: netbox/extras/models/customfields.py:165 +#: netbox/extras/models/customfields.py:166 msgid "The value of this field must be unique for the assigned object" msgstr "" -#: netbox/extras/models/customfields.py:168 +#: netbox/extras/models/customfields.py:169 msgid "search weight" msgstr "" -#: netbox/extras/models/customfields.py:171 +#: netbox/extras/models/customfields.py:172 msgid "" "Weighting for search. Lower values are considered more important. Fields " "with a search weight of zero will be ignored." msgstr "" -#: netbox/extras/models/customfields.py:176 +#: netbox/extras/models/customfields.py:177 msgid "filter logic" msgstr "" -#: netbox/extras/models/customfields.py:180 +#: netbox/extras/models/customfields.py:181 msgid "" "Loose matches any instance of a given string; exact matches the entire field." msgstr "" -#: netbox/extras/models/customfields.py:183 +#: netbox/extras/models/customfields.py:184 msgid "default" msgstr "" -#: netbox/extras/models/customfields.py:187 +#: netbox/extras/models/customfields.py:188 msgid "" "Default value for the field (must be a JSON value). Encapsulate strings with " "double quotes (e.g. \"Foo\")." msgstr "" -#: netbox/extras/models/customfields.py:194 +#: netbox/extras/models/customfields.py:195 msgid "" "Filter the object selection choices using a query_params dict (must be a " "JSON value).Encapsulate strings with double quotes (e.g. \"Foo\")." msgstr "" -#: netbox/extras/models/customfields.py:200 +#: netbox/extras/models/customfields.py:201 msgid "display weight" msgstr "" -#: netbox/extras/models/customfields.py:201 +#: netbox/extras/models/customfields.py:202 msgid "Fields with higher weights appear lower in a form." msgstr "" -#: netbox/extras/models/customfields.py:208 +#: netbox/extras/models/customfields.py:209 msgid "minimum value" msgstr "" -#: netbox/extras/models/customfields.py:209 +#: netbox/extras/models/customfields.py:210 msgid "Minimum allowed value (for numeric fields)" msgstr "" -#: netbox/extras/models/customfields.py:216 +#: netbox/extras/models/customfields.py:217 msgid "maximum value" msgstr "" -#: netbox/extras/models/customfields.py:217 +#: netbox/extras/models/customfields.py:218 msgid "Maximum allowed value (for numeric fields)" msgstr "" -#: netbox/extras/models/customfields.py:223 +#: netbox/extras/models/customfields.py:224 msgid "validation regex" msgstr "" -#: netbox/extras/models/customfields.py:225 +#: netbox/extras/models/customfields.py:226 #, python-brace-format msgid "" "Regular expression to enforce on text field values. Use ^ and $ to force " @@ -9572,221 +9572,221 @@ msgid "" "values to exactly three uppercase letters." msgstr "" -#: netbox/extras/models/customfields.py:233 +#: netbox/extras/models/customfields.py:234 msgid "validation schema" msgstr "" -#: netbox/extras/models/customfields.py:240 +#: netbox/extras/models/customfields.py:241 msgid "choice set" msgstr "" -#: netbox/extras/models/customfields.py:249 +#: netbox/extras/models/customfields.py:250 msgid "Specifies whether the custom field is displayed in the UI" msgstr "" -#: netbox/extras/models/customfields.py:256 +#: netbox/extras/models/customfields.py:257 msgid "Specifies whether the custom field value can be edited in the UI" msgstr "" -#: netbox/extras/models/customfields.py:260 +#: netbox/extras/models/customfields.py:261 msgid "is cloneable" msgstr "" -#: netbox/extras/models/customfields.py:261 +#: netbox/extras/models/customfields.py:262 msgid "Replicate this value when cloning objects" msgstr "" -#: netbox/extras/models/customfields.py:281 +#: netbox/extras/models/customfields.py:282 msgid "custom field" msgstr "" -#: netbox/extras/models/customfields.py:282 +#: netbox/extras/models/customfields.py:283 msgid "custom fields" msgstr "" -#: netbox/extras/models/customfields.py:420 +#: netbox/extras/models/customfields.py:440 #, python-brace-format msgid "Invalid default value \"{value}\": {error}" msgstr "" -#: netbox/extras/models/customfields.py:427 +#: netbox/extras/models/customfields.py:447 msgid "A minimum value may be set only for numeric fields" msgstr "" -#: netbox/extras/models/customfields.py:429 +#: netbox/extras/models/customfields.py:449 msgid "A maximum value may be set only for numeric fields" msgstr "" -#: netbox/extras/models/customfields.py:439 +#: netbox/extras/models/customfields.py:459 msgid "Regular expression validation is supported only for text and URL fields" msgstr "" -#: netbox/extras/models/customfields.py:445 +#: netbox/extras/models/customfields.py:465 msgid "JSON schema validation is supported only for JSON fields" msgstr "" -#: netbox/extras/models/customfields.py:451 +#: netbox/extras/models/customfields.py:471 msgid "Uniqueness cannot be enforced for boolean fields" msgstr "" -#: netbox/extras/models/customfields.py:461 +#: netbox/extras/models/customfields.py:481 msgid "Selection fields must specify a set of choices." msgstr "" -#: netbox/extras/models/customfields.py:465 +#: netbox/extras/models/customfields.py:485 msgid "Choices may be set only on selection fields." msgstr "" -#: netbox/extras/models/customfields.py:472 +#: netbox/extras/models/customfields.py:492 msgid "Object fields must define an object type." msgstr "" -#: netbox/extras/models/customfields.py:476 +#: netbox/extras/models/customfields.py:496 #, python-brace-format msgid "{type} fields may not define an object type." msgstr "" -#: netbox/extras/models/customfields.py:483 +#: netbox/extras/models/customfields.py:503 msgid "A related object filter can be defined only for object fields." msgstr "" -#: netbox/extras/models/customfields.py:487 +#: netbox/extras/models/customfields.py:507 msgid "Filter must be defined as a dictionary mapping attributes to values." msgstr "" -#: netbox/extras/models/customfields.py:576 +#: netbox/extras/models/customfields.py:596 msgid "True" msgstr "" -#: netbox/extras/models/customfields.py:577 +#: netbox/extras/models/customfields.py:597 msgid "False" msgstr "" -#: netbox/extras/models/customfields.py:630 -#: netbox/extras/models/customfields.py:683 +#: netbox/extras/models/customfields.py:650 +#: netbox/extras/models/customfields.py:703 #, python-brace-format msgid "Values must match this regex: {regex}" msgstr "" -#: netbox/extras/models/customfields.py:785 -#: netbox/extras/models/customfields.py:792 +#: netbox/extras/models/customfields.py:813 +#: netbox/extras/models/customfields.py:820 msgid "Value must be a string." msgstr "" -#: netbox/extras/models/customfields.py:787 -#: netbox/extras/models/customfields.py:794 +#: netbox/extras/models/customfields.py:815 +#: netbox/extras/models/customfields.py:822 #, python-brace-format msgid "Value must match regex '{regex}'" msgstr "" -#: netbox/extras/models/customfields.py:799 +#: netbox/extras/models/customfields.py:827 msgid "Value must be an integer." msgstr "" -#: netbox/extras/models/customfields.py:802 -#: netbox/extras/models/customfields.py:817 +#: netbox/extras/models/customfields.py:830 +#: netbox/extras/models/customfields.py:845 #, python-brace-format msgid "Value must be at least {minimum}" msgstr "" -#: netbox/extras/models/customfields.py:806 -#: netbox/extras/models/customfields.py:821 +#: netbox/extras/models/customfields.py:834 +#: netbox/extras/models/customfields.py:849 #, python-brace-format msgid "Value must not exceed {maximum}" msgstr "" -#: netbox/extras/models/customfields.py:814 +#: netbox/extras/models/customfields.py:842 msgid "Value must be a decimal." msgstr "" -#: netbox/extras/models/customfields.py:826 +#: netbox/extras/models/customfields.py:854 msgid "Value must be true or false." msgstr "" -#: netbox/extras/models/customfields.py:834 +#: netbox/extras/models/customfields.py:862 msgid "Date values must be in ISO 8601 format (YYYY-MM-DD)." msgstr "" -#: netbox/extras/models/customfields.py:843 +#: netbox/extras/models/customfields.py:871 msgid "Date and time values must be in ISO 8601 format (YYYY-MM-DD HH:MM:SS)." msgstr "" -#: netbox/extras/models/customfields.py:850 +#: netbox/extras/models/customfields.py:878 #, python-brace-format msgid "Invalid choice ({value}) for choice set {choiceset}." msgstr "" -#: netbox/extras/models/customfields.py:860 +#: netbox/extras/models/customfields.py:888 #, python-brace-format msgid "Invalid choice(s) ({value}) for choice set {choiceset}." msgstr "" -#: netbox/extras/models/customfields.py:869 +#: netbox/extras/models/customfields.py:897 #, python-brace-format msgid "Value must be an object ID, not {type}" msgstr "" -#: netbox/extras/models/customfields.py:875 +#: netbox/extras/models/customfields.py:903 #, python-brace-format msgid "Value must be a list of object IDs, not {type}" msgstr "" -#: netbox/extras/models/customfields.py:879 +#: netbox/extras/models/customfields.py:907 #, python-brace-format msgid "Found invalid object ID: {id}" msgstr "" -#: netbox/extras/models/customfields.py:888 +#: netbox/extras/models/customfields.py:916 #, python-brace-format msgid "Value does not conform to the assigned schema: {error}" msgstr "" -#: netbox/extras/models/customfields.py:892 +#: netbox/extras/models/customfields.py:920 msgid "Required field cannot be empty." msgstr "" -#: netbox/extras/models/customfields.py:912 +#: netbox/extras/models/customfields.py:940 msgid "Base set of predefined choices (optional)" msgstr "" -#: netbox/extras/models/customfields.py:924 +#: netbox/extras/models/customfields.py:952 msgid "Choices are automatically ordered alphabetically" msgstr "" -#: netbox/extras/models/customfields.py:931 +#: netbox/extras/models/customfields.py:959 msgid "custom field choice set" msgstr "" -#: netbox/extras/models/customfields.py:932 +#: netbox/extras/models/customfields.py:960 msgid "custom field choice sets" msgstr "" -#: netbox/extras/models/customfields.py:992 +#: netbox/extras/models/customfields.py:1020 msgid "Must define base or extra choices." msgstr "" -#: netbox/extras/models/customfields.py:998 +#: netbox/extras/models/customfields.py:1026 msgid "Color mappings must be defined as a JSON object." msgstr "" -#: netbox/extras/models/customfields.py:1010 +#: netbox/extras/models/customfields.py:1038 #, python-brace-format msgid "Duplicate value '{value}' found in extra choices." msgstr "" -#: netbox/extras/models/customfields.py:1027 +#: netbox/extras/models/customfields.py:1055 #, python-brace-format msgid "" "Color mappings must reference an existing choice value. Invalid value(s): " "{values}." msgstr "" -#: netbox/extras/models/customfields.py:1034 +#: netbox/extras/models/customfields.py:1062 #, python-brace-format msgid "Invalid color value(s): {colors}. Use a supported named color." msgstr "" -#: netbox/extras/models/customfields.py:1057 +#: netbox/extras/models/customfields.py:1085 #, python-brace-format msgid "" "Cannot remove choice {choice} as there are {model} objects which reference " @@ -10319,8 +10319,8 @@ msgstr "" #: netbox/extras/tables/tables.py:535 netbox/extras/tables/tables.py:565 #: netbox/extras/tables/tables.py:656 netbox/extras/tables/tables.py:712 #: netbox/netbox/forms/mixins.py:166 netbox/netbox/forms/mixins.py:191 -#: netbox/netbox/tables/tables.py:343 netbox/netbox/tables/tables.py:358 -#: netbox/netbox/tables/tables.py:373 netbox/templates/generic/object.html:61 +#: netbox/netbox/tables/tables.py:406 netbox/netbox/tables/tables.py:421 +#: netbox/netbox/tables/tables.py:436 netbox/templates/generic/object.html:61 #: netbox/users/forms/model_forms.py:556 msgid "Owner" msgstr "" @@ -12539,8 +12539,8 @@ msgstr "" msgid "Owner group" msgstr "" -#: netbox/netbox/forms/mixins.py:182 netbox/netbox/tables/tables.py:339 -#: netbox/netbox/tables/tables.py:354 netbox/netbox/tables/tables.py:369 +#: netbox/netbox/forms/mixins.py:182 netbox/netbox/tables/tables.py:402 +#: netbox/netbox/tables/tables.py:417 netbox/netbox/tables/tables.py:432 #: netbox/users/forms/model_forms.py:544 msgid "Owner Group" msgstr "" @@ -13326,17 +13326,17 @@ msgstr "" msgid "Toggle Dropdown" msgstr "" -#: netbox/netbox/tables/tables.py:62 +#: netbox/netbox/tables/tables.py:63 #, python-brace-format msgid "No {model_name} found" msgstr "" -#: netbox/netbox/tables/tables.py:399 +#: netbox/netbox/tables/tables.py:462 #: netbox/templates/generic/bulk_import.html:148 msgid "Field" msgstr "" -#: netbox/netbox/tables/tables.py:402 +#: netbox/netbox/tables/tables.py:465 #: netbox/templates/extras/panels/customfieldchoiceset_choices.html:9 msgid "Value" msgstr "" @@ -15921,19 +15921,27 @@ msgstr "" msgid "tenant groups" msgstr "" -#: netbox/tenancy/models/tenants.py:71 -msgid "Tenant name must be unique per group." -msgstr "" - -#: netbox/tenancy/models/tenants.py:81 -msgid "Tenant slug must be unique per group." +#: netbox/tenancy/models/tenants.py:48 +#, python-brace-format +msgid "" +"Unable to delete tenant group {tenant_group}. Ungrouping its tenants, " +"including those of any nested groups, would create duplicate tenant names or " +"slugs." msgstr "" #: netbox/tenancy/models/tenants.py:89 +msgid "Tenant name must be unique per group." +msgstr "" + +#: netbox/tenancy/models/tenants.py:99 +msgid "Tenant slug must be unique per group." +msgstr "" + +#: netbox/tenancy/models/tenants.py:107 msgid "tenant" msgstr "" -#: netbox/tenancy/models/tenants.py:90 +#: netbox/tenancy/models/tenants.py:108 msgid "tenants" msgstr "" From f7768e95dd5731903d764523f0ce0c49fa1e015a Mon Sep 17 00:00:00 2001 From: Sri Chandraja Reddy Allala <83540835+ascjreddy@users.noreply.github.com> Date: Fri, 7 Aug 2026 07:40:57 -0400 Subject: [PATCH 30/35] Fixes #22694: Clear stale Rack assignment when changing a Device's Site (#22764) Prevent out-of-order dynamic select responses from restoring options for an earlier dependency state. Track the latest load request, preserve valid selections across superseding loads, and properly finalize stale requests and their loading state. Clear any pending restored value when a request cannot be made or fails. --- netbox/project-static/dist/netbox.js | 8 +-- netbox/project-static/dist/netbox.js.map | 6 +- .../src/select/classes/dynamicTomSelect.ts | 71 +++++++++++++++++-- 3 files changed, 74 insertions(+), 11 deletions(-) diff --git a/netbox/project-static/dist/netbox.js b/netbox/project-static/dist/netbox.js index eb94ddf86..fc52b2992 100644 --- a/netbox/project-static/dist/netbox.js +++ b/netbox/project-static/dist/netbox.js @@ -1,11 +1,11 @@ -"use strict";(()=>{var iu=Object.create;var Di=Object.defineProperty,ru=Object.defineProperties,ou=Object.getOwnPropertyDescriptor,su=Object.getOwnPropertyDescriptors,au=Object.getOwnPropertyNames,ps=Object.getOwnPropertySymbols,lu=Object.getPrototypeOf,ms=Object.prototype.hasOwnProperty,cu=Object.prototype.propertyIsEnumerable;var Wr=(n,e,t)=>e in n?Di(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,O=(n,e)=>{for(var t in e||(e={}))ms.call(e,t)&&Wr(n,t,e[t]);if(ps)for(var t of ps(e))cu.call(e,t)&&Wr(n,t,e[t]);return n},se=(n,e)=>ru(n,su(e));var uu=(n,e)=>()=>{try{return e||n((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}},gs=(n,e)=>{for(var t in e)Di(n,t,{get:e[t],enumerable:!0})},du=(n,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of au(e))!ms.call(n,r)&&r!==t&&Di(n,r,{get:()=>e[r],enumerable:!(i=ou(e,r))||i.enumerable});return n};var fu=(n,e,t)=>(t=n!=null?iu(lu(n)):{},du(e||!n||!n.__esModule?Di(t,"default",{value:n,enumerable:!0}):t,n));var le=(n,e,t)=>Wr(n,typeof e!="symbol"?e+"":e,t);var at=(n,e,t)=>new Promise((i,r)=>{var o=l=>{try{a(t.next(l))}catch(c){r(c)}},s=l=>{try{a(t.throw(l))}catch(c){r(c)}},a=l=>l.done?i(l.value):Promise.resolve(l.value).then(o,s);a((t=t.apply(n,e)).next())});var bc=uu((pi,ns)=>{(function(e,t){typeof pi=="object"&&typeof ns=="object"?ns.exports=t():typeof define=="function"&&define.amd?define([],t):typeof pi=="object"?pi.ClipboardJS=t():e.ClipboardJS=t()})(pi,function(){return(function(){var n={686:(function(i,r,o){"use strict";o.d(r,{default:function(){return Re}});var s=o(279),a=o.n(s),l=o(370),c=o.n(l),u=o(817),d=o.n(u);function p(q){try{return document.execCommand(q)}catch(M){return!1}}var y=function(M){var D=d()(M);return p("cut"),D},m=y;function g(q){var M=document.documentElement.getAttribute("dir")==="rtl",D=document.createElement("textarea");D.style.fontSize="12pt",D.style.border="0",D.style.padding="0",D.style.margin="0",D.style.position="absolute",D.style[M?"right":"left"]="-9999px";var B=window.pageYOffset||document.documentElement.scrollTop;return D.style.top="".concat(B,"px"),D.setAttribute("readonly",""),D.value=q,D}var _=function(M,D){var B=g(M);D.container.appendChild(B);var V=d()(B);return p("copy"),B.remove(),V},x=function(M){var D=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body},B="";return typeof M=="string"?B=_(M,D):M instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(M==null?void 0:M.type)?B=_(M.value,D):(B=d()(M),p("copy")),B},A=x;function w(q){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?w=function(D){return typeof D}:w=function(D){return D&&typeof Symbol=="function"&&D.constructor===Symbol&&D!==Symbol.prototype?"symbol":typeof D},w(q)}var C=function(){var M=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},D=M.action,B=D===void 0?"copy":D,V=M.container,U=M.target,Y=M.text;if(B!=="copy"&&B!=="cut")throw new Error('Invalid "action" value, use either "copy" or "cut"');if(U!==void 0)if(U&&w(U)==="object"&&U.nodeType===1){if(B==="copy"&&U.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if(B==="cut"&&(U.hasAttribute("readonly")||U.hasAttribute("disabled")))throw new Error(`Invalid "target" attribute. You can't cut text from elements with "readonly" or "disabled" attributes`)}else throw new Error('Invalid "target" value, use a valid Element');if(Y)return A(Y,{container:V});if(U)return B==="cut"?m(U):A(U,{container:V})},$=C;function j(q){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?j=function(D){return typeof D}:j=function(D){return D&&typeof Symbol=="function"&&D.constructor===Symbol&&D!==Symbol.prototype?"symbol":typeof D},j(q)}function H(q,M){if(!(q instanceof M))throw new TypeError("Cannot call a class as a function")}function I(q,M){for(var D=0;D0&&arguments[0]!==void 0?arguments[0]:{};this.action=typeof V.action=="function"?V.action:this.defaultAction,this.target=typeof V.target=="function"?V.target:this.defaultTarget,this.text=typeof V.text=="function"?V.text:this.defaultText,this.container=j(V.container)==="object"?V.container:document.body}},{key:"listenClick",value:function(V){var U=this;this.listener=c()(V,"click",function(Y){return U.onClick(Y)})}},{key:"onClick",value:function(V){var U=V.delegateTarget||V.currentTarget,Y=this.action(U)||"copy",ee=$({action:Y,container:this.container,target:this.target(U),text:this.text(U)});this.emit(ee?"success":"error",{action:Y,text:ee,trigger:U,clearSelection:function(){U&&U.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(V){return ne("action",V)}},{key:"defaultTarget",value:function(V){var U=ne("target",V);if(U)return document.querySelector(U)}},{key:"defaultText",value:function(V){return ne("text",V)}},{key:"destroy",value:function(){this.listener.destroy()}}],[{key:"copy",value:function(V){var U=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body};return A(V,U)}},{key:"cut",value:function(V){return m(V)}},{key:"isSupported",value:function(){var V=arguments.length>0&&arguments[0]!==void 0?arguments[0]:["copy","cut"],U=typeof V=="string"?[V]:V,Y=!!document.queryCommandSupported;return U.forEach(function(ee){Y=Y&&!!document.queryCommandSupported(ee)}),Y}}]),D})(a()),Re=Ue}),828:(function(i){var r=9;if(typeof Element!="undefined"&&!Element.prototype.matches){var o=Element.prototype;o.matches=o.matchesSelector||o.mozMatchesSelector||o.msMatchesSelector||o.oMatchesSelector||o.webkitMatchesSelector}function s(a,l){for(;a&&a.nodeType!==r;){if(typeof a.matches=="function"&&a.matches(l))return a;a=a.parentNode}}i.exports=s}),438:(function(i,r,o){var s=o(828);function a(u,d,p,y,m){var g=c.apply(this,arguments);return u.addEventListener(p,g,m),{destroy:function(){u.removeEventListener(p,g,m)}}}function l(u,d,p,y,m){return typeof u.addEventListener=="function"?a.apply(null,arguments):typeof p=="function"?a.bind(null,document).apply(null,arguments):(typeof u=="string"&&(u=document.querySelectorAll(u)),Array.prototype.map.call(u,function(g){return a(g,d,p,y,m)}))}function c(u,d,p,y){return function(m){m.delegateTarget=s(m.target,d),m.delegateTarget&&y.call(u,m)}}i.exports=l}),879:(function(i,r){r.node=function(o){return o!==void 0&&o instanceof HTMLElement&&o.nodeType===1},r.nodeList=function(o){var s=Object.prototype.toString.call(o);return o!==void 0&&(s==="[object NodeList]"||s==="[object HTMLCollection]")&&"length"in o&&(o.length===0||r.node(o[0]))},r.string=function(o){return typeof o=="string"||o instanceof String},r.fn=function(o){var s=Object.prototype.toString.call(o);return s==="[object Function]"}}),370:(function(i,r,o){var s=o(879),a=o(438);function l(p,y,m){if(!p&&!y&&!m)throw new Error("Missing required arguments");if(!s.string(y))throw new TypeError("Second argument must be a String");if(!s.fn(m))throw new TypeError("Third argument must be a Function");if(s.node(p))return c(p,y,m);if(s.nodeList(p))return u(p,y,m);if(s.string(p))return d(p,y,m);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function c(p,y,m){return p.addEventListener(y,m),{destroy:function(){p.removeEventListener(y,m)}}}function u(p,y,m){return Array.prototype.forEach.call(p,function(g){g.addEventListener(y,m)}),{destroy:function(){Array.prototype.forEach.call(p,function(g){g.removeEventListener(y,m)})}}}function d(p,y,m){return a(document.body,p,y,m)}i.exports=l}),817:(function(i){function r(o){var s;if(o.nodeName==="SELECT")o.focus(),s=o.value;else if(o.nodeName==="INPUT"||o.nodeName==="TEXTAREA"){var a=o.hasAttribute("readonly");a||o.setAttribute("readonly",""),o.select(),o.setSelectionRange(0,o.value.length),a||o.removeAttribute("readonly"),s=o.value}else{o.hasAttribute("contenteditable")&&o.focus();var l=window.getSelection(),c=document.createRange();c.selectNodeContents(o),l.removeAllRanges(),l.addRange(c),s=l.toString()}return s}i.exports=r}),279:(function(i){function r(){}r.prototype={on:function(o,s,a){var l=this.e||(this.e={});return(l[o]||(l[o]=[])).push({fn:s,ctx:a}),this},once:function(o,s,a){var l=this;function c(){l.off(o,c),s.apply(a,arguments)}return c._=s,this.on(o,c,a)},emit:function(o){var s=[].slice.call(arguments,1),a=((this.e||(this.e={}))[o]||[]).slice(),l=0,c=a.length;for(l;lws,afterRead:()=>Es,afterWrite:()=>Cs,applyStyles:()=>fn,arrow:()=>Li,auto:()=>Bn,basePlacements:()=>lt,beforeMain:()=>bs,beforeRead:()=>vs,beforeWrite:()=>xs,bottom:()=>ge,clippingParents:()=>qr,computeStyles:()=>pn,createPopper:()=>Kn,createPopperBase:()=>Hs,createPopperLite:()=>Is,detectOverflow:()=>ke,end:()=>bt,eventListeners:()=>mn,flip:()=>Hi,hide:()=>Ii,left:()=>pe,main:()=>_s,modifierPhases:()=>Yr,offset:()=>Ri,placements:()=>zn,popper:()=>$t,popperGenerator:()=>Yt,popperOffsets:()=>yn,preventOverflow:()=>Pi,read:()=>ys,reference:()=>Ur,right:()=>me,start:()=>rt,top:()=>de,variationPlacements:()=>Oi,viewport:()=>Vn,write:()=>Ts});var de="top",ge="bottom",me="right",pe="left",Bn="auto",lt=[de,ge,me,pe],rt="start",bt="end",qr="clippingParents",Vn="viewport",$t="popper",Ur="reference",Oi=lt.reduce(function(n,e){return n.concat([e+"-"+rt,e+"-"+bt])},[]),zn=[].concat(lt,[Bn]).reduce(function(n,e){return n.concat([e,e+"-"+rt,e+"-"+bt])},[]),vs="beforeRead",ys="read",Es="afterRead",bs="beforeMain",_s="main",ws="afterMain",xs="beforeWrite",Ts="write",Cs="afterWrite",Yr=[vs,ys,Es,bs,_s,ws,xs,Ts,Cs];function xe(n){return n?(n.nodeName||"").toLowerCase():null}function ce(n){if(n==null)return window;if(n.toString()!=="[object Window]"){var e=n.ownerDocument;return e&&e.defaultView||window}return n}function Ye(n){var e=ce(n).Element;return n instanceof e||n instanceof Element}function _e(n){var e=ce(n).HTMLElement;return n instanceof e||n instanceof HTMLElement}function dn(n){if(typeof ShadowRoot=="undefined")return!1;var e=ce(n).ShadowRoot;return n instanceof e||n instanceof ShadowRoot}function hu(n){var e=n.state;Object.keys(e.elements).forEach(function(t){var i=e.styles[t]||{},r=e.attributes[t]||{},o=e.elements[t];!_e(o)||!xe(o)||(Object.assign(o.style,i),Object.keys(r).forEach(function(s){var a=r[s];a===!1?o.removeAttribute(s):o.setAttribute(s,a===!0?"":a)}))})}function pu(n){var e=n.state,t={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,t.popper),e.styles=t,e.elements.arrow&&Object.assign(e.elements.arrow.style,t.arrow),function(){Object.keys(e.elements).forEach(function(i){var r=e.elements[i],o=e.attributes[i]||{},s=Object.keys(e.styles.hasOwnProperty(i)?e.styles[i]:t[i]),a=s.reduce(function(l,c){return l[c]="",l},{});!_e(r)||!xe(r)||(Object.assign(r.style,a),Object.keys(o).forEach(function(l){r.removeAttribute(l)}))})}}var fn={name:"applyStyles",enabled:!0,phase:"write",fn:hu,effect:pu,requires:["computeStyles"]};function Te(n){return n.split("-")[0]}var Ze=Math.max,Bt=Math.min,ct=Math.round;function hn(){var n=navigator.userAgentData;return n!=null&&n.brands&&Array.isArray(n.brands)?n.brands.map(function(e){return e.brand+"/"+e.version}).join(" "):navigator.userAgent}function jn(){return!/^((?!chrome|android).)*safari/i.test(hn())}function Ge(n,e,t){e===void 0&&(e=!1),t===void 0&&(t=!1);var i=n.getBoundingClientRect(),r=1,o=1;e&&_e(n)&&(r=n.offsetWidth>0&&ct(i.width)/n.offsetWidth||1,o=n.offsetHeight>0&&ct(i.height)/n.offsetHeight||1);var s=Ye(n)?ce(n):window,a=s.visualViewport,l=!jn()&&t,c=(i.left+(l&&a?a.offsetLeft:0))/r,u=(i.top+(l&&a?a.offsetTop:0))/o,d=i.width/r,p=i.height/o;return{width:d,height:p,top:u,right:c+d,bottom:u+p,left:c,x:c,y:u}}function Vt(n){var e=Ge(n),t=n.offsetWidth,i=n.offsetHeight;return Math.abs(e.width-t)<=1&&(t=e.width),Math.abs(e.height-i)<=1&&(i=e.height),{x:n.offsetLeft,y:n.offsetTop,width:t,height:i}}function Wn(n,e){var t=e.getRootNode&&e.getRootNode();if(n.contains(e))return!0;if(t&&dn(t)){var i=e;do{if(i&&n.isSameNode(i))return!0;i=i.parentNode||i.host}while(i)}return!1}function Ne(n){return ce(n).getComputedStyle(n)}function Gr(n){return["table","td","th"].indexOf(xe(n))>=0}function Se(n){return((Ye(n)?n.ownerDocument:n.document)||window.document).documentElement}function ut(n){return xe(n)==="html"?n:n.assignedSlot||n.parentNode||(dn(n)?n.host:null)||Se(n)}function Ss(n){return!_e(n)||Ne(n).position==="fixed"?null:n.offsetParent}function mu(n){var e=/firefox/i.test(hn()),t=/Trident/i.test(hn());if(t&&_e(n)){var i=Ne(n);if(i.position==="fixed")return null}var r=ut(n);for(dn(r)&&(r=r.host);_e(r)&&["html","body"].indexOf(xe(r))<0;){var o=Ne(r);if(o.transform!=="none"||o.perspective!=="none"||o.contain==="paint"||["transform","perspective"].indexOf(o.willChange)!==-1||e&&o.willChange==="filter"||e&&o.filter&&o.filter!=="none")return r;r=r.parentNode}return null}function et(n){for(var e=ce(n),t=Ss(n);t&&Gr(t)&&Ne(t).position==="static";)t=Ss(t);return t&&(xe(t)==="html"||xe(t)==="body"&&Ne(t).position==="static")?e:t||mu(n)||e}function zt(n){return["top","bottom"].indexOf(n)>=0?"x":"y"}function jt(n,e,t){return Ze(n,Bt(e,t))}function As(n,e,t){var i=jt(n,e,t);return i>t?t:i}function qn(){return{top:0,right:0,bottom:0,left:0}}function Un(n){return Object.assign({},qn(),n)}function Yn(n,e){return e.reduce(function(t,i){return t[i]=n,t},{})}var gu=function(e,t){return e=typeof e=="function"?e(Object.assign({},t.rects,{placement:t.placement})):e,Un(typeof e!="number"?e:Yn(e,lt))};function vu(n){var e,t=n.state,i=n.name,r=n.options,o=t.elements.arrow,s=t.modifiersData.popperOffsets,a=Te(t.placement),l=zt(a),c=[pe,me].indexOf(a)>=0,u=c?"height":"width";if(!(!o||!s)){var d=gu(r.padding,t),p=Vt(o),y=l==="y"?de:pe,m=l==="y"?ge:me,g=t.rects.reference[u]+t.rects.reference[l]-s[l]-t.rects.popper[u],_=s[l]-t.rects.reference[l],x=et(o),A=x?l==="y"?x.clientHeight||0:x.clientWidth||0:0,w=g/2-_/2,C=d[y],$=A-p[u]-d[m],j=A/2-p[u]/2+w,H=jt(C,j,$),I=l;t.modifiersData[i]=(e={},e[I]=H,e.centerOffset=H-j,e)}}function yu(n){var e=n.state,t=n.options,i=t.element,r=i===void 0?"[data-popper-arrow]":i;r!=null&&(typeof r=="string"&&(r=e.elements.popper.querySelector(r),!r)||Wn(e.elements.popper,r)&&(e.elements.arrow=r))}var Li={name:"arrow",enabled:!0,phase:"main",fn:vu,effect:yu,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Ke(n){return n.split("-")[1]}var Eu={top:"auto",right:"auto",bottom:"auto",left:"auto"};function bu(n,e){var t=n.x,i=n.y,r=e.devicePixelRatio||1;return{x:ct(t*r)/r||0,y:ct(i*r)/r||0}}function Ds(n){var e,t=n.popper,i=n.popperRect,r=n.placement,o=n.variation,s=n.offsets,a=n.position,l=n.gpuAcceleration,c=n.adaptive,u=n.roundOffsets,d=n.isFixed,p=s.x,y=p===void 0?0:p,m=s.y,g=m===void 0?0:m,_=typeof u=="function"?u({x:y,y:g}):{x:y,y:g};y=_.x,g=_.y;var x=s.hasOwnProperty("x"),A=s.hasOwnProperty("y"),w=pe,C=de,$=window;if(c){var j=et(t),H="clientHeight",I="clientWidth";if(j===ce(t)&&(j=Se(t),Ne(j).position!=="static"&&a==="absolute"&&(H="scrollHeight",I="scrollWidth")),j=j,r===de||(r===pe||r===me)&&o===bt){C=ge;var L=d&&j===$&&$.visualViewport?$.visualViewport.height:j[H];g-=L-i.height,g*=l?1:-1}if(r===pe||(r===de||r===ge)&&o===bt){w=me;var W=d&&j===$&&$.visualViewport?$.visualViewport.width:j[I];y-=W-i.width,y*=l?1:-1}}var G=Object.assign({position:a},c&&Eu),Q=u===!0?bu({x:y,y:g},ce(t)):{x:y,y:g};if(y=Q.x,g=Q.y,l){var Z;return Object.assign({},G,(Z={},Z[C]=A?"0":"",Z[w]=x?"0":"",Z.transform=($.devicePixelRatio||1)<=1?"translate("+y+"px, "+g+"px)":"translate3d("+y+"px, "+g+"px, 0)",Z))}return Object.assign({},G,(e={},e[C]=A?g+"px":"",e[w]=x?y+"px":"",e.transform="",e))}function _u(n){var e=n.state,t=n.options,i=t.gpuAcceleration,r=i===void 0?!0:i,o=t.adaptive,s=o===void 0?!0:o,a=t.roundOffsets,l=a===void 0?!0:a,c={placement:Te(e.placement),variation:Ke(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:r,isFixed:e.options.strategy==="fixed"};e.modifiersData.popperOffsets!=null&&(e.styles.popper=Object.assign({},e.styles.popper,Ds(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:s,roundOffsets:l})))),e.modifiersData.arrow!=null&&(e.styles.arrow=Object.assign({},e.styles.arrow,Ds(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})}var pn={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:_u,data:{}};var Mi={passive:!0};function wu(n){var e=n.state,t=n.instance,i=n.options,r=i.scroll,o=r===void 0?!0:r,s=i.resize,a=s===void 0?!0:s,l=ce(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach(function(u){u.addEventListener("scroll",t.update,Mi)}),a&&l.addEventListener("resize",t.update,Mi),function(){o&&c.forEach(function(u){u.removeEventListener("scroll",t.update,Mi)}),a&&l.removeEventListener("resize",t.update,Mi)}}var mn={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:wu,data:{}};var xu={left:"right",right:"left",bottom:"top",top:"bottom"};function gn(n){return n.replace(/left|right|bottom|top/g,function(e){return xu[e]})}var Tu={start:"end",end:"start"};function Ni(n){return n.replace(/start|end/g,function(e){return Tu[e]})}function Wt(n){var e=ce(n),t=e.pageXOffset,i=e.pageYOffset;return{scrollLeft:t,scrollTop:i}}function qt(n){return Ge(Se(n)).left+Wt(n).scrollLeft}function Kr(n,e){var t=ce(n),i=Se(n),r=t.visualViewport,o=i.clientWidth,s=i.clientHeight,a=0,l=0;if(r){o=r.width,s=r.height;var c=jn();(c||!c&&e==="fixed")&&(a=r.offsetLeft,l=r.offsetTop)}return{width:o,height:s,x:a+qt(n),y:l}}function Xr(n){var e,t=Se(n),i=Wt(n),r=(e=n.ownerDocument)==null?void 0:e.body,o=Ze(t.scrollWidth,t.clientWidth,r?r.scrollWidth:0,r?r.clientWidth:0),s=Ze(t.scrollHeight,t.clientHeight,r?r.scrollHeight:0,r?r.clientHeight:0),a=-i.scrollLeft+qt(n),l=-i.scrollTop;return Ne(r||t).direction==="rtl"&&(a+=Ze(t.clientWidth,r?r.clientWidth:0)-o),{width:o,height:s,x:a,y:l}}function Ut(n){var e=Ne(n),t=e.overflow,i=e.overflowX,r=e.overflowY;return/auto|scroll|overlay|hidden/.test(t+r+i)}function ki(n){return["html","body","#document"].indexOf(xe(n))>=0?n.ownerDocument.body:_e(n)&&Ut(n)?n:ki(ut(n))}function _t(n,e){var t;e===void 0&&(e=[]);var i=ki(n),r=i===((t=n.ownerDocument)==null?void 0:t.body),o=ce(i),s=r?[o].concat(o.visualViewport||[],Ut(i)?i:[]):i,a=e.concat(s);return r?a:a.concat(_t(ut(s)))}function vn(n){return Object.assign({},n,{left:n.x,top:n.y,right:n.x+n.width,bottom:n.y+n.height})}function Cu(n,e){var t=Ge(n,!1,e==="fixed");return t.top=t.top+n.clientTop,t.left=t.left+n.clientLeft,t.bottom=t.top+n.clientHeight,t.right=t.left+n.clientWidth,t.width=n.clientWidth,t.height=n.clientHeight,t.x=t.left,t.y=t.top,t}function Os(n,e,t){return e===Vn?vn(Kr(n,t)):Ye(e)?Cu(e,t):vn(Xr(Se(n)))}function Su(n){var e=_t(ut(n)),t=["absolute","fixed"].indexOf(Ne(n).position)>=0,i=t&&_e(n)?et(n):n;return Ye(i)?e.filter(function(r){return Ye(r)&&Wn(r,i)&&xe(r)!=="body"}):[]}function Qr(n,e,t,i){var r=e==="clippingParents"?Su(n):[].concat(e),o=[].concat(r,[t]),s=o[0],a=o.reduce(function(l,c){var u=Os(n,c,i);return l.top=Ze(u.top,l.top),l.right=Bt(u.right,l.right),l.bottom=Bt(u.bottom,l.bottom),l.left=Ze(u.left,l.left),l},Os(n,s,i));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function Gn(n){var e=n.reference,t=n.element,i=n.placement,r=i?Te(i):null,o=i?Ke(i):null,s=e.x+e.width/2-t.width/2,a=e.y+e.height/2-t.height/2,l;switch(r){case de:l={x:s,y:e.y-t.height};break;case ge:l={x:s,y:e.y+e.height};break;case me:l={x:e.x+e.width,y:a};break;case pe:l={x:e.x-t.width,y:a};break;default:l={x:e.x,y:e.y}}var c=r?zt(r):null;if(c!=null){var u=c==="y"?"height":"width";switch(o){case rt:l[c]=l[c]-(e[u]/2-t[u]/2);break;case bt:l[c]=l[c]+(e[u]/2-t[u]/2);break;default:}}return l}function ke(n,e){e===void 0&&(e={});var t=e,i=t.placement,r=i===void 0?n.placement:i,o=t.strategy,s=o===void 0?n.strategy:o,a=t.boundary,l=a===void 0?qr:a,c=t.rootBoundary,u=c===void 0?Vn:c,d=t.elementContext,p=d===void 0?$t:d,y=t.altBoundary,m=y===void 0?!1:y,g=t.padding,_=g===void 0?0:g,x=Un(typeof _!="number"?_:Yn(_,lt)),A=p===$t?Ur:$t,w=n.rects.popper,C=n.elements[m?A:p],$=Qr(Ye(C)?C:C.contextElement||Se(n.elements.popper),l,u,s),j=Ge(n.elements.reference),H=Gn({reference:j,element:w,strategy:"absolute",placement:r}),I=vn(Object.assign({},w,H)),L=p===$t?I:j,W={top:$.top-L.top+x.top,bottom:L.bottom-$.bottom+x.bottom,left:$.left-L.left+x.left,right:L.right-$.right+x.right},G=n.modifiersData.offset;if(p===$t&&G){var Q=G[r];Object.keys(W).forEach(function(Z){var he=[me,ge].indexOf(Z)>=0?1:-1,Ce=[de,ge].indexOf(Z)>=0?"y":"x";W[Z]+=Q[Ce]*he})}return W}function Jr(n,e){e===void 0&&(e={});var t=e,i=t.placement,r=t.boundary,o=t.rootBoundary,s=t.padding,a=t.flipVariations,l=t.allowedAutoPlacements,c=l===void 0?zn:l,u=Ke(i),d=u?a?Oi:Oi.filter(function(m){return Ke(m)===u}):lt,p=d.filter(function(m){return c.indexOf(m)>=0});p.length===0&&(p=d);var y=p.reduce(function(m,g){return m[g]=ke(n,{placement:g,boundary:r,rootBoundary:o,padding:s})[Te(g)],m},{});return Object.keys(y).sort(function(m,g){return y[m]-y[g]})}function Au(n){if(Te(n)===Bn)return[];var e=gn(n);return[Ni(n),e,Ni(e)]}function Du(n){var e=n.state,t=n.options,i=n.name;if(!e.modifiersData[i]._skip){for(var r=t.mainAxis,o=r===void 0?!0:r,s=t.altAxis,a=s===void 0?!0:s,l=t.fallbackPlacements,c=t.padding,u=t.boundary,d=t.rootBoundary,p=t.altBoundary,y=t.flipVariations,m=y===void 0?!0:y,g=t.allowedAutoPlacements,_=e.options.placement,x=Te(_),A=x===_,w=l||(A||!m?[gn(_)]:Au(_)),C=[_].concat(w).reduce(function(V,U){return V.concat(Te(U)===Bn?Jr(e,{placement:U,boundary:u,rootBoundary:d,padding:c,flipVariations:m,allowedAutoPlacements:g}):U)},[]),$=e.rects.reference,j=e.rects.popper,H=new Map,I=!0,L=C[0],W=0;W=0,Ce=he?"width":"height",ie=ke(e,{placement:G,boundary:u,rootBoundary:d,altBoundary:p,padding:c}),ne=he?Z?me:pe:Z?ge:de;$[Ce]>j[Ce]&&(ne=gn(ne));var Ue=gn(ne),Re=[];if(o&&Re.push(ie[Q]<=0),a&&Re.push(ie[ne]<=0,ie[Ue]<=0),Re.every(function(V){return V})){L=G,I=!1;break}H.set(G,Re)}if(I)for(var q=m?3:1,M=function(U){var Y=C.find(function(ee){var oe=H.get(ee);if(oe)return oe.slice(0,U).every(function(Et){return Et})});if(Y)return L=Y,"break"},D=q;D>0;D--){var B=M(D);if(B==="break")break}e.placement!==L&&(e.modifiersData[i]._skip=!0,e.placement=L,e.reset=!0)}}var Hi={name:"flip",enabled:!0,phase:"main",fn:Du,requiresIfExists:["offset"],data:{_skip:!1}};function Ls(n,e,t){return t===void 0&&(t={x:0,y:0}),{top:n.top-e.height-t.y,right:n.right-e.width+t.x,bottom:n.bottom-e.height+t.y,left:n.left-e.width-t.x}}function Ms(n){return[de,me,ge,pe].some(function(e){return n[e]>=0})}function Ou(n){var e=n.state,t=n.name,i=e.rects.reference,r=e.rects.popper,o=e.modifiersData.preventOverflow,s=ke(e,{elementContext:"reference"}),a=ke(e,{altBoundary:!0}),l=Ls(s,i),c=Ls(a,r,o),u=Ms(l),d=Ms(c);e.modifiersData[t]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:u,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":d})}var Ii={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:Ou};function Lu(n,e,t){var i=Te(n),r=[pe,de].indexOf(i)>=0?-1:1,o=typeof t=="function"?t(Object.assign({},e,{placement:n})):t,s=o[0],a=o[1];return s=s||0,a=(a||0)*r,[pe,me].indexOf(i)>=0?{x:a,y:s}:{x:s,y:a}}function Mu(n){var e=n.state,t=n.options,i=n.name,r=t.offset,o=r===void 0?[0,0]:r,s=zn.reduce(function(u,d){return u[d]=Lu(d,e.rects,o),u},{}),a=s[e.placement],l=a.x,c=a.y;e.modifiersData.popperOffsets!=null&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[i]=s}var Ri={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:Mu};function Nu(n){var e=n.state,t=n.name;e.modifiersData[t]=Gn({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})}var yn={name:"popperOffsets",enabled:!0,phase:"read",fn:Nu,data:{}};function Zr(n){return n==="x"?"y":"x"}function ku(n){var e=n.state,t=n.options,i=n.name,r=t.mainAxis,o=r===void 0?!0:r,s=t.altAxis,a=s===void 0?!1:s,l=t.boundary,c=t.rootBoundary,u=t.altBoundary,d=t.padding,p=t.tether,y=p===void 0?!0:p,m=t.tetherOffset,g=m===void 0?0:m,_=ke(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:u}),x=Te(e.placement),A=Ke(e.placement),w=!A,C=zt(x),$=Zr(C),j=e.modifiersData.popperOffsets,H=e.rects.reference,I=e.rects.popper,L=typeof g=="function"?g(Object.assign({},e.rects,{placement:e.placement})):g,W=typeof L=="number"?{mainAxis:L,altAxis:L}:Object.assign({mainAxis:0,altAxis:0},L),G=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,Q={x:0,y:0};if(j){if(o){var Z,he=C==="y"?de:pe,Ce=C==="y"?ge:me,ie=C==="y"?"height":"width",ne=j[C],Ue=ne+_[he],Re=ne-_[Ce],q=y?-I[ie]/2:0,M=A===rt?H[ie]:I[ie],D=A===rt?-I[ie]:-H[ie],B=e.elements.arrow,V=y&&B?Vt(B):{width:0,height:0},U=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:qn(),Y=U[he],ee=U[Ce],oe=jt(0,H[ie],V[ie]),Et=w?H[ie]/2-q-oe-Y-W.mainAxis:M-oe-Y-W.mainAxis,Fr=w?-H[ie]/2+q+oe+ee+W.mainAxis:D+oe+ee+W.mainAxis,rn=e.elements.arrow&&et(e.elements.arrow),on=rn?C==="y"?rn.clientTop||0:rn.clientLeft||0:0,_i=(Z=G==null?void 0:G[C])!=null?Z:0,$r=ne+Et-_i-on,wi=ne+Fr-_i,xi=jt(y?Bt(Ue,$r):Ue,ne,y?Ze(Re,wi):Re);j[C]=xi,Q[C]=xi-ne}if(a){var Rn,Ti=C==="x"?de:pe,sn=C==="x"?ge:me,ot=j[$],an=$==="y"?"height":"width",Pn=ot+_[Ti],ln=ot-_[sn],cn=[de,pe].indexOf(x)!==-1,Ft=(Rn=G==null?void 0:G[$])!=null?Rn:0,Ci=cn?Pn:ot-H[an]-I[an]-Ft+W.altAxis,Fn=cn?ot+H[an]+I[an]-Ft-W.altAxis:ln,Si=y&&cn?As(Ci,ot,Fn):jt(y?Ci:Pn,ot,y?Fn:ln);j[$]=Si,Q[$]=Si-ot}e.modifiersData[i]=Q}}var Pi={name:"preventOverflow",enabled:!0,phase:"main",fn:ku,requiresIfExists:["offset"]};function eo(n){return{scrollLeft:n.scrollLeft,scrollTop:n.scrollTop}}function to(n){return n===ce(n)||!_e(n)?Wt(n):eo(n)}function Hu(n){var e=n.getBoundingClientRect(),t=ct(e.width)/n.offsetWidth||1,i=ct(e.height)/n.offsetHeight||1;return t!==1||i!==1}function no(n,e,t){t===void 0&&(t=!1);var i=_e(e),r=_e(e)&&Hu(e),o=Se(e),s=Ge(n,r,t),a={scrollLeft:0,scrollTop:0},l={x:0,y:0};return(i||!i&&!t)&&((xe(e)!=="body"||Ut(o))&&(a=to(e)),_e(e)?(l=Ge(e,!0),l.x+=e.clientLeft,l.y+=e.clientTop):o&&(l.x=qt(o))),{x:s.left+a.scrollLeft-l.x,y:s.top+a.scrollTop-l.y,width:s.width,height:s.height}}function Iu(n){var e=new Map,t=new Set,i=[];n.forEach(function(o){e.set(o.name,o)});function r(o){t.add(o.name);var s=[].concat(o.requires||[],o.requiresIfExists||[]);s.forEach(function(a){if(!t.has(a)){var l=e.get(a);l&&r(l)}}),i.push(o)}return n.forEach(function(o){t.has(o.name)||r(o)}),i}function io(n){var e=Iu(n);return Yr.reduce(function(t,i){return t.concat(e.filter(function(r){return r.phase===i}))},[])}function ro(n){var e;return function(){return e||(e=new Promise(function(t){Promise.resolve().then(function(){e=void 0,t(n())})})),e}}function oo(n){var e=n.reduce(function(t,i){var r=t[i.name];return t[i.name]=r?Object.assign({},r,i,{options:Object.assign({},r.options,i.options),data:Object.assign({},r.data,i.data)}):i,t},{});return Object.keys(e).map(function(t){return e[t]})}var Ns={placement:"bottom",modifiers:[],strategy:"absolute"};function ks(){for(var n=arguments.length,e=new Array(n),t=0;t(n&&window.CSS&&window.CSS.escape&&(n=n.replace(/#([^\s"#']+)/g,(e,t)=>`#${CSS.escape(t)}`)),n),Bu=n=>n==null?`${n}`:Object.prototype.toString.call(n).match(/\s([a-z]+)/i)[1].toLowerCase(),Vu=n=>{do n+=Math.floor(Math.random()*Fu);while(document.getElementById(n));return n},zu=n=>{if(!n)return 0;let{transitionDuration:e,transitionDelay:t}=window.getComputedStyle(n),i=Number.parseFloat(e),r=Number.parseFloat(t);return!i&&!r?0:(e=e.split(",")[0],t=t.split(",")[0],(Number.parseFloat(e)+Number.parseFloat(t))*$u)},da=n=>{n.dispatchEvent(new Event(xo))},dt=n=>!n||typeof n!="object"?!1:(typeof n.jquery!="undefined"&&(n=n[0]),typeof n.nodeType!="undefined"),xt=n=>dt(n)?n.jquery?n[0]:n:typeof n=="string"&&n.length>0?document.querySelector(ua(n)):null,Cn=n=>{if(!dt(n)||n.getClientRects().length===0)return!1;let e=getComputedStyle(n).getPropertyValue("visibility")==="visible",t=n.closest("details:not([open])");if(!t)return e;if(t!==n){let i=n.closest("summary");if(i&&i.parentNode!==t||i===null)return!1}return e},Tt=n=>!n||n.nodeType!==Node.ELEMENT_NODE||n.classList.contains("disabled")?!0:typeof n.disabled!="undefined"?n.disabled:n.hasAttribute("disabled")&&n.getAttribute("disabled")!=="false",fa=n=>{if(!document.documentElement.attachShadow)return null;if(typeof n.getRootNode=="function"){let e=n.getRootNode();return e instanceof ShadowRoot?e:null}return n instanceof ShadowRoot?n:n.parentNode?fa(n.parentNode):null},Yi=()=>{},ei=n=>{n.offsetHeight},ha=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,ao=[],ju=n=>{document.readyState==="loading"?(ao.length||document.addEventListener("DOMContentLoaded",()=>{for(let e of ao)e()}),ao.push(n)):n()},Xe=()=>document.documentElement.dir==="rtl",Je=n=>{ju(()=>{let e=ha();if(e){let t=n.NAME,i=e.fn[t];e.fn[t]=n.jQueryInterface,e.fn[t].Constructor=n,e.fn[t].noConflict=()=>(e.fn[t]=i,n.jQueryInterface)}})},Pe=(n,e=[],t=n)=>typeof n=="function"?n.call(...e):t,pa=(n,e,t=!0)=>{if(!t){Pe(n);return}let r=zu(e)+5,o=!1,s=({target:a})=>{a===e&&(o=!0,e.removeEventListener(xo,s),Pe(n))};e.addEventListener(xo,s),setTimeout(()=>{o||da(e)},r)},Ao=(n,e,t,i)=>{let r=n.length,o=n.indexOf(e);return o===-1?!t&&i?n[r-1]:n[0]:(o+=t?1:-1,i&&(o=(o+r)%r),n[Math.max(0,Math.min(o,r-1))])},Wu=/[^.]*(?=\..*)\.|.*/,qu=/\..*/,Uu=/::\d+$/,lo={},Rs=1,ma={mouseenter:"mouseover",mouseleave:"mouseout"},Yu=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function ga(n,e){return e&&`${e}::${Rs++}`||n.uidEvent||Rs++}function va(n){let e=ga(n);return n.uidEvent=e,lo[e]=lo[e]||{},lo[e]}function Gu(n,e){return function t(i){return Do(i,{delegateTarget:n}),t.oneOff&&T.off(n,i.type,e),e.apply(n,[i])}}function Ku(n,e,t){return function i(r){let o=n.querySelectorAll(e);for(let{target:s}=r;s&&s!==this;s=s.parentNode)for(let a of o)if(a===s)return Do(r,{delegateTarget:s}),i.oneOff&&T.off(n,r.type,e,t),t.apply(s,[r])}}function ya(n,e,t=null){return Object.values(n).find(i=>i.callable===e&&i.delegationSelector===t)}function Ea(n,e,t){let i=typeof e=="string",r=i?t:e||t,o=ba(n);return Yu.has(o)||(o=n),[i,r,o]}function Ps(n,e,t,i,r){if(typeof e!="string"||!n)return;let[o,s,a]=Ea(e,t,i);e in ma&&(s=(m=>function(g){if(!g.relatedTarget||g.relatedTarget!==g.delegateTarget&&!g.delegateTarget.contains(g.relatedTarget))return m.call(this,g)})(s));let l=va(n),c=l[a]||(l[a]={}),u=ya(c,s,o?t:null);if(u){u.oneOff=u.oneOff&&r;return}let d=ga(s,e.replace(Wu,"")),p=o?Ku(n,t,s):Gu(n,s);p.delegationSelector=o?t:null,p.callable=s,p.oneOff=r,p.uidEvent=d,c[d]=p,n.addEventListener(a,p,o)}function To(n,e,t,i,r){let o=ya(e[t],i,r);o&&(n.removeEventListener(t,o,!!r),delete e[t][o.uidEvent])}function Xu(n,e,t,i){let r=e[t]||{};for(let[o,s]of Object.entries(r))o.includes(i)&&To(n,e,t,s.callable,s.delegationSelector)}function ba(n){return n=n.replace(qu,""),ma[n]||n}var T={on(n,e,t,i){Ps(n,e,t,i,!1)},one(n,e,t,i){Ps(n,e,t,i,!0)},off(n,e,t,i){if(typeof e!="string"||!n)return;let[r,o,s]=Ea(e,t,i),a=s!==e,l=va(n),c=l[s]||{},u=e.startsWith(".");if(typeof o!="undefined"){if(!Object.keys(c).length)return;To(n,l,s,o,r?t:null);return}if(u)for(let d of Object.keys(l))Xu(n,l,d,e.slice(1));for(let[d,p]of Object.entries(c)){let y=d.replace(Uu,"");(!a||e.includes(y))&&To(n,l,s,p.callable,p.delegationSelector)}},trigger(n,e,t){if(typeof e!="string"||!n)return null;let i=ha(),r=ba(e),o=e!==r,s=null,a=!0,l=!0,c=!1;o&&i&&(s=i.Event(e,t),i(n).trigger(s),a=!s.isPropagationStopped(),l=!s.isImmediatePropagationStopped(),c=s.isDefaultPrevented());let u=Do(new Event(e,{bubbles:a,cancelable:!0}),t);return c&&u.preventDefault(),l&&n.dispatchEvent(u),u.defaultPrevented&&s&&s.preventDefault(),u}};function Do(n,e={}){for(let[t,i]of Object.entries(e))try{n[t]=i}catch(r){Object.defineProperty(n,t,{configurable:!0,get(){return i}})}return n}function Fs(n){if(n==="true")return!0;if(n==="false")return!1;if(n===Number(n).toString())return Number(n);if(n===""||n==="null")return null;if(typeof n!="string")return n;try{return JSON.parse(decodeURIComponent(n))}catch(e){return n}}function co(n){return n.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}var ft={setDataAttribute(n,e,t){n.setAttribute(`data-bs-${co(e)}`,t)},removeDataAttribute(n,e){n.removeAttribute(`data-bs-${co(e)}`)},getDataAttributes(n){if(!n)return{};let e={},t=Object.keys(n.dataset).filter(i=>i.startsWith("bs")&&!i.startsWith("bsConfig"));for(let i of t){let r=i.replace(/^bs/,"");r=r.charAt(0).toLowerCase()+r.slice(1),e[r]=Fs(n.dataset[i])}return e},getDataAttribute(n,e){return Fs(n.getAttribute(`data-bs-${co(e)}`))}},Xt=class{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(e){return e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e}_mergeConfigObj(e,t){let i=dt(t)?ft.getDataAttribute(t,"config"):{};return O(O(O(O({},this.constructor.Default),typeof i=="object"?i:{}),dt(t)?ft.getDataAttributes(t):{}),typeof e=="object"?e:{})}_typeCheckConfig(e,t=this.constructor.DefaultType){for(let[i,r]of Object.entries(t)){let o=e[i],s=dt(o)?"element":Bu(o);if(!new RegExp(r).test(s))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${i}" provided type "${s}" but expected type "${r}".`)}}},Qu="5.3.8",qe=class extends Xt{constructor(e,t){super(),e=xt(e),e&&(this._element=e,this._config=this._getConfig(t),so.set(this._element,this.constructor.DATA_KEY,this))}dispose(){so.remove(this._element,this.constructor.DATA_KEY),T.off(this._element,this.constructor.EVENT_KEY);for(let e of Object.getOwnPropertyNames(this))this[e]=null}_queueCallback(e,t,i=!0){pa(e,t,i)}_getConfig(e){return e=this._mergeConfigObj(e,this._element),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}static getInstance(e){return so.get(xt(e),this.DATA_KEY)}static getOrCreateInstance(e,t={}){return this.getInstance(e)||new this(e,typeof t=="object"?t:null)}static get VERSION(){return Qu}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(e){return`${e}${this.EVENT_KEY}`}},uo=n=>{let e=n.getAttribute("data-bs-target");if(!e||e==="#"){let t=n.getAttribute("href");if(!t||!t.includes("#")&&!t.startsWith("."))return null;t.includes("#")&&!t.startsWith("#")&&(t=`#${t.split("#")[1]}`),e=t&&t!=="#"?t.trim():null}return e?e.split(",").map(t=>ua(t)).join(","):null},z={find(n,e=document.documentElement){return[].concat(...Element.prototype.querySelectorAll.call(e,n))},findOne(n,e=document.documentElement){return Element.prototype.querySelector.call(e,n)},children(n,e){return[].concat(...n.children).filter(t=>t.matches(e))},parents(n,e){let t=[],i=n.parentNode.closest(e);for(;i;)t.push(i),i=i.parentNode.closest(e);return t},prev(n,e){let t=n.previousElementSibling;for(;t;){if(t.matches(e))return[t];t=t.previousElementSibling}return[]},next(n,e){let t=n.nextElementSibling;for(;t;){if(t.matches(e))return[t];t=t.nextElementSibling}return[]},focusableChildren(n){let e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(t=>`${t}:not([tabindex^="-"])`).join(",");return this.find(e,n).filter(t=>!Tt(t)&&Cn(t))},getSelectorFromElement(n){let e=uo(n);return e&&z.findOne(e)?e:null},getElementFromSelector(n){let e=uo(n);return e?z.findOne(e):null},getMultipleElementsFromSelector(n){let e=uo(n);return e?z.find(e):[]}},tr=(n,e="hide")=>{let t=`click.dismiss${n.EVENT_KEY}`,i=n.NAME;T.on(document,t,`[data-bs-dismiss="${i}"]`,function(r){if(["A","AREA"].includes(this.tagName)&&r.preventDefault(),Tt(this))return;let o=z.getElementFromSelector(this)||this.closest(`.${i}`);n.getOrCreateInstance(o)[e]()})},Ju="alert",Zu="bs.alert",_a=`.${Zu}`,ed=`close${_a}`,td=`closed${_a}`,nd="fade",id="show",Gi=class n extends qe{static get NAME(){return Ju}close(){if(T.trigger(this._element,ed).defaultPrevented)return;this._element.classList.remove(id);let t=this._element.classList.contains(nd);this._queueCallback(()=>this._destroyElement(),this._element,t)}_destroyElement(){this._element.remove(),T.trigger(this._element,td),this.dispose()}static jQueryInterface(e){return this.each(function(){let t=n.getOrCreateInstance(this);if(typeof e=="string"){if(t[e]===void 0||e.startsWith("_")||e==="constructor")throw new TypeError(`No method named "${e}"`);t[e](this)}})}};tr(Gi,"close");Je(Gi);var rd="button",od="bs.button",sd=`.${od}`,ad=".data-api",ld="active",$s='[data-bs-toggle="button"]',cd=`click${sd}${ad}`,Ki=class n extends qe{static get NAME(){return rd}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle(ld))}static jQueryInterface(e){return this.each(function(){let t=n.getOrCreateInstance(this);e==="toggle"&&t[e]()})}};T.on(document,cd,$s,n=>{n.preventDefault();let e=n.target.closest($s);Ki.getOrCreateInstance(e).toggle()});Je(Ki);var ud="swipe",Sn=".bs.swipe",dd=`touchstart${Sn}`,fd=`touchmove${Sn}`,hd=`touchend${Sn}`,pd=`pointerdown${Sn}`,md=`pointerup${Sn}`,gd="touch",vd="pen",yd="pointer-event",Ed=40,bd={endCallback:null,leftCallback:null,rightCallback:null},_d={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"},Xi=class n extends Xt{constructor(e,t){super(),this._element=e,!(!e||!n.isSupported())&&(this._config=this._getConfig(t),this._deltaX=0,this._supportPointerEvents=!!window.PointerEvent,this._initEvents())}static get Default(){return bd}static get DefaultType(){return _d}static get NAME(){return ud}dispose(){T.off(this._element,Sn)}_start(e){if(!this._supportPointerEvents){this._deltaX=e.touches[0].clientX;return}this._eventIsPointerPenTouch(e)&&(this._deltaX=e.clientX)}_end(e){this._eventIsPointerPenTouch(e)&&(this._deltaX=e.clientX-this._deltaX),this._handleSwipe(),Pe(this._config.endCallback)}_move(e){this._deltaX=e.touches&&e.touches.length>1?0:e.touches[0].clientX-this._deltaX}_handleSwipe(){let e=Math.abs(this._deltaX);if(e<=Ed)return;let t=e/this._deltaX;this._deltaX=0,t&&Pe(t>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(T.on(this._element,pd,e=>this._start(e)),T.on(this._element,md,e=>this._end(e)),this._element.classList.add(yd)):(T.on(this._element,dd,e=>this._start(e)),T.on(this._element,fd,e=>this._move(e)),T.on(this._element,hd,e=>this._end(e)))}_eventIsPointerPenTouch(e){return this._supportPointerEvents&&(e.pointerType===vd||e.pointerType===gd)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}},wd="carousel",xd="bs.carousel",Dt=`.${xd}`,wa=".data-api",Td="ArrowLeft",Cd="ArrowRight",Sd=500,Xn="next",En="prev",_n="left",qi="right",Ad=`slide${Dt}`,fo=`slid${Dt}`,Dd=`keydown${Dt}`,Od=`mouseenter${Dt}`,Ld=`mouseleave${Dt}`,Md=`dragstart${Dt}`,Nd=`load${Dt}${wa}`,kd=`click${Dt}${wa}`,xa="carousel",$i="active",Hd="slide",Id="carousel-item-end",Rd="carousel-item-start",Pd="carousel-item-next",Fd="carousel-item-prev",Ta=".active",Ca=".carousel-item",$d=Ta+Ca,Bd=".carousel-item img",Vd=".carousel-indicators",zd="[data-bs-slide], [data-bs-slide-to]",jd='[data-bs-ride="carousel"]',Wd={[Td]:qi,[Cd]:_n},qd={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},Ud={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"},Jn=class n extends qe{constructor(e,t){super(e,t),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=z.findOne(Vd,this._element),this._addEventListeners(),this._config.ride===xa&&this.cycle()}static get Default(){return qd}static get DefaultType(){return Ud}static get NAME(){return wd}next(){this._slide(Xn)}nextWhenVisible(){!document.hidden&&Cn(this._element)&&this.next()}prev(){this._slide(En)}pause(){this._isSliding&&da(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval(()=>this.nextWhenVisible(),this._config.interval)}_maybeEnableCycle(){if(this._config.ride){if(this._isSliding){T.one(this._element,fo,()=>this.cycle());return}this.cycle()}}to(e){let t=this._getItems();if(e>t.length-1||e<0)return;if(this._isSliding){T.one(this._element,fo,()=>this.to(e));return}let i=this._getItemIndex(this._getActive());if(i===e)return;let r=e>i?Xn:En;this._slide(r,t[e])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(e){return e.defaultInterval=e.interval,e}_addEventListeners(){this._config.keyboard&&T.on(this._element,Dd,e=>this._keydown(e)),this._config.pause==="hover"&&(T.on(this._element,Od,()=>this.pause()),T.on(this._element,Ld,()=>this._maybeEnableCycle())),this._config.touch&&Xi.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(let i of z.find(Bd,this._element))T.on(i,Md,r=>r.preventDefault());let t={leftCallback:()=>this._slide(this._directionToOrder(_n)),rightCallback:()=>this._slide(this._directionToOrder(qi)),endCallback:()=>{this._config.pause==="hover"&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout(()=>this._maybeEnableCycle(),Sd+this._config.interval))}};this._swipeHelper=new Xi(this._element,t)}_keydown(e){if(/input|textarea/i.test(e.target.tagName))return;let t=Wd[e.key];t&&(e.preventDefault(),this._slide(this._directionToOrder(t)))}_getItemIndex(e){return this._getItems().indexOf(e)}_setActiveIndicatorElement(e){if(!this._indicatorsElement)return;let t=z.findOne(Ta,this._indicatorsElement);t.classList.remove($i),t.removeAttribute("aria-current");let i=z.findOne(`[data-bs-slide-to="${e}"]`,this._indicatorsElement);i&&(i.classList.add($i),i.setAttribute("aria-current","true"))}_updateInterval(){let e=this._activeElement||this._getActive();if(!e)return;let t=Number.parseInt(e.getAttribute("data-bs-interval"),10);this._config.interval=t||this._config.defaultInterval}_slide(e,t=null){if(this._isSliding)return;let i=this._getActive(),r=e===Xn,o=t||Ao(this._getItems(),i,r,this._config.wrap);if(o===i)return;let s=this._getItemIndex(o),a=y=>T.trigger(this._element,y,{relatedTarget:o,direction:this._orderToDirection(e),from:this._getItemIndex(i),to:s});if(a(Ad).defaultPrevented||!i||!o)return;let c=!!this._interval;this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(s),this._activeElement=o;let u=r?Rd:Id,d=r?Pd:Fd;o.classList.add(d),ei(o),i.classList.add(u),o.classList.add(u);let p=()=>{o.classList.remove(u,d),o.classList.add($i),i.classList.remove($i,d,u),this._isSliding=!1,a(fo)};this._queueCallback(p,i,this._isAnimated()),c&&this.cycle()}_isAnimated(){return this._element.classList.contains(Hd)}_getActive(){return z.findOne($d,this._element)}_getItems(){return z.find(Ca,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(e){return Xe()?e===_n?En:Xn:e===_n?Xn:En}_orderToDirection(e){return Xe()?e===En?_n:qi:e===En?qi:_n}static jQueryInterface(e){return this.each(function(){let t=n.getOrCreateInstance(this,e);if(typeof e=="number"){t.to(e);return}if(typeof e=="string"){if(t[e]===void 0||e.startsWith("_")||e==="constructor")throw new TypeError(`No method named "${e}"`);t[e]()}})}};T.on(document,kd,zd,function(n){let e=z.getElementFromSelector(this);if(!e||!e.classList.contains(xa))return;n.preventDefault();let t=Jn.getOrCreateInstance(e),i=this.getAttribute("data-bs-slide-to");if(i){t.to(i),t._maybeEnableCycle();return}if(ft.getDataAttribute(this,"slide")==="next"){t.next(),t._maybeEnableCycle();return}t.prev(),t._maybeEnableCycle()});T.on(window,Nd,()=>{let n=z.find(jd);for(let e of n)Jn.getOrCreateInstance(e)});Je(Jn);var Yd="collapse",Gd="bs.collapse",ti=`.${Gd}`,Kd=".data-api",Xd=`show${ti}`,Qd=`shown${ti}`,Jd=`hide${ti}`,Zd=`hidden${ti}`,ef=`click${ti}${Kd}`,ho="show",xn="collapse",Bi="collapsing",tf="collapsed",nf=`:scope .${xn} .${xn}`,rf="collapse-horizontal",of="width",sf="height",af=".collapse.show, .collapse.collapsing",Co='[data-bs-toggle="collapse"]',lf={parent:null,toggle:!0},cf={parent:"(null|element)",toggle:"boolean"},Ct=class n extends qe{constructor(e,t){super(e,t),this._isTransitioning=!1,this._triggerArray=[];let i=z.find(Co);for(let r of i){let o=z.getSelectorFromElement(r),s=z.find(o).filter(a=>a===this._element);o!==null&&s.length&&this._triggerArray.push(r)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return lf}static get DefaultType(){return cf}static get NAME(){return Yd}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let e=[];if(this._config.parent&&(e=this._getFirstLevelChildren(af).filter(a=>a!==this._element).map(a=>n.getOrCreateInstance(a,{toggle:!1}))),e.length&&e[0]._isTransitioning||T.trigger(this._element,Xd).defaultPrevented)return;for(let a of e)a.hide();let i=this._getDimension();this._element.classList.remove(xn),this._element.classList.add(Bi),this._element.style[i]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;let r=()=>{this._isTransitioning=!1,this._element.classList.remove(Bi),this._element.classList.add(xn,ho),this._element.style[i]="",T.trigger(this._element,Qd)},s=`scroll${i[0].toUpperCase()+i.slice(1)}`;this._queueCallback(r,this._element,!0),this._element.style[i]=`${this._element[s]}px`}hide(){if(this._isTransitioning||!this._isShown()||T.trigger(this._element,Jd).defaultPrevented)return;let t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,ei(this._element),this._element.classList.add(Bi),this._element.classList.remove(xn,ho);for(let r of this._triggerArray){let o=z.getElementFromSelector(r);o&&!this._isShown(o)&&this._addAriaAndCollapsedClass([r],!1)}this._isTransitioning=!0;let i=()=>{this._isTransitioning=!1,this._element.classList.remove(Bi),this._element.classList.add(xn),T.trigger(this._element,Zd)};this._element.style[t]="",this._queueCallback(i,this._element,!0)}_isShown(e=this._element){return e.classList.contains(ho)}_configAfterMerge(e){return e.toggle=!!e.toggle,e.parent=xt(e.parent),e}_getDimension(){return this._element.classList.contains(rf)?of:sf}_initializeChildren(){if(!this._config.parent)return;let e=this._getFirstLevelChildren(Co);for(let t of e){let i=z.getElementFromSelector(t);i&&this._addAriaAndCollapsedClass([t],this._isShown(i))}}_getFirstLevelChildren(e){let t=z.find(nf,this._config.parent);return z.find(e,this._config.parent).filter(i=>!t.includes(i))}_addAriaAndCollapsedClass(e,t){if(e.length)for(let i of e)i.classList.toggle(tf,!t),i.setAttribute("aria-expanded",t)}static jQueryInterface(e){let t={};return typeof e=="string"&&/show|hide/.test(e)&&(t.toggle=!1),this.each(function(){let i=n.getOrCreateInstance(this,t);if(typeof e=="string"){if(typeof i[e]=="undefined")throw new TypeError(`No method named "${e}"`);i[e]()}})}};T.on(document,ef,Co,function(n){(n.target.tagName==="A"||n.delegateTarget&&n.delegateTarget.tagName==="A")&&n.preventDefault();for(let e of z.getMultipleElementsFromSelector(this))Ct.getOrCreateInstance(e,{toggle:!1}).toggle()});Je(Ct);var Bs="dropdown",uf="bs.dropdown",Jt=`.${uf}`,Oo=".data-api",df="Escape",Vs="Tab",ff="ArrowUp",zs="ArrowDown",hf=2,pf=`hide${Jt}`,mf=`hidden${Jt}`,gf=`show${Jt}`,vf=`shown${Jt}`,Sa=`click${Jt}${Oo}`,Aa=`keydown${Jt}${Oo}`,yf=`keyup${Jt}${Oo}`,wn="show",Ef="dropup",bf="dropend",_f="dropstart",wf="dropup-center",xf="dropdown-center",Gt='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',Tf=`${Gt}.${wn}`,Ui=".dropdown-menu",Cf=".navbar",Sf=".navbar-nav",Af=".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",Df=Xe()?"top-end":"top-start",Of=Xe()?"top-start":"top-end",Lf=Xe()?"bottom-end":"bottom-start",Mf=Xe()?"bottom-start":"bottom-end",Nf=Xe()?"left-start":"right-start",kf=Xe()?"right-start":"left-start",Hf="top",If="bottom",Rf={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},Pf={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"},St=class n extends qe{constructor(e,t){super(e,t),this._popper=null,this._parent=this._element.parentNode,this._menu=z.next(this._element,Ui)[0]||z.prev(this._element,Ui)[0]||z.findOne(Ui,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return Rf}static get DefaultType(){return Pf}static get NAME(){return Bs}toggle(){return this._isShown()?this.hide():this.show()}show(){if(Tt(this._element)||this._isShown())return;let e={relatedTarget:this._element};if(!T.trigger(this._element,gf,e).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(Sf))for(let i of[].concat(...document.body.children))T.on(i,"mouseover",Yi);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(wn),this._element.classList.add(wn),T.trigger(this._element,vf,e)}}hide(){if(Tt(this._element)||!this._isShown())return;let e={relatedTarget:this._element};this._completeHide(e)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(e){if(!T.trigger(this._element,pf,e).defaultPrevented){if("ontouchstart"in document.documentElement)for(let i of[].concat(...document.body.children))T.off(i,"mouseover",Yi);this._popper&&this._popper.destroy(),this._menu.classList.remove(wn),this._element.classList.remove(wn),this._element.setAttribute("aria-expanded","false"),ft.removeDataAttribute(this._menu,"popper"),T.trigger(this._element,mf,e)}}_getConfig(e){if(e=super._getConfig(e),typeof e.reference=="object"&&!dt(e.reference)&&typeof e.reference.getBoundingClientRect!="function")throw new TypeError(`${Bs.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return e}_createPopper(){if(typeof Fi=="undefined")throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org/docs/v2/)");let e=this._element;this._config.reference==="parent"?e=this._parent:dt(this._config.reference)?e=xt(this._config.reference):typeof this._config.reference=="object"&&(e=this._config.reference);let t=this._getPopperConfig();this._popper=Kn(e,this._menu,t)}_isShown(){return this._menu.classList.contains(wn)}_getPlacement(){let e=this._parent;if(e.classList.contains(bf))return Nf;if(e.classList.contains(_f))return kf;if(e.classList.contains(wf))return Hf;if(e.classList.contains(xf))return If;let t=getComputedStyle(this._menu).getPropertyValue("--bs-position").trim()==="end";return e.classList.contains(Ef)?t?Of:Df:t?Mf:Lf}_detectNavbar(){return this._element.closest(Cf)!==null}_getOffset(){let{offset:e}=this._config;return typeof e=="string"?e.split(",").map(t=>Number.parseInt(t,10)):typeof e=="function"?t=>e(t,this._element):e}_getPopperConfig(){let e={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||this._config.display==="static")&&(ft.setDataAttribute(this._menu,"popper","static"),e.modifiers=[{name:"applyStyles",enabled:!1}]),O(O({},e),Pe(this._config.popperConfig,[void 0,e]))}_selectMenuItem({key:e,target:t}){let i=z.find(Af,this._menu).filter(r=>Cn(r));i.length&&Ao(i,t,e===zs,!i.includes(t)).focus()}static jQueryInterface(e){return this.each(function(){let t=n.getOrCreateInstance(this,e);if(typeof e=="string"){if(typeof t[e]=="undefined")throw new TypeError(`No method named "${e}"`);t[e]()}})}static clearMenus(e){if(e.button===hf||e.type==="keyup"&&e.key!==Vs)return;let t=z.find(Tf);for(let i of t){let r=n.getInstance(i);if(!r||r._config.autoClose===!1)continue;let o=e.composedPath(),s=o.includes(r._menu);if(o.includes(r._element)||r._config.autoClose==="inside"&&!s||r._config.autoClose==="outside"&&s||r._menu.contains(e.target)&&(e.type==="keyup"&&e.key===Vs||/input|select|option|textarea|form/i.test(e.target.tagName)))continue;let a={relatedTarget:r._element};e.type==="click"&&(a.clickEvent=e),r._completeHide(a)}}static dataApiKeydownHandler(e){let t=/input|textarea/i.test(e.target.tagName),i=e.key===df,r=[ff,zs].includes(e.key);if(!r&&!i||t&&!i)return;e.preventDefault();let o=this.matches(Gt)?this:z.prev(this,Gt)[0]||z.next(this,Gt)[0]||z.findOne(Gt,e.delegateTarget.parentNode),s=n.getOrCreateInstance(o);if(r){e.stopPropagation(),s.show(),s._selectMenuItem(e);return}s._isShown()&&(e.stopPropagation(),s.hide(),o.focus())}};T.on(document,Aa,Gt,St.dataApiKeydownHandler);T.on(document,Aa,Ui,St.dataApiKeydownHandler);T.on(document,Sa,St.clearMenus);T.on(document,yf,St.clearMenus);T.on(document,Sa,Gt,function(n){n.preventDefault(),St.getOrCreateInstance(this).toggle()});Je(St);var Da="backdrop",Ff="fade",js="show",Ws=`mousedown.bs.${Da}`,$f={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Bf={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"},Qi=class extends Xt{constructor(e){super(),this._config=this._getConfig(e),this._isAppended=!1,this._element=null}static get Default(){return $f}static get DefaultType(){return Bf}static get NAME(){return Da}show(e){if(!this._config.isVisible){Pe(e);return}this._append();let t=this._getElement();this._config.isAnimated&&ei(t),t.classList.add(js),this._emulateAnimation(()=>{Pe(e)})}hide(e){if(!this._config.isVisible){Pe(e);return}this._getElement().classList.remove(js),this._emulateAnimation(()=>{this.dispose(),Pe(e)})}dispose(){this._isAppended&&(T.off(this._element,Ws),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){let e=document.createElement("div");e.className=this._config.className,this._config.isAnimated&&e.classList.add(Ff),this._element=e}return this._element}_configAfterMerge(e){return e.rootElement=xt(e.rootElement),e}_append(){if(this._isAppended)return;let e=this._getElement();this._config.rootElement.append(e),T.on(e,Ws,()=>{Pe(this._config.clickCallback)}),this._isAppended=!0}_emulateAnimation(e){pa(e,this._getElement(),this._config.isAnimated)}},Vf="focustrap",zf="bs.focustrap",Ji=`.${zf}`,jf=`focusin${Ji}`,Wf=`keydown.tab${Ji}`,qf="Tab",Uf="forward",qs="backward",Yf={autofocus:!0,trapElement:null},Gf={autofocus:"boolean",trapElement:"element"},Zi=class extends Xt{constructor(e){super(),this._config=this._getConfig(e),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return Yf}static get DefaultType(){return Gf}static get NAME(){return Vf}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),T.off(document,Ji),T.on(document,jf,e=>this._handleFocusin(e)),T.on(document,Wf,e=>this._handleKeydown(e)),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,T.off(document,Ji))}_handleFocusin(e){let{trapElement:t}=this._config;if(e.target===document||e.target===t||t.contains(e.target))return;let i=z.focusableChildren(t);i.length===0?t.focus():this._lastTabNavDirection===qs?i[i.length-1].focus():i[0].focus()}_handleKeydown(e){e.key===qf&&(this._lastTabNavDirection=e.shiftKey?qs:Uf)}},Us=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",Ys=".sticky-top",Vi="padding-right",Gs="margin-right",Zn=class{constructor(){this._element=document.body}getWidth(){let e=document.documentElement.clientWidth;return Math.abs(window.innerWidth-e)}hide(){let e=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,Vi,t=>t+e),this._setElementAttributes(Us,Vi,t=>t+e),this._setElementAttributes(Ys,Gs,t=>t-e)}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,Vi),this._resetElementAttributes(Us,Vi),this._resetElementAttributes(Ys,Gs)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(e,t,i){let r=this.getWidth(),o=s=>{if(s!==this._element&&window.innerWidth>s.clientWidth+r)return;this._saveInitialAttribute(s,t);let a=window.getComputedStyle(s).getPropertyValue(t);s.style.setProperty(t,`${i(Number.parseFloat(a))}px`)};this._applyManipulationCallback(e,o)}_saveInitialAttribute(e,t){let i=e.style.getPropertyValue(t);i&&ft.setDataAttribute(e,t,i)}_resetElementAttributes(e,t){let i=r=>{let o=ft.getDataAttribute(r,t);if(o===null){r.style.removeProperty(t);return}ft.removeDataAttribute(r,t),r.style.setProperty(t,o)};this._applyManipulationCallback(e,i)}_applyManipulationCallback(e,t){if(dt(e)){t(e);return}for(let i of z.find(e,this._element))t(i)}},Kf="modal",Xf="bs.modal",Qe=`.${Xf}`,Qf=".data-api",Jf="Escape",Zf=`hide${Qe}`,eh=`hidePrevented${Qe}`,Oa=`hidden${Qe}`,La=`show${Qe}`,th=`shown${Qe}`,nh=`resize${Qe}`,ih=`click.dismiss${Qe}`,rh=`mousedown.dismiss${Qe}`,oh=`keydown.dismiss${Qe}`,sh=`click${Qe}${Qf}`,Ks="modal-open",ah="fade",Xs="show",po="modal-static",lh=".modal.show",ch=".modal-dialog",uh=".modal-body",dh='[data-bs-toggle="modal"]',fh={backdrop:!0,focus:!0,keyboard:!0},hh={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"},tt=class n extends qe{constructor(e,t){super(e,t),this._dialog=z.findOne(ch,this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new Zn,this._addEventListeners()}static get Default(){return fh}static get DefaultType(){return hh}static get NAME(){return Kf}toggle(e){return this._isShown?this.hide():this.show(e)}show(e){this._isShown||this._isTransitioning||T.trigger(this._element,La,{relatedTarget:e}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(Ks),this._adjustDialog(),this._backdrop.show(()=>this._showElement(e)))}hide(){!this._isShown||this._isTransitioning||T.trigger(this._element,Zf).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(Xs),this._queueCallback(()=>this._hideModal(),this._element,this._isAnimated()))}dispose(){T.off(window,Qe),T.off(this._dialog,Qe),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Qi({isVisible:!!this._config.backdrop,isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new Zi({trapElement:this._element})}_showElement(e){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;let t=z.findOne(uh,this._dialog);t&&(t.scrollTop=0),ei(this._element),this._element.classList.add(Xs);let i=()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,T.trigger(this._element,th,{relatedTarget:e})};this._queueCallback(i,this._dialog,this._isAnimated())}_addEventListeners(){T.on(this._element,oh,e=>{if(e.key===Jf){if(this._config.keyboard){this.hide();return}this._triggerBackdropTransition()}}),T.on(window,nh,()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()}),T.on(this._element,rh,e=>{T.one(this._element,ih,t=>{if(!(this._element!==e.target||this._element!==t.target)){if(this._config.backdrop==="static"){this._triggerBackdropTransition();return}this._config.backdrop&&this.hide()}})})}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide(()=>{document.body.classList.remove(Ks),this._resetAdjustments(),this._scrollBar.reset(),T.trigger(this._element,Oa)})}_isAnimated(){return this._element.classList.contains(ah)}_triggerBackdropTransition(){if(T.trigger(this._element,eh).defaultPrevented)return;let t=this._element.scrollHeight>document.documentElement.clientHeight,i=this._element.style.overflowY;i==="hidden"||this._element.classList.contains(po)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(po),this._queueCallback(()=>{this._element.classList.remove(po),this._queueCallback(()=>{this._element.style.overflowY=i},this._dialog)},this._dialog),this._element.focus())}_adjustDialog(){let e=this._element.scrollHeight>document.documentElement.clientHeight,t=this._scrollBar.getWidth(),i=t>0;if(i&&!e){let r=Xe()?"paddingLeft":"paddingRight";this._element.style[r]=`${t}px`}if(!i&&e){let r=Xe()?"paddingRight":"paddingLeft";this._element.style[r]=`${t}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(e,t){return this.each(function(){let i=n.getOrCreateInstance(this,e);if(typeof e=="string"){if(typeof i[e]=="undefined")throw new TypeError(`No method named "${e}"`);i[e](t)}})}};T.on(document,sh,dh,function(n){let e=z.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&n.preventDefault(),T.one(e,La,r=>{r.defaultPrevented||T.one(e,Oa,()=>{Cn(this)&&this.focus()})});let t=z.findOne(lh);t&&tt.getInstance(t).hide(),tt.getOrCreateInstance(e).toggle(this)});tr(tt);Je(tt);var ph="offcanvas",mh="bs.offcanvas",mt=`.${mh}`,Ma=".data-api",gh=`load${mt}${Ma}`,vh="Escape",Qs="show",Js="showing",Zs="hiding",yh="offcanvas-backdrop",Na=".offcanvas.show",Eh=`show${mt}`,bh=`shown${mt}`,_h=`hide${mt}`,ea=`hidePrevented${mt}`,ka=`hidden${mt}`,wh=`resize${mt}`,xh=`click${mt}${Ma}`,Th=`keydown.dismiss${mt}`,Ch='[data-bs-toggle="offcanvas"]',Sh={backdrop:!0,keyboard:!0,scroll:!1},Ah={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"},At=class n extends qe{constructor(e,t){super(e,t),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return Sh}static get DefaultType(){return Ah}static get NAME(){return ph}toggle(e){return this._isShown?this.hide():this.show(e)}show(e){if(this._isShown||T.trigger(this._element,Eh,{relatedTarget:e}).defaultPrevented)return;this._isShown=!0,this._backdrop.show(),this._config.scroll||new Zn().hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(Js);let i=()=>{(!this._config.scroll||this._config.backdrop)&&this._focustrap.activate(),this._element.classList.add(Qs),this._element.classList.remove(Js),T.trigger(this._element,bh,{relatedTarget:e})};this._queueCallback(i,this._element,!0)}hide(){if(!this._isShown||T.trigger(this._element,_h).defaultPrevented)return;this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(Zs),this._backdrop.hide();let t=()=>{this._element.classList.remove(Qs,Zs),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||new Zn().reset(),T.trigger(this._element,ka)};this._queueCallback(t,this._element,!0)}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){let e=()=>{if(this._config.backdrop==="static"){T.trigger(this._element,ea);return}this.hide()},t=!!this._config.backdrop;return new Qi({className:yh,isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?e:null})}_initializeFocusTrap(){return new Zi({trapElement:this._element})}_addEventListeners(){T.on(this._element,Th,e=>{if(e.key===vh){if(this._config.keyboard){this.hide();return}T.trigger(this._element,ea)}})}static jQueryInterface(e){return this.each(function(){let t=n.getOrCreateInstance(this,e);if(typeof e=="string"){if(t[e]===void 0||e.startsWith("_")||e==="constructor")throw new TypeError(`No method named "${e}"`);t[e](this)}})}};T.on(document,xh,Ch,function(n){let e=z.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&n.preventDefault(),Tt(this))return;T.one(e,ka,()=>{Cn(this)&&this.focus()});let t=z.findOne(Na);t&&t!==e&&At.getInstance(t).hide(),At.getOrCreateInstance(e).toggle(this)});T.on(window,gh,()=>{for(let n of z.find(Na))At.getOrCreateInstance(n).show()});T.on(window,wh,()=>{for(let n of z.find("[aria-modal][class*=show][class*=offcanvas-]"))getComputedStyle(n).position!=="fixed"&&At.getOrCreateInstance(n).hide()});tr(At);Je(At);var Dh=/^aria-[\w-]*$/i,Ha={"*":["class","dir","id","lang","role",Dh],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Oh=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Lh=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Mh=(n,e)=>{let t=n.nodeName.toLowerCase();return e.includes(t)?Oh.has(t)?!!Lh.test(n.nodeValue):!0:e.filter(i=>i instanceof RegExp).some(i=>i.test(t))};function Nh(n,e,t){if(!n.length)return n;if(t&&typeof t=="function")return t(n);let r=new window.DOMParser().parseFromString(n,"text/html"),o=[].concat(...r.body.querySelectorAll("*"));for(let s of o){let a=s.nodeName.toLowerCase();if(!Object.keys(e).includes(a)){s.remove();continue}let l=[].concat(...s.attributes),c=[].concat(e["*"]||[],e[a]||[]);for(let u of l)Mh(u,c)||s.removeAttribute(u.nodeName)}return r.body.innerHTML}var kh="TemplateFactory",Hh={allowList:Ha,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},Ih={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Rh={entry:"(string|element|function|null)",selector:"(string|element)"},So=class extends Xt{constructor(e){super(),this._config=this._getConfig(e)}static get Default(){return Hh}static get DefaultType(){return Ih}static get NAME(){return kh}getContent(){return Object.values(this._config.content).map(e=>this._resolvePossibleFunction(e)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(e){return this._checkContent(e),this._config.content=O(O({},this._config.content),e),this}toHtml(){let e=document.createElement("div");e.innerHTML=this._maybeSanitize(this._config.template);for(let[r,o]of Object.entries(this._config.content))this._setContent(e,o,r);let t=e.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&t.classList.add(...i.split(" ")),t}_typeCheckConfig(e){super._typeCheckConfig(e),this._checkContent(e.content)}_checkContent(e){for(let[t,i]of Object.entries(e))super._typeCheckConfig({selector:t,entry:i},Rh)}_setContent(e,t,i){let r=z.findOne(i,e);if(r){if(t=this._resolvePossibleFunction(t),!t){r.remove();return}if(dt(t)){this._putElementInTemplate(xt(t),r);return}if(this._config.html){r.innerHTML=this._maybeSanitize(t);return}r.textContent=t}}_maybeSanitize(e){return this._config.sanitize?Nh(e,this._config.allowList,this._config.sanitizeFn):e}_resolvePossibleFunction(e){return Pe(e,[void 0,this])}_putElementInTemplate(e,t){if(this._config.html){t.innerHTML="",t.append(e);return}t.textContent=e.textContent}},Ph="tooltip",Fh=new Set(["sanitize","allowList","sanitizeFn"]),mo="fade",$h="modal",zi="show",Bh=".tooltip-inner",ta=`.${$h}`,na="hide.bs.modal",Qn="hover",go="focus",vo="click",Vh="manual",zh="hide",jh="hidden",Wh="show",qh="shown",Uh="inserted",Yh="click",Gh="focusin",Kh="focusout",Xh="mouseenter",Qh="mouseleave",Jh={AUTO:"auto",TOP:"top",RIGHT:Xe()?"left":"right",BOTTOM:"bottom",LEFT:Xe()?"right":"left"},Zh={allowList:Ha,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},ep={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"},ht=class n extends qe{constructor(e,t){if(typeof Fi=="undefined")throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org/docs/v2/)");super(e,t),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Zh}static get DefaultType(){return ep}static get NAME(){return Ph}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){if(this._isEnabled){if(this._isShown()){this._leave();return}this._enter()}}dispose(){clearTimeout(this._timeout),T.off(this._element.closest(ta),na,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if(this._element.style.display==="none")throw new Error("Please use show on visible elements");if(!(this._isWithContent()&&this._isEnabled))return;let e=T.trigger(this._element,this.constructor.eventName(Wh)),i=(fa(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(e.defaultPrevented||!i)return;this._disposePopper();let r=this._getTipElement();this._element.setAttribute("aria-describedby",r.getAttribute("id"));let{container:o}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(o.append(r),T.trigger(this._element,this.constructor.eventName(Uh))),this._popper=this._createPopper(r),r.classList.add(zi),"ontouchstart"in document.documentElement)for(let a of[].concat(...document.body.children))T.on(a,"mouseover",Yi);let s=()=>{T.trigger(this._element,this.constructor.eventName(qh)),this._isHovered===!1&&this._leave(),this._isHovered=!1};this._queueCallback(s,this.tip,this._isAnimated())}hide(){if(!this._isShown()||T.trigger(this._element,this.constructor.eventName(zh)).defaultPrevented)return;if(this._getTipElement().classList.remove(zi),"ontouchstart"in document.documentElement)for(let r of[].concat(...document.body.children))T.off(r,"mouseover",Yi);this._activeTrigger[vo]=!1,this._activeTrigger[go]=!1,this._activeTrigger[Qn]=!1,this._isHovered=null;let i=()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),T.trigger(this._element,this.constructor.eventName(jh)))};this._queueCallback(i,this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return!!this._getTitle()}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(e){let t=this._getTemplateFactory(e).toHtml();if(!t)return null;t.classList.remove(mo,zi),t.classList.add(`bs-${this.constructor.NAME}-auto`);let i=Vu(this.constructor.NAME).toString();return t.setAttribute("id",i),this._isAnimated()&&t.classList.add(mo),t}setContent(e){this._newContent=e,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(e){return this._templateFactory?this._templateFactory.changeContent(e):this._templateFactory=new So(se(O({},this._config),{content:e,extraClass:this._resolvePossibleFunction(this._config.customClass)})),this._templateFactory}_getContentForTemplate(){return{[Bh]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(e){return this.constructor.getOrCreateInstance(e.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(mo)}_isShown(){return this.tip&&this.tip.classList.contains(zi)}_createPopper(e){let t=Pe(this._config.placement,[this,e,this._element]),i=Jh[t.toUpperCase()];return Kn(this._element,e,this._getPopperConfig(i))}_getOffset(){let{offset:e}=this._config;return typeof e=="string"?e.split(",").map(t=>Number.parseInt(t,10)):typeof e=="function"?t=>e(t,this._element):e}_resolvePossibleFunction(e){return Pe(e,[this._element,this._element])}_getPopperConfig(e){let t={placement:e,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:i=>{this._getTipElement().setAttribute("data-popper-placement",i.state.placement)}}]};return O(O({},t),Pe(this._config.popperConfig,[void 0,t]))}_setListeners(){let e=this._config.trigger.split(" ");for(let t of e)if(t==="click")T.on(this._element,this.constructor.eventName(Yh),this._config.selector,i=>{let r=this._initializeOnDelegatedTarget(i);r._activeTrigger[vo]=!(r._isShown()&&r._activeTrigger[vo]),r.toggle()});else if(t!==Vh){let i=t===Qn?this.constructor.eventName(Xh):this.constructor.eventName(Gh),r=t===Qn?this.constructor.eventName(Qh):this.constructor.eventName(Kh);T.on(this._element,i,this._config.selector,o=>{let s=this._initializeOnDelegatedTarget(o);s._activeTrigger[o.type==="focusin"?go:Qn]=!0,s._enter()}),T.on(this._element,r,this._config.selector,o=>{let s=this._initializeOnDelegatedTarget(o);s._activeTrigger[o.type==="focusout"?go:Qn]=s._element.contains(o.relatedTarget),s._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},T.on(this._element.closest(ta),na,this._hideModalHandler)}_fixTitle(){let e=this._element.getAttribute("title");e&&(!this._element.getAttribute("aria-label")&&!this._element.textContent.trim()&&this._element.setAttribute("aria-label",e),this._element.setAttribute("data-bs-original-title",e),this._element.removeAttribute("title"))}_enter(){if(this._isShown()||this._isHovered){this._isHovered=!0;return}this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show)}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(e,t){clearTimeout(this._timeout),this._timeout=setTimeout(e,t)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(e){let t=ft.getDataAttributes(this._element);for(let i of Object.keys(t))Fh.has(i)&&delete t[i];return e=O(O({},t),typeof e=="object"&&e?e:{}),e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e.container=e.container===!1?document.body:xt(e.container),typeof e.delay=="number"&&(e.delay={show:e.delay,hide:e.delay}),typeof e.title=="number"&&(e.title=e.title.toString()),typeof e.content=="number"&&(e.content=e.content.toString()),e}_getDelegateConfig(){let e={};for(let[t,i]of Object.entries(this._config))this.constructor.Default[t]!==i&&(e[t]=i);return e.selector=!1,e.trigger="manual",e}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(e){return this.each(function(){let t=n.getOrCreateInstance(this,e);if(typeof e=="string"){if(typeof t[e]=="undefined")throw new TypeError(`No method named "${e}"`);t[e]()}})}};Je(ht);var tp="popover",np=".popover-header",ip=".popover-body",rp=se(O({},ht.Default),{content:"",offset:[0,8],placement:"right",template:'',trigger:"click"}),op=se(O({},ht.DefaultType),{content:"(null|string|element|function)"}),Tn=class n extends ht{static get Default(){return rp}static get DefaultType(){return op}static get NAME(){return tp}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{[np]:this._getTitle(),[ip]:this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(e){return this.each(function(){let t=n.getOrCreateInstance(this,e);if(typeof e=="string"){if(typeof t[e]=="undefined")throw new TypeError(`No method named "${e}"`);t[e]()}})}};Je(Tn);var sp="scrollspy",ap="bs.scrollspy",Lo=`.${ap}`,lp=".data-api",cp=`activate${Lo}`,ia=`click${Lo}`,up=`load${Lo}${lp}`,dp="dropdown-item",bn="active",fp='[data-bs-spy="scroll"]',yo="[href]",hp=".nav, .list-group",ra=".nav-link",pp=".nav-item",mp=".list-group-item",gp=`${ra}, ${pp} > ${ra}, ${mp}`,vp=".dropdown",yp=".dropdown-toggle",Ep={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},bp={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"},er=class n extends qe{constructor(e,t){super(e,t),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement=getComputedStyle(this._element).overflowY==="visible"?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return Ep}static get DefaultType(){return bp}static get NAME(){return sp}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(let e of this._observableSections.values())this._observer.observe(e)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(e){return e.target=xt(e.target)||document.body,e.rootMargin=e.offset?`${e.offset}px 0px -30%`:e.rootMargin,typeof e.threshold=="string"&&(e.threshold=e.threshold.split(",").map(t=>Number.parseFloat(t))),e}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(T.off(this._config.target,ia),T.on(this._config.target,ia,yo,e=>{let t=this._observableSections.get(e.target.hash);if(t){e.preventDefault();let i=this._rootElement||window,r=t.offsetTop-this._element.offsetTop;if(i.scrollTo){i.scrollTo({top:r,behavior:"smooth"});return}i.scrollTop=r}}))}_getNewObserver(){let e={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver(t=>this._observerCallback(t),e)}_observerCallback(e){let t=s=>this._targetLinks.get(`#${s.target.id}`),i=s=>{this._previousScrollData.visibleEntryTop=s.target.offsetTop,this._process(t(s))},r=(this._rootElement||document.documentElement).scrollTop,o=r>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=r;for(let s of e){if(!s.isIntersecting){this._activeTarget=null,this._clearActiveClass(t(s));continue}let a=s.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(o&&a){if(i(s),!r)return;continue}!o&&!a&&i(s)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;let e=z.find(yo,this._config.target);for(let t of e){if(!t.hash||Tt(t))continue;let i=z.findOne(decodeURI(t.hash),this._element);Cn(i)&&(this._targetLinks.set(decodeURI(t.hash),t),this._observableSections.set(t.hash,i))}}_process(e){this._activeTarget!==e&&(this._clearActiveClass(this._config.target),this._activeTarget=e,e.classList.add(bn),this._activateParents(e),T.trigger(this._element,cp,{relatedTarget:e}))}_activateParents(e){if(e.classList.contains(dp)){z.findOne(yp,e.closest(vp)).classList.add(bn);return}for(let t of z.parents(e,hp))for(let i of z.prev(t,gp))i.classList.add(bn)}_clearActiveClass(e){e.classList.remove(bn);let t=z.find(`${yo}.${bn}`,e);for(let i of t)i.classList.remove(bn)}static jQueryInterface(e){return this.each(function(){let t=n.getOrCreateInstance(this,e);if(typeof e=="string"){if(t[e]===void 0||e.startsWith("_")||e==="constructor")throw new TypeError(`No method named "${e}"`);t[e]()}})}};T.on(window,up,()=>{for(let n of z.find(fp))er.getOrCreateInstance(n)});Je(er);var _p="tab",wp="bs.tab",Zt=`.${wp}`,xp=`hide${Zt}`,Tp=`hidden${Zt}`,Cp=`show${Zt}`,Sp=`shown${Zt}`,Ap=`click${Zt}`,Dp=`keydown${Zt}`,Op=`load${Zt}`,Lp="ArrowLeft",oa="ArrowRight",Mp="ArrowUp",sa="ArrowDown",Eo="Home",aa="End",Kt="active",la="fade",bo="show",Np="dropdown",Ia=".dropdown-toggle",kp=".dropdown-menu",_o=`:not(${Ia})`,Hp='.list-group, .nav, [role="tablist"]',Ip=".nav-item, .list-group-item",Rp=`.nav-link${_o}, .list-group-item${_o}, [role="tab"]${_o}`,Ra='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',wo=`${Rp}, ${Ra}`,Pp=`.${Kt}[data-bs-toggle="tab"], .${Kt}[data-bs-toggle="pill"], .${Kt}[data-bs-toggle="list"]`,Qt=class n extends qe{constructor(e){super(e),this._parent=this._element.closest(Hp),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),T.on(this._element,Dp,t=>this._keydown(t)))}static get NAME(){return _p}show(){let e=this._element;if(this._elemIsActive(e))return;let t=this._getActiveElem(),i=t?T.trigger(t,xp,{relatedTarget:e}):null;T.trigger(e,Cp,{relatedTarget:t}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(t,e),this._activate(e,t))}_activate(e,t){if(!e)return;e.classList.add(Kt),this._activate(z.getElementFromSelector(e));let i=()=>{if(e.getAttribute("role")!=="tab"){e.classList.add(bo);return}e.removeAttribute("tabindex"),e.setAttribute("aria-selected",!0),this._toggleDropDown(e,!0),T.trigger(e,Sp,{relatedTarget:t})};this._queueCallback(i,e,e.classList.contains(la))}_deactivate(e,t){if(!e)return;e.classList.remove(Kt),e.blur(),this._deactivate(z.getElementFromSelector(e));let i=()=>{if(e.getAttribute("role")!=="tab"){e.classList.remove(bo);return}e.setAttribute("aria-selected",!1),e.setAttribute("tabindex","-1"),this._toggleDropDown(e,!1),T.trigger(e,Tp,{relatedTarget:t})};this._queueCallback(i,e,e.classList.contains(la))}_keydown(e){if(![Lp,oa,Mp,sa,Eo,aa].includes(e.key))return;e.stopPropagation(),e.preventDefault();let t=this._getChildren().filter(r=>!Tt(r)),i;if([Eo,aa].includes(e.key))i=t[e.key===Eo?0:t.length-1];else{let r=[oa,sa].includes(e.key);i=Ao(t,e.target,r,!0)}i&&(i.focus({preventScroll:!0}),n.getOrCreateInstance(i).show())}_getChildren(){return z.find(wo,this._parent)}_getActiveElem(){return this._getChildren().find(e=>this._elemIsActive(e))||null}_setInitialAttributes(e,t){this._setAttributeIfNotExists(e,"role","tablist");for(let i of t)this._setInitialAttributesOnChild(i)}_setInitialAttributesOnChild(e){e=this._getInnerElement(e);let t=this._elemIsActive(e),i=this._getOuterElement(e);e.setAttribute("aria-selected",t),i!==e&&this._setAttributeIfNotExists(i,"role","presentation"),t||e.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(e,"role","tab"),this._setInitialAttributesOnTargetPanel(e)}_setInitialAttributesOnTargetPanel(e){let t=z.getElementFromSelector(e);t&&(this._setAttributeIfNotExists(t,"role","tabpanel"),e.id&&this._setAttributeIfNotExists(t,"aria-labelledby",`${e.id}`))}_toggleDropDown(e,t){let i=this._getOuterElement(e);if(!i.classList.contains(Np))return;let r=(o,s)=>{let a=z.findOne(o,i);a&&a.classList.toggle(s,t)};r(Ia,Kt),r(kp,bo),i.setAttribute("aria-expanded",t)}_setAttributeIfNotExists(e,t,i){e.hasAttribute(t)||e.setAttribute(t,i)}_elemIsActive(e){return e.classList.contains(Kt)}_getInnerElement(e){return e.matches(wo)?e:z.findOne(wo,e)}_getOuterElement(e){return e.closest(Ip)||e}static jQueryInterface(e){return this.each(function(){let t=n.getOrCreateInstance(this);if(typeof e=="string"){if(t[e]===void 0||e.startsWith("_")||e==="constructor")throw new TypeError(`No method named "${e}"`);t[e]()}})}};T.on(document,Ap,Ra,function(n){["A","AREA"].includes(this.tagName)&&n.preventDefault(),!Tt(this)&&Qt.getOrCreateInstance(this).show()});T.on(window,Op,()=>{for(let n of z.find(Pp))Qt.getOrCreateInstance(n)});Je(Qt);var Fp="toast",$p="bs.toast",Ot=`.${$p}`,Bp=`mouseover${Ot}`,Vp=`mouseout${Ot}`,zp=`focusin${Ot}`,jp=`focusout${Ot}`,Wp=`hide${Ot}`,qp=`hidden${Ot}`,Up=`show${Ot}`,Yp=`shown${Ot}`,Gp="fade",ca="hide",ji="show",Wi="showing",Kp={animation:"boolean",autohide:"boolean",delay:"number"},Xp={animation:!0,autohide:!0,delay:5e3},pt=class n extends qe{constructor(e,t){super(e,t),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return Xp}static get DefaultType(){return Kp}static get NAME(){return Fp}show(){if(T.trigger(this._element,Up).defaultPrevented)return;this._clearTimeout(),this._config.animation&&this._element.classList.add(Gp);let t=()=>{this._element.classList.remove(Wi),T.trigger(this._element,Yp),this._maybeScheduleHide()};this._element.classList.remove(ca),ei(this._element),this._element.classList.add(ji,Wi),this._queueCallback(t,this._element,this._config.animation)}hide(){if(!this.isShown()||T.trigger(this._element,Wp).defaultPrevented)return;let t=()=>{this._element.classList.add(ca),this._element.classList.remove(Wi,ji),T.trigger(this._element,qp)};this._element.classList.add(Wi),this._queueCallback(t,this._element,this._config.animation)}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(ji),super.dispose()}isShown(){return this._element.classList.contains(ji)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout(()=>{this.hide()},this._config.delay)))}_onInteraction(e,t){switch(e.type){case"mouseover":case"mouseout":{this._hasMouseInteraction=t;break}case"focusin":case"focusout":{this._hasKeyboardInteraction=t;break}}if(t){this._clearTimeout();return}let i=e.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){T.on(this._element,Bp,e=>this._onInteraction(e,!0)),T.on(this._element,Vp,e=>this._onInteraction(e,!1)),T.on(this._element,zp,e=>this._onInteraction(e,!0)),T.on(this._element,jp,e=>this._onInteraction(e,!1))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(e){return this.each(function(){let t=n.getOrCreateInstance(this,e);if(typeof e=="string"){if(typeof t[e]=="undefined")throw new TypeError(`No method named "${e}"`);t[e](this)}})}};tr(pt);Je(pt);var Qp=(function(){"use strict";let htmx={onLoad:null,process:null,on:null,off:null,trigger:null,ajax:null,find:null,findAll:null,closest:null,values:function(n,e){return getInputValues(n,e||"post").values},remove:null,addClass:null,removeClass:null,toggleClass:null,takeClass:null,swap:null,defineExtension:null,removeExtension:null,logAll:null,logNone:null,logger:null,config:{historyEnabled:!0,historyCacheSize:10,refreshOnHistoryMiss:!1,defaultSwapStyle:"innerHTML",defaultSwapDelay:0,defaultSettleDelay:20,includeIndicatorStyles:!0,indicatorClass:"htmx-indicator",requestClass:"htmx-request",addedClass:"htmx-added",settlingClass:"htmx-settling",swappingClass:"htmx-swapping",allowEval:!0,allowScriptTags:!0,inlineScriptNonce:"",inlineStyleNonce:"",attributesToSettle:["class","style","width","height"],withCredentials:!1,timeout:0,wsReconnectDelay:"full-jitter",wsBinaryType:"blob",disableSelector:"[hx-disable], [data-hx-disable]",scrollBehavior:"instant",defaultFocusScroll:!1,getCacheBusterParam:!1,globalViewTransitions:!1,methodsThatUseUrlParams:["get","delete"],selfRequestsOnly:!0,ignoreTitle:!1,scrollIntoViewOnBoost:!0,triggerSpecsCache:null,disableInheritance:!1,responseHandling:[{code:"204",swap:!1},{code:"[23]..",swap:!0},{code:"[45]..",swap:!1,error:!0}],allowNestedOobSwaps:!0,historyRestoreAsHxRequest:!0,reportValidityOfForms:!1},parseInterval:null,location,_:null,version:"2.0.10"};htmx.onLoad=onLoadHelper,htmx.process=processNode,htmx.on=addEventListenerImpl,htmx.off=removeEventListenerImpl,htmx.trigger=triggerEvent,htmx.ajax=ajaxHelper,htmx.find=find,htmx.findAll=findAll,htmx.closest=closest,htmx.remove=removeElement,htmx.addClass=addClassToElement,htmx.removeClass=removeClassFromElement,htmx.toggleClass=toggleClassOnElement,htmx.takeClass=takeClassForElement,htmx.swap=swap,htmx.defineExtension=defineExtension,htmx.removeExtension=removeExtension,htmx.logAll=logAll,htmx.logNone=logNone,htmx.parseInterval=parseInterval,htmx._=internalEval;let internalAPI={addTriggerHandler,bodyContains,canAccessLocalStorage,findThisElement,filterValues,swap,hasAttribute,getAttributeValue,getClosestAttributeValue,getClosestMatch,getExpressionVars,getHeaders,getInputValues,getInternalData,getSwapSpecification,getTriggerSpecs,getTarget,makeFragment,mergeObjects,makeSettleInfo,oobSwap,querySelectorExt,settleImmediately,shouldCancel,triggerEvent,triggerErrorEvent,withExtensions},VERBS=["get","post","put","delete","patch"],VERB_SELECTOR=VERBS.map(function(n){return"[hx-"+n+"], [data-hx-"+n+"]"}).join(", ");function parseInterval(n){if(n==null)return;let e=NaN;return n.slice(-2)=="ms"?e=parseFloat(n.slice(0,-2)):n.slice(-1)=="s"?e=parseFloat(n.slice(0,-1))*1e3:n.slice(-1)=="m"?e=parseFloat(n.slice(0,-1))*1e3*60:e=parseFloat(n),isNaN(e)?void 0:e}function getRawAttribute(n,e){return n instanceof Element&&n.getAttribute(e)}function hasAttribute(n,e){return!!n.hasAttribute&&(n.hasAttribute(e)||n.hasAttribute("data-"+e))}function getAttributeValue(n,e){return getRawAttribute(n,e)||getRawAttribute(n,"data-"+e)}function parentElt(n){let e=n.parentElement;return!e&&n.parentNode instanceof ShadowRoot?n.parentNode:e}function getDocument(){return document}function getRootNode(n,e){return n.getRootNode?n.getRootNode({composed:e}):getDocument()}function getClosestMatch(n,e){for(;n&&!e(n);)n=parentElt(n);return n||null}function getAttributeValueWithDisinheritance(n,e,t){let i=getAttributeValue(e,t),r=getAttributeValue(e,"hx-disinherit");var o=getAttributeValue(e,"hx-inherit");if(n!==e){if(htmx.config.disableInheritance)return o&&(o==="*"||o.split(" ").indexOf(t)>=0)?i:null;if(r&&(r==="*"||r.split(" ").indexOf(t)>=0))return"unset"}return i}function getClosestAttributeValue(n,e){let t=null;if(getClosestMatch(n,function(i){return!!(t=getAttributeValueWithDisinheritance(n,asElement(i),e))}),t!=="unset")return t}function matches(n,e){return n instanceof Element&&n.matches(e)}function getStartTag(n){let t=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i.exec(n);return t?t[1].toLowerCase():""}function parseHTML(n){return"parseHTMLUnsafe"in Document?Document.parseHTMLUnsafe(n):new DOMParser().parseFromString(n,"text/html")}function takeChildrenFor(n,e){for(;e.childNodes.length>0;)n.append(e.childNodes[0])}function duplicateScript(n){let e=getDocument().createElement("script");return forEach(n.attributes,function(t){e.setAttribute(t.name,t.value)}),e.textContent=n.textContent,e.async=!1,htmx.config.inlineScriptNonce&&(e.nonce=htmx.config.inlineScriptNonce),e}function isJavaScriptScriptNode(n){return n.matches("script")&&(n.type==="text/javascript"||n.type==="module"||n.type==="")}function normalizeScriptTags(n){Array.from(n.querySelectorAll("script")).forEach(e=>{if(isJavaScriptScriptNode(e)){let t=duplicateScript(e),i=e.parentNode;try{i.insertBefore(t,e)}catch(r){logError(r)}finally{e.remove()}}})}function makeFragment(n){let e=n.replace(/]*)?>[\s\S]*?<\/head>/i,""),t=getStartTag(e),i;if(t==="html"){i=new DocumentFragment;let o=parseHTML(n);takeChildrenFor(i,o.body),i.title=o.title}else if(t==="body"){i=new DocumentFragment;let o=parseHTML(e);takeChildrenFor(i,o.body),i.title=o.title}else{let o=parseHTML('");i=o.querySelector("template").content,i.title=o.title;var r=i.querySelector("title");r&&r.parentNode===i&&(r.remove(),i.title=r.innerText)}return i&&(htmx.config.allowScriptTags?normalizeScriptTags(i):i.querySelectorAll("script").forEach(o=>o.remove())),i}function maybeCall(n){n&&n()}function isType(n,e){return Object.prototype.toString.call(n)==="[object "+e+"]"}function isFunction(n){return typeof n=="function"}function isRawObject(n){return isType(n,"Object")}function getInternalData(n){let e="htmx-internal-data",t=n[e];return t||(t=n[e]={}),t}function toArray(n){let e=[];if(n)for(let t=0;t=0}function bodyContains(n){return n.getRootNode({composed:!0})===document}function splitOnWhitespace(n){return n.trim().split(/\s+/)}function mergeObjects(n,e){for(let t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}function parseJSON(n){try{return JSON.parse(n)}catch(e){return logError(e),null}}function canAccessLocalStorage(){let n="htmx:sessionStorageTest";try{return sessionStorage.setItem(n,n),sessionStorage.removeItem(n),!0}catch(e){return!1}}function normalizePath(n){try{let e=new URL(n,window.location.href);n=e.pathname+e.search}catch(e){}return n!="/"&&(n=n.replace(/\/+$/,"")),n}function internalEval(str){return maybeEval(getDocument().body,function(){return eval(str)})}function onLoadHelper(n){return htmx.on("htmx:load",function(t){n(t.detail.elt)})}function logAll(){htmx.logger=function(n,e,t){console&&console.log(e,n,t)}}function logNone(){htmx.logger=null}function find(n,e){return typeof n!="string"?n.querySelector(e):find(getDocument(),n)}function findAll(n,e){return typeof n!="string"?n.querySelectorAll(e):findAll(getDocument(),n)}function getWindow(){return window}function removeElement(n,e){n=resolveTarget(n),e?getWindow().setTimeout(function(){removeElement(n),n=null},e):parentElt(n).removeChild(n)}function asElement(n){return n instanceof Element?n:null}function asHtmlElement(n){return n instanceof HTMLElement?n:null}function asString(n){return typeof n=="string"?n:null}function asParentNode(n){return n instanceof Element||n instanceof Document||n instanceof DocumentFragment?n:null}function addClassToElement(n,e,t){n=asElement(resolveTarget(n)),n&&(t?getWindow().setTimeout(function(){addClassToElement(n,e),n=null},t):n.classList&&n.classList.add(e))}function removeClassFromElement(n,e,t){let i=asElement(resolveTarget(n));i&&(t?getWindow().setTimeout(function(){removeClassFromElement(i,e),i=null},t):i.classList&&(i.classList.remove(e),i.classList.length===0&&i.removeAttribute("class")))}function toggleClassOnElement(n,e){n=resolveTarget(n),n.classList.toggle(e)}function takeClassForElement(n,e){n=resolveTarget(n),forEach(n.parentElement.children,function(t){removeClassFromElement(t,e)}),addClassToElement(asElement(n),e)}function closest(n,e){return n=asElement(resolveTarget(n)),n?n.closest(e):null}function startsWith(n,e){return n.substring(0,e.length)===e}function endsWith(n,e){return n.substring(n.length-e.length)===e}function normalizeSelector(n){let e=n.trim();return startsWith(e,"<")&&endsWith(e,"/>")?e.substring(1,e.length-2):e}function querySelectorAllExt(n,e,t){if(e.indexOf("global ")===0)return querySelectorAllExt(n,e.slice(7),!0);n=resolveTarget(n);let i=[];{let s=0,a=0;for(let l=0;l"&&s--}a0;){let s=normalizeSelector(i.shift()),a;s.indexOf("closest ")===0?a=closest(asElement(n),normalizeSelector(s.slice(8))):s.indexOf("find ")===0?a=find(asParentNode(n),normalizeSelector(s.slice(5))):s==="next"||s==="nextElementSibling"?a=asElement(n).nextElementSibling:s.indexOf("next ")===0?a=scanForwardQuery(n,normalizeSelector(s.slice(5)),!!t):s==="previous"||s==="previousElementSibling"?a=asElement(n).previousElementSibling:s.indexOf("previous ")===0?a=scanBackwardsQuery(n,normalizeSelector(s.slice(9)),!!t):s==="document"?a=document:s==="window"?a=window:s==="body"?a=document.body:s==="root"?a=getRootNode(n,!!t):s==="host"?a=n.getRootNode().host:o.push(s),a&&r.push(a)}if(o.length>0){let s=o.join(","),a=asParentNode(getRootNode(n,!!t));r.push(...toArray(a.querySelectorAll(s)))}return r}var scanForwardQuery=function(n,e,t){let i=asParentNode(getRootNode(n,t)).querySelectorAll(e);for(let r=0;r=0;r--){let o=i[r];if(o.compareDocumentPosition(n)===Node.DOCUMENT_POSITION_FOLLOWING)return o}};function querySelectorExt(n,e){return typeof n!="string"?querySelectorAllExt(n,e)[0]:querySelectorAllExt(getDocument().body,n)[0]}function resolveTarget(n,e){return typeof n=="string"?find(asParentNode(e)||document,n):n}function processEventArgs(n,e,t,i){return isFunction(e)?{target:getDocument().body,event:asString(n),listener:e,options:t}:{target:resolveTarget(n),event:asString(e),listener:t,options:i}}function addEventListenerImpl(n,e,t,i){return ready(function(){let o=processEventArgs(n,e,t,i);o.target.addEventListener(o.event,o.listener,o.options)}),isFunction(e)?e:t}function removeEventListenerImpl(n,e,t){return ready(function(){let i=processEventArgs(n,e,t);i.target.removeEventListener(i.event,i.listener)}),isFunction(e)?e:t}let DUMMY_ELT=getDocument().createElement("output");function findAttributeTargets(n,e){let t=getClosestAttributeValue(n,e);if(t){if(t==="this")return[findThisElement(n,e)];{let i=querySelectorAllExt(n,t);if(/(^|,)(\s*)inherit(\s*)($|,)/.test(t)){let o=asElement(getClosestMatch(n,function(s){return s!==n&&hasAttribute(asElement(s),e)}));o&&i.push(...findAttributeTargets(o,e))}return i.length===0?(logError('The selector "'+t+'" on '+e+" returned no matches!"),[DUMMY_ELT]):i}}}function findThisElement(n,e){return asElement(getClosestMatch(n,function(t){return getAttributeValue(asElement(t),e)!=null}))}function getTarget(n){let e=getClosestAttributeValue(n,"hx-target");return e?e==="this"?findThisElement(n,"hx-target"):querySelectorExt(n,e):getInternalData(n).boosted?getDocument().body:n}function shouldSettleAttribute(n){return htmx.config.attributesToSettle.includes(n)}function cloneAttributes(n,e){forEach(Array.from(n.attributes),function(t){!e.hasAttribute(t.name)&&shouldSettleAttribute(t.name)&&n.removeAttribute(t.name)}),forEach(e.attributes,function(t){shouldSettleAttribute(t.name)&&n.setAttribute(t.name,t.value)})}function isInlineSwap(n,e){let t=getExtensions(e);for(let i=0;i0?(o=n.substring(0,n.indexOf(":")),r=n.substring(n.indexOf(":")+1)):o=n),e.removeAttribute("hx-swap-oob"),e.removeAttribute("data-hx-swap-oob");let s=querySelectorAllExt(i,r,!1);return s.length?(forEach(s,function(a){let l,c=e.cloneNode(!0);l=getDocument().createDocumentFragment(),l.appendChild(c),isInlineSwap(o,a)||(l=asParentNode(c));let u={shouldSwap:!0,target:a,fragment:l};triggerEvent(a,"htmx:oobBeforeSwap",u)&&(a=u.target,u.shouldSwap&&(handlePreservedElements(l),swapWithStyle(o,a,a,l,t),restorePreservedElements()),forEach(t.elts,function(d){triggerEvent(d,"htmx:oobAfterSwap",u)}))}),e.parentNode.removeChild(e)):(e.parentNode.removeChild(e),triggerErrorEvent(getDocument().body,"htmx:oobErrorNoTarget",{content:e,target:r})),n}function restorePreservedElements(){let n=find("#--htmx-preserve-pantry--");if(n){for(let e of[...n.children]){let t=find("#"+e.id);t.parentNode.moveBefore(e,t),t.remove()}n.remove()}}function handlePreservedElements(n){forEach(findAll(n,"[hx-preserve], [data-hx-preserve]"),function(e){let t=getAttributeValue(e,"id"),i=getDocument().getElementById(t);if(i!=null)if(e.moveBefore){let r=find("#--htmx-preserve-pantry--");r==null&&(getDocument().body.insertAdjacentHTML("afterend","
"),r=find("#--htmx-preserve-pantry--")),r.moveBefore(i,null)}else e.parentNode.replaceChild(i,e)})}function handleAttributes(n,e,t){forEach(e.querySelectorAll("[id]"),function(i){let r=getRawAttribute(i,"id");if(r&&r.length>0){let o=asParentNode(n),s=o&&o.querySelector(CSS.escape(i.tagName)+"#"+CSS.escape(r));if(s&&s!==o){let a=i.cloneNode();cloneAttributes(i,s),t.tasks.push(function(){cloneAttributes(i,a)})}}})}function makeAjaxLoadTask(n){return function(){removeClassFromElement(n,htmx.config.addedClass),processNode(asElement(n)),processFocus(asParentNode(n)),triggerEvent(n,"htmx:load")}}function processFocus(n){let e="[autofocus]",t=asHtmlElement(matches(n,e)?n:n.querySelector(e));t!=null&&t.focus()}function insertNodesBefore(n,e,t,i){for(handleAttributes(n,t,i);t.childNodes.length>0;){let r=t.firstChild;addClassToElement(asElement(r),htmx.config.addedClass),n.insertBefore(r,e),r.nodeType!==Node.TEXT_NODE&&r.nodeType!==Node.COMMENT_NODE&&i.tasks.push(makeAjaxLoadTask(r))}}function stringHash(n,e){let t=0;for(;t0}function swap(n,e,t,i){i||(i={});let r=null,o=null,s=function(){maybeCall(i.beforeSwapCallback),n=resolveTarget(n);let c=i.contextElement?getRootNode(i.contextElement,!1):getDocument(),u=document.activeElement,d={};d={elt:u,start:u?u.selectionStart:null,end:u?u.selectionEnd:null};let p=makeSettleInfo(n);if(t.swapStyle==="textContent")n.textContent=e;else{let m=makeFragment(e);if(p.title=i.title||m.title,i.historyRequest&&(m=m.querySelector("[hx-history-elt],[data-hx-history-elt]")||m),i.selectOOB){let g=i.selectOOB.split(",");for(let _=0;_0?getWindow().setTimeout(y,t.settleDelay):y()},a=htmx.config.globalViewTransitions;t.hasOwnProperty("transition")&&(a=t.transition);let l=i.contextElement||getDocument();if(a&&triggerEvent(l,"htmx:beforeTransition",i.eventInfo)&&typeof Promise!="undefined"&&document.startViewTransition){let c=new Promise(function(d,p){r=d,o=p}),u=s;s=function(){document.startViewTransition(function(){return u(),c})}}try{t!=null&&t.swapDelay&&t.swapDelay>0?getWindow().setTimeout(s,t.swapDelay):s()}catch(c){throw triggerErrorEvent(l,"htmx:swapError",i.eventInfo),maybeCall(o),c}}function handleTriggerHeader(n,e,t){let i=n.getResponseHeader(e);if(i.indexOf("{")===0){let r=parseJSON(i);for(let o in r)if(r.hasOwnProperty(o)){let s=r[o];isRawObject(s)?t=s.target!==void 0?s.target:t:s={value:s},triggerEvent(t,o,s)}}else{let r=i.split(",");for(let o=0;o0;){let s=e[0];if(s==="]"){if(i--,i===0){o===null&&(r=r+"true"),e.shift(),r+=")})";try{let a=maybeEval(n,function(){return Function(r)()},function(){return!0});return a.source=r,a}catch(a){return triggerErrorEvent(getDocument().body,"htmx:syntax:error",{error:a,source:r}),null}}}else s==="["&&i++;isPossibleRelativeReference(s,o,t)?r+="(("+t+"."+s+") ? ("+t+"."+s+") : (window."+s+"))":r=r+s,o=e.shift()}}}function consumeUntil(n,e){let t="";for(;n.length>0&&!e.test(n[0]);)t+=n.shift();return t}function consumeCSSSelector(n){let e;return n.length>0&&COMBINED_SELECTOR_START.test(n[0])?(n.shift(),e=consumeUntil(n,COMBINED_SELECTOR_END).trim(),n.shift()):e=consumeUntil(n,WHITESPACE_OR_COMMA),e}let INPUT_SELECTOR="input, textarea, select";function parseAndCacheTrigger(n,e,t){let i=[],r=tokenizeString(e);do{consumeUntil(r,NOT_WHITESPACE);let a=r.length,l=consumeUntil(r,/[,\[\s]/);if(l!=="")if(l==="every"){let c={trigger:"every"};consumeUntil(r,NOT_WHITESPACE),c.pollInterval=parseInterval(consumeUntil(r,/[,\[\s]/)),consumeUntil(r,NOT_WHITESPACE);var o=maybeGenerateConditional(n,r,"event");o&&(c.eventFilter=o),i.push(c)}else{let c={trigger:l};var o=maybeGenerateConditional(n,r,"event");for(o&&(c.eventFilter=o),consumeUntil(r,NOT_WHITESPACE);r.length>0&&r[0]!==",";){let d=r.shift();if(d==="changed")c.changed=!0;else if(d==="once")c.once=!0;else if(d==="consume")c.consume=!0;else if(d==="delay"&&r[0]===":")r.shift(),c.delay=parseInterval(consumeUntil(r,WHITESPACE_OR_COMMA));else if(d==="from"&&r[0]===":"){if(r.shift(),COMBINED_SELECTOR_START.test(r[0]))var s=consumeCSSSelector(r);else{var s=consumeUntil(r,WHITESPACE_OR_COMMA);if(s==="closest"||s==="find"||s==="next"||s==="previous"){r.shift();let y=consumeCSSSelector(r);y.length>0&&(s+=" "+y)}}c.from=s}else d==="target"&&r[0]===":"?(r.shift(),c.target=consumeCSSSelector(r)):d==="throttle"&&r[0]===":"?(r.shift(),c.throttle=parseInterval(consumeUntil(r,WHITESPACE_OR_COMMA))):d==="queue"&&r[0]===":"?(r.shift(),c.queue=consumeUntil(r,WHITESPACE_OR_COMMA)):d==="root"&&r[0]===":"?(r.shift(),c[d]=consumeCSSSelector(r)):d==="threshold"&&r[0]===":"?(r.shift(),c[d]=consumeUntil(r,WHITESPACE_OR_COMMA)):triggerErrorEvent(n,"htmx:syntax:error",{token:r.shift()});consumeUntil(r,NOT_WHITESPACE)}i.push(c)}r.length===a&&triggerErrorEvent(n,"htmx:syntax:error",{token:r.shift()}),consumeUntil(r,NOT_WHITESPACE)}while(r[0]===","&&r.shift());return t&&(t[e]=i),i}function getTriggerSpecs(n){let e=getAttributeValue(n,"hx-trigger"),t=[];if(e){let i=htmx.config.triggerSpecsCache;t=i&&i[e]||parseAndCacheTrigger(n,e,i)}return t.length>0?t:matches(n,"form")?[{trigger:"submit"}]:matches(n,'input[type="button"], input[type="submit"]')?[{trigger:"click"}]:matches(n,INPUT_SELECTOR)?[{trigger:"change"}]:[{trigger:"click"}]}function cancelPolling(n){getInternalData(n).cancelled=!0}function processPolling(n,e,t){let i=getInternalData(n);i.timeout=getWindow().setTimeout(function(){bodyContains(n)&&i.cancelled!==!0&&(maybeFilterEvent(t,n,makeEvent("hx:poll:trigger",{triggerSpec:t,target:n}))||e(n),processPolling(n,e,t))},t.pollInterval)}function isLocalLink(n){return location.hostname===n.hostname&&getRawAttribute(n,"href")&&getRawAttribute(n,"href").indexOf("#")!==0}function eltIsDisabled(n){return closest(n,htmx.config.disableSelector)}function boostElement(n,e,t){if(n instanceof HTMLAnchorElement&&isLocalLink(n)&&(n.target===""||n.target==="_self")||n.tagName==="FORM"&&String(getRawAttribute(n,"method")).toLowerCase()!=="dialog"){e.boosted=!0;let i,r;if(n.tagName==="A")i="get",r=getRawAttribute(n,"href");else{let o=getRawAttribute(n,"method");i=o?o.toLowerCase():"get",r=getRawAttribute(n,"action"),(r==null||r==="")&&(r=location.href),i==="get"&&r.includes("?")&&(r=r.replace(/\?[^#]+/,""))}t.forEach(function(o){addEventListener(n,function(s,a){let l=asElement(s);if(eltIsDisabled(l)){cleanUpElement(l);return}issueAjaxRequest(i,r,l,a)},e,o,!0)})}}function shouldCancel(n,e){if(n.type==="submit"&&e.tagName==="FORM")return!0;if(n.type==="click"){let t=e.closest('input[type="submit"], button');if(t&&t.form&&t.type==="submit")return!0;let i=e.closest("a"),r=/^#.+/;if(i&&i.href&&!r.test(i.getAttribute("href")))return!0}return!1}function ignoreBoostedAnchorCtrlClick(n,e){return getInternalData(n).boosted&&n instanceof HTMLAnchorElement&&e.type==="click"&&(e.ctrlKey||e.metaKey)}function maybeFilterEvent(n,e,t){let i=n.eventFilter;if(i)try{return i.call(e,t)!==!0}catch(r){let o=i.source;return triggerErrorEvent(getDocument().body,"htmx:eventFilter:error",{error:r,source:o}),!0}return!1}function addEventListener(n,e,t,i,r){let o=getInternalData(n),s;i.from?s=querySelectorAllExt(n,i.from):s=[n],i.changed&&("lastValue"in o||(o.lastValue=new WeakMap),s.forEach(function(a){o.lastValue.has(i)||o.lastValue.set(i,new WeakMap),o.lastValue.get(i).set(a,a.value)})),forEach(s,function(a){let l=function(c){if(!bodyContains(n)){a.removeEventListener(i.trigger,l);return}if(ignoreBoostedAnchorCtrlClick(n,c)||((r||shouldCancel(c,a))&&c.preventDefault(),maybeFilterEvent(i,n,c)))return;let u=getInternalData(c);if(u.triggerSpec=i,u.handledFor==null&&(u.handledFor=[]),u.handledFor.indexOf(n)<0){if(u.handledFor.push(n),i.consume&&c.stopPropagation(),i.target&&c.target&&!matches(asElement(c.target),i.target))return;if(i.once){if(o.triggeredOnce)return;o.triggeredOnce=!0}if(i.changed){let d=c.target,p=d.value,y=o.lastValue.get(i);if(y.has(d)&&y.get(d)===p)return;y.set(d,p)}if(o.delayed&&clearTimeout(o.delayed),o.throttle)return;i.throttle>0?o.throttle||(triggerEvent(n,"htmx:trigger"),e(n,c),o.throttle=getWindow().setTimeout(function(){o.throttle=null},i.throttle)):i.delay>0?o.delayed=getWindow().setTimeout(function(){triggerEvent(n,"htmx:trigger"),e(n,c)},i.delay):(triggerEvent(n,"htmx:trigger"),e(n,c))}};t.listenerInfos==null&&(t.listenerInfos=[]),t.listenerInfos.push({trigger:i.trigger,listener:l,on:a}),a.addEventListener(i.trigger,l)})}let windowIsScrolling=!1,scrollHandler=null;function initScrollHandler(){scrollHandler||(scrollHandler=function(){windowIsScrolling=!0},window.addEventListener("scroll",scrollHandler),window.addEventListener("resize",scrollHandler),setInterval(function(){windowIsScrolling&&(windowIsScrolling=!1,forEach(getDocument().querySelectorAll("[hx-trigger*='revealed'],[data-hx-trigger*='revealed']"),function(n){maybeReveal(n)}))},200))}function maybeReveal(n){!hasAttribute(n,"data-hx-revealed")&&isScrolledIntoView(n)&&(n.setAttribute("data-hx-revealed","true"),getInternalData(n).initHash?triggerEvent(n,"revealed"):n.addEventListener("htmx:afterProcessNode",function(){triggerEvent(n,"revealed")},{once:!0}))}function loadImmediately(n,e,t,i){let r=function(){t.loaded||(t.loaded=!0,triggerEvent(n,"htmx:trigger"),e(n))};i>0?getWindow().setTimeout(r,i):r()}function processVerbs(n,e,t){let i=!1;return forEach(VERBS,function(r){if(hasAttribute(n,"hx-"+r)){let o=getAttributeValue(n,"hx-"+r);i=!0,e.path=o,e.verb=r,t.forEach(function(s){addTriggerHandler(n,s,e,function(a,l){let c=asElement(a);if(eltIsDisabled(c)){cleanUpElement(c);return}issueAjaxRequest(r,o,c,l)})})}}),i}function addTriggerHandler(n,e,t,i){if(e.trigger==="revealed")initScrollHandler(),addEventListener(n,i,t,e),maybeReveal(asElement(n));else if(e.trigger==="intersect"){let r={};e.root&&(r.root=querySelectorExt(n,e.root)),e.threshold&&(r.threshold=parseFloat(e.threshold)),new IntersectionObserver(function(s){for(let a=0;a0?(t.polling=!0,processPolling(asElement(n),i,e)):addEventListener(n,i,t,e)}function shouldProcessHxOn(n){let e=asElement(n);if(!e)return!1;let t=e.attributes;for(let i=0;i", "+o).join(""))}else return[]}function maybeSetLastButtonClicked(n){let e=getTargetButton(n.target),t=getRelatedFormData(n);t&&(t.lastButtonClicked=e)}function maybeUnsetLastButtonClicked(n){let e=getRelatedFormData(n);e&&(e.lastButtonClicked=null)}function getTargetButton(n){return closest(asElement(n),"button, input[type='submit']")}function getRelatedForm(n){return n.form||closest(n,"form")}function getRelatedFormData(n){let e=getTargetButton(n.target);if(!e)return;let t=getRelatedForm(e);if(t)return getInternalData(t)}function initButtonTracking(n){n.addEventListener("click",maybeSetLastButtonClicked),n.addEventListener("focusin",maybeSetLastButtonClicked),n.addEventListener("focusout",maybeUnsetLastButtonClicked)}function addHxOnEventHandler(n,e,t){let i=getInternalData(n);Array.isArray(i.onHandlers)||(i.onHandlers=[]);let r,o=function(s){maybeEval(n,function(){eltIsDisabled(n)||(r||(r=new Function("event",t)),r.call(n,s))})};n.addEventListener(e,o),i.onHandlers.push({event:e,listener:o})}function processHxOnWildcard(n){deInitOnHandlers(n);for(let e=0;ehtmx.config.historyCacheSize;)o.shift();for(;o.length>0;)try{sessionStorage.setItem("htmx-history-cache",JSON.stringify(o));break}catch(a){triggerErrorEvent(getDocument().body,"htmx:historyCacheError",{cause:a,cache:o}),o.shift()}}function getCachedHistory(n){if(!canAccessLocalStorage())return null;n=normalizePath(n);let e=parseJSON(sessionStorage.getItem("htmx-history-cache"))||[];for(let t=0;t=200&&this.status<400?(i.response=this.response,triggerEvent(getDocument().body,"htmx:historyCacheMissLoad",i),swap(i.historyElt,i.response,t,{contextElement:i.historyElt,historyRequest:!0}),setCurrentPathForHistory(i.path),triggerEvent(getDocument().body,"htmx:historyRestore",{path:n,cacheMiss:!0,serverResponse:i.response})):triggerErrorEvent(getDocument().body,"htmx:historyCacheMissLoadError",i)},triggerEvent(getDocument().body,"htmx:historyCacheMiss",i)&&e.send()}function restoreHistory(n){saveCurrentPageToHistory(),n=n||location.pathname+location.search;let e=getCachedHistory(n);if(e){let t={swapStyle:"innerHTML",swapDelay:0,settleDelay:0,scroll:e.scroll},i={path:n,item:e,historyElt:getHistoryElement(),swapSpec:t};triggerEvent(getDocument().body,"htmx:historyCacheHit",i)&&(swap(i.historyElt,e.content,t,{contextElement:i.historyElt,title:e.title}),setCurrentPathForHistory(i.path),triggerEvent(getDocument().body,"htmx:historyRestore",i))}else htmx.config.refreshOnHistoryMiss?htmx.location.reload(!0):loadHistoryFromServer(n)}function addRequestIndicatorClasses(n){let e=findAttributeTargets(n,"hx-indicator");return e==null&&(e=[n]),forEach(e,function(t){let i=getInternalData(t);i.requestCount=(i.requestCount||0)+1,addClassToElement(t,htmx.config.requestClass)}),e}function disableElements(n){let e=findAttributeTargets(n,"hx-disabled-elt");return e==null&&(e=[]),forEach(e,function(t){let i=getInternalData(t);i.requestCount=(i.requestCount||0)+1,t.hasAttribute("disabled")||(t.setAttribute("disabled",""),t.setAttribute("data-disabled-by-htmx",""))}),e}function removeRequestIndicators(n,e){forEach(n.concat(e),function(t){let i=getInternalData(t);i.requestCount=(i.requestCount||1)-1}),forEach(n,function(t){getInternalData(t).requestCount===0&&removeClassFromElement(t,htmx.config.requestClass)}),forEach(e,function(t){getInternalData(t).requestCount===0&&t.hasAttribute("data-disabled-by-htmx")&&(t.removeAttribute("disabled"),t.removeAttribute("data-disabled-by-htmx"))})}function haveSeenNode(n,e){for(let t=0;te.indexOf(r)<0):i=i.filter(r=>r!==e),t.delete(n),forEach(i,r=>t.append(n,r))}}function getValueFromInput(n){return n instanceof HTMLSelectElement&&n.multiple?toArray(n.querySelectorAll("option:checked")).map(function(e){return e.value}):n instanceof HTMLInputElement&&n.files?toArray(n.files):n.value}function processInputValue(n,e,t,i,r){if(!(i==null||haveSeenNode(n,i))){if(n.push(i),shouldInclude(i)){let o=getRawAttribute(i,"name");addValueToFormData(o,getValueFromInput(i),e),r&&validateElement(i,t)}i instanceof HTMLFormElement&&(forEach(i.elements,function(o){n.indexOf(o)>=0?removeValueFromFormData(o.name,getValueFromInput(o),e):n.push(o),r&&validateElement(o,t)}),new FormData(i).forEach(function(o,s){o instanceof File&&o.name===""||addValueToFormData(s,o,e)}))}}function validateElement(n,e){let t=n;t.willValidate&&(triggerEvent(t,"htmx:validation:validate"),t.checkValidity()||(triggerEvent(t,"htmx:validation:failed",{message:t.validationMessage,validity:t.validity})&&!e.length&&htmx.config.reportValidityOfForms&&t.reportValidity(),e.push({elt:t,message:t.validationMessage,validity:t.validity})))}function overrideFormData(n,e){for(let t of e.keys())n.delete(t);return e.forEach(function(t,i){n.append(i,t)}),n}function getInputValues(n,e){let t=[],i=new FormData,r=new FormData,o=[],s=getInternalData(n);s.lastButtonClicked&&!bodyContains(s.lastButtonClicked)&&(s.lastButtonClicked=null);let a=n instanceof HTMLFormElement&&n.noValidate!==!0||getAttributeValue(n,"hx-validate")==="true";if(s.lastButtonClicked&&(a=a&&s.lastButtonClicked.formNoValidate!==!0),e!=="get"&&processInputValue(t,r,o,getRelatedForm(n),a),processInputValue(t,i,o,n,a),s.lastButtonClicked||n.tagName==="BUTTON"||n.tagName==="INPUT"&&getRawAttribute(n,"type")==="submit"){let c=s.lastButtonClicked||n,u=getRawAttribute(c,"name");addValueToFormData(u,c.value,r)}let l=findAttributeTargets(n,"hx-include");return forEach(l,function(c){processInputValue(t,i,o,asElement(c),a),matches(c,"form")||forEach(asParentNode(c).querySelectorAll(INPUT_SELECTOR),function(u){processInputValue(t,i,o,u,a)})}),overrideFormData(i,r),{errors:o,formData:i,values:formDataProxy(i)}}function appendParam(n,e,t){n!==""&&(n+="&"),String(t)==="[object Object]"&&(t=JSON.stringify(t));let i=encodeURIComponent(t);return n+=encodeURIComponent(e)+"="+i,n}function urlEncode(n){n=formDataFromObject(n);let e="";return n.forEach(function(t,i){e=appendParam(e,i,t)}),e}function getHeaders(n,e,t){let i={"HX-Request":"true","HX-Trigger":getRawAttribute(n,"id"),"HX-Trigger-Name":getRawAttribute(n,"name"),"HX-Target":getAttributeValue(e,"id"),"HX-Current-URL":location.href};return getValuesForElement(n,"hx-headers",!1,i),t!==void 0&&(i["HX-Prompt"]=t),getInternalData(n).boosted&&(i["HX-Boosted"]="true"),i}function filterValues(n,e){let t=getClosestAttributeValue(e,"hx-params");if(t){if(t==="none")return new FormData;if(t==="*")return n;if(t.indexOf("not ")===0)return forEach(t.slice(4).split(","),function(i){i=i.trim(),n.delete(i)}),n;{let i=new FormData;return forEach(t.split(","),function(r){r=r.trim(),n.has(r)&&n.getAll(r).forEach(function(o){i.append(r,o)})}),i}}else return n}function isAnchorLink(n){return!!getRawAttribute(n,"href")&&getRawAttribute(n,"href").indexOf("#")>=0}function getSwapSpecification(n,e){let t=e||getClosestAttributeValue(n,"hx-swap"),i={swapStyle:getInternalData(n).boosted?"innerHTML":htmx.config.defaultSwapStyle,swapDelay:htmx.config.defaultSwapDelay,settleDelay:htmx.config.defaultSettleDelay};if(htmx.config.scrollIntoViewOnBoost&&getInternalData(n).boosted&&!isAnchorLink(n)&&(i.show="top"),t){let s=splitOnWhitespace(t);if(s.length>0)for(let a=0;a0?r.join(":"):null;i.scroll=u,i.scrollTarget=o}else if(l.indexOf("show:")===0){var r=l.slice(5).split(":");let d=r.pop();var o=r.length>0?r.join(":"):null;i.show=d,i.showTarget=o}else if(l.indexOf("focus-scroll:")===0){let c=l.slice(13);i.focusScroll=c=="true"}else a==0?i.swapStyle=l:logError("Unknown modifier in hx-swap: "+l)}}return i}function usesFormData(n){return getClosestAttributeValue(n,"hx-encoding")==="multipart/form-data"||matches(n,"form")&&getRawAttribute(n,"enctype")==="multipart/form-data"}function encodeParamsForBody(n,e,t){let i=null;return withExtensions(e,function(r){i==null&&(i=r.encodeParameters(n,t,e))}),i!=null?i:usesFormData(e)?overrideFormData(new FormData,formDataFromObject(t)):urlEncode(t)}function makeSettleInfo(n){return{tasks:[],elts:[n]}}function updateScrollState(n,e){let t=n[0],i=n[n.length-1];if(e.scroll){var r=null;e.scrollTarget&&(r=asElement(querySelectorExt(t,e.scrollTarget))),e.scroll==="top"&&(t||r)&&(r=r||t,r.scrollTop=0),e.scroll==="bottom"&&(i||r)&&(r=r||i,r.scrollTop=r.scrollHeight),typeof e.scroll=="number"&&getWindow().setTimeout(function(){window.scrollTo(0,e.scroll)},0)}if(e.show){var r=null;if(e.showTarget){let s=e.showTarget;e.showTarget==="window"&&(s="body"),r=asElement(querySelectorExt(t,s))}e.show==="top"&&(t||r)&&(r=r||t,r.scrollIntoView({block:"start",behavior:htmx.config.scrollBehavior})),e.show==="bottom"&&(i||r)&&(r=r||i,r.scrollIntoView({block:"end",behavior:htmx.config.scrollBehavior}))}}function getValuesForElement(n,e,t,i,r){if(i==null&&(i={}),n==null)return i;let o=getAttributeValue(n,e);if(o){let s=o.trim(),a=t;if(s==="unset")return null;s.indexOf("javascript:")===0?(s=s.slice(11),a=!0):s.indexOf("js:")===0&&(s=s.slice(3),a=!0),s.indexOf("{")!==0&&(s="{"+s+"}");let l;a?l=maybeEval(n,function(){return r?Function("event","return ("+s+")").call(n,r):Function("return ("+s+")").call(n)},{}):l=parseJSON(s);for(let c in l)l.hasOwnProperty(c)&&i[c]==null&&(i[c]=l[c])}return getValuesForElement(asElement(parentElt(n)),e,t,i,r)}function maybeEval(n,e,t){return htmx.config.allowEval?e():(triggerErrorEvent(n,"htmx:evalDisallowedError"),t)}function getHXVarsForElement(n,e,t){return getValuesForElement(n,"hx-vars",!0,t,e)}function getHXValsForElement(n,e,t){return getValuesForElement(n,"hx-vals",!1,t,e)}function getExpressionVars(n,e){return mergeObjects(getHXVarsForElement(n,e),getHXValsForElement(n,e))}function safelySetHeaderValue(n,e,t){if(t!==null)try{n.setRequestHeader(e,t)}catch(i){n.setRequestHeader(e,encodeURIComponent(t)),n.setRequestHeader(e+"-URI-AutoEncoded","true")}}function getPathFromResponse(n){if(n.responseURL)try{let e=new URL(n.responseURL);return e.pathname+e.search}catch(e){triggerErrorEvent(getDocument().body,"htmx:badResponseUrl",{url:n.responseURL})}}function hasHeader(n,e){return e.test(n.getAllResponseHeaders())}function ajaxHelper(n,e,t){if(n=n.toLowerCase(),t){if(t instanceof Element||typeof t=="string")return issueAjaxRequest(n,e,null,null,{targetOverride:resolveTarget(t)||DUMMY_ELT,returnPromise:!0});{let i=resolveTarget(t.target);return(t.target&&!i||t.source&&!i&&!resolveTarget(t.source))&&(i=DUMMY_ELT),issueAjaxRequest(n,e,resolveTarget(t.source),t.event,{handler:t.handler,headers:t.headers,values:t.values,targetOverride:i,swapOverride:t.swap,select:t.select,returnPromise:!0,push:t.push,replace:t.replace,selectOOB:t.selectOOB})}}else return issueAjaxRequest(n,e,null,null,{returnPromise:!0})}function hierarchyForElt(n){let e=[];for(;n;)e.push(n),n=n.parentElement;return e}function verifyPath(n,e,t){let i=new URL(e,location.protocol!=="about:"?location.href:window.origin),o=(location.protocol!=="about:"?location.origin:window.origin)===i.origin;return htmx.config.selfRequestsOnly&&!o?!1:triggerEvent(n,"htmx:validateUrl",mergeObjects({url:i,sameHost:o},t))}function formDataFromObject(n){if(n instanceof FormData)return n;let e=new FormData;for(let t in n)n.hasOwnProperty(t)&&(n[t]&&typeof n[t].forEach=="function"?n[t].forEach(function(i){e.append(t,i)}):typeof n[t]=="object"&&!(n[t]instanceof Blob)?e.append(t,JSON.stringify(n[t])):e.append(t,n[t]));return e}function formDataArrayProxy(n,e,t){return new Proxy(t,{get:function(i,r){return typeof r=="number"?i[r]:r==="length"?i.length:r==="push"?function(o){i.push(o),n.append(e,o)}:typeof i[r]=="function"?function(){i[r].apply(i,arguments),n.delete(e),i.forEach(function(o){n.append(e,o)})}:i[r]&&i[r].length===1?i[r][0]:i[r]},set:function(i,r,o){return i[r]=o,n.delete(e),i.forEach(function(s){n.append(e,s)}),!0}})}function formDataProxy(n){return new Proxy(n,{get:function(e,t){if(typeof t=="symbol"){let r=Reflect.get(e,t);return typeof r=="function"?function(){return r.apply(n,arguments)}:r}if(t==="toJSON")return()=>Object.fromEntries(n);if(t in e&&typeof e[t]=="function")return function(){return n[t].apply(n,arguments)};let i=n.getAll(t);if(i.length!==0)return i.length===1?i[0]:formDataArrayProxy(e,t,i)},set:function(e,t,i){return typeof t!="string"?!1:(e.delete(t),i&&typeof i.forEach=="function"?i.forEach(function(r){e.append(t,r)}):typeof i=="object"&&!(i instanceof Blob)?e.append(t,JSON.stringify(i)):e.append(t,i),!0)},deleteProperty:function(e,t){return typeof t=="string"&&e.delete(t),!0},ownKeys:function(e){return Reflect.ownKeys(Object.fromEntries(e))},getOwnPropertyDescriptor:function(e,t){return Reflect.getOwnPropertyDescriptor(Object.fromEntries(e),t)}})}function issueAjaxRequest(n,e,t,i,r,o){let s=null,a=null;if(r=r!=null?r:{},r.returnPromise&&typeof Promise!="undefined")var l=new Promise(function(Y,ee){s=Y,a=ee});t==null&&(t=getDocument().body);let c=r.handler||handleAjaxResponse,u=r.select||null;if(!bodyContains(t))return maybeCall(s),l;let d=r.targetOverride||asElement(getTarget(t));if(d==null||d==DUMMY_ELT)return triggerErrorEvent(t,"htmx:targetError",{target:getClosestAttributeValue(t,"hx-target")}),maybeCall(a),l;let p=getInternalData(t),y=p.lastButtonClicked;if(y){let Y=getRawAttribute(y,"formaction");Y!=null&&(e=Y);let ee=getRawAttribute(y,"formmethod");if(ee!=null)if(VERBS.includes(ee.toLowerCase()))n=ee;else return maybeCall(s),l}let m=getClosestAttributeValue(t,"hx-confirm");if(o===void 0&&triggerEvent(t,"htmx:confirm",{target:d,elt:t,path:e,verb:n,triggeringEvent:i,etc:r,issueRequest:function(oe){return issueAjaxRequest(n,e,t,i,r,!!oe)},question:m})===!1)return maybeCall(s),l;let g=t,_=getClosestAttributeValue(t,"hx-sync"),x=null,A=!1;if(_){let Y=_.split(":"),ee=Y[0].trim();if(ee==="this"?g=findThisElement(t,"hx-sync"):g=asElement(querySelectorExt(t,ee)),_=(Y[1]||"drop").trim(),p=getInternalData(g),_==="drop"&&p.xhr&&p.abortable!==!0)return maybeCall(s),l;if(_==="abort"){if(p.xhr)return maybeCall(s),l;A=!0}else _==="replace"?triggerEvent(g,"htmx:abort"):_.indexOf("queue")===0&&(x=(_.split(" ")[1]||"last").trim())}if(p.xhr)if(p.abortable)triggerEvent(g,"htmx:abort");else{if(x==null){if(i){let Y=getInternalData(i);Y&&Y.triggerSpec&&Y.triggerSpec.queue&&(x=Y.triggerSpec.queue)}x==null&&(x="last")}return p.queuedRequests==null&&(p.queuedRequests=[]),x==="first"&&p.queuedRequests.length===0?p.queuedRequests.push(function(){issueAjaxRequest(n,e,t,i,r)}):x==="all"?p.queuedRequests.push(function(){issueAjaxRequest(n,e,t,i,r)}):x==="last"&&(p.queuedRequests=[],p.queuedRequests.push(function(){issueAjaxRequest(n,e,t,i,r)})),maybeCall(s),l}let w=new XMLHttpRequest;p.xhr=w,p.abortable=A;let C=function(){p.xhr=null,p.abortable=!1,p.queuedRequests!=null&&p.queuedRequests.length>0&&p.queuedRequests.shift()()},$=getClosestAttributeValue(t,"hx-prompt");if($){var j=prompt($);if(j===null||!triggerEvent(t,"htmx:prompt",{prompt:j,target:d}))return maybeCall(s),C(),l}if(m&&!o&&!confirm(m))return maybeCall(s),C(),l;let H=getHeaders(t,d,j);n!=="get"&&!usesFormData(t)&&(H["Content-Type"]="application/x-www-form-urlencoded"),r.headers&&(H=mergeObjects(H,r.headers));let I=getInputValues(t,n),L=I.errors,W=I.formData;r.values&&overrideFormData(W,formDataFromObject(r.values));let G=formDataFromObject(getExpressionVars(t,i)),Q=overrideFormData(W,G),Z=filterValues(Q,t);htmx.config.getCacheBusterParam&&n==="get"&&Z.set("org.htmx.cache-buster",getRawAttribute(d,"id")||"true"),(e==null||e==="")&&(e=location.href);let he=getValuesForElement(t,"hx-request"),Ce=getInternalData(t).boosted,ie=htmx.config.methodsThatUseUrlParams.indexOf(n)>=0,ne={boosted:Ce,useUrlParams:ie,formData:Z,parameters:formDataProxy(Z),unfilteredFormData:Q,unfilteredParameters:formDataProxy(Q),headers:H,elt:t,target:d,verb:n,errors:L,withCredentials:r.credentials||he.credentials||htmx.config.withCredentials,timeout:r.timeout||he.timeout||htmx.config.timeout,path:e,triggeringEvent:i};if(!triggerEvent(t,"htmx:configRequest",ne))return maybeCall(s),C(),l;if(e=ne.path,n=ne.verb,H=ne.headers,Z=formDataFromObject(ne.parameters),L=ne.errors,ie=ne.useUrlParams,L&&L.length>0)return triggerEvent(t,"htmx:validation:halted",ne),maybeCall(s),C(),l;let Ue=e.split("#"),Re=Ue[0],q=Ue[1],M=e;if(ie&&(M=Re,!Z.keys().next().done&&(M.indexOf("?")<0?M+="?":M+="&",M+=urlEncode(Z),q&&(M+="#"+q))),!verifyPath(t,M,ne))return triggerErrorEvent(t,"htmx:invalidPath",ne),maybeCall(a),C(),l;if(w.open(n.toUpperCase(),M,!0),w.overrideMimeType("text/html"),w.withCredentials=ne.withCredentials,w.timeout=ne.timeout,!he.noHeaders){for(let Y in H)if(H.hasOwnProperty(Y)){let ee=H[Y];safelySetHeaderValue(w,Y,ee)}}let D={xhr:w,target:d,requestConfig:ne,etc:r,boosted:Ce,select:u,pathInfo:{requestPath:e,finalRequestPath:M,responsePath:null,anchor:q}};if(w.onload=function(){try{let Y=hierarchyForElt(t);if(D.pathInfo.responsePath=getPathFromResponse(w),c(t,D),D.keepIndicators!==!0&&removeRequestIndicators(B,V),triggerEvent(t,"htmx:afterRequest",D),triggerEvent(t,"htmx:afterOnLoad",D),!bodyContains(t)){let ee=null;for(;Y.length>0&&ee==null;){let oe=Y.shift();bodyContains(oe)&&(ee=oe)}ee&&(triggerEvent(ee,"htmx:afterRequest",D),triggerEvent(ee,"htmx:afterOnLoad",D))}maybeCall(s)}catch(Y){throw triggerErrorEvent(t,"htmx:onLoadError",mergeObjects({error:Y},D)),Y}finally{C()}},w.onerror=function(){removeRequestIndicators(B,V),triggerErrorEvent(t,"htmx:afterRequest",D),triggerErrorEvent(t,"htmx:sendError",D),maybeCall(a),C()},w.onabort=function(){removeRequestIndicators(B,V),triggerErrorEvent(t,"htmx:afterRequest",D),triggerErrorEvent(t,"htmx:sendAbort",D),maybeCall(a),C()},w.ontimeout=function(){removeRequestIndicators(B,V),triggerErrorEvent(t,"htmx:afterRequest",D),triggerErrorEvent(t,"htmx:timeout",D),maybeCall(a),C()},!triggerEvent(t,"htmx:beforeRequest",D))return maybeCall(s),C(),l;var B=addRequestIndicatorClasses(t),V=disableElements(t);forEach(["loadstart","loadend","progress","abort"],function(Y){forEach([w,w.upload],function(ee){ee.addEventListener(Y,function(oe){triggerEvent(t,"htmx:xhr:"+Y,{lengthComputable:oe.lengthComputable,loaded:oe.loaded,total:oe.total})})})}),triggerEvent(t,"htmx:beforeSend",D);let U=ie?null:encodeParamsForBody(w,t,Z);return w.send(U),l}function determineHistoryUpdates(n,e){let t=e.xhr,i=null,r=null;if(hasHeader(t,/HX-Push:/i)?(i=t.getResponseHeader("HX-Push"),r="push"):hasHeader(t,/HX-Push-Url:/i)?(i=t.getResponseHeader("HX-Push-Url"),r="push"):hasHeader(t,/HX-Replace-Url:/i)&&(i=t.getResponseHeader("HX-Replace-Url"),r="replace"),i)return i==="false"?{}:{type:r,path:i};let o=e.pathInfo.finalRequestPath,s=e.pathInfo.responsePath,a=e.etc.push||getClosestAttributeValue(n,"hx-push-url"),l=e.etc.replace||getClosestAttributeValue(n,"hx-replace-url");a==="false"&&(a=null),l==="false"&&(l=null);let c=getInternalData(n).boosted,u=null,d=null;return a?(u="push",d=a):l?(u="replace",d=l):c&&(u="push",d=s||o),d?(d==="true"&&(d=s||o),e.pathInfo.anchor&&d.indexOf("#")===-1&&(d=d+"#"+e.pathInfo.anchor),{type:u,path:d}):{}}function codeMatches(n,e){var t=new RegExp(n.code);return t.test(e.toString(10))}function resolveResponseHandling(n){for(var e=0;e.${e}{opacity:0;visibility: hidden} .${t} .${e}, .${t}.${e}{opacity:1;visibility: visible;transition: opacity 200ms ease-in}`)}}function getMetaConfig(){let n=getDocument().querySelector('meta[name="htmx-config"]');return n?parseJSON(n.content):null}function mergeMetaConfig(){let n=getMetaConfig();n&&(htmx.config=mergeObjects(htmx.config,n))}return ready(function(){mergeMetaConfig(),insertIndicatorStyles();let n=getDocument().body;processNode(n);let e=getDocument().querySelectorAll("[hx-trigger='restored'],[data-hx-trigger='restored']");n.addEventListener("htmx:abort",function(i){let r=i.detail.elt||i.target,o=getInternalData(r);o&&o.xhr&&o.xhr.abort()});let t=window.onpopstate?window.onpopstate.bind(window):null;window.onpopstate=function(i){i.state&&i.state.htmx?(restoreHistory(),forEach(e,function(r){triggerEvent(r,"htmx:restored",{document:getDocument(),triggerEvent})})):t&&t(i)},getWindow().setTimeout(function(){triggerEvent(n,"htmx:load",{}),n=null},0)}),htmx})(),H_=Qp;function Mo(n,e){n.split(/\s+/).forEach(t=>{e(t)})}var ni=class{constructor(){this._events={}}on(e,t){Mo(e,i=>{let r=this._events[i]||[];r.push(t),this._events[i]=r})}off(e,t){var i=arguments.length;if(i===0){this._events={};return}Mo(e,r=>{if(i===1){delete this._events[r];return}let o=this._events[r];o!==void 0&&(o.splice(o.indexOf(t),1),this._events[r]=o)})}trigger(e,...t){var i=this;Mo(e,r=>{let o=i._events[r];o!==void 0&&o.forEach(s=>{s.apply(i,t)})})}};function No(n){return n.plugins={},class extends n{constructor(){super(...arguments),this.plugins={names:[],settings:{},requested:{},loaded:{}}}static define(e,t){n.plugins[e]={name:e,fn:t}}initializePlugins(e){var t,i;let r=this,o=[];if(Array.isArray(e))e.forEach(s=>{typeof s=="string"?o.push(s):(r.plugins.settings[s.name]=s.options,o.push(s.name))});else if(e)for(t in e)e.hasOwnProperty(t)&&(r.plugins.settings[t]=e[t],o.push(t));for(;i=o.shift();)r.require(i)}loadPlugin(e){var t=this,i=t.plugins,r=n.plugins[e];if(!n.plugins.hasOwnProperty(e))throw new Error('Unable to find "'+e+'" plugin');i.requested[e]=!0,i.loaded[e]=r.fn.apply(t,[t.plugins.settings[e]||{}]),i.names.push(e)}require(e){var t=this,i=t.plugins;if(!t.plugins.loaded.hasOwnProperty(e)){if(i.requested[e])throw new Error('Plugin has circular dependency ("'+e+'")');t.loadPlugin(e)}return i.loaded[e]}}}var ii=n=>(n=n.filter(Boolean),n.length<2?n[0]||"":Zp(n)==1?"["+n.join("")+"]":"(?:"+n.join("|")+")"),ko=n=>{if(!Jp(n))return n.join("");let e="",t=0,i=()=>{t>1&&(e+="{"+t+"}")};return n.forEach((r,o)=>{if(r===n[o-1]){t++;return}i(),e+=r,t=1}),i(),e},Ho=n=>{let e=Array.from(n);return ii(e)},Jp=n=>new Set(n).size!==n.length,Lt=n=>(n+"").replace(/([\$\(\)\*\+\.\?\[\]\^\{\|\}\\])/gu,"\\$1"),Zp=n=>n.reduce((e,t)=>Math.max(e,em(t)),0),em=n=>Array.from(n).length;var Io=n=>{if(n.length===1)return[[n]];let e=[],t=n.substring(1);return Io(t).forEach(function(r){let o=r.slice(0);o[0]=n.charAt(0)+o[0],e.push(o),o=r.slice(0),o.unshift(n.charAt(0)),e.push(o)}),e};var tm=[[0,65535]],nm="[\u0300-\u036F\xB7\u02BE\u02BC]",nr,Ba,im=3,Ro={},Pa={"/":"\u2044\u2215",0:"\u07C0",a:"\u2C65\u0250\u0251",aa:"\uA733",ae:"\xE6\u01FD\u01E3",ao:"\uA735",au:"\uA737",av:"\uA739\uA73B",ay:"\uA73D",b:"\u0180\u0253\u0183",c:"\uA73F\u0188\u023C\u2184",d:"\u0111\u0257\u0256\u1D05\u018C\uABB7\u0501\u0266",e:"\u025B\u01DD\u1D07\u0247",f:"\uA77C\u0192",g:"\u01E5\u0260\uA7A1\u1D79\uA77F\u0262",h:"\u0127\u2C68\u2C76\u0265",i:"\u0268\u0131",j:"\u0249\u0237",k:"\u0199\u2C6A\uA741\uA743\uA745\uA7A3",l:"\u0142\u019A\u026B\u2C61\uA749\uA747\uA781\u026D",m:"\u0271\u026F\u03FB",n:"\uA7A5\u019E\u0272\uA791\u1D0E\u043B\u0509",o:"\xF8\u01FF\u0254\u0275\uA74B\uA74D\u1D11",oe:"\u0153",oi:"\u01A3",oo:"\uA74F",ou:"\u0223",p:"\u01A5\u1D7D\uA751\uA753\uA755\u03C1",q:"\uA757\uA759\u024B",r:"\u024D\u027D\uA75B\uA7A7\uA783",s:"\xDF\u023F\uA7A9\uA785\u0282",t:"\u0167\u01AD\u0288\u2C66\uA787",th:"\xFE",tz:"\uA729",u:"\u0289",v:"\u028B\uA75F\u028C",vy:"\uA761",w:"\u2C73",y:"\u01B4\u024F\u1EFF",z:"\u01B6\u0225\u0240\u2C6C\uA763",hv:"\u0195"};for(let n in Pa){let e=Pa[n]||"";for(let t=0;t{nr===void 0&&(nr=cm(n||tm))},Fa=(n,e="NFKD")=>n.normalize(e),ri=n=>Array.from(n).reduce((e,t)=>e+sm(t),""),sm=n=>(n=Fa(n).toLowerCase().replace(rm,e=>Ro[e]||""),Fa(n,"NFC"));function*am(n){for(let[e,t]of n)for(let i=e;i<=t;i++){let r=String.fromCharCode(i),o=ri(r);o!=r.toLowerCase()&&(o.length>im||o.length!=0&&(yield{folded:o,composed:r,code_point:i}))}}var lm=n=>{let e={},t=(i,r)=>{let o=e[i]||new Set,s=new RegExp("^"+Ho(o)+"$","iu");r.match(s)||(o.add(Lt(r)),e[i]=o)};for(let i of am(n))t(i.folded,i.folded),t(i.folded,i.composed);return e},cm=n=>{let e=lm(n),t={},i=[];for(let o in e){let s=e[o];s&&(t[o]=Ho(s)),o.length>1&&i.push(Lt(o))}i.sort((o,s)=>s.length-o.length);let r=ii(i);return Ba=new RegExp("^"+r,"u"),t},um=(n,e=1)=>{let t=0;return n=n.map(i=>(nr[i]&&(t+=i.length),nr[i]||i)),t>=e?ko(n):""},dm=(n,e=1)=>(e=Math.max(e,n.length-1),ii(Io(n).map(t=>um(t,e)))),$a=(n,e=!0)=>{let t=n.length>1?1:0;return ii(n.map(i=>{let r=[],o=e?i.length():i.length()-1;for(let s=0;s{for(let t of e){if(t.start!=n.start||t.end!=n.end||t.substrs.join("")!==n.substrs.join(""))continue;let i=n.parts,r=s=>{for(let a of i){if(a.start===s.start&&a.substr===s.substr)return!1;if(!(s.length==1||a.length==1)&&(s.starta.start||a.starts.start))return!0}return!1};if(!(t.parts.filter(r).length>0))return!0}return!1},ir=class n{constructor(){le(this,"parts");le(this,"substrs");le(this,"start");le(this,"end");this.parts=[],this.substrs=[],this.start=0,this.end=0}add(e){e&&(this.parts.push(e),this.substrs.push(e.substr),this.start=Math.min(e.start,this.start),this.end=Math.max(e.end,this.end))}last(){return this.parts[this.parts.length-1]}length(){return this.parts.length}clone(e,t){let i=new n,r=JSON.parse(JSON.stringify(this.parts)),o=r.pop();for(let l of r)i.add(l);let s=t.substr.substring(0,e-o.start),a=s.length;return i.add({start:o.start,end:o.start+a,length:a,substr:s}),i}},Va=n=>{om(),n=ri(n);let e="",t=[new ir];for(let i=0;i0){l=l.sort((u,d)=>u.length()-d.length());for(let u of l)fm(u,t)||t.push(u);continue}if(i>0&&c.size==1&&!c.has("3")){e+=$a(t,!1);let u=new ir,d=t[0];d&&u.add(d.last()),t=[u]}}return e+=$a(t,!0),e};var za=(n,e)=>{if(n)return n[e]},ja=(n,e)=>{if(n){for(var t,i=e.split(".");(t=i.shift())&&(n=n[t]););return n}},rr=(n,e,t)=>{var i,r;return!n||(n=n+"",e.regex==null)||(r=n.search(e.regex),r===-1)?0:(i=e.string.length/n.length,r===0&&(i+=.5),i*t)},or=(n,e)=>{var t=n[e];if(typeof t=="function")return t;t&&!Array.isArray(t)&&(n[e]=[t])},oi=(n,e)=>{if(Array.isArray(n))n.forEach(e);else for(var t in n)n.hasOwnProperty(t)&&e(n[t],t)},Wa=(n,e)=>typeof n=="number"&&typeof e=="number"?n>e?1:ne?1:e>n?-1:0);var sr=class{constructor(e,t){le(this,"items");le(this,"settings");this.items=e,this.settings=t||{diacritics:!0}}tokenize(e,t,i){if(!e||!e.length)return[];let r=[],o=e.split(/\s+/);var s;return i&&(s=new RegExp("^("+Object.keys(i).map(Lt).join("|")+"):(.*)$")),o.forEach(a=>{let l,c=null,u=null;s&&(l=a.match(s))&&(c=l[1],a=l[2]),a.length>0&&(this.settings.diacritics?u=Va(a)||null:u=Lt(a),u&&t&&(u="\\b"+u)),r.push({string:a,regex:u?new RegExp(u,"iu"):null,field:c})}),r}getScoreFunction(e,t){var i=this.prepareSearch(e,t);return this._getScoreFunction(i)}_getScoreFunction(e){let t=e.tokens,i=t.length;if(!i)return function(){return 0};let r=e.options.fields,o=e.weights,s=r.length,a=e.getAttrFn;if(!s)return function(){return 1};let l=(function(){return s===1?function(c,u){let d=r[0].field;return rr(a(u,d),c,o[d]||1)}:function(c,u){var d=0;if(c.field){let p=a(u,c.field);!c.regex&&p?d+=1/s:d+=rr(p,c,1)}else oi(o,(p,y)=>{d+=rr(a(u,y),c,p)});return d/s}})();return i===1?function(c){return l(t[0],c)}:e.options.conjunction==="and"?function(c){var u,d=0;for(let p of t){if(u=l(p,c),u<=0)return 0;d+=u}return d/i}:function(c){var u=0;return oi(t,d=>{u+=l(d,c)}),u/i}}getSortFunction(e,t){var i=this.prepareSearch(e,t);return this._getSortFunction(i)}_getSortFunction(e){var t,i=[];let r=this,o=e.options,s=!e.query&&o.sort_empty?o.sort_empty:o.sort;if(typeof s=="function")return s.bind(this);let a=function(c,u){return c==="$score"?u.score:e.getAttrFn(r.items[u.id],c)};if(s)for(let c of s)(e.query||c.field!=="$score")&&i.push(c);if(e.query){t=!0;for(let c of i)if(c.field==="$score"){t=!1;break}t&&i.unshift({field:"$score",direction:"desc"})}else i=i.filter(c=>c.field!=="$score");return i.length?function(c,u){var d,p;for(let y of i)if(p=y.field,d=(y.direction==="desc"?-1:1)*Wa(a(p,c),a(p,u)),d)return d;return 0}:null}prepareSearch(e,t){let i={};var r=Object.assign({},t);if(or(r,"sort"),or(r,"sort_empty"),r.fields){or(r,"fields");let o=[];r.fields.forEach(s=>{typeof s=="string"&&(s={field:s,weight:1}),o.push(s),i[s.field]="weight"in s?s.weight:1}),r.fields=o}return{options:r,query:e.toLowerCase().trim(),tokens:this.tokenize(e,r.respect_word_boundaries,i),total:0,items:[],weights:i,getAttrFn:r.nesting?ja:za}}search(e,t){var i=this,r,o;o=this.prepareSearch(e,t),t=o.options,e=o.query;let s=t.score||i._getScoreFunction(o);e.length?oi(i.items,(l,c)=>{r=s(l),(t.filter===!1||r>0)&&o.items.push({score:r,id:c})}):oi(i.items,(l,c)=>{o.items.push({score:1,id:c})});let a=i._getSortFunction(o);return a&&o.items.sort(a),o.total=o.items.length,typeof t.limit=="number"&&(o.items=o.items.slice(0,t.limit)),o}};var Fe=n=>typeof n=="undefined"||n===null?null:si(n),si=n=>typeof n=="boolean"?n?"1":"0":n+"",ar=n=>(n+"").replace(/&/g,"&").replace(//g,">").replace(/"/g,"""),qa=(n,e)=>e>0?window.setTimeout(n,e):(n.call(null),null),Ua=(n,e)=>{var t;return function(i,r){var o=this;t&&(o.loading=Math.max(o.loading-1,0),clearTimeout(t)),t=setTimeout(function(){t=null,o.loadedSearches[i]=!0,n.call(o,i,r)},e)}},Po=(n,e,t)=>{var i,r=n.trigger,o={};n.trigger=function(){var s=arguments[0];if(e.indexOf(s)!==-1)o[s]=arguments;else return r.apply(n,arguments)},t.apply(n,[]),n.trigger=r;for(i of e)i in o&&r.apply(n,o[i])},Ya=n=>({start:n.selectionStart||0,length:(n.selectionEnd||0)-(n.selectionStart||0)}),fe=(n,e=!1)=>{n&&(n.preventDefault(),e&&n.stopPropagation())},De=(n,e,t,i)=>{n.addEventListener(e,t,i)},Mt=(n,e)=>{if(!e||!e[n])return!1;var t=(e.altKey?1:0)+(e.ctrlKey?1:0)+(e.shiftKey?1:0)+(e.metaKey?1:0);return t===1},lr=(n,e)=>{let t=n.getAttribute("id");return t||(n.setAttribute("id",e),e)},Fo=n=>n.replace(/[\\"']/g,"\\$&"),Nt=(n,e)=>{e&&n.append(e)},ve=(n,e)=>{if(Array.isArray(n))n.forEach(e);else for(var t in n)n.hasOwnProperty(t)&&e(n[t],t)};var nt=n=>{if(n.jquery)return n[0];if(n instanceof HTMLElement)return n;if($o(n)){var e=document.createElement("template");return e.innerHTML=n.trim(),e.content.firstChild}return document.querySelector(n)},$o=n=>typeof n=="string"&&n.indexOf("<")>-1,Ga=n=>n.replace(/['"\\]/g,"\\$&"),cr=(n,e)=>{var t=document.createEvent("HTMLEvents");t.initEvent(e,!0,!1),n.dispatchEvent(t)},ai=(n,e)=>{Object.assign(n.style,e)},$e=(n,...e)=>{var t=Ka(e);n=Xa(n),n.map(i=>{t.map(r=>{i.classList.add(r)})})},gt=(n,...e)=>{var t=Ka(e);n=Xa(n),n.map(i=>{t.map(r=>{i.classList.remove(r)})})},Ka=n=>{var e=[];return ve(n,t=>{typeof t=="string"&&(t=t.trim().split(/[\t\n\f\r\s]/)),Array.isArray(t)&&(e=e.concat(t))}),e.filter(Boolean)},Xa=n=>(Array.isArray(n)||(n=[n]),n),ur=(n,e,t)=>{if(!(t&&!t.contains(n)))for(;n&&n.matches;){if(n.matches(e))return n;n=n.parentNode}},Bo=(n,e=0)=>e>0?n[n.length-1]:n[0],Qa=n=>Object.keys(n).length===0,Vo=(n,e)=>{if(!n)return-1;e=e||n.nodeName;for(var t=0;n=n.previousElementSibling;)n.matches(e)&&t++;return t},ae=(n,e)=>{ve(e,(t,i)=>{t==null?n.removeAttribute(i):n.setAttribute(i,""+t)})},li=(n,e)=>{n.parentNode&&n.parentNode.replaceChild(e,n)};var Ja=(n,e)=>{if(e===null)return;if(typeof e=="string"){if(!e.length)return;e=new RegExp(e,"i")}let t=o=>{var s=o.data.match(e);if(s&&o.data.length>0){var a=document.createElement("span");a.className="highlight";var l=o.splitText(s.index);l.splitText(s[0].length);var c=l.cloneNode(!0);return a.appendChild(c),li(l,a),1}return 0},i=o=>{o.nodeType===1&&o.childNodes&&!/(script|style)/i.test(o.tagName)&&(o.className!=="highlight"||o.tagName!=="SPAN")&&Array.from(o.childNodes).forEach(s=>{r(s)})},r=o=>o.nodeType===3?t(o):(i(o),0);r(n)},Za=n=>{var e=n.querySelectorAll("span.highlight");Array.prototype.forEach.call(e,function(t){var i=t.parentNode;i.replaceChild(t.firstChild,t),i.normalize()})};var hm=typeof navigator=="undefined"?!1:/Mac/.test(navigator.userAgent),ci=hm?"metaKey":"ctrlKey";var zo={options:[],optgroups:[],plugins:[],delimiter:",",splitOn:null,persist:!0,diacritics:!0,create:null,createOnBlur:!1,createFilter:null,clearAfterSelect:!1,highlight:!0,openOnFocus:!0,shouldOpen:null,maxOptions:50,maxItems:null,hideSelected:null,duplicates:!1,addPrecedence:!1,selectOnTab:!1,preload:null,allowEmptyOption:!1,refreshThrottle:300,loadThrottle:300,loadingClass:"loading",dataAttr:null,optgroupField:"optgroup",valueField:"value",labelField:"text",disabledField:"disabled",optgroupLabelField:"label",optgroupValueField:"value",lockOptgroupOrder:!1,sortField:"$order",searchField:["text"],searchConjunction:"and",mode:null,wrapperClass:"ts-wrapper",controlClass:"ts-control",dropdownClass:"ts-dropdown",dropdownContentClass:"ts-dropdown-content",itemClass:"item",optionClass:"option",dropdownParent:null,controlInput:'',copyClassesToDropdown:!1,placeholder:null,hidePlaceholder:null,shouldLoad:function(n){return n.length>0},render:{}};function dr(n,e){var t=Object.assign({},zo,e),i=t.dataAttr,r=t.labelField,o=t.valueField,s=t.disabledField,a=t.optgroupField,l=t.optgroupLabelField,c=t.optgroupValueField,u=n.tagName.toLowerCase(),d=n.getAttribute("placeholder")||n.getAttribute("data-placeholder");if(!d&&!t.allowEmptyOption){let g=n.querySelector('option[value=""]');g&&(d=g.textContent)}var p={placeholder:d,options:[],optgroups:[],items:[],maxItems:null},y=()=>{var g,_=p.options,x={},A=1;let w=0;var C=H=>{var I=Object.assign({},H.dataset),L=i&&I[i];return typeof L=="string"&&L.length&&(I=Object.assign(I,JSON.parse(L))),I},$=(H,I)=>{var L=Fe(H.value);if(L!=null&&!(!L&&!t.allowEmptyOption)){if(x.hasOwnProperty(L)){if(I){var W=x[L][a];W?Array.isArray(W)?W.push(I):x[L][a]=[W,I]:x[L][a]=I}}else{var G=C(H);G[r]=G[r]||H.textContent,G[o]=G[o]||L,G[s]=G[s]||H.disabled,G[a]=G[a]||I,G.$option=H,G.$order=G.$order||++w,x[L]=G,_.push(G)}H.selected&&p.items.push(L)}},j=H=>{var I,L;L=C(H),L[l]=L[l]||H.getAttribute("label")||"",L[c]=L[c]||A++,L[s]=L[s]||H.disabled,L.$order=L.$order||++w,p.optgroups.push(L),I=L[c],ve(H.children,W=>{$(W,I)})};p.maxItems=n.hasAttribute("multiple")?null:1,ve(n.children,H=>{g=H.tagName.toLowerCase(),g==="optgroup"?j(H):g==="option"&&$(H)})},m=()=>{var g,_;let x=n.getAttribute(i);if(x)p.options=JSON.parse(x),ve(p.options,w=>{p.items.push(w[o])});else{var A=(_=(g=n==null?void 0:n.value)===null||g===void 0?void 0:g.trim())!==null&&_!==void 0?_:"";if(!t.allowEmptyOption&&!A.length)return;let w=A.split(t.delimiter);ve(w,C=>{let $={};$[r]=C,$[o]=C,p.options.push($)}),p.items=w}};return u==="select"?y():m(),Object.assign({},zo,p,e)}var nl=0,we=class extends No(ni){constructor(e,t){super(),this.order=0,this.isOpen=!1,this.isDisabled=!1,this.isReadOnly=!1,this.isInvalid=!1,this.isValid=!0,this.isLocked=!1,this.isFocused=!1,this.isInputHidden=!1,this.isSetup=!1,this.isDropdownContentStale=!0,this.ignoreFocus=!1,this.ignoreHover=!1,this.hasOptions=!1,this.lastValue="",this.caretPos=0,this.loading=0,this.loadedSearches={},this.activeOption=null,this.activeItems=[],this.optgroups={},this.options={},this.userOptions={},this.items=[],this.refreshTimeout=null,nl++;var i,r=nt(e);if(r.tomselect)throw new Error("Tom Select already initialized on this element");r.tomselect=this;var o=window.getComputedStyle&&window.getComputedStyle(r,null);i=o.getPropertyValue("direction");let s=dr(r,t);this.settings=s,this.input=r,this.tabIndex=r.tabIndex||0,this.is_select_tag=r.tagName.toLowerCase()==="select",this.rtl=/rtl/i.test(i),this.inputId=lr(r,"tomselect-"+nl),this.isRequired=r.required,this.sifter=new sr(this.options,{diacritics:s.diacritics}),s.mode=s.mode||(s.maxItems===1?"single":"multi"),typeof s.hideSelected!="boolean"&&(s.hideSelected=s.mode==="multi"),typeof s.hidePlaceholder!="boolean"&&(s.hidePlaceholder=s.mode!=="multi");var a=s.createFilter;typeof a!="function"&&(typeof a=="string"&&(a=new RegExp(a)),a instanceof RegExp?s.createFilter=_=>a.test(_):s.createFilter=_=>this.settings.duplicates||!this.options[_]),this.initializePlugins(s.plugins),this.setupCallbacks(),this.setupTemplates();let l=nt("
"),c=nt("
"),u=this._render("dropdown"),d=nt('
'),p=this.input.getAttribute("class")||"",y=s.mode;var m;if($e(l,s.wrapperClass,p,y),$e(c,s.controlClass),Nt(l,c),$e(u,s.dropdownClass,y),s.copyClassesToDropdown&&$e(u,p),$e(d,s.dropdownContentClass),Nt(u,d),nt(s.dropdownParent||l).appendChild(u),$o(s.controlInput)){m=nt(s.controlInput);var g=["autocorrect","autocapitalize","autocomplete","spellcheck","aria-label"];ve(g,_=>{r.getAttribute(_)&&ae(m,{[_]:r.getAttribute(_)})}),m.tabIndex=-1,c.appendChild(m),this.focus_node=m}else s.controlInput?(m=nt(s.controlInput),this.focus_node=m):(m=nt(""),this.focus_node=c);this.wrapper=l,this.dropdown=u,this.dropdown_content=d,this.control=c,this.control_input=m,this.setup()}setup(){let e=this,t=e.settings,i=e.control_input,r=e.dropdown,o=e.dropdown_content,s=e.wrapper,a=e.control,l=e.input,c=e.focus_node,u={passive:!0},d=e.inputId+"-ts-dropdown";ae(o,{id:d}),ae(c,{role:"combobox","aria-haspopup":"listbox","aria-expanded":"false","aria-controls":d});let p=lr(c,e.inputId+"-ts-control"),y="label[for='"+Ga(e.inputId)+"']",m=document.querySelector(y),g=e.focus.bind(e);if(m){De(m,"click",g),ae(m,{for:p});let w=lr(m,e.inputId+"-ts-label");ae(c,{"aria-labelledby":w}),ae(o,{"aria-labelledby":w})}if(s.style.width=l.style.width,s.style.minWidth=l.style.minWidth,s.style.maxWidth=l.style.maxWidth,e.plugins.names.length){let w="plugin-"+e.plugins.names.join(" plugin-");$e([s,r],w)}(t.maxItems===null||t.maxItems>1)&&e.is_select_tag&&ae(l,{multiple:"multiple"}),t.placeholder&&ae(i,{placeholder:t.placeholder}),!t.splitOn&&t.delimiter&&(t.splitOn=new RegExp("\\s*"+Lt(t.delimiter)+"+\\s*")),t.load&&t.loadThrottle&&(t.load=Ua(t.load,t.loadThrottle)),De(r,"mousemove",()=>{e.ignoreHover=!1}),De(r,"mouseenter",w=>{var C=ur(w.target,"[data-selectable]",r);C&&e.onOptionHover(w,C)},{capture:!0}),De(r,"click",w=>{let C=ur(w.target,"[data-selectable]");C&&(e.onOptionSelect(w,C),fe(w,!0))}),De(a,"click",w=>{var C=ur(w.target,"[data-ts-item]",a);if(C&&e.onItemSelect(w,C)){fe(w,!0);return}i.value==""&&(e.onClick(),fe(w,!0))}),De(c,"keydown",w=>e.onKeyDown(w)),De(i,"keypress",w=>e.onKeyPress(w)),De(i,"input",w=>e.onInput(w)),De(c,"blur",w=>e.onBlur(w)),De(c,"focus",w=>e.onFocus(w)),De(i,"paste",w=>e.onPaste(w));let _=w=>{let C=w.composedPath()[0];if(!s.contains(C)&&!r.contains(C)){e.isFocused&&e.blur(),e.inputState();return}C==i&&e.isOpen?w.stopPropagation():fe(w,!0)},x=()=>{e.isOpen&&e.positionDropdown()},A=()=>{e.isValid&&(e.isValid=!1,e.isInvalid=!0,e.refreshState())};De(l,"invalid",A),De(document,"mousedown",_),De(window,"scroll",x,u),De(window,"resize",x,u),this._destroy=()=>{l.removeEventListener("invalid",A),document.removeEventListener("mousedown",_),window.removeEventListener("scroll",x),window.removeEventListener("resize",x),m&&m.removeEventListener("click",g)},this.revertSettings={innerHTML:l.innerHTML,tabIndex:l.tabIndex},l.tabIndex=-1,l.insertAdjacentElement("afterend",e.wrapper),e.sync(!1),t.items=[],delete t.optgroups,delete t.options,e.refreshItems(),e.close(!1),e.inputState(),e.isSetup=!0,e.on("change",this.onChange),$e(l,"tomselected","ts-hidden-accessible"),e.trigger("initialize"),t.preload===!0&&e.preload()}setupOptions(e=[],t=[]){this.addOptions(e),ve(t,i=>{this.registerOptionGroup(i)})}setupTemplates(){var e=this,t=e.settings.labelField,i=e.settings.optgroupLabelField,r={optgroup:o=>{let s=document.createElement("div");return s.className="optgroup",s.appendChild(o.options),s},optgroup_header:(o,s)=>'
'+s(o[i])+"
",option:(o,s)=>"
"+s(o[t])+"
",item:(o,s)=>"
"+s(o[t])+"
",option_create:(o,s)=>'
Add '+s(o.input)+"
",no_results:()=>'
No results found
',loading:()=>'
',not_loading:()=>{},dropdown:()=>"
"};e.settings.render=Object.assign({},r,e.settings.render)}setupCallbacks(){var e,t,i={initialize:"onInitialize",change:"onChange",item_add:"onItemAdd",item_remove:"onItemRemove",item_select:"onItemSelect",clear:"onClear",option_add:"onOptionAdd",option_remove:"onOptionRemove",option_clear:"onOptionClear",optgroup_add:"onOptionGroupAdd",optgroup_remove:"onOptionGroupRemove",optgroup_clear:"onOptionGroupClear",dropdown_open:"onDropdownOpen",dropdown_close:"onDropdownClose",type:"onType",load:"onLoad",focus:"onFocus",blur:"onBlur"};for(e in i)t=this.settings[i[e]],t&&this.on(e,t)}sync(e=!0){let t=this,i=e?dr(t.input,{delimiter:t.settings.delimiter,allowEmptyOption:t.settings.allowEmptyOption}):t.settings;t.setupOptions(i.options,i.optgroups),t.setValue(i.items||[],!0),t.input.disabled?t.disable():t.input.readOnly?t.setReadOnly(!0):t.enable(),t.lastQuery=null}onClick(){var e=this;if(e.activeItems.length>0){e.clearActiveItems(),e.focus();return}e.isFocused&&e.isOpen?e.blur():e.focus()}onMouseDown(){}onChange(){cr(this.input,"input"),cr(this.input,"change")}onPaste(e){var t=this;if(t.isInputHidden||t.isLocked){fe(e);return}t.settings.splitOn&&setTimeout(()=>{var i=t.inputValue();if(i.match(t.settings.splitOn)){var r=i.trim().split(t.settings.splitOn);ve(r,o=>{Fe(o)&&(this.options[o]?t.addItem(o):t.createItem(o))})}},0)}onKeyPress(e){var t=this;if(t.isLocked){fe(e);return}var i=String.fromCharCode(e.keyCode||e.which);if(t.settings.create&&t.settings.mode==="multi"&&i===t.settings.delimiter){t.createItem(),fe(e);return}}onKeyDown(e){var t=this;if(t.ignoreHover=!0,t.isLocked){e.keyCode!==9&&fe(e);return}switch(e.keyCode){case 65:if(Mt(ci,e)&&t.control_input.value==""){fe(e),t.selectAll();return}break;case 27:t.isOpen&&(fe(e,!0),t.close()),t.clearActiveItems();return;case 40:if(!t.isOpen&&t.hasOptions)t.open();else if(t.activeOption){let i=t.getAdjacent(t.activeOption,1);i&&t.setActiveOption(i)}fe(e);return;case 38:if(t.activeOption){let i=t.getAdjacent(t.activeOption,-1);i&&t.setActiveOption(i)}fe(e);return;case 13:t.canSelect(t.activeOption)?(t.onOptionSelect(e,t.activeOption),fe(e)):t.settings.create&&t.createItem()?fe(e):document.activeElement==t.control_input&&t.isOpen&&fe(e);return;case 37:t.advanceSelection(-1,e);return;case 39:t.advanceSelection(1,e);return;case 9:t.settings.selectOnTab&&(t.canSelect(t.activeOption)?(t.onOptionSelect(e,t.activeOption),fe(e)):t.settings.create&&t.createItem()&&fe(e));return;case 8:case 46:t.deleteSelection(e);return}t.isInputHidden&&!Mt(ci,e)&&fe(e)}onInput(e){if(this.isLocked)return;let t=this.inputValue();if(this.lastValue!==t){if(this.lastValue=t,t==""){this._onInput();return}this.refreshTimeout&&window.clearTimeout(this.refreshTimeout),this.refreshTimeout=qa(()=>{this.refreshTimeout=null,this._onInput()},this.settings.refreshThrottle)}}_onInput(){let e=this.lastValue;this.settings.shouldLoad.call(this,e)&&this.load(e),this.refreshOptions(),this.trigger("type",e)}onOptionHover(e,t){this.ignoreHover||this.setActiveOption(t,!1)}onFocus(e){var t=this,i=t.isFocused;if(t.isDisabled||t.isReadOnly){t.blur(),fe(e);return}t.ignoreFocus||(t.isFocused=!0,t.settings.preload==="focus"&&t.preload(),i||t.trigger("focus"),t.activeItems.length||(t.inputState(),t.refreshOptions(!!t.settings.openOnFocus)),t.refreshState())}onBlur(e){if(document.hasFocus()!==!1){var t=this;if(t.isFocused){t.isFocused=!1,t.ignoreFocus=!1;var i=()=>{t.close(),t.setActiveItem(),t.setCaret(t.items.length),t.trigger("blur")};t.settings.create&&t.settings.createOnBlur?t.createItem(null,i):i()}}}onOptionSelect(e,t){var i,r=this;t.parentElement&&t.parentElement.matches("[data-disabled]")||(t.classList.contains("create")?r.createItem(null,()=>{r.settings.closeAfterSelect?r.close():r.settings.clearAfterSelect&&r.setTextboxValue()}):(i=t.dataset.value,typeof i!="undefined"&&(r.isDropdownContentStale=r.settings.hideSelected,r.addItem(i),r.settings.closeAfterSelect?r.close():r.settings.clearAfterSelect&&r.setTextboxValue(),!r.settings.hideSelected&&e.type&&/click/.test(e.type)&&r.setActiveOption(t))))}canSelect(e){return!!(this.isOpen&&e&&this.dropdown_content.contains(e))}onItemSelect(e,t){var i=this;return!i.isLocked&&i.settings.mode==="multi"?(fe(e),i.setActiveItem(t,e),!0):!1}canLoad(e){return!(!this.settings.load||this.loadedSearches.hasOwnProperty(e))}load(e){let t=this;if(!t.canLoad(e))return;$e(t.wrapper,t.settings.loadingClass),t.loading++;let i=t.loadCallback.bind(t);t.settings.load.call(t,e,i)}loadCallback(e,t){let i=this;i.loading=Math.max(i.loading-1,0),i.isDropdownContentStale=!0,i.clearActiveOption(),i.setupOptions(e,t),i.refreshOptions(i.isFocused&&!i.isInputHidden),i.loading||gt(i.wrapper,i.settings.loadingClass),i.trigger("load",e,t)}preload(){var e=this.wrapper.classList;e.contains("preloaded")||(e.add("preloaded"),this.load(""))}setTextboxValue(e=""){var t=this.control_input,i=t.value!==e;i&&(t.value=e,cr(t,"update"),this.lastValue=e)}getValue(){return this.is_select_tag&&this.input.hasAttribute("multiple")?this.items:this.items.join(this.settings.delimiter)}setValue(e,t){var i=t?[]:["change"];Po(this,i,()=>{this.clear(t),this.addItems(e,t)})}setMaxItems(e){e===0&&(e=null),this.settings.maxItems=e,this.refreshState()}setActiveItem(e,t){var i=this,r,o,s,a,l,c;if(i.settings.mode!=="single"){if(!e){i.clearActiveItems(),i.isFocused&&i.inputState();return}if(r=t&&t.type.toLowerCase(),r==="click"&&Mt("shiftKey",t)&&i.activeItems.length){for(c=i.getLastActive(),s=Array.prototype.indexOf.call(i.control.children,c),a=Array.prototype.indexOf.call(i.control.children,e),s>a&&(l=s,s=a,a=l),o=s;o<=a;o++)e=i.control.children[o],i.activeItems.indexOf(e)===-1&&i.setActiveItemClass(e);fe(t)}else r==="click"&&Mt(ci,t)||r==="keydown"&&Mt("shiftKey",t)?e.classList.contains("active")?i.removeActiveItem(e):i.setActiveItemClass(e):(i.clearActiveItems(),i.setActiveItemClass(e));i.inputState(),i.isFocused||i.focus()}}setActiveItemClass(e){let t=this,i=t.control.querySelector(".last-active");i&>(i,"last-active"),$e(e,"active last-active"),t.trigger("item_select",e),t.activeItems.indexOf(e)==-1&&t.activeItems.push(e)}removeActiveItem(e){var t=this.activeItems.indexOf(e);this.activeItems.splice(t,1),gt(e,"active")}clearActiveItems(){gt(this.activeItems,"active"),this.activeItems=[]}setActiveOption(e,t=!0){e!==this.activeOption&&(this.clearActiveOption(),e&&(this.activeOption=e,ae(this.focus_node,{"aria-activedescendant":e.getAttribute("id")}),ae(e,{"aria-selected":"true"}),$e(e,"active"),t&&this.scrollToOption(e)))}scrollToOption(e,t){if(!e)return;let i=this.dropdown_content,r=i.clientHeight,o=i.scrollTop||0,s=e.offsetHeight,a=e.getBoundingClientRect().top-i.getBoundingClientRect().top+o;a+s>r+o?this.scroll(a-r+s,t):a{e.setActiveItemClass(i)}))}inputState(){var e=this;e.control.contains(e.control_input)&&(ae(e.control_input,{placeholder:e.settings.placeholder}),e.activeItems.length>0||!e.isFocused&&e.settings.hidePlaceholder&&e.items.length>0?(e.setTextboxValue(),e.isInputHidden=!0):(e.settings.hidePlaceholder&&e.items.length>0&&ae(e.control_input,{placeholder:""}),e.isInputHidden=!1),e.wrapper.classList.toggle("input-hidden",e.isInputHidden))}inputValue(){return this.control_input.value.trim()}focus(){var e=this;if(e.isDisabled||e.isReadOnly)return;e.ignoreFocus=!0;let t=this.control_input.offsetWidth?this.control_input:this.focus_node;t.focus(),setTimeout(()=>{e.ignoreFocus=!1,t.getRootNode().activeElement===t&&this.onFocus()},0)}blur(){this.focus_node.blur(),this.onBlur()}getScoreFunction(e){return this.sifter.getScoreFunction(e,this.getSearchOptions())}getSearchOptions(){var e=this.settings,t=e.sortField;return typeof e.sortField=="string"&&(t=[{field:e.sortField}]),{fields:e.searchField,conjunction:e.searchConjunction,sort:t,nesting:e.nesting}}search(e){var t,i,r=this,o=this.getSearchOptions();if(r.settings.score&&(i=r.settings.score.call(r,e),typeof i!="function"))throw new Error('Tom Select "score" setting must be a function that returns a function');return r.isDropdownContentStale||e!==r.lastQuery?(r.lastQuery=e,/(.)\1{15,}/.test(e)&&(e=""),t=r.sifter.search(e,Object.assign(o,{score:i})),r.currentResults=t):t=Object.assign({},r.currentResults),r.settings.hideSelected&&(t.items=t.items.filter(s=>{let a=Fe(s.id);return!(a!==null&&r.items.indexOf(a)!==-1)})),t}refreshOptions(e=!0){var t,i,r,o,s,a,l,c,u,d;let p={},y=[];var m=this,g=m.inputValue();let _=g===m.lastQuery||g==""&&m.lastQuery==null;var x=m.search(g),A=null,w=m.settings.shouldOpen||!1,C=m.dropdown_content;_&&(A=m.activeOption,A&&(u=A.closest("[data-group]"))),o=x.items.length,typeof m.settings.maxOptions=="number"&&(o=Math.min(o,m.settings.maxOptions)),o>0&&(w=!0);let $=(I,L)=>{let W=p[I];if(W!==void 0){let Q=y[W];if(Q!==void 0)return[W,Q.fragment]}let G=document.createDocumentFragment();return W=y.length,y.push({fragment:G,order:L,optgroup:I}),[W,G]};for(t=0;t0&&(Q=Q.cloneNode(!0),ae(Q,{id:W.$id+"-clone-"+i,"aria-selected":null}),Q.classList.add("ts-cloned"),gt(Q,"active"),m.activeOption&&m.activeOption.dataset.value==L&&u&&u.dataset.group===s.toString()&&(A=Q)),ie.appendChild(Q),s!=""&&(p[s]=Ce)}}m.settings.lockOptgroupOrder&&y.sort((I,L)=>I.order-L.order),l=document.createDocumentFragment(),ve(y,I=>{let L=I.fragment,W=I.optgroup;if(!L||!L.children.length)return;let G=m.optgroups[W];if(G!==void 0){let Q=document.createDocumentFragment(),Z=m.render("optgroup_header",G);Nt(Q,Z),Nt(Q,L);let he=m.render("optgroup",{group:G,options:Q});Nt(l,he)}else Nt(l,L)}),C.innerHTML="",Nt(C,l),m.isDropdownContentStale=!1,m.settings.highlight&&(Za(C),x.query.length&&x.tokens.length&&ve(x.tokens,I=>{Ja(C,I.regex)}));var H=I=>{let L=m.render(I,{input:g});return L&&(w=!0,C.insertBefore(L,C.firstChild)),L};if(m.loading?H("loading"):m.settings.shouldLoad.call(m,g)?x.items.length===0&&H("no_results"):H("not_loading"),c=m.canCreate(g),c&&(d=H("option_create")),m.hasOptions=x.items.length>0||c,w){if(x.items.length>0){if(!A&&m.settings.mode==="single"&&m.items[0]!=null&&(A=m.getOption(m.items[0])),!C.contains(A)){let I=0;d&&!m.settings.addPrecedence&&(I=1),A=m.selectable()[I]}}else d&&(A=d);e&&!m.isOpen&&(m.open(),m.scrollToOption(A,"auto")),m.setActiveOption(A)}else m.clearActiveOption(),e&&m.isOpen&&m.close(!1)}selectable(){return this.dropdown_content.querySelectorAll("[data-selectable]")}addOption(e,t=!1){let i=this;if(Array.isArray(e))return i.addOptions(e,t),!1;let r=Fe(e[i.settings.valueField]);return r===null||i.options.hasOwnProperty(r)?(i.updateOption(e[i.settings.valueField],e),!1):(e.$order=e.$order||++i.order,e.$id=i.inputId+"-opt-"+e.$order,i.options[r]=e,i.isDropdownContentStale=!0,t&&(i.userOptions[r]=t,i.trigger("option_add",r,e)),r)}addOptions(e,t=!1){ve(e,i=>{this.addOption(i,t)})}registerOption(e){return this.addOption(e)}registerOptionGroup(e){var t=Fe(e[this.settings.optgroupValueField]);return t===null?!1:(e.$order=e.$order||++this.order,this.optgroups[t]=e,t)}addOptionGroup(e,t){var i;t[this.settings.optgroupValueField]=e,(i=this.registerOptionGroup(t))&&this.trigger("optgroup_add",i,t)}removeOptionGroup(e){this.optgroups.hasOwnProperty(e)&&(delete this.optgroups[e],this.clearCache(),this.trigger("optgroup_remove",e))}clearOptionGroups(){this.optgroups={},this.clearCache(),this.trigger("optgroup_clear")}updateOption(e,t){let i=this;var r,o;let s=Fe(e),a=Fe(t[i.settings.valueField]);if(s===null)return;let l=i.options[s];if(l==null)return;if(typeof a!="string")throw new Error("Value must be set in option data");let c=i.getOption(s),u=i.getItem(s);if(t.$order=t.$order||l.$order,delete i.options[s],i.uncacheValue(a),i.options[a]=t,c){if(i.dropdown_content.contains(c)){let d=i._render("option",t);li(c,d),i.activeOption===c&&i.setActiveOption(d)}c.remove()}u&&(o=i.items.indexOf(s),o!==-1&&i.items.splice(o,1,a),r=i._render("item",t),u.classList.contains("active")&&$e(r,"active"),li(u,r)),i.isDropdownContentStale=!0}removeOption(e,t){let i=this;e=si(e),i.uncacheValue(e),delete i.userOptions[e],delete i.options[e],i.isDropdownContentStale=!0,i.trigger("option_remove",e),i.removeItem(e,t)}clearOptions(e){let t=(e||this.clearFilter).bind(this);this.loadedSearches={},this.userOptions={},this.clearCache();let i={};ve(this.options,(r,o)=>{t(r,o)&&(i[o]=r)}),this.options=this.sifter.items=i,this.isDropdownContentStale=!0,this.trigger("option_clear")}clearFilter(e,t){return this.items.indexOf(t)>=0}getOption(e,t=!1){let i=Fe(e);if(i===null)return null;let r=this.options[i];if(r!=null){if(r.$div)return r.$div;if(t)return this._render("option",r)}return null}getAdjacent(e,t,i="option"){var r=this,o;if(!e)return null;i=="item"?o=r.controlChildren():o=r.dropdown_content.querySelectorAll("[data-selectable]");for(let s=0;s0?o[s+1]:o[s-1];return null}getItem(e){if(typeof e=="object")return e;var t=Fe(e);return t!==null?this.control.querySelector(`[data-value="${Fo(t)}"]`):null}addItems(e,t){var i=this,r=Array.isArray(e)?e:[e];r=r.filter(s=>i.items.indexOf(s)===-1);let o=r[r.length-1];r.forEach(s=>{i.isPending=s!==o,i.addItem(s,t)})}addItem(e,t){var i=t?[]:["change","dropdown_close"];Po(this,i,()=>{var r,o;let s=this,a=s.settings.mode,l=Fe(e);if(!(l&&s.items.indexOf(l)!==-1&&(a==="single"&&s.close(),a==="single"||!s.settings.duplicates))&&!(l===null||!s.options.hasOwnProperty(l))&&(a==="single"&&s.clear(t),!(a==="multi"&&s.isFull()))){if(r=s._render("item",s.options[l]),s.control.contains(r)&&(r=r.cloneNode(!0)),o=s.isFull(),s.items.splice(s.caretPos,0,l),s.insertAtCaret(r),s.isSetup){if(!s.isPending&&s.settings.hideSelected){let c=s.getOption(l),u=s.getAdjacent(c,1);u&&s.setActiveOption(u)}s.settings.clearAfterSelect&&s.setTextboxValue(),!s.isPending&&!s.settings.closeAfterSelect&&s.refreshOptions(s.isFocused&&a!=="single"),s.settings.closeAfterSelect!=!1&&s.isFull()?s.close():s.isPending||s.positionDropdown(),s.trigger("item_add",l,r),s.isPending||s.updateOriginalInput({silent:t})}(!s.isPending||!o&&s.isFull())&&(s.inputState(),s.refreshState())}})}removeItem(e=null,t){let i=this;if(e=i.getItem(e),!e)return;var r,o;let s=e.dataset.value;r=Vo(e),e.remove(),e.classList.contains("active")&&(o=i.activeItems.indexOf(e),i.activeItems.splice(o,1),gt(e,"active")),i.items.splice(r,1),i.isDropdownContentStale=!0,!i.settings.persist&&i.userOptions.hasOwnProperty(s)&&i.removeOption(s,t),r{}){arguments.length===3&&(t=arguments[2]),typeof t!="function"&&(t=()=>{});var i=this,r=i.caretPos,o;if(e=e||i.inputValue(),!i.canCreate(e))return Fe(e)&&this.options[e]&&i.addItem(e),t(),!1;i.lock();var s=!1,a=l=>{if(i.unlock(),!l||typeof l!="object")return t();var c=Fe(l[i.settings.valueField]);if(typeof c!="string")return t();i.setTextboxValue(),i.addOption(l,!0),i.setCaret(r),i.addItem(c),t(l),s=!0};return typeof i.settings.create=="function"?o=i.settings.create.call(this,e,a):o={[i.settings.labelField]:e,[i.settings.valueField]:e},s||a(o),!0}refreshItems(){var e=this;e.isDropdownContentStale=!0,e.isSetup&&e.addItems(e.items),e.updateOriginalInput(),e.refreshState()}refreshState(){let e=this;e.refreshValidityState();let t=e.isFull(),i=e.isLocked;e.wrapper.classList.toggle("rtl",e.rtl);let r=e.wrapper.classList;r.toggle("focus",e.isFocused),r.toggle("disabled",e.isDisabled),r.toggle("readonly",e.isReadOnly),r.toggle("required",e.isRequired),r.toggle("invalid",!e.isValid),r.toggle("locked",i),r.toggle("full",t),r.toggle("input-active",e.isFocused&&!e.isInputHidden),r.toggle("dropdown-active",e.isOpen),r.toggle("has-options",Qa(e.options)),r.toggle("has-items",e.items.length>0)}refreshValidityState(){var e=this;e.input.validity&&(e.isValid=e.input.validity.valid,e.isInvalid=!e.isValid)}isFull(){return this.settings.maxItems!==null&&this.items.length>=this.settings.maxItems}updateOriginalInput(e={}){let t=this;var i,r;let o=t.input.querySelector('option[value=""]');if(t.is_select_tag){let l=function(c,u,d){return c||(c=nt('")),c!=o&&t.input.append(c),s.push(c),(c!=o||a>0||t.settings.mode=="multi")&&(c.selected=!0),c},s=[],a=t.input.querySelectorAll("option:checked").length;t.input.querySelectorAll("option:checked").forEach(c=>{c.selected=!1}),t.items.length==0&&t.settings.mode=="single"?l(o,"",""):t.items.forEach(c=>{if(i=t.options[c],r=i[t.settings.labelField]||"",s.includes(i.$option)){let u=t.input.querySelector(`option[value="${Fo(c)}"]:not(:checked)`);l(u,c,r)}else i.$option=l(i.$option,c,r)})}else t.input.value=t.getValue();t.isSetup&&(e.silent||t.trigger("change",t.getValue()))}open(){var e=this;e.isLocked||e.isOpen||e.settings.mode==="multi"&&e.isFull()||(e.isOpen=!0,ae(e.focus_node,{"aria-expanded":"true"}),e.refreshState(),ai(e.dropdown,{visibility:"hidden",display:"block"}),e.positionDropdown(),ai(e.dropdown,{visibility:"visible",display:"block"}),e.focus(),e.trigger("dropdown_open",e.dropdown))}close(e=!0){var t=this,i=t.isOpen;e&&(t.setTextboxValue(),t.settings.mode==="single"&&t.items.length&&t.inputState()),t.isOpen=!1,ae(t.focus_node,{"aria-expanded":"false"}),ai(t.dropdown,{display:"none"}),t.settings.hideSelected&&t.clearActiveOption(),t.refreshState(),i&&t.trigger("dropdown_close",t.dropdown)}positionDropdown(){if(this.settings.dropdownParent==="body"){var e=this.control,t=e.getBoundingClientRect(),i=e.offsetHeight+t.top+window.scrollY,r=t.left+window.scrollX;ai(this.dropdown,{width:t.width+"px",top:i+"px",left:r+"px"})}}clear(e){var t=this;if(t.items.length){var i=t.controlChildren();ve(i,r=>{t.removeItem(r,!0)}),t.inputState(),e||t.updateOriginalInput(),t.trigger("clear")}}insertAtCaret(e){let t=this,i=t.caretPos,r=t.control;r.insertBefore(e,r.children[i]||null),t.setCaret(i+1)}deleteSelection(e){var t,i,r,o,s=this;t=e&&e.keyCode===8?-1:1,i=Ya(s.control_input);let a=[];if(s.activeItems.length)o=Bo(s.activeItems,t),r=Vo(o),t>0&&r++,ve(s.activeItems,l=>a.push(l));else if((s.isFocused||s.settings.mode==="single")&&s.items.length){let l=s.controlChildren(),c;t<0&&i.start===0&&i.length===0?c=l[s.caretPos-1]:t>0&&i.start===s.inputValue().length&&(c=l[s.caretPos]),c!==void 0&&a.push(c)}if(!s.shouldDelete(a,e))return!1;for(fe(e,!0),typeof r!="undefined"&&s.setCaret(r);a.length;)s.removeItem(a.pop());return s.inputState(),s.positionDropdown(),s.refreshOptions(!1),!0}shouldDelete(e,t){let i=e.map(r=>r.dataset.value);return!(!i.length||typeof this.settings.onDelete=="function"&&this.settings.onDelete.call(this,i,t)===!1)}advanceSelection(e,t){var i,r,o=this;o.rtl&&(e*=-1),!o.inputValue().length&&(Mt(ci,t)||Mt("shiftKey",t)?(i=o.getLastActive(e),i?i.classList.contains("active")?r=o.getAdjacent(i,e,"item"):r=i:e>0?r=o.control_input.nextElementSibling:r=o.control_input.previousElementSibling,r&&(r.classList.contains("active")&&o.removeActiveItem(i),o.setActiveItemClass(r))):o.moveCaret(e))}moveCaret(e){}getLastActive(e){let t=this.control.querySelector(".last-active");if(t)return t;var i=this.control.querySelectorAll(".active");if(i)return Bo(i,e)}setCaret(e){this.caretPos=this.items.length}controlChildren(){return Array.from(this.control.querySelectorAll("[data-ts-item]"))}lock(){this.setLocked(!0)}unlock(){this.setLocked(!1)}setLocked(e=this.isReadOnly||this.isDisabled){this.isLocked=e,this.refreshState()}disable(){this.setDisabled(!0),this.close()}enable(){this.setDisabled(!1)}setDisabled(e){this.focus_node.tabIndex=e?-1:this.tabIndex,this.isDisabled=e,this.input.disabled=e,this.control_input.disabled=e,this.setLocked()}setReadOnly(e){this.isReadOnly=e,this.input.readOnly=e,this.control_input.readOnly=e,this.setLocked()}destroy(){var e=this,t=e.revertSettings;e.trigger("destroy"),e.off(),e.wrapper.remove(),e.dropdown.remove(),e.input.innerHTML=t.innerHTML,e.input.tabIndex=t.tabIndex,gt(e.input,"tomselected","ts-hidden-accessible"),e._destroy(),delete e.input.tomselect}render(e,t){var i,r;let o=this;if(typeof this.settings.render[e]!="function"||(r=o.settings.render[e].call(this,t,ar),!r))return null;if(r=nt(r),e==="option"||e==="option_create"?t[o.settings.disabledField]?ae(r,{"aria-disabled":"true"}):ae(r,{"data-selectable":""}):e==="optgroup"&&(i=t.group[o.settings.optgroupValueField],ae(r,{"data-group":i}),t.group[o.settings.disabledField]&&ae(r,{"data-disabled":""})),e==="option"||e==="item"){let s=si(t[o.settings.valueField]);ae(r,{"data-value":s}),e==="item"?($e(r,o.settings.itemClass),ae(r,{"data-ts-item":""})):($e(r,o.settings.optionClass),ae(r,{role:"option",id:t.$id}),t.$div=r,o.options[s]=t)}return r}_render(e,t){let i=this.render(e,t);if(i==null)throw"HTMLElement expected";return i}clearCache(){ve(this.options,e=>{e.$div&&(e.$div.remove(),delete e.$div)})}uncacheValue(e){let t=this.getOption(e);t&&t.remove()}canCreate(e){return this.settings.create&&e.length>0&&this.settings.createFilter.call(this,e)}hook(e,t,i){var r=this,o=r[t];r[t]=function(){var s,a;return e==="after"&&(s=o.apply(r,arguments)),a=i.apply(r,arguments),e==="instead"?a:(e==="before"&&(s=o.apply(r,arguments)),s)}}};var xm=(n,e,t,i)=>{n.addEventListener(e,t,i)};function il(){xm(this.input,"change",()=>{this.sync()})}var Tm=n=>typeof n=="undefined"||n===null?null:Cm(n),Cm=n=>typeof n=="boolean"?n?"1":"0":n+"",rl=(n,e=!1)=>{n&&(n.preventDefault(),e&&n.stopPropagation())},Sm=n=>{if(n.jquery)return n[0];if(n instanceof HTMLElement)return n;if(Am(n)){var e=document.createElement("template");return e.innerHTML=n.trim(),e.content.firstChild}return document.querySelector(n)},Am=n=>typeof n=="string"&&n.indexOf("<")>-1;function ol(n){var e=this,t=e.onOptionSelect;e.settings.hideSelected=!1;let i=Object.assign({className:"tomselect-checkbox",checkedClassNames:void 0,uncheckedClassNames:void 0},n);var r=function(a,l){l?(a.checked=!0,i.uncheckedClassNames&&a.classList.remove(...i.uncheckedClassNames),i.checkedClassNames&&a.classList.add(...i.checkedClassNames)):(a.checked=!1,i.checkedClassNames&&a.classList.remove(...i.checkedClassNames),i.uncheckedClassNames&&a.classList.add(...i.uncheckedClassNames))},o=function(a){setTimeout(()=>{var l=a.querySelector("input."+i.className);l instanceof HTMLInputElement&&r(l,a.classList.contains("selected"))},1)};e.hook("after","setupTemplates",()=>{var s=e.settings.render.option;e.settings.render.option=(a,l)=>{var c=Sm(s.call(e,a,l)),u=document.createElement("input");i.className&&u.classList.add(i.className),u.addEventListener("click",function(p){rl(p)}),u.type="checkbox";let d=Tm(a[e.settings.valueField]);return r(u,!!(d&&e.items.indexOf(d)>-1)),c.prepend(u),c}}),e.on("item_remove",s=>{var a=e.getOption(s);a&&(a.classList.remove("selected"),o(a))}),e.on("item_add",s=>{var a=e.getOption(s);a&&o(a)}),e.hook("instead","onOptionSelect",(s,a)=>{if(a.classList.contains("selected")){a.classList.remove("selected"),e.removeItem(a.dataset.value),e.refreshOptions(),rl(s,!0);return}t.call(e,s,a),o(a)})}var Dm=n=>{if(n.jquery)return n[0];if(n instanceof HTMLElement)return n;if(Om(n)){var e=document.createElement("template");return e.innerHTML=n.trim(),e.content.firstChild}return document.querySelector(n)},Om=n=>typeof n=="string"&&n.indexOf("<")>-1;function sl(n){let e=this,t=Object.assign({className:"clear-button",title:"Clear All",role:"button",tabindex:0,html:i=>`
×
`},n);e.on("initialize",()=>{var i=Dm(t.html(t));i.addEventListener("click",r=>{e.isLocked||(e.clear(),e.settings.mode==="single"&&e.settings.allowEmptyOption&&e.addItem(""),e.refreshOptions(!1),r.preventDefault(),r.stopPropagation())}),e.control.appendChild(i)})}var Lm=(n,e=!1)=>{n&&(n.preventDefault(),e&&n.stopPropagation())},An=(n,e,t,i)=>{n.addEventListener(e,t,i)},Mm=(n,e)=>{if(Array.isArray(n))n.forEach(e);else for(var t in n)n.hasOwnProperty(t)&&e(n[t],t)},Nm=n=>{if(n.jquery)return n[0];if(n instanceof HTMLElement)return n;if(km(n)){var e=document.createElement("template");return e.innerHTML=n.trim(),e.content.firstChild}return document.querySelector(n)},km=n=>typeof n=="string"&&n.indexOf("<")>-1,Hm=(n,e)=>{Mm(e,(t,i)=>{t==null?n.removeAttribute(i):n.setAttribute(i,""+t)})},Im=(n,e)=>{var t;(t=n.parentNode)==null||t.insertBefore(e,n.nextSibling)},Rm=(n,e)=>{var t;(t=n.parentNode)==null||t.insertBefore(e,n)},Pm=(n,e)=>{do{var t;if(e=(t=e)==null?void 0:t.previousElementSibling,n==e)return!0}while(e&&e.previousElementSibling);return!1};function al(){var n=this;if(n.settings.mode!=="multi")return;var e=n.lock,t=n.unlock;let i=!0,r;n.hook("after","setupTemplates",()=>{var o=n.settings.render.item;n.settings.render.item=(s,a)=>{let l=Nm(o.call(n,s,a));Hm(l,{draggable:"true"});let c=g=>{i||Lm(g),g.stopPropagation()},u=g=>{r=l,setTimeout(()=>{l.classList.add("ts-dragging")},0)},d=g=>{g.preventDefault(),l.classList.add("ts-drag-over"),y(l,r)},p=()=>{l.classList.remove("ts-drag-over")},y=(g,_)=>{_!==void 0&&(Pm(_,l)?Im(g,_):Rm(g,_))},m=()=>{var g;document.querySelectorAll(".ts-drag-over").forEach(x=>x.classList.remove("ts-drag-over")),(g=r)==null||g.classList.remove("ts-dragging"),r=void 0;var _=[];n.control.querySelectorAll("[data-value]").forEach(x=>{if(x.dataset.value){let A=x.dataset.value;A&&_.push(A)}}),n.setValue(_)};return An(l,"mousedown",c),An(l,"dragstart",u),An(l,"dragenter",d),An(l,"dragover",d),An(l,"dragleave",p),An(l,"dragend",m),l}}),n.hook("instead","lock",()=>(i=!1,e.call(n))),n.hook("instead","unlock",()=>(i=!0,t.call(n)))}var Fm=(n,e=!1)=>{n&&(n.preventDefault(),e&&n.stopPropagation())},$m=n=>{if(n.jquery)return n[0];if(n instanceof HTMLElement)return n;if(Bm(n)){var e=document.createElement("template");return e.innerHTML=n.trim(),e.content.firstChild}return document.querySelector(n)},Bm=n=>typeof n=="string"&&n.indexOf("<")>-1;function ll(n){let e=this,t=Object.assign({title:"Untitled",headerClass:"dropdown-header",titleRowClass:"dropdown-header-title",labelClass:"dropdown-header-label",closeClass:"dropdown-header-close",html:i=>'
'+i.title+'×
'},n);e.on("initialize",()=>{var i=$m(t.html(t)),r=i.querySelector("."+t.closeClass);r&&r.addEventListener("click",o=>{Fm(o,!0),e.close()}),e.dropdown.insertBefore(i,e.dropdown.firstChild)})}var Vm=(n,e)=>{if(Array.isArray(n))n.forEach(e);else for(var t in n)n.hasOwnProperty(t)&&e(n[t],t)},zm=(n,...e)=>{var t=jm(e);n=Wm(n),n.map(i=>{t.map(r=>{i.classList.remove(r)})})},jm=n=>{var e=[];return Vm(n,t=>{typeof t=="string"&&(t=t.trim().split(/[\t\n\f\r\s]/)),Array.isArray(t)&&(e=e.concat(t))}),e.filter(Boolean)},Wm=n=>(Array.isArray(n)||(n=[n]),n),qm=(n,e)=>{if(!n)return-1;e=e||n.nodeName;for(var t=0;n=n.previousElementSibling;)n.matches(e)&&t++;return t};function cl(){var n=this;n.hook("instead","setCaret",e=>{n.settings.mode==="single"||!n.control.contains(n.control_input)?e=n.items.length:(e=Math.max(0,Math.min(n.items.length,e)),e!=n.caretPos&&!n.isPending&&n.controlChildren().forEach((t,i)=>{i{if(!n.isFocused)return;let t=n.getLastActive(e);if(t){let i=qm(t);n.setCaret(e>0?i+1:i),n.setActiveItem(),zm(t,"last-active")}else n.setCaret(n.caretPos+e)})}var Um=(n,e=!1)=>{n&&(n.preventDefault(),e&&n.stopPropagation())},Ym=(n,e,t,i)=>{n.addEventListener(e,t,i)},Gm=(n,e)=>{if(Array.isArray(n))n.forEach(e);else for(var t in n)n.hasOwnProperty(t)&&e(n[t],t)},ul=n=>{if(n.jquery)return n[0];if(n instanceof HTMLElement)return n;if(Km(n)){var e=document.createElement("template");return e.innerHTML=n.trim(),e.content.firstChild}return document.querySelector(n)},Km=n=>typeof n=="string"&&n.indexOf("<")>-1,Xm=(n,...e)=>{var t=Qm(e);n=Jm(n),n.map(i=>{t.map(r=>{i.classList.add(r)})})},Qm=n=>{var e=[];return Gm(n,t=>{typeof t=="string"&&(t=t.trim().split(/[\t\n\f\r\s]/)),Array.isArray(t)&&(e=e.concat(t))}),e.filter(Boolean)},Jm=n=>(Array.isArray(n)||(n=[n]),n);function dl(){let n=this;n.settings.shouldOpen=!0,n.hook("before","setup",()=>{var e;n.focus_node=n.control,Xm(n.control_input,"dropdown-input");let t=ul('